diff options
Diffstat (limited to 'gitlab/v4/objects/container_registry.py')
-rw-r--r-- | gitlab/v4/objects/container_registry.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gitlab/v4/objects/container_registry.py b/gitlab/v4/objects/container_registry.py new file mode 100644 index 0000000..a6d0983 --- /dev/null +++ b/gitlab/v4/objects/container_registry.py @@ -0,0 +1,47 @@ +from gitlab import cli +from gitlab import exceptions as exc +from gitlab.base import * # noqa +from gitlab.mixins import * # noqa + + +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)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 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) |