diff options
author | Gauvain Pocentek <gauvain@pocentek.net> | 2018-05-19 08:01:33 +0200 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2018-05-19 08:03:28 +0200 |
commit | a877514d565a1273fe21e81d1d00e1ed372ece4c (patch) | |
tree | b573fca9d8ea84abc81dd46a4d3286f96366d5a3 | |
parent | 5335788480d840566d745d39deb85895a5fc93af (diff) | |
download | gitlab-a877514d565a1273fe21e81d1d00e1ed372ece4c.tar.gz |
Deprecate GetFromListMixin
This mixin provides a workaround for get() for GitLab objects that don't
implement a 'get a single object' API. We are now getting conflicts
because GitLab adds GET methods, and this is against the "Implement only
what exists in the API" strategy.
Also use the proper GET API call for objects that support it.
-rw-r--r-- | RELEASE_NOTES.rst | 20 | ||||
-rw-r--r-- | gitlab/mixins.py | 9 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 7 |
3 files changed, 32 insertions, 4 deletions
diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst index 29f4ccd..59175d6 100644 --- a/RELEASE_NOTES.rst +++ b/RELEASE_NOTES.rst @@ -22,6 +22,26 @@ Changes from 1.3 to 1.4 * python-gitlab now handles the server rate limiting feature. It will pause for the required time when reaching the limit (`documentation <http://python-gitlab.readthedocs.io/en/master/api-usage.html#rate-limits>`__) +* The ``GetFromListMixin.get()`` method is deprecated and will be removed in + the next python-gitlab version. The goal of this mixin/method is to provide a + way to get an object by looping through a list for GitLab objects that don't + support the GET method. The method `is broken + <https://github.com/python-gitlab/python-gitlab/issues/499>`__ and conflicts + with the GET method now supported by some GitLab objects. + + You can implement your own method with something like: + + .. code-block:: python + + def get_from_list(self, id): + for obj in self.list(as_list=False): + if obj.get_id() == id: + return obj + +* The ``GroupMemberManager``, ``NamespaceManager`` and ``ProjectBoardManager`` + managers now use the GET API from GitLab instead of the + ``GetFromListMixin.get()`` method. + Changes from 1.2 to 1.3 ======================= diff --git a/gitlab/mixins.py b/gitlab/mixins.py index 88fea2d..d3e5727 100644 --- a/gitlab/mixins.py +++ b/gitlab/mixins.py @@ -15,6 +15,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import warnings + import gitlab from gitlab import base from gitlab import cli @@ -130,9 +132,13 @@ class ListMixin(object): class GetFromListMixin(ListMixin): + """This mixin is deprecated.""" + def get(self, id, **kwargs): """Retrieve a single object. + This Method is deprecated. + Args: id (int or str): ID of the object to retrieve **kwargs: Extra options to send to the Gitlab server (e.g. sudo) @@ -144,6 +150,9 @@ class GetFromListMixin(ListMixin): GitlabAuthenticationError: If authentication is not correct GitlabGetError: If the server cannot perform the request """ + warnings.warn('The get() method for this object is deprecated ' + 'and will be removed in a future version.', + DeprecationWarning) try: gen = self.list() except exc.GitlabListError: diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 1cb8fe7..0e28f5c 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -547,8 +547,7 @@ class GroupMember(SaveMixin, ObjectDeleteMixin, RESTObject): _short_print_attr = 'username' -class GroupMemberManager(ListMixin, GetMixin, CreateMixin, UpdateMixin, - DeleteMixin, RESTManager): +class GroupMemberManager(CRUDMixin, RESTManager): _path = '/groups/%(group_id)s/members' _obj_cls = GroupMember _from_parent_attrs = {'group_id': 'id'} @@ -822,7 +821,7 @@ class Namespace(RESTObject): pass -class NamespaceManager(GetFromListMixin, RESTManager): +class NamespaceManager(RetrieveMixin, RESTManager): _path = '/namespaces' _obj_cls = Namespace _list_filters = ('search', ) @@ -854,7 +853,7 @@ class ProjectBoard(RESTObject): _managers = (('lists', 'ProjectBoardListManager'), ) -class ProjectBoardManager(GetFromListMixin, RESTManager): +class ProjectBoardManager(RetrieveMixin, RESTManager): _path = '/projects/%(project_id)s/boards' _obj_cls = ProjectBoard _from_parent_attrs = {'project_id': 'id'} |