Skip to content

Commit fbd43f6

Browse files
committed
update submissionbundle docstrings, add more examples
1 parent c368e49 commit fbd43f6

File tree

2 files changed

+92
-18
lines changed

2 files changed

+92
-18
lines changed

synapseclient/models/submission_bundle.py

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
from dataclasses import dataclass, field
1+
from dataclasses import dataclass
22
from typing import TYPE_CHECKING, Dict, List, Optional, Protocol, Union
33

44
from synapseclient import Synapse
55
from synapseclient.api import evaluation_services
66
from synapseclient.core.async_utils import async_to_sync
7-
from synapseclient.models.mixins.access_control import AccessControllable
87

98
if TYPE_CHECKING:
109
from synapseclient.models.submission import Submission
@@ -41,7 +40,11 @@ def get_evaluation_submission_bundles(
4140
A list of SubmissionBundle objects containing the submission bundles
4241
for the evaluation queue.
4342
43+
Note:
44+
The caller must be granted the ACCESS_TYPE.READ_PRIVATE_SUBMISSION on the specified Evaluation.
45+
4446
Example: Getting submission bundles for an evaluation
47+
 
4548
```python
4649
from synapseclient import Synapse
4750
from synapseclient.models import SubmissionBundle
@@ -87,6 +90,7 @@ def get_user_submission_bundles(
8790
submission bundles for the evaluation queue.
8891
8992
Example: Getting user submission bundles
93+
 
9094
```python
9195
from synapseclient import Synapse
9296
from synapseclient.models import SubmissionBundle
@@ -95,26 +99,24 @@ def get_user_submission_bundles(
9599
syn.login()
96100
97101
bundles = SubmissionBundle.get_user_submission_bundles(
98-
evaluation_id="9614543",
102+
evaluation_id="9999999",
99103
limit=25
100104
)
101105
print(f"Found {len(bundles)} user submission bundles")
102106
for bundle in bundles:
103-
print(f"Submission ID: {bundle.submission.id if bundle.submission else 'N/A'}")
107+
print(f"Submission ID: {bundle.submission.id}")
104108
```
105109
"""
106110
return []
107111

108112

109113
@dataclass
110114
@async_to_sync
111-
class SubmissionBundle(
112-
SubmissionBundleSynchronousProtocol,
113-
AccessControllable,
114-
):
115+
class SubmissionBundle(SubmissionBundleSynchronousProtocol):
115116
"""A `SubmissionBundle` object represents a bundle containing a Synapse Submission
116117
and its accompanying SubmissionStatus. This bundle provides convenient access to both
117118
the submission data and its current status in a single object.
119+
118120
<https://rest-docs.synapse.org/rest/org/sagebionetworks/evaluation/model/SubmissionBundle.html>
119121
120122
Attributes:
@@ -124,6 +126,7 @@ class SubmissionBundle(
124126
This object should be used to contain scoring data about the Submission.
125127
126128
Example: Retrieve submission bundles for an evaluation.
129+
&nbsp;
127130
```python
128131
from synapseclient import Synapse
129132
from synapseclient.models import SubmissionBundle
@@ -141,6 +144,26 @@ class SubmissionBundle(
141144
print(f"Submission ID: {bundle.submission.id if bundle.submission else 'N/A'}")
142145
print(f"Status: {bundle.submission_status.status if bundle.submission_status else 'N/A'}")
143146
```
147+
148+
Example: Retrieve user submission bundles for an evaluation.
149+
&nbsp;
150+
```python
151+
from synapseclient import Synapse
152+
from synapseclient.models import SubmissionBundle
153+
154+
syn = Synapse()
155+
syn.login()
156+
157+
# Get current user's submission bundles for an evaluation
158+
user_bundles = SubmissionBundle.get_user_submission_bundles(
159+
evaluation_id="9999999",
160+
limit=25
161+
)
162+
163+
for bundle in user_bundles:
164+
print(f"Submission ID: {bundle.submission.id}")
165+
print(f"Status: {bundle.submission_status.status}")
166+
```
144167
"""
145168

146169
submission: Optional["Submission"] = None
@@ -155,12 +178,6 @@ class SubmissionBundle(
155178
This object should be used to contain scoring data about the Submission.
156179
"""
157180

158-
_last_persistent_instance: Optional["SubmissionBundle"] = field(
159-
default=None, repr=False, compare=False
160-
)
161-
"""The last persistent instance of this object. This is used to determine if the
162-
object has been changed and needs to be updated in Synapse."""
163-
164181
def fill_from_dict(
165182
self, synapse_submission_bundle: Dict[str, Union[bool, str, int, Dict]]
166183
) -> "SubmissionBundle":
@@ -223,6 +240,7 @@ async def get_evaluation_submission_bundles_async(
223240
The caller must be granted the ACCESS_TYPE.READ_PRIVATE_SUBMISSION on the specified Evaluation.
224241
225242
Example: Getting submission bundles for an evaluation
243+
&nbsp;
226244
```python
227245
from synapseclient import Synapse
228246
from synapseclient.models import SubmissionBundle
@@ -231,13 +249,13 @@ async def get_evaluation_submission_bundles_async(
231249
syn.login()
232250
233251
bundles = await SubmissionBundle.get_evaluation_submission_bundles_async(
234-
evaluation_id="9614543",
252+
evaluation_id="9999999",
235253
status="SCORED",
236254
limit=50
237255
)
238256
print(f"Found {len(bundles)} submission bundles")
239257
for bundle in bundles:
240-
print(f"Submission ID: {bundle.submission.id if bundle.submission else 'N/A'}")
258+
print(f"Submission ID: {bundle.submission.id}")
241259
```
242260
"""
243261
response = await evaluation_services.get_evaluation_submission_bundles(
@@ -281,6 +299,8 @@ async def get_user_submission_bundles_async(
281299
submission bundles for the evaluation queue.
282300
283301
Example: Getting user submission bundles
302+
&nbsp;
303+
284304
```python
285305
from synapseclient import Synapse
286306
from synapseclient.models import SubmissionBundle
@@ -289,12 +309,12 @@ async def get_user_submission_bundles_async(
289309
syn.login()
290310
291311
bundles = await SubmissionBundle.get_user_submission_bundles_async(
292-
evaluation_id="9614543",
312+
evaluation_id="9999999",
293313
limit=25
294314
)
295315
print(f"Found {len(bundles)} user submission bundles")
296316
for bundle in bundles:
297-
print(f"Submission ID: {bundle.submission.id if bundle.submission else 'N/A'}")
317+
print(f"Submission ID: {bundle.submission.id}")
298318
```
299319
"""
300320
response = await evaluation_services.get_user_submission_bundles(

synapseclient/models/submission_status.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,60 @@ class SubmissionStatus(
259259
status = status.store()
260260
print(status)
261261
```
262+
263+
Example: Get all submission statuses for an evaluation.
264+
&nbsp;
265+
Retrieve multiple submission statuses for an evaluation queue with optional filtering.
266+
```python
267+
from synapseclient import Synapse
268+
from synapseclient.models import SubmissionStatus
269+
270+
syn = Synapse()
271+
syn.login()
272+
273+
# Get all RECEIVED statuses for an evaluation
274+
statuses = SubmissionStatus.get_all_submission_statuses(
275+
evaluation_id="9999999",
276+
status="RECEIVED",
277+
limit=100
278+
)
279+
280+
print(f"Found {len(statuses)} submission statuses")
281+
for status in statuses:
282+
print(f"Status ID: {status.id}, Status: {status.status}")
283+
```
284+
285+
Example: Batch update multiple submission statuses.
286+
&nbsp;
287+
Efficiently update multiple submission statuses in a single operation.
288+
```python
289+
from synapseclient import Synapse
290+
from synapseclient.models import SubmissionStatus
291+
292+
syn = Synapse()
293+
syn.login()
294+
295+
# Retrieve statuses to update
296+
statuses = SubmissionStatus.get_all_submission_statuses(
297+
evaluation_id="9999999",
298+
status="RECEIVED"
299+
)
300+
301+
# Update each status
302+
for status in statuses:
303+
status.status = "SCORED"
304+
status.submission_annotations = {
305+
"validation_score": 95.0,
306+
"comments": "Passed validation"
307+
}
308+
309+
# Batch update all statuses
310+
response = SubmissionStatus.batch_update_submission_statuses(
311+
evaluation_id="9614543",
312+
statuses=statuses
313+
)
314+
print(f"Batch update completed: {response}")
315+
```
262316
"""
263317

264318
id: Optional[str] = None

0 commit comments

Comments
 (0)