Skip to content

Commit da9c068

Browse files
authored
Merge pull request #1322 from Sage-Bionetworks/synpy-1731
[SYNPY-1731] Implement DockerRepository entity
2 parents 6ec2b61 + 80e7ac4 commit da9c068

13 files changed

Lines changed: 1450 additions & 3 deletions

File tree

synapseclient/api/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
update_curation_task,
2727
)
2828
from .docker_commit_services import get_docker_tag
29+
from .docker_services import get_entity_id_by_repository_name
2930
from .entity_bundle_services_v2 import (
3031
get_entity_id_bundle2,
3132
get_entity_id_version_bundle2,
@@ -319,6 +320,8 @@
319320
"update_curation_task",
320321
# docker_commit_services
321322
"get_docker_tag",
323+
# docker_services
324+
"get_entity_id_by_repository_name",
322325
# user_services
323326
"get_user_bundle",
324327
"get_user_by_principal_id_or_name",
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""This module is responsible for exposing the services defined at:
2+
<https://rest-docs.synapse.org/rest/#org.sagebionetworks.repo.web.controller.DockerController>
3+
"""
4+
5+
import urllib.parse as urllib_parse
6+
from typing import TYPE_CHECKING, Optional
7+
8+
if TYPE_CHECKING:
9+
from synapseclient import Synapse
10+
11+
12+
async def get_entity_id_by_repository_name(
13+
repository_name: str,
14+
*,
15+
synapse_client: Optional["Synapse"] = None,
16+
) -> str:
17+
"""
18+
Get the Synapse entity ID for a managed Docker repository by its repository name.
19+
20+
<https://rest-docs.synapse.org/rest/GET/entity/dockerRepo/id.html>
21+
22+
Arguments:
23+
repository_name: The name of the managed Docker repository
24+
synapse_client: If not passed in and caching was not disabled by
25+
`Synapse.allow_client_caching(False)` this will use the last created
26+
instance from the Synapse class constructor.
27+
28+
Returns:
29+
The Synapse entity ID of the Docker repository.
30+
31+
Raises:
32+
SynapseHTTPError: If the repository is not found or is not a managed repository.
33+
"""
34+
from synapseclient import Synapse
35+
36+
client = Synapse.get_client(synapse_client=synapse_client)
37+
encoded_name = urllib_parse.quote(repository_name, safe="")
38+
response = await client.rest_get_async(
39+
uri=f"/entity/dockerRepo/id?repositoryName={encoded_name}",
40+
)
41+
return response["id"]

synapseclient/api/entity_factory.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ class type. This will also download the file if `download_file` is set to True.
335335
Annotations,
336336
Dataset,
337337
DatasetCollection,
338+
DockerRepository,
338339
EntityView,
339340
File,
340341
Folder,
@@ -379,6 +380,7 @@ class type. This will also download the file if `download_file` is set to True.
379380
concrete_types.SUBMISSION_VIEW: SubmissionView,
380381
concrete_types.VIRTUAL_TABLE: VirtualTable,
381382
concrete_types.LINK_ENTITY: Link,
383+
concrete_types.DOCKER_REPOSITORY: DockerRepository,
382384
}
383385

384386
entity_class = ENTITY_TYPE_MAP.get(entity["concreteType"], None)

synapseclient/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
RecordBasedMetadataTaskProperties,
1515
)
1616
from synapseclient.models.dataset import Dataset, DatasetCollection, EntityRef
17+
from synapseclient.models.docker import DockerRepository
1718
from synapseclient.models.entityview import EntityView, ViewTypeMask
1819
from synapseclient.models.evaluation import Evaluation
1920
from synapseclient.models.file import File, FileHandle
@@ -78,6 +79,7 @@
7879
"File",
7980
"FileHandle",
8081
"Folder",
82+
"DockerRepository",
8183
"Link",
8284
"Project",
8385
"RecordSet",

0 commit comments

Comments
 (0)