diff options
| author | Gauvain Pocentek <gauvain@pocentek.net> | 2018-01-01 16:15:22 +0100 |
|---|---|---|
| committer | Gauvain Pocentek <gauvain@pocentek.net> | 2018-01-01 16:15:22 +0100 |
| commit | 65c64ebc08d75092151e828fab0fa73f5fd22e45 (patch) | |
| tree | f89e45b102899950d4e6d23c67365b0291e86fb4 /gitlab | |
| parent | fa520242b878d25e37aacfcb0d838c58d3a4b271 (diff) | |
| download | gitlab-65c64ebc08d75092151e828fab0fa73f5fd22e45.tar.gz | |
Add support for user/group/project filter by custom attribute
Closes #367
Diffstat (limited to 'gitlab')
| -rw-r--r-- | gitlab/__init__.py | 18 | ||||
| -rw-r--r-- | gitlab/v4/objects.py | 7 |
2 files changed, 20 insertions, 5 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py index b5f32c9..738085a 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -642,8 +642,22 @@ class Gitlab(object): return parsed._replace(path=new_path).geturl() url = self._build_url(path) - params = query_data.copy() - params.update(kwargs) + + def copy_dict(dest, src): + for k, v in src.items(): + if isinstance(v, dict): + # Transform dict values in new attributes. For example: + # custom_attributes: {'foo', 'bar'} => + # custom_attributes['foo']: 'bar' + for dict_k, dict_v in v.items(): + dest['%s[%s]' % (k, dict_k)] = dict_v + else: + dest[k] = v + + params = {} + copy_dict(params, query_data) + copy_dict(params, kwargs) + opts = self._get_session_opts(content_type='application/json') # don't set the content-type header when uploading files diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 106b102..d7bb3d5 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -253,7 +253,7 @@ class UserManager(CRUDMixin, RESTManager): _obj_cls = User _list_filters = ('active', 'blocked', 'username', 'extern_uid', 'provider', - 'external', 'search') + 'external', 'search', 'custom_attributes') _create_attrs = ( tuple(), ('email', 'username', 'name', 'password', 'reset_password', 'skype', @@ -656,7 +656,7 @@ class GroupManager(CRUDMixin, RESTManager): _path = '/groups' _obj_cls = Group _list_filters = ('skip_groups', 'all_available', 'search', 'order_by', - 'sort', 'statistics', 'owned') + 'sort', 'statistics', 'owned', 'custom_attributes') _create_attrs = ( ('name', 'path'), ('description', 'visibility', 'parent_id', 'lfs_enabled', @@ -2639,7 +2639,8 @@ class ProjectManager(CRUDMixin, RESTManager): ) _list_filters = ('search', 'owned', 'starred', 'archived', 'visibility', 'order_by', 'sort', 'simple', 'membership', 'statistics', - 'with_issues_enabled', 'with_merge_requests_enabled') + 'with_issues_enabled', 'with_merge_requests_enabled', + 'custom_attributes') class Runner(SaveMixin, ObjectDeleteMixin, RESTObject): |
