Skip to content

Commit 84bcdc0

Browse files
authored
Merge pull request python-gitlab#759 from kkoralsky/registry_api
registry api implementation
2 parents 3dc6413 + 2d9078e commit 84bcdc0

File tree

4 files changed

+121
-0
lines changed

4 files changed

+121
-0
lines changed

docs/api-objects.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ API examples
3434
gl_objects/pagesdomains
3535
gl_objects/projects
3636
gl_objects/runners
37+
gl_objects/repositories
38+
gl_objects/repository_tags
3739
gl_objects/search
3840
gl_objects/settings
3941
gl_objects/snippets

docs/gl_objects/repositories.rst

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#####################
2+
Registry Repositories
3+
#####################
4+
5+
References
6+
----------
7+
8+
* v4 API:
9+
10+
+ :class:`gitlab.v4.objects.ProjectRegistryRepository`
11+
+ :class:`gitlab.v4.objects.ProjectRegistryRepositoryManager`
12+
+ :attr:`gitlab.v4.objects.Project.repositories`
13+
14+
* Gitlab API: https://docs.gitlab.com/ce/api/container_registry.html
15+
16+
Examples
17+
--------
18+
19+
Get the list of container registry repositories associated with the project::
20+
21+
repositories = project.repositories.list()
22+
23+
Delete repository::
24+
25+
project.repositories.delete(id=x)
26+
# or
27+
repository = repositories.pop()
28+
repository.delete()

docs/gl_objects/repository_tags.rst

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
########################
2+
Registry Repository Tags
3+
########################
4+
5+
References
6+
----------
7+
8+
* v4 API:
9+
10+
+ :class:`gitlab.v4.objects.ProjectRegistryTag`
11+
+ :class:`gitlab.v4.objects.ProjectRegistryTagManager`
12+
+ :attr:`gitlab.v4.objects.Repository.tags`
13+
14+
* Gitlab API: https://docs.gitlab.com/ce/api/container_registry.html
15+
16+
Examples
17+
--------
18+
19+
Get the list of repository tags in given registry::
20+
21+
repositories = project.repositories.list()
22+
repository = repositories.pop()
23+
tags = repository.tags.list()
24+
25+
Get specific tag::
26+
27+
repository.tags.get(id=tag_name)
28+
29+
Delete tag::
30+
31+
repository.tags.delete(id=tag_name)
32+
# or
33+
tag = repository.tags.get(id=tag_name)
34+
tag.delete()
35+
36+
Delete tag in bulk::
37+
38+
repository.tags.delete_in_bulk(keep_n=1)
39+
# or
40+
repository.tags.delete_in_bulk(older_than="1m")
41+
# or
42+
repository.tags.delete_in_bulk(name_regex="v.+", keep_n=2)
43+
44+
.. note::
45+
46+
Delete in bulk is asnychronous operation and may take a while.
47+
Refer to: https://docs.gitlab.com/ce/api/container_registry.html#delete-repository-tags-in-bulk

gitlab/v4/objects.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,49 @@ class PagesDomainManager(ListMixin, RESTManager):
11771177
_obj_cls = PagesDomain
11781178

11791179

1180+
class ProjectRegistryRepository(ObjectDeleteMixin, RESTObject):
1181+
_managers = (
1182+
('tags', 'ProjectRegistryTagManager'),
1183+
)
1184+
1185+
1186+
class ProjectRegistryRepositoryManager(DeleteMixin, ListMixin, RESTManager):
1187+
_path = '/projects/%(project_id)s/registry/repositories'
1188+
_obj_cls = ProjectRegistryRepository
1189+
_from_parent_attrs = {'project_id': 'id'}
1190+
1191+
1192+
class ProjectRegistryTag(ObjectDeleteMixin, RESTObject):
1193+
_id_attr = 'name'
1194+
1195+
1196+
class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager):
1197+
_obj_cls = ProjectRegistryTag
1198+
_from_parent_attrs = {'project_id': 'project_id', 'repository_id': 'id'}
1199+
_path = '/projects/%(project_id)s/registry/repositories/%(repository_id)s/tags'
1200+
1201+
@cli.register_custom_action('ProjectRegistryTagManager', optional=('name_regex', 'keep_n', 'older_than'))
1202+
@exc.on_http_error(exc.GitlabDeleteError)
1203+
def delete_in_bulk(self, name_regex='.*', **kwargs):
1204+
"""Delete Tag in bulk
1205+
1206+
Args:
1207+
name_regex (string): The regex of the name to delete. To delete all
1208+
tags specify .*.
1209+
keep_n (integer): The amount of latest tags of given name to keep.
1210+
older_than (string): Tags to delete that are older than the given time,
1211+
written in human readable form 1h, 1d, 1month.
1212+
**kwargs: Extra options to send to the server (e.g. sudo)
1213+
Raises:
1214+
GitlabAuthenticationError: If authentication is not correct
1215+
GitlabDeleteError: If the server cannot perform the request
1216+
"""
1217+
valid_attrs = ['keep_n', 'older_than']
1218+
data = {'name_regex': name_regex}
1219+
data.update({k: v for k, v in kwargs.items() if k in valid_attrs})
1220+
self.gitlab.http_delete(self.path, query_data=data, **kwargs)
1221+
1222+
11801223
class ProjectBoardList(SaveMixin, ObjectDeleteMixin, RESTObject):
11811224
pass
11821225

@@ -3286,6 +3329,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
32863329
('pipelineschedules', 'ProjectPipelineScheduleManager'),
32873330
('pushrules', 'ProjectPushRulesManager'),
32883331
('releases', 'ProjectReleaseManager'),
3332+
('repositories', 'ProjectRegistryRepositoryManager'),
32893333
('runners', 'ProjectRunnerManager'),
32903334
('services', 'ProjectServiceManager'),
32913335
('snippets', 'ProjectSnippetManager'),

0 commit comments

Comments
 (0)