Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions synapseclient/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
update_curation_task,
)
from .docker_commit_services import get_docker_tag
from .docker_services import get_entity_id_by_repository_name
from .entity_bundle_services_v2 import (
get_entity_id_bundle2,
get_entity_id_version_bundle2,
Expand Down Expand Up @@ -319,6 +320,8 @@
"update_curation_task",
# docker_commit_services
"get_docker_tag",
# docker_services
"get_entity_id_by_repository_name",
# user_services
"get_user_bundle",
"get_user_by_principal_id_or_name",
Expand Down
41 changes: 41 additions & 0 deletions synapseclient/api/docker_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
"""This module is responsible for exposing the services defined at:
<https://rest-docs.synapse.org/rest/#org.sagebionetworks.repo.web.controller.DockerController>
"""

import urllib.parse as urllib_parse
from typing import TYPE_CHECKING, Optional

if TYPE_CHECKING:
from synapseclient import Synapse


async def get_entity_id_by_repository_name(
repository_name: str,
*,
synapse_client: Optional["Synapse"] = None,
) -> str:
"""
Get the Synapse entity ID for a managed Docker repository by its repository name.

<https://rest-docs.synapse.org/rest/GET/entity/dockerRepo/id.html>

Arguments:
repository_name: The name of the managed Docker repository
synapse_client: If not passed in and caching was not disabled by
`Synapse.allow_client_caching(False)` this will use the last created
instance from the Synapse class constructor.

Returns:
The Synapse entity ID of the Docker repository.

Raises:
SynapseHTTPError: If the repository is not found or is not a managed repository.
"""
from synapseclient import Synapse

client = Synapse.get_client(synapse_client=synapse_client)
encoded_name = urllib_parse.quote(repository_name, safe="")
response = await client.rest_get_async(
uri=f"/entity/dockerRepo/id?repositoryName={encoded_name}",
)
return response["id"]
2 changes: 2 additions & 0 deletions synapseclient/api/entity_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@ class type. This will also download the file if `download_file` is set to True.
Annotations,
Dataset,
DatasetCollection,
DockerRepository,
EntityView,
File,
Folder,
Expand Down Expand Up @@ -379,6 +380,7 @@ class type. This will also download the file if `download_file` is set to True.
concrete_types.SUBMISSION_VIEW: SubmissionView,
concrete_types.VIRTUAL_TABLE: VirtualTable,
concrete_types.LINK_ENTITY: Link,
concrete_types.DOCKER_REPOSITORY: DockerRepository,
}

entity_class = ENTITY_TYPE_MAP.get(entity["concreteType"], None)
Expand Down
2 changes: 2 additions & 0 deletions synapseclient/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
RecordBasedMetadataTaskProperties,
)
from synapseclient.models.dataset import Dataset, DatasetCollection, EntityRef
from synapseclient.models.docker import DockerRepository
from synapseclient.models.entityview import EntityView, ViewTypeMask
from synapseclient.models.evaluation import Evaluation
from synapseclient.models.file import File, FileHandle
Expand Down Expand Up @@ -78,6 +79,7 @@
"File",
"FileHandle",
"Folder",
"DockerRepository",
"Link",
"Project",
"RecordSet",
Expand Down
Loading
Loading