Skip to content

Commit a9977b2

Browse files
committed
address final todo: implement docker_tag, and note in docs that version_number can be ignored for docker submissions
1 parent 1168cae commit a9977b2

File tree

9 files changed

+189
-119
lines changed

9 files changed

+189
-119
lines changed

synapseclient/models/submission.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55

66
from synapseclient import Synapse
77
from synapseclient.api import evaluation_services
8-
from synapseclient.core.async_utils import async_to_sync, skip_async_to_sync, otel_trace_method, wrap_async_generator_to_sync_generator
8+
from synapseclient.core.async_utils import (
9+
async_to_sync,
10+
otel_trace_method,
11+
skip_async_to_sync,
12+
wrap_async_generator_to_sync_generator,
13+
)
914
from synapseclient.models.mixins.access_control import AccessControllable
1015

1116

@@ -340,7 +345,7 @@ class Submission(
340345

341346
version_number: Optional[int] = field(default=None, compare=False)
342347
"""
343-
The version number of the entity at submission. If not provided, it will be automatically retrieved from the entity.
348+
The version number of the entity at submission. If not provided, it will be automatically retrieved from the entity. If entity is a Docker repository, this attribute should be ignored in favor of `docker_digest` or `docker_tag`.
344349
"""
345350

346351
evaluation_id: Optional[str] = None
@@ -389,6 +394,11 @@ class Submission(
389394
For Docker repositories, the digest of the submitted Docker image.
390395
"""
391396

397+
docker_tag: Optional[str] = None
398+
"""
399+
For Docker repositories, the tag of the submitted Docker image.
400+
"""
401+
392402
etag: Optional[str] = None
393403
"""The current eTag of the Entity being submitted. If not provided, it will be automatically retrieved."""
394404

@@ -580,11 +590,11 @@ async def create_submission_example():
580590
entity_info.get("concreteType")
581591
== "org.sagebionetworks.repo.model.docker.DockerRepository"
582592
):
583-
self.version_number = (
584-
1 # TODO: Docker repositories do not have version numbers
585-
)
586593
self.docker_repository_name = entity_info.get("repositoryName")
587594
self.docker_digest = entity_info.get("digest")
595+
self.docker_tag = entity_info.get("tag")
596+
# All docker repositories are assigned version number 1, even if they have multiple tags
597+
self.version_number = 1
588598
else:
589599
raise ValueError("entity_id is required to create a submission")
590600

synapseclient/models/submission_bundle.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
11
from dataclasses import dataclass
2-
from typing import TYPE_CHECKING, AsyncGenerator, Dict, Generator, List, Optional, Protocol, Union
2+
from typing import (
3+
TYPE_CHECKING,
4+
AsyncGenerator,
5+
Dict,
6+
Generator,
7+
Optional,
8+
Protocol,
9+
Union,
10+
)
311

412
from synapseclient import Synapse
513
from synapseclient.api import evaluation_services
6-
from synapseclient.core.async_utils import async_to_sync, skip_async_to_sync, wrap_async_generator_to_sync_generator
14+
from synapseclient.core.async_utils import (
15+
async_to_sync,
16+
skip_async_to_sync,
17+
wrap_async_generator_to_sync_generator,
18+
)
719

820
if TYPE_CHECKING:
921
from synapseclient.models.submission import Submission

tests/integration/synapseclient/models/async/test_submission_async.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ async def test_get_evaluation_submissions_async_generator_behavior(
290290
async for submission in submissions_generator:
291291
assert isinstance(submission, Submission)
292292
submissions.append(submission)
293-
293+
294294
# AND all submissions should be valid Submission objects
295295
assert all(isinstance(sub, Submission) for sub in submissions)
296296

@@ -320,7 +320,7 @@ async def test_get_user_submissions_async_generator_behavior(
320320
async for submission in submissions_generator:
321321
assert isinstance(submission, Submission)
322322
submissions.append(submission)
323-
323+
324324
# AND all submissions should be valid Submission objects
325325
assert all(isinstance(sub, Submission) for sub in submissions)
326326

tests/integration/synapseclient/models/async/test_submission_bundle_async.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ async def test_get_evaluation_submission_bundles_async_generator_behavior(
148148
async for bundle in bundles_generator:
149149
assert isinstance(bundle, SubmissionBundle)
150150
bundles.append(bundle)
151-
151+
152152
# AND all bundles should be valid SubmissionBundle objects
153153
assert all(isinstance(bundle, SubmissionBundle) for bundle in bundles)
154154

@@ -209,7 +209,9 @@ async def test_get_evaluation_submission_bundles_with_automatic_pagination_async
209209

210210
# THEN I should get all bundles for the evaluation
211211
assert all_bundles is not None
212-
assert len(all_bundles) >= len(multiple_submissions) # At least our test submissions
212+
assert len(all_bundles) >= len(
213+
multiple_submissions
214+
) # At least our test submissions
213215

214216
# AND each bundle should be valid
215217
for bundle in all_bundles:
@@ -286,7 +288,9 @@ async def test_get_user_submission_bundles_with_automatic_pagination_async(
286288

287289
# THEN I should get all bundles for the user in this evaluation
288290
assert all_bundles is not None
289-
assert len(all_bundles) >= len(multiple_submissions) # At least our test submissions
291+
assert len(all_bundles) >= len(
292+
multiple_submissions
293+
) # At least our test submissions
290294

291295
# AND each bundle should be valid
292296
for bundle in all_bundles:
@@ -634,7 +638,7 @@ async def test_get_submission_bundles_with_default_parameters_async(
634638
synapse_client=self.syn,
635639
):
636640
eval_bundles.append(bundle)
637-
641+
638642
user_bundles = []
639643
async for bundle in SubmissionBundle.get_user_submission_bundles_async(
640644
evaluation_id=test_evaluation.id,

tests/integration/synapseclient/models/synchronous/test_submission.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,11 @@ async def test_get_evaluation_submissions(
239239
self, test_evaluation: Evaluation, test_submission: Submission
240240
):
241241
# WHEN I get all submissions for an evaluation
242-
submissions = list(Submission.get_evaluation_submissions(
243-
evaluation_id=test_evaluation.id, synapse_client=self.syn
244-
))
242+
submissions = list(
243+
Submission.get_evaluation_submissions(
244+
evaluation_id=test_evaluation.id, synapse_client=self.syn
245+
)
246+
)
245247

246248
# THEN I should get a list of submission objects
247249
assert len(submissions) > 0
@@ -255,11 +257,13 @@ async def test_get_evaluation_submissions_with_status_filter(
255257
self, test_evaluation: Evaluation, test_submission: Submission
256258
):
257259
# WHEN I get submissions filtered by status
258-
submissions = list(Submission.get_evaluation_submissions(
259-
evaluation_id=test_evaluation.id,
260-
status="RECEIVED",
261-
synapse_client=self.syn,
262-
))
260+
submissions = list(
261+
Submission.get_evaluation_submissions(
262+
evaluation_id=test_evaluation.id,
263+
status="RECEIVED",
264+
synapse_client=self.syn,
265+
)
266+
)
263267

264268
# The test submission should be in the results (initially in RECEIVED status)
265269
submission_ids = [sub.id for sub in submissions]
@@ -279,7 +283,7 @@ async def test_get_evaluation_submissions_generator_behavior(
279283
for submission in submissions_generator:
280284
assert isinstance(submission, Submission)
281285
submissions.append(submission)
282-
286+
283287
# AND all submissions should be valid Submission objects
284288
assert all(isinstance(sub, Submission) for sub in submissions)
285289

@@ -308,7 +312,7 @@ async def test_get_user_submissions_generator_behavior(
308312
for submission in submissions_generator:
309313
assert isinstance(submission, Submission)
310314
submissions.append(submission)
311-
315+
312316
# AND all submissions should be valid Submission objects
313317
assert all(isinstance(sub, Submission) for sub in submissions)
314318

0 commit comments

Comments
 (0)