Skip to content

feat(api):add support for creating/editing reviewers in project MRs #1396

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 2 commits into from
Jun 26, 2021

Conversation

spyoungtech
Copy link
Contributor

@spyoungtech spyoungtech commented Apr 14, 2021

This is a first attempt at allowing users to create MRs with reviewers or edit an existing MR with the reviewer_ids parameter.

This is kind of unique in the sense that reviewer_ids doesn't appear in the rest response, but it is an accepted parameter.

A manager might be a better way to implement this, but I'm not sure it's appropriate since reviewers doesn't have its own API path, so reviewers are not really a rest object in their own right. The only example of a manager being used as a helper is the sidekiq manager.

API:

mr.reviewer_ids = [1,2,3]
mr.save()

The property can be omitted and the same code as above works, however mr.reviewer_ids would be an attribute error, which may be an odd interface.

What I have here works but I'm not sure it's an ideal interface. Mainly raising this to get feedback from maintainers on how this should be implemented. Feedback appreciated.

Relates to #1267

@spyoungtech spyoungtech force-pushed the merge_request_reviewers branch from 593675c to e4e6d7d Compare April 14, 2021 04:06
@JohnVillalovos JohnVillalovos requested a review from nejch May 31, 2021 20:58
@JohnVillalovos JohnVillalovos force-pushed the merge_request_reviewers branch from e4e6d7d to 676d1f6 Compare May 31, 2021 21:18
@codecov-commenter
Copy link

codecov-commenter commented May 31, 2021

Codecov Report

Merging #1396 (3d985ee) into master (fbbc0d4) will decrease coverage by 8.68%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1396      +/-   ##
==========================================
- Coverage   90.98%   82.29%   -8.69%     
==========================================
  Files          73       74       +1     
  Lines        4080     4162      +82     
==========================================
- Hits         3712     3425     -287     
- Misses        368      737     +369     
Flag Coverage Δ
cli_func_v4 ?
py_func_v4 ?
unit 82.29% <ø> (+0.15%) ⬆️

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

Impacted Files Coverage Δ
gitlab/v4/objects/merge_requests.py 67.85% <ø> (-14.91%) ⬇️
gitlab/v4/cli.py 40.37% <0.00%> (-40.80%) ⬇️
gitlab/v4/objects/files.py 52.94% <0.00%> (-39.71%) ⬇️
gitlab/v4/objects/milestones.py 71.42% <0.00%> (-28.58%) ⬇️
gitlab/v4/objects/labels.py 65.21% <0.00%> (-28.27%) ⬇️
gitlab/cli.py 60.34% <0.00%> (-25.87%) ⬇️
gitlab/v4/objects/tags.py 63.88% <0.00%> (-25.00%) ⬇️
gitlab/utils.py 65.51% <0.00%> (-24.14%) ⬇️
gitlab/v4/objects/repositories.py 57.62% <0.00%> (-23.73%) ⬇️
gitlab/v4/objects/settings.py 73.68% <0.00%> (-21.06%) ⬇️
... and 23 more

Copy link
Member

@JohnVillalovos JohnVillalovos left a comment

Choose a reason for hiding this comment

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

Thanks a lot for this! Sorry for the delay in getting a review done.

I have left some comments.

I also rebased the patch to bring it in sync with the upstream branch.

@@ -373,6 +389,7 @@ class ProjectMergeRequestManager(CRUDMixin, RESTManager):
"remove_source_branch",
"allow_maintainer_to_push",
"squash",
"reviewer_ids",
Copy link
Member

@JohnVillalovos JohnVillalovos May 31, 2021

Choose a reason for hiding this comment

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

As long as we are updating this I think it would be good to bring it up to date with the current API

https://docs.gitlab.com/ee/api/merge_requests.html#create-mr

These seem missing to me:

  • assignee_ids | integer array | no | The ID of the user(s) to assign the MR to. Set to 0 or provide an empty value to unassign all assignees.
  • reviewer_ids | integer array | no | The ID of the user(s) added as a reviewer to the MR. If set to 0 or left empty, no reviewers are added.
  • remove_source_branch | boolean | no | Flag indicating if a merge request should remove the source branch when merging.

Also it is nice if they are in the order shown in the API docs. As makes it easier to try to figure out what we are missing.

Copy link
Contributor Author

@spyoungtech spyoungtech Jun 1, 2021

Choose a reason for hiding this comment

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

Thanks for taking a look at this.

Yeah, what's interesting about this particular API is that, unlike most other endpoints, the POST body includes parameters that are not included in the response.

One consequence I noticed is that you'd get a (arguably unexpected) error when trying to access the reviewer_ids attribute because it doesn't really exist in the response.

This is not a huge problem, but was a motivation behind the @property getter/setter for reviewer_ids in an attempt to keep the Python API more consistent.

If the idea is to be able to do something like this:

mr.reviewer_ids = [1,2,3]
mr.save()

Then mr.reviewer_ids should always be an accessible attribute even on a freshly retrieved object, in my opinion. Without the property, this will be an attribute error.

If this is seen as a good approach, I'd be happy to add the same for assignees (it has the same oddities, IIRC).

I'll also be happy to take care of the chore of adding remove_source_branch and double-checking for any other missing parameters for MRs.

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.

Sorry, somehow I missed this!

Since we reduced the scope I think we can go ahead with this PR and I'll open a follow-up/upstream issue to see if we can align the parameters. The OpenAPI topic is already discussed here #1446 and we can hopefully come up with a general solution that covers everything there.

@nejch nejch merged commit 2c86003 into python-gitlab:master Jun 26, 2021
@P-N-L
Copy link

P-N-L commented Sep 27, 2023

Hello! I just read through the changes and discussions in this MR, and would be interested in following the upstream issue(s) with GitLab regarding aligning the parameters. @nejch apologies if I missed a link somewhere in the discussions, but could you please share the GitLab upstream issue? Appreciate it!

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.

5 participants