Skip to content

fix: use the [] after key names for array variables in params #1699

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 27, 2022

Conversation

JohnVillalovos
Copy link
Member

@JohnVillalovos JohnVillalovos commented Nov 19, 2021

  1. If a value is of type ArrayAttribute then append '[]' to the name
    of the value.

This is step 3 in a series of steps of our goal to add full
support for the GitLab API data types[1]:

  • array
  • hash
  • array of hashes

Step one was: commit 5127b15
Step two was: commit a57334f

Fixes: #1698
Related to #780
Closes #806

[1] https://docs.gitlab.com/ee/api/#encoding-api-parameters-of-array-and-hash-types

@JohnVillalovos JohnVillalovos requested a review from nejch November 19, 2021 00:10
@JohnVillalovos JohnVillalovos force-pushed the jlvillal/arrays branch 7 times, most recently from 98172f6 to f596068 Compare November 19, 2021 04:22
@JohnVillalovos JohnVillalovos marked this pull request as draft November 19, 2021 04:23
@JohnVillalovos JohnVillalovos changed the title WIP: Trying to solve array issue fix: use the [] after key names for array variables Nov 19, 2021
@codecov-commenter
Copy link

codecov-commenter commented Nov 19, 2021

Codecov Report

Merging #1699 (1af44ce) into main (194ee01) will decrease coverage by 0.00%.
The diff coverage is 96.42%.

@@            Coverage Diff             @@
##             main    #1699      +/-   ##
==========================================
- Coverage   95.54%   95.53%   -0.01%     
==========================================
  Files          81       81              
  Lines        5296     5309      +13     
==========================================
+ Hits         5060     5072      +12     
- Misses        236      237       +1     
Flag Coverage Δ
api_func_v4 81.48% <85.71%> (+<0.01%) ⬆️
cli_func_v4 82.82% <46.42%> (-0.30%) ⬇️
unit 87.28% <92.85%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
gitlab/utils.py 98.59% <92.85%> (-1.41%) ⬇️
gitlab/mixins.py 92.30% <100.00%> (ø)
gitlab/types.py 98.21% <100.00%> (+0.13%) ⬆️

@JohnVillalovos
Copy link
Member Author

JohnVillalovos commented Nov 20, 2021

So in my testing this does not break anything. It also allows approver_ids and approved_by_ids to work for ONE specified user (before it just failed) in listing merge requests. But it does not work for two or more, as it just returns the match for the first one.

I'm not a fan of the silent failure as that is likely worse than current situation where it dies.

@JohnVillalovos JohnVillalovos force-pushed the jlvillal/arrays branch 6 times, most recently from db3ab50 to e3c2e95 Compare November 20, 2021 21:30
@JohnVillalovos JohnVillalovos marked this pull request as ready for review November 20, 2021 21:30
@JohnVillalovos
Copy link
Member Author

@nejch This is ready for review now. Interested to hear your feedback. Thanks.

@JohnVillalovos JohnVillalovos marked this pull request as draft April 16, 2022 18:48
@nejch
Copy link
Member

nejch commented Jul 22, 2022

Should we try to revive this one @JohnVillalovos? Seems like an important fix. Probably fixes a few more issues down the line, will need to check those.

@JohnVillalovos
Copy link
Member Author

Should we try to revive this one @JohnVillalovos? Seems like an important fix. Probably fixes a few more issues down the line, will need to check those.

Yeah, probably. Let me see if I get some time this weekend. Thanks for reminding me!

@JohnVillalovos JohnVillalovos marked this pull request as ready for review July 24, 2022 21:13
@JohnVillalovos JohnVillalovos marked this pull request as draft July 24, 2022 21:30
@JohnVillalovos JohnVillalovos force-pushed the jlvillal/arrays branch 2 times, most recently from 7f6a8c2 to 50b1f12 Compare July 25, 2022 23:55
@JohnVillalovos JohnVillalovos marked this pull request as ready for review July 25, 2022 23:56
@JohnVillalovos
Copy link
Member Author

@nejch It is ready for review again. Thanks for your patience.

Copy link
Member

