From 910c2861a3c895cca5aff0a0df1672bb7388c526 Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Tue, 23 Apr 2019 11:17:01 +0200 Subject: merged new release & registry apis --- gitlab/v4/objects.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 57df679..0b98851 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1177,6 +1177,46 @@ class PagesDomainManager(ListMixin, RESTManager): _obj_cls = PagesDomain +class ProjectRegistryRepository(ObjectDeleteMixin, RESTObject): + _managers = ( + ('tags', 'ProjectRegistryTagManager'), + ) + + +class ProjectRegistryRepositoryManager(DeleteMixin, ListMixin, RESTManager): + _path= '/projects/%(project_id)s/registry/repositories' + _obj_cls = ProjectRegistryRepository + _from_parent_attrs = {'project_id': 'id'} + +class ProjectRegistryTag(ObjectDeleteMixin, RESTObject): + _id_attr = 'name' + +class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager): + _obj_cls = ProjectRegistryTag + _from_parent_attrs = {'project_id': 'project_id', 'repository_id': 'id'} + _path = '/projects/%(project_id)s/registry/repositories/%(repository_id)d/tags' + + @exc.on_http_error(exc.GitlabDeleteError) + def delete_in_bulk(self, name_regex='.*', **kwargs): + """Delete Tag by name or in bulk + + Args: + name_regex (string): The regex of the name to delete. To delete all + tags specify .*. + keep_n (integer): The amount of latest tags of given name to keep. + older_than (string): Tags to delete that are older than the given time, + written in human readable form 1h, 1d, 1month. + **kwargs: Extra options to send to the server (e.g. sudo) + Raises: + GitlabAuthenticationError: If authentication is not correct + GitlabDeleteError: If the server cannot perform the request + """ + valid_attrs = ['keep_n', 'older_than'] + data = {'name_regex':name_regex} + data.update({k: v for k,v in kwargs.items() if k in valid_attrs}) + self.gitlab.http_delete(self.path, query_data=data, **kwargs) + + class ProjectBoardList(SaveMixin, ObjectDeleteMixin, RESTObject): pass @@ -3286,6 +3326,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject): ('pipelineschedules', 'ProjectPipelineScheduleManager'), ('pushrules', 'ProjectPushRulesManager'), ('releases', 'ProjectReleaseManager'), + ('repositories', 'ProjectRegistryRepositoryManager'), ('runners', 'ProjectRunnerManager'), ('services', 'ProjectServiceManager'), ('snippets', 'ProjectSnippetManager'), -- cgit v1.2.1 From 340cd370000bbb48b81a5b7c1a7bf9f33997cef9 Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Tue, 23 Apr 2019 11:27:31 +0200 Subject: fix repository_id marshaling in cli --- gitlab/v4/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 0b98851..f494cc1 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1194,7 +1194,7 @@ class ProjectRegistryTag(ObjectDeleteMixin, RESTObject): class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager): _obj_cls = ProjectRegistryTag _from_parent_attrs = {'project_id': 'project_id', 'repository_id': 'id'} - _path = '/projects/%(project_id)s/registry/repositories/%(repository_id)d/tags' + _path = '/projects/%(project_id)s/registry/repositories/%(repository_id)s/tags' @exc.on_http_error(exc.GitlabDeleteError) def delete_in_bulk(self, name_regex='.*', **kwargs): -- cgit v1.2.1 From 0b79ce9c32cbc0bf49d877e123e49e2eb199b8af Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Wed, 24 Apr 2019 11:44:21 +0200 Subject: register cli action for delete_in_bulk --- gitlab/v4/objects.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index f494cc1..18b6203 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1196,6 +1196,7 @@ class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager): _from_parent_attrs = {'project_id': 'project_id', 'repository_id': 'id'} _path = '/projects/%(project_id)s/registry/repositories/%(repository_id)s/tags' + @cli.register_custom_action('ProjectRegistryTagManager', optional=('name_regex', 'keep_n', 'older_than')) @exc.on_http_error(exc.GitlabDeleteError) def delete_in_bulk(self, name_regex='.*', **kwargs): """Delete Tag by name or in bulk -- cgit v1.2.1 From 3cede7bed7caca026ec1bce8991eaac2e43c643a Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Wed, 24 Apr 2019 11:45:52 +0200 Subject: fix docstring & improve coding style --- gitlab/v4/objects.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 18b6203..800b4b5 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1199,7 +1199,7 @@ class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager): @cli.register_custom_action('ProjectRegistryTagManager', optional=('name_regex', 'keep_n', 'older_than')) @exc.on_http_error(exc.GitlabDeleteError) def delete_in_bulk(self, name_regex='.*', **kwargs): - """Delete Tag by name or in bulk + """Delete Tag in bulk Args: name_regex (string): The regex of the name to delete. To delete all @@ -1213,8 +1213,8 @@ class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager): GitlabDeleteError: If the server cannot perform the request """ valid_attrs = ['keep_n', 'older_than'] - data = {'name_regex':name_regex} - data.update({k: v for k,v in kwargs.items() if k in valid_attrs}) + data = {'name_regex': name_regex} + data.update({k: v for k, v in kwargs.items() if k in valid_attrs}) self.gitlab.http_delete(self.path, query_data=data, **kwargs) -- cgit v1.2.1 From 4d31b9c7b9bddf6ae2da41d2f87c6e92f97122e0 Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Thu, 2 May 2019 14:08:09 +0200 Subject: documentation --- docs/api-objects.rst | 2 ++ docs/gl_objects/repositories.rst | 28 ++++++++++++++++++++++ docs/gl_objects/repository_tags.rst | 47 +++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 docs/gl_objects/repositories.rst create mode 100644 docs/gl_objects/repository_tags.rst diff --git a/docs/api-objects.rst b/docs/api-objects.rst index 0cc5014..451e411 100644 --- a/docs/api-objects.rst +++ b/docs/api-objects.rst @@ -34,6 +34,8 @@ API examples gl_objects/pagesdomains gl_objects/projects gl_objects/runners + gl_objects/repositories + gl_objects/repository_tags gl_objects/search gl_objects/settings gl_objects/snippets diff --git a/docs/gl_objects/repositories.rst b/docs/gl_objects/repositories.rst new file mode 100644 index 0000000..b671fe1 --- /dev/null +++ b/docs/gl_objects/repositories.rst @@ -0,0 +1,28 @@ +##################### +Registry Repositories +##################### + +References +---------- + +* v4 API: + + + :class:`gitlab.v4.objects.ProjectRegistryRepository` + + :class:`gitlab.v4.objects.ProjectRegistryRepositoryManager` + + :attr:`gitlab.v4.objects.Project.registries` + +* Gitlab API: https://docs.gitlab.com/ce/api/container_registry.html + +Examples +-------- + +Get the list of container registry repositories associated with the project:: + + registries = project.registries.list() + +Delete repository:: + + project.registries.delete(id=x) + # or + registry = registries.pop() + registry.delete() diff --git a/docs/gl_objects/repository_tags.rst b/docs/gl_objects/repository_tags.rst new file mode 100644 index 0000000..79bb745 --- /dev/null +++ b/docs/gl_objects/repository_tags.rst @@ -0,0 +1,47 @@ +######################## +Registry Repository Tags +######################## + +References +---------- + +* v4 API: + + + :class:`gitlab.v4.objects.ProjectRegistryTag` + + :class:`gitlab.v4.objects.ProjectRegistryTagManager` + + :attr:`gitlab.v4.objects.Repository.tags` + +* Gitlab API: https://docs.gitlab.com/ce/api/container_registry.html + +Examples +-------- + +Get the list of repository tags in given registry:: + + registries = project.registries.list() + registry = registries.pop() + tags = registry.tags.list() + +Get specific tag:: + + registry.tags.get(id=tag_name) + +Delete tag:: + + registry.tags.delete(id=tag_name) + # or + tag = registry.tags.get(id=tag_name) + tag.delete() + +Delete tag in bulk:: + + registry.tags.delete_in_bulk(keep_n=1) + # or + registry.tags.delete_in_bulk(older_than="1m") + # or + registry.tags.delete_in_bulk(name_regex="v.+", keep_n=2) + +.. note:: + + Delete in bulk is asnychronous operation and may take a while. + Refer to: https://docs.gitlab.com/ce/api/container_registry.html#delete-repository-tags-in-bulk -- cgit v1.2.1 From c91230e4863932ef8b8781835a37077301fd7440 Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Thu, 2 May 2019 14:08:32 +0200 Subject: whitespaces --- gitlab/v4/objects.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 800b4b5..ed559cf 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1184,13 +1184,15 @@ class ProjectRegistryRepository(ObjectDeleteMixin, RESTObject): class ProjectRegistryRepositoryManager(DeleteMixin, ListMixin, RESTManager): - _path= '/projects/%(project_id)s/registry/repositories' + _path = '/projects/%(project_id)s/registry/repositories' _obj_cls = ProjectRegistryRepository _from_parent_attrs = {'project_id': 'id'} + class ProjectRegistryTag(ObjectDeleteMixin, RESTObject): _id_attr = 'name' + class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager): _obj_cls = ProjectRegistryTag _from_parent_attrs = {'project_id': 'project_id', 'repository_id': 'id'} -- cgit v1.2.1 From 2d9078e8e785e3a17429623693f84bbf8526ee58 Mon Sep 17 00:00:00 2001 From: Karol Ossowski Date: Wed, 8 May 2019 22:57:58 +0200 Subject: documentation fix --- docs/gl_objects/repositories.rst | 10 +++++----- docs/gl_objects/repository_tags.rst | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/gl_objects/repositories.rst b/docs/gl_objects/repositories.rst index b671fe1..6622c0c 100644 --- a/docs/gl_objects/repositories.rst +++ b/docs/gl_objects/repositories.rst @@ -9,7 +9,7 @@ References + :class:`gitlab.v4.objects.ProjectRegistryRepository` + :class:`gitlab.v4.objects.ProjectRegistryRepositoryManager` - + :attr:`gitlab.v4.objects.Project.registries` + + :attr:`gitlab.v4.objects.Project.repositories` * Gitlab API: https://docs.gitlab.com/ce/api/container_registry.html @@ -18,11 +18,11 @@ Examples Get the list of container registry repositories associated with the project:: - registries = project.registries.list() + repositories = project.repositories.list() Delete repository:: - project.registries.delete(id=x) + project.repositories.delete(id=x) # or - registry = registries.pop() - registry.delete() + repository = repositories.pop() + repository.delete() diff --git a/docs/gl_objects/repository_tags.rst b/docs/gl_objects/repository_tags.rst index 79bb745..94593da 100644 --- a/docs/gl_objects/repository_tags.rst +++ b/docs/gl_objects/repository_tags.rst @@ -18,28 +18,28 @@ Examples Get the list of repository tags in given registry:: - registries = project.registries.list() - registry = registries.pop() - tags = registry.tags.list() + repositories = project.repositories.list() + repository = repositories.pop() + tags = repository.tags.list() Get specific tag:: - registry.tags.get(id=tag_name) + repository.tags.get(id=tag_name) Delete tag:: - registry.tags.delete(id=tag_name) + repository.tags.delete(id=tag_name) # or - tag = registry.tags.get(id=tag_name) + tag = repository.tags.get(id=tag_name) tag.delete() Delete tag in bulk:: - registry.tags.delete_in_bulk(keep_n=1) + repository.tags.delete_in_bulk(keep_n=1) # or - registry.tags.delete_in_bulk(older_than="1m") + repository.tags.delete_in_bulk(older_than="1m") # or - registry.tags.delete_in_bulk(name_regex="v.+", keep_n=2) + repository.tags.delete_in_bulk(name_regex="v.+", keep_n=2) .. note:: -- cgit v1.2.1