@nejch nejch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @JohnVillalovos looks super simple now. I have some concerns but I think I'll just merge this and use it to track and open a refactor based on my comments.

I have to take that back - seems like this also transforms the key for POST/PUT payloads which shouldn't happen. This maybe needs a test with create() to ensure we don't use key[] in payloads.

Edit2: I think we need to maybe change _transform_types to take another argument (transform_keys) which we pass in in the ListMixin or maybe even directly in get requests.

@nejch nejch changed the title fix: use the [] after key names for array variables fix: use the [] after key names for array variables in GET requests Jul 26, 2022
@JohnVillalovos
Copy link
Member Author

I have to take that back - seems like this also transforms the key for POST/PUT payloads which shouldn't happen. This maybe needs a test with create() to ensure we don't use key[] in payloads.

I think we need to transform "parameters'. Whether it is a GET/POST/PUT. Now handling values in the data portion is a different thing we need to figure out.

@nejch
Copy link
Member

nejch commented Jul 26, 2022

I have to take that back - seems like this also transforms the key for POST/PUT payloads which shouldn't happen. This maybe needs a test with create() to ensure we don't use key[] in payloads.

I think we need to transform "parameters'. Whether it is a GET/POST/PUT. Now handling values in the data portion is a different thing we need to figure out.

Yes, that's right :) sorry for the confusion. payload = no transform, query params = transform.

@JohnVillalovos JohnVillalovos requested a review from nejch July 27, 2022 15:35
@JohnVillalovos JohnVillalovos changed the title fix: use the [] after key names for array variables in GET requests fix: use the [] after key names for array variables Jul 27, 2022
@nejch
Copy link
Member

nejch commented Jul 27, 2022

@JohnVillalovos I think this doesn't work quite right yet. Can you try this test in this patch?

diff --git a/tests/unit/mixins/test_mixin_methods.py b/tests/unit/mixins/test_mixin_methods.py
index 69cdb78..e8870b9 100644
--- a/tests/unit/mixins/test_mixin_methods.py
+++ b/tests/unit/mixins/test_mixin_methods.py
@@ -314,6 +314,26 @@ def test_create_mixin_custom_path(gl):
     assert responses.assert_call_count(url, 1) is True
 
 
+
+@responses.activate
+def test_create_mixin_with_attributes(gl):
+    class M(CreateMixin, FakeManager):
+        _types = {"my_array": gl_types.ArrayAttribute}
+
+    url = "http://localhost/api/v4/tests"
+    responses.add(
+        method=responses.POST,
+        headers={},
+        url=url,
+        json={},
+        status=200,
+        match=[responses.matchers.json_params_matcher({"my_array": ["1", "2", "3"]})],
+    )
+
+    mgr = M(gl)
+    mgr.create({"my_array": [1, 2, 3]})
+
+
 def test_update_mixin_missing_attrs(gl):
     class M(UpdateMixin, FakeManager):
         _update_attrs = gl_types.RequiredOptional(

The reason we might want this is, for example scopes as an array in create mixins for #780.

@JohnVillalovos
Copy link
Member Author

JohnVillalovos commented Jul 27, 2022

@JohnVillalovos I think this doesn't work quite right yet. Can you try this test in this patch?

Thanks @nejch I totally missed that the data was not being sent as params in the POST/PUT methods 😔

Updated the code to only modify the data for the list() method.

1. If a value is of type ArrayAttribute then append '[]' to the name
   of the value for query parameters (`params`).

This is step 3 in a series of steps of our goal to add full
support for the GitLab API data types[1]:
  * array
  * hash
  * array of hashes

Step one was: commit 5127b15
Step two was: commit a57334f

Fixes: #1698

[1] https://docs.gitlab.com/ee/api/#encoding-api-parameters-of-array-and-hash-types
@JohnVillalovos JohnVillalovos changed the title fix: use the [] after key names for array variables fix: use the [] after key names for array variables in params Jul 27, 2022
@nejch nejch merged commit 510ec30 into main Jul 27, 2022
@nejch nejch deleted the jlvillal/arrays branch July 27, 2022 23:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

List merge requests using specific approver_ids regression Scope "bug"
3 participants