flywheel-sdk 19.3.0rc1__py2.py3-none-any.whl → 19.4.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flywheel/__init__.py +1 -0
- flywheel/api/acquisitions_api.py +134 -28
- flywheel/api/analyses_api.py +125 -21
- flywheel/api/collections_api.py +122 -12
- flywheel/api/containers_api.py +25 -27
- flywheel/api/files_api.py +212 -4
- flywheel/api/groups_api.py +109 -1
- flywheel/api/jobs_api.py +5 -1
- flywheel/api/projects_api.py +149 -31
- flywheel/api/sessions_api.py +144 -30
- flywheel/api/subjects_api.py +139 -29
- flywheel/api/tree_api.py +5 -1
- flywheel/api/users_api.py +15 -3
- flywheel/api_client.py +1 -1
- flywheel/configuration.py +2 -2
- flywheel/flywheel.py +207 -187
- flywheel/models/__init__.py +2 -1
- flywheel/models/daily_report_usage.py +62 -4
- flywheel/models/features.py +16 -16
- flywheel/models/filter.py +217 -0
- flywheel/models/mixins.py +33 -2
- flywheel/models/report_usage.py +88 -1
- {flywheel_sdk-19.3.0rc1.dist-info → flywheel_sdk-19.4.0.dist-info}/METADATA +6 -6
- {flywheel_sdk-19.3.0rc1.dist-info → flywheel_sdk-19.4.0.dist-info}/RECORD +27 -26
- {flywheel_sdk-19.3.0rc1.dist-info → flywheel_sdk-19.4.0.dist-info}/WHEEL +1 -1
- {flywheel_sdk-19.3.0rc1.dist-info → flywheel_sdk-19.4.0.dist-info}/LICENSE.txt +0 -0
- {flywheel_sdk-19.3.0rc1.dist-info → flywheel_sdk-19.4.0.dist-info}/top_level.txt +0 -0
flywheel/models/__init__.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
Flywheel: API for data import, automated curation, image processing, machine learning workflows, and secure collaboration. # noqa: E501
|
|
8
8
|
|
|
9
|
-
OpenAPI spec version: 19.
|
|
9
|
+
OpenAPI spec version: 19.4.0
|
|
10
10
|
|
|
11
11
|
Generated by: https://github.com/swagger-api/swagger-codegen.git
|
|
12
12
|
"""
|
|
@@ -237,6 +237,7 @@ from flywheel.models.file_version_output import FileVersionOutput
|
|
|
237
237
|
from flywheel.models.file_via import FileVia
|
|
238
238
|
from flywheel.models.file_zip_entry import FileZipEntry
|
|
239
239
|
from flywheel.models.file_zip_info import FileZipInfo
|
|
240
|
+
from flywheel.models.filter import Filter
|
|
240
241
|
from flywheel.models.filter_values import FilterValues
|
|
241
242
|
from flywheel.models.fixed_file_version_input import FixedFileVersionInput
|
|
242
243
|
from flywheel.models.fixed_input import FixedInput
|
|
@@ -33,7 +33,9 @@ class DailyReportUsage(object):
|
|
|
33
33
|
'center_compute_ms': 'int',
|
|
34
34
|
'group_compute_ms': 'int',
|
|
35
35
|
'center_storage_bytes': 'int',
|
|
36
|
-
'
|
|
36
|
+
'center_storage_soft_deleted_bytes': 'int',
|
|
37
|
+
'group_storage_bytes': 'int',
|
|
38
|
+
'group_storage_soft_deleted_bytes': 'int'
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
attribute_map = {
|
|
@@ -49,7 +51,9 @@ class DailyReportUsage(object):
|
|
|
49
51
|
'center_compute_ms': 'center_compute_ms',
|
|
50
52
|
'group_compute_ms': 'group_compute_ms',
|
|
51
53
|
'center_storage_bytes': 'center_storage_bytes',
|
|
52
|
-
'
|
|
54
|
+
'center_storage_soft_deleted_bytes': 'center_storage_soft_deleted_bytes',
|
|
55
|
+
'group_storage_bytes': 'group_storage_bytes',
|
|
56
|
+
'group_storage_soft_deleted_bytes': 'group_storage_soft_deleted_bytes'
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
rattribute_map = {
|
|
@@ -65,10 +69,12 @@ class DailyReportUsage(object):
|
|
|
65
69
|
'center_compute_ms': 'center_compute_ms',
|
|
66
70
|
'group_compute_ms': 'group_compute_ms',
|
|
67
71
|
'center_storage_bytes': 'center_storage_bytes',
|
|
68
|
-
'
|
|
72
|
+
'center_storage_soft_deleted_bytes': 'center_storage_soft_deleted_bytes',
|
|
73
|
+
'group_storage_bytes': 'group_storage_bytes',
|
|
74
|
+
'group_storage_soft_deleted_bytes': 'group_storage_soft_deleted_bytes'
|
|
69
75
|
}
|
|
70
76
|
|
|
71
|
-
def __init__(self, year=None, month=None, day=None, project_label=None, group=None, project=None, session_count=0, center_job_count=0, group_job_count=0, center_compute_ms=0, group_compute_ms=0, center_storage_bytes=0, group_storage_bytes=0): # noqa: E501
|
|
77
|
+
def __init__(self, year=None, month=None, day=None, project_label=None, group=None, project=None, session_count=0, center_job_count=0, group_job_count=0, center_compute_ms=0, group_compute_ms=0, center_storage_bytes=0, center_storage_soft_deleted_bytes=0, group_storage_bytes=0, group_storage_soft_deleted_bytes=0): # noqa: E501
|
|
72
78
|
"""DailyReportUsage - a model defined in Swagger"""
|
|
73
79
|
super(DailyReportUsage, self).__init__()
|
|
74
80
|
|
|
@@ -84,7 +90,9 @@ class DailyReportUsage(object):
|
|
|
84
90
|
self._center_compute_ms = None
|
|
85
91
|
self._group_compute_ms = None
|
|
86
92
|
self._center_storage_bytes = None
|
|
93
|
+
self._center_storage_soft_deleted_bytes = None
|
|
87
94
|
self._group_storage_bytes = None
|
|
95
|
+
self._group_storage_soft_deleted_bytes = None
|
|
88
96
|
self.discriminator = None
|
|
89
97
|
self.alt_discriminator = None
|
|
90
98
|
|
|
@@ -107,8 +115,12 @@ class DailyReportUsage(object):
|
|
|
107
115
|
self.group_compute_ms = group_compute_ms
|
|
108
116
|
if center_storage_bytes is not None:
|
|
109
117
|
self.center_storage_bytes = center_storage_bytes
|
|
118
|
+
if center_storage_soft_deleted_bytes is not None:
|
|
119
|
+
self.center_storage_soft_deleted_bytes = center_storage_soft_deleted_bytes
|
|
110
120
|
if group_storage_bytes is not None:
|
|
111
121
|
self.group_storage_bytes = group_storage_bytes
|
|
122
|
+
if group_storage_soft_deleted_bytes is not None:
|
|
123
|
+
self.group_storage_soft_deleted_bytes = group_storage_soft_deleted_bytes
|
|
112
124
|
|
|
113
125
|
@property
|
|
114
126
|
def year(self):
|
|
@@ -384,6 +396,29 @@ class DailyReportUsage(object):
|
|
|
384
396
|
|
|
385
397
|
self._center_storage_bytes = center_storage_bytes
|
|
386
398
|
|
|
399
|
+
@property
|
|
400
|
+
def center_storage_soft_deleted_bytes(self):
|
|
401
|
+
"""Gets the center_storage_soft_deleted_bytes of this DailyReportUsage.
|
|
402
|
+
|
|
403
|
+
The total storage used by soft deleted files originating from devices or center-designated gears on this day (billable to the center)
|
|
404
|
+
|
|
405
|
+
:return: The center_storage_soft_deleted_bytes of this DailyReportUsage.
|
|
406
|
+
:rtype: int
|
|
407
|
+
"""
|
|
408
|
+
return self._center_storage_soft_deleted_bytes
|
|
409
|
+
|
|
410
|
+
@center_storage_soft_deleted_bytes.setter
|
|
411
|
+
def center_storage_soft_deleted_bytes(self, center_storage_soft_deleted_bytes):
|
|
412
|
+
"""Sets the center_storage_soft_deleted_bytes of this DailyReportUsage.
|
|
413
|
+
|
|
414
|
+
The total storage used by soft deleted files originating from devices or center-designated gears on this day (billable to the center)
|
|
415
|
+
|
|
416
|
+
:param center_storage_soft_deleted_bytes: The center_storage_soft_deleted_bytes of this DailyReportUsage. # noqa: E501
|
|
417
|
+
:type: int
|
|
418
|
+
"""
|
|
419
|
+
|
|
420
|
+
self._center_storage_soft_deleted_bytes = center_storage_soft_deleted_bytes
|
|
421
|
+
|
|
387
422
|
@property
|
|
388
423
|
def group_storage_bytes(self):
|
|
389
424
|
"""Gets the group_storage_bytes of this DailyReportUsage.
|
|
@@ -407,6 +442,29 @@ class DailyReportUsage(object):
|
|
|
407
442
|
|
|
408
443
|
self._group_storage_bytes = group_storage_bytes
|
|
409
444
|
|
|
445
|
+
@property
|
|
446
|
+
def group_storage_soft_deleted_bytes(self):
|
|
447
|
+
"""Gets the group_storage_soft_deleted_bytes of this DailyReportUsage.
|
|
448
|
+
|
|
449
|
+
The total storage used by soft deleted files not originating from devices or non-center-designated (lab) gears on this day (billable to the group)
|
|
450
|
+
|
|
451
|
+
:return: The group_storage_soft_deleted_bytes of this DailyReportUsage.
|
|
452
|
+
:rtype: int
|
|
453
|
+
"""
|
|
454
|
+
return self._group_storage_soft_deleted_bytes
|
|
455
|
+
|
|
456
|
+
@group_storage_soft_deleted_bytes.setter
|
|
457
|
+
def group_storage_soft_deleted_bytes(self, group_storage_soft_deleted_bytes):
|
|
458
|
+
"""Sets the group_storage_soft_deleted_bytes of this DailyReportUsage.
|
|
459
|
+
|
|
460
|
+
The total storage used by soft deleted files not originating from devices or non-center-designated (lab) gears on this day (billable to the group)
|
|
461
|
+
|
|
462
|
+
:param group_storage_soft_deleted_bytes: The group_storage_soft_deleted_bytes of this DailyReportUsage. # noqa: E501
|
|
463
|
+
:type: int
|
|
464
|
+
"""
|
|
465
|
+
|
|
466
|
+
self._group_storage_soft_deleted_bytes = group_storage_soft_deleted_bytes
|
|
467
|
+
|
|
410
468
|
|
|
411
469
|
@staticmethod
|
|
412
470
|
def positional_to_model(value):
|
flywheel/models/features.py
CHANGED
|
@@ -81,7 +81,7 @@ class Features(object):
|
|
|
81
81
|
'userpilot': 'bool',
|
|
82
82
|
'validate_classification': 'bool',
|
|
83
83
|
'virus_scan': 'bool',
|
|
84
|
-
'
|
|
84
|
+
'legacy_dicom_uploader': 'bool'
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
attribute_map = {
|
|
@@ -145,7 +145,7 @@ class Features(object):
|
|
|
145
145
|
'userpilot': 'userpilot',
|
|
146
146
|
'validate_classification': 'validate_classification',
|
|
147
147
|
'virus_scan': 'virus_scan',
|
|
148
|
-
'
|
|
148
|
+
'legacy_dicom_uploader': 'legacy_dicom_uploader'
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
rattribute_map = {
|
|
@@ -209,10 +209,10 @@ class Features(object):
|
|
|
209
209
|
'userpilot': 'userpilot',
|
|
210
210
|
'validate_classification': 'validate_classification',
|
|
211
211
|
'virus_scan': 'virus_scan',
|
|
212
|
-
'
|
|
212
|
+
'legacy_dicom_uploader': 'legacy_dicom_uploader'
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
-
def __init__(self, api_enabled_gear_rules=True, auth0=None, audit_trail=False, azureml_integration=False, cold_job_logs=False, collections=False, copy_by_reference=True, core_api=True, crawler=False, data_views_non_21_cfr=True, default_viewer_apps=True, deid_log=False, deid_profile=False, dicom_web_uploader_non_21_cfr=True, dimse=False, elastic_search_primary=False, exchange=False, exchange_admin=False, external_routing=False, gear_access=True, google_analytics=True, healthcare_api=False, job_ask=True, job_prioritization=True, job_tickets=True, jupyter_integration=False, jupyterhub_external_storage=True, ldap_sync=False, multifactor_auth=False, multipart_signed_url=True, multiproject=False, ohif_multi_subject_view=False, ohif_react=False, ohif_react_beta=False, ohif_slice_order=None, ohif_v2_adhoc_indexing=True, ohif_v3=
|
|
215
|
+
def __init__(self, api_enabled_gear_rules=True, auth0=None, audit_trail=False, azureml_integration=False, cold_job_logs=False, collections=False, copy_by_reference=True, core_api=True, crawler=False, data_views_non_21_cfr=True, default_viewer_apps=True, deid_log=False, deid_profile=False, dicom_web_uploader_non_21_cfr=True, dimse=False, elastic_search_primary=False, exchange=False, exchange_admin=False, external_routing=False, gear_access=True, google_analytics=True, healthcare_api=False, job_ask=True, job_prioritization=True, job_tickets=True, jupyter_integration=False, jupyterhub_external_storage=True, ldap_sync=False, multifactor_auth=False, multipart_signed_url=True, multiproject=False, ohif_multi_subject_view=False, ohif_react=False, ohif_react_beta=False, ohif_slice_order=None, ohif_v2_adhoc_indexing=True, ohif_v3=True, ohif_v3_beta=False, ohif_v3_default_app=False, ohif_v3_readonly=False, project_export=True, project_import=True, project_list_uses_stats=False, project_locking=False, reader_tasks=False, rts_sync=False, sentry_logging=None, session_templates_non_21_cfr=True, shared_projects=False, signed_url=False, study_task_status=False, tagging=False, tags_in_lists=True, task_manager_data_views=True, transform_search_fields=True, unsafe_login=False, url_access_apps=False, userpilot=None, validate_classification=False, virus_scan=False, legacy_dicom_uploader=False): # noqa: E501
|
|
216
216
|
"""Features - a model defined in Swagger"""
|
|
217
217
|
super(Features, self).__init__()
|
|
218
218
|
|
|
@@ -276,7 +276,7 @@ class Features(object):
|
|
|
276
276
|
self._userpilot = None
|
|
277
277
|
self._validate_classification = None
|
|
278
278
|
self._virus_scan = None
|
|
279
|
-
self.
|
|
279
|
+
self._legacy_dicom_uploader = None
|
|
280
280
|
self.discriminator = None
|
|
281
281
|
self.alt_discriminator = None
|
|
282
282
|
|
|
@@ -400,8 +400,8 @@ class Features(object):
|
|
|
400
400
|
self.validate_classification = validate_classification
|
|
401
401
|
if virus_scan is not None:
|
|
402
402
|
self.virus_scan = virus_scan
|
|
403
|
-
if
|
|
404
|
-
self.
|
|
403
|
+
if legacy_dicom_uploader is not None:
|
|
404
|
+
self.legacy_dicom_uploader = legacy_dicom_uploader
|
|
405
405
|
|
|
406
406
|
@property
|
|
407
407
|
def api_enabled_gear_rules(self):
|
|
@@ -1664,25 +1664,25 @@ class Features(object):
|
|
|
1664
1664
|
self._virus_scan = virus_scan
|
|
1665
1665
|
|
|
1666
1666
|
@property
|
|
1667
|
-
def
|
|
1668
|
-
"""Gets the
|
|
1667
|
+
def legacy_dicom_uploader(self):
|
|
1668
|
+
"""Gets the legacy_dicom_uploader of this Features.
|
|
1669
1669
|
|
|
1670
1670
|
|
|
1671
|
-
:return: The
|
|
1671
|
+
:return: The legacy_dicom_uploader of this Features.
|
|
1672
1672
|
:rtype: bool
|
|
1673
1673
|
"""
|
|
1674
|
-
return self.
|
|
1674
|
+
return self._legacy_dicom_uploader
|
|
1675
1675
|
|
|
1676
|
-
@
|
|
1677
|
-
def
|
|
1678
|
-
"""Sets the
|
|
1676
|
+
@legacy_dicom_uploader.setter
|
|
1677
|
+
def legacy_dicom_uploader(self, legacy_dicom_uploader):
|
|
1678
|
+
"""Sets the legacy_dicom_uploader of this Features.
|
|
1679
1679
|
|
|
1680
1680
|
|
|
1681
|
-
:param
|
|
1681
|
+
:param legacy_dicom_uploader: The legacy_dicom_uploader of this Features. # noqa: E501
|
|
1682
1682
|
:type: bool
|
|
1683
1683
|
"""
|
|
1684
1684
|
|
|
1685
|
-
self.
|
|
1685
|
+
self._legacy_dicom_uploader = legacy_dicom_uploader
|
|
1686
1686
|
|
|
1687
1687
|
|
|
1688
1688
|
@staticmethod
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Flywheel
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501
|
|
7
|
+
|
|
8
|
+
OpenAPI spec version: 0.0.1
|
|
9
|
+
|
|
10
|
+
Generated by: https://github.com/swagger-api/swagger-codegen.git
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## NOTE: This file is auto generated by the swagger code generator program.
|
|
15
|
+
## Do not edit the file manually.
|
|
16
|
+
|
|
17
|
+
import pprint
|
|
18
|
+
import re # noqa: F401
|
|
19
|
+
import six
|
|
20
|
+
|
|
21
|
+
class Filter(object):
|
|
22
|
+
|
|
23
|
+
swagger_types = {
|
|
24
|
+
'attribute': 'str',
|
|
25
|
+
'operator': 'str',
|
|
26
|
+
'value': 'union[str,integer,list[Object]]'
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
attribute_map = {
|
|
30
|
+
'attribute': 'attribute',
|
|
31
|
+
'operator': 'operator',
|
|
32
|
+
'value': 'value'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
rattribute_map = {
|
|
36
|
+
'attribute': 'attribute',
|
|
37
|
+
'operator': 'operator',
|
|
38
|
+
'value': 'value'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
def __init__(self, attribute=None, operator=None, value=None): # noqa: E501
|
|
42
|
+
"""Filter - a model defined in Swagger"""
|
|
43
|
+
super(Filter, self).__init__()
|
|
44
|
+
|
|
45
|
+
self._attribute = None
|
|
46
|
+
self._operator = None
|
|
47
|
+
self._value = None
|
|
48
|
+
self.discriminator = None
|
|
49
|
+
self.alt_discriminator = None
|
|
50
|
+
|
|
51
|
+
self.attribute = attribute
|
|
52
|
+
self.operator = operator
|
|
53
|
+
if value is not None:
|
|
54
|
+
self.value = value
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def attribute(self):
|
|
58
|
+
"""Gets the attribute of this Filter.
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
:return: The attribute of this Filter.
|
|
62
|
+
:rtype: str
|
|
63
|
+
"""
|
|
64
|
+
return self._attribute
|
|
65
|
+
|
|
66
|
+
@attribute.setter
|
|
67
|
+
def attribute(self, attribute):
|
|
68
|
+
"""Sets the attribute of this Filter.
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
:param attribute: The attribute of this Filter. # noqa: E501
|
|
72
|
+
:type: str
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
self._attribute = attribute
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def operator(self):
|
|
79
|
+
"""Gets the operator of this Filter.
|
|
80
|
+
|
|
81
|
+
Comparison operator to filter on. Can be one of: < (lt), <= (lte), = (eq), != (neq), >= (gte), > (gt), =~ (reg), =| (in), !=| (not_in)
|
|
82
|
+
|
|
83
|
+
:return: The operator of this Filter.
|
|
84
|
+
:rtype: str
|
|
85
|
+
"""
|
|
86
|
+
return self._operator
|
|
87
|
+
|
|
88
|
+
@operator.setter
|
|
89
|
+
def operator(self, operator):
|
|
90
|
+
"""Sets the operator of this Filter.
|
|
91
|
+
|
|
92
|
+
Comparison operator to filter on. Can be one of: < (lt), <= (lte), = (eq), != (neq), >= (gte), > (gt), =~ (reg), =| (in), !=| (not_in)
|
|
93
|
+
|
|
94
|
+
:param operator: The operator of this Filter. # noqa: E501
|
|
95
|
+
:type: str
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
self._operator = operator
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def value(self):
|
|
102
|
+
"""Gets the value of this Filter.
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
:return: The value of this Filter.
|
|
106
|
+
:rtype: union[str,integer,list[Object]]
|
|
107
|
+
"""
|
|
108
|
+
return self._value
|
|
109
|
+
|
|
110
|
+
@value.setter
|
|
111
|
+
def value(self, value):
|
|
112
|
+
"""Sets the value of this Filter.
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
:param value: The value of this Filter. # noqa: E501
|
|
116
|
+
:type: union[str,integer,list[Object]]
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
self._value = value
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@staticmethod
|
|
123
|
+
def positional_to_model(value):
|
|
124
|
+
"""Converts a positional argument to a model value"""
|
|
125
|
+
return value
|
|
126
|
+
|
|
127
|
+
def return_value(self):
|
|
128
|
+
"""Unwraps return value from model"""
|
|
129
|
+
return self
|
|
130
|
+
|
|
131
|
+
def to_dict(self):
|
|
132
|
+
"""Returns the model properties as a dict"""
|
|
133
|
+
result = {}
|
|
134
|
+
|
|
135
|
+
for attr, _ in six.iteritems(self.swagger_types):
|
|
136
|
+
value = getattr(self, attr)
|
|
137
|
+
if isinstance(value, list):
|
|
138
|
+
result[attr] = list(map(
|
|
139
|
+
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
|
|
140
|
+
value
|
|
141
|
+
))
|
|
142
|
+
elif hasattr(value, "to_dict"):
|
|
143
|
+
result[attr] = value.to_dict()
|
|
144
|
+
elif isinstance(value, dict):
|
|
145
|
+
result[attr] = dict(map(
|
|
146
|
+
lambda item: (item[0], item[1].to_dict())
|
|
147
|
+
if hasattr(item[1], "to_dict") else item,
|
|
148
|
+
value.items()
|
|
149
|
+
))
|
|
150
|
+
else:
|
|
151
|
+
result[attr] = value
|
|
152
|
+
|
|
153
|
+
return result
|
|
154
|
+
|
|
155
|
+
def to_str(self):
|
|
156
|
+
"""Returns the string representation of the model"""
|
|
157
|
+
return pprint.pformat(self.to_dict())
|
|
158
|
+
|
|
159
|
+
def __repr__(self):
|
|
160
|
+
"""For `print` and `pprint`"""
|
|
161
|
+
return self.to_str()
|
|
162
|
+
|
|
163
|
+
def __eq__(self, other):
|
|
164
|
+
"""Returns true if both objects are equal"""
|
|
165
|
+
if not isinstance(other, Filter):
|
|
166
|
+
return False
|
|
167
|
+
|
|
168
|
+
return self.__dict__ == other.__dict__
|
|
169
|
+
|
|
170
|
+
def __ne__(self, other):
|
|
171
|
+
"""Returns true if both objects are not equal"""
|
|
172
|
+
return not self == other
|
|
173
|
+
|
|
174
|
+
# Container emulation
|
|
175
|
+
def __getitem__(self, key):
|
|
176
|
+
"""Returns the value of key"""
|
|
177
|
+
key = self._map_key(key)
|
|
178
|
+
return getattr(self, key)
|
|
179
|
+
|
|
180
|
+
def __setitem__(self, key, value):
|
|
181
|
+
"""Sets the value of key"""
|
|
182
|
+
key = self._map_key(key)
|
|
183
|
+
setattr(self, key, value)
|
|
184
|
+
|
|
185
|
+
def __contains__(self, key):
|
|
186
|
+
"""Checks if the given value is a key in this object"""
|
|
187
|
+
key = self._map_key(key, raise_on_error=False)
|
|
188
|
+
return key is not None
|
|
189
|
+
|
|
190
|
+
def keys(self):
|
|
191
|
+
"""Returns the list of json properties in the object"""
|
|
192
|
+
return self.__class__.rattribute_map.keys()
|
|
193
|
+
|
|
194
|
+
def values(self):
|
|
195
|
+
"""Returns the list of values in the object"""
|
|
196
|
+
for key in self.__class__.attribute_map.keys():
|
|
197
|
+
yield getattr(self, key)
|
|
198
|
+
|
|
199
|
+
def items(self):
|
|
200
|
+
"""Returns the list of json property to value mapping"""
|
|
201
|
+
for key, prop in self.__class__.rattribute_map.items():
|
|
202
|
+
yield key, getattr(self, prop)
|
|
203
|
+
|
|
204
|
+
def get(self, key, default=None):
|
|
205
|
+
"""Get the value of the provided json property, or default"""
|
|
206
|
+
key = self._map_key(key, raise_on_error=False)
|
|
207
|
+
if key:
|
|
208
|
+
return getattr(self, key, default)
|
|
209
|
+
return default
|
|
210
|
+
|
|
211
|
+
def _map_key(self, key, raise_on_error=True):
|
|
212
|
+
result = self.__class__.rattribute_map.get(key)
|
|
213
|
+
if result is None:
|
|
214
|
+
if raise_on_error:
|
|
215
|
+
raise AttributeError('Invalid attribute name: {}'.format(key))
|
|
216
|
+
return None
|
|
217
|
+
return '_' + result
|
flywheel/models/mixins.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
|
|
1
3
|
from .. import util
|
|
2
4
|
from ..finder import Finder
|
|
3
5
|
from .gear_mixin import GearMixin
|
|
4
6
|
|
|
5
|
-
|
|
6
7
|
class ContextBase(object):
|
|
7
8
|
def __init__(self):
|
|
8
9
|
self._context = None
|
|
@@ -48,6 +49,9 @@ class ContainerBase(object):
|
|
|
48
49
|
fname = fname.replace("file", file_group)
|
|
49
50
|
fn = getattr(self.__context, fname, None)
|
|
50
51
|
if fn:
|
|
52
|
+
if len(args) > 1 and isinstance(args[1], str):
|
|
53
|
+
if "/" in args[1]:
|
|
54
|
+
warnings.warn(f"Filename {args[1]} contains disallowed character '/', methods on this object will fail. Rename file with fw.move_file")
|
|
51
55
|
return fn(*args, **kwargs)
|
|
52
56
|
return None
|
|
53
57
|
|
|
@@ -129,14 +133,41 @@ class ContainerBase(object):
|
|
|
129
133
|
|
|
130
134
|
|
|
131
135
|
class InfoMethods(object):
|
|
136
|
+
|
|
137
|
+
def _warn_if_keys_will_be_sanitized(self, key):
|
|
138
|
+
"""Log warning message for offending characters"""
|
|
139
|
+
if "$" in key:
|
|
140
|
+
warnings.warn(f"Key {key} contains '$', which will be replaced with '-'.")
|
|
141
|
+
if "." in key:
|
|
142
|
+
warnings.warn(f"Key {key} contains '.', which will be replaced with '_'.")
|
|
143
|
+
|
|
144
|
+
def _check_list(self, values):
|
|
145
|
+
"""Check list values"""
|
|
146
|
+
for val in values:
|
|
147
|
+
if isinstance(val, list):
|
|
148
|
+
self._check_list(val)
|
|
149
|
+
elif isinstance(val, dict):
|
|
150
|
+
self._validate_keys(val)
|
|
151
|
+
|
|
152
|
+
def _validate_keys(self, body):
|
|
153
|
+
"""Recursively check for keys that contain offending characters"""
|
|
154
|
+
for key, values in body.items():
|
|
155
|
+
self._warn_if_keys_will_be_sanitized(key)
|
|
156
|
+
if isinstance(values, dict):
|
|
157
|
+
self._validate_keys(values)
|
|
158
|
+
elif isinstance(values, list):
|
|
159
|
+
self._check_list(values)
|
|
160
|
+
|
|
132
161
|
def replace_info(self, info):
|
|
133
162
|
"""Fully replace this object's info with the provided value"""
|
|
163
|
+
self._validate_keys(info)
|
|
134
164
|
return self._invoke_container_api("replace_{}_info", self.id, info)
|
|
135
165
|
|
|
136
166
|
def update_info(self, *args, **kwargs):
|
|
137
167
|
"""Update the info with the passed in arguments"""
|
|
138
168
|
# Could either pass a dictionary or kwargs values
|
|
139
169
|
body = util.params_to_dict("update_info", args, kwargs)
|
|
170
|
+
self._validate_keys(body)
|
|
140
171
|
return self._invoke_container_api("set_{}_info", self.id, body)
|
|
141
172
|
|
|
142
173
|
def delete_info(self, *args):
|
|
@@ -663,7 +694,7 @@ class FileMixin(ContainerBase):
|
|
|
663
694
|
|
|
664
695
|
def get_zip_info(self, **kwargs):
|
|
665
696
|
"""Get zip member information for this file"""
|
|
666
|
-
return self.
|
|
697
|
+
return self._invoke_container_api("get_file_zip_info", self.file_id, **kwargs)
|
|
667
698
|
|
|
668
699
|
def download_zip_member(self, member_path, dest_file, **kwargs):
|
|
669
700
|
"""Download file's zip member to the given path"""
|
flywheel/models/report_usage.py
CHANGED
|
@@ -32,8 +32,11 @@ class ReportUsage(object):
|
|
|
32
32
|
'group_compute_ms': 'int',
|
|
33
33
|
'total_compute_ms': 'int',
|
|
34
34
|
'center_storage_byte_day': 'int',
|
|
35
|
+
'center_storage_soft_deleted_byte_day': 'int',
|
|
35
36
|
'group_storage_byte_day': 'int',
|
|
37
|
+
'group_storage_soft_deleted_byte_day': 'int',
|
|
36
38
|
'total_storage_byte_day': 'int',
|
|
39
|
+
'total_storage_soft_deleted_byte_day': 'int',
|
|
37
40
|
'days': 'int'
|
|
38
41
|
}
|
|
39
42
|
|
|
@@ -49,8 +52,11 @@ class ReportUsage(object):
|
|
|
49
52
|
'group_compute_ms': 'group_compute_ms',
|
|
50
53
|
'total_compute_ms': 'total_compute_ms',
|
|
51
54
|
'center_storage_byte_day': 'center_storage_byte_day',
|
|
55
|
+
'center_storage_soft_deleted_byte_day': 'center_storage_soft_deleted_byte_day',
|
|
52
56
|
'group_storage_byte_day': 'group_storage_byte_day',
|
|
57
|
+
'group_storage_soft_deleted_byte_day': 'group_storage_soft_deleted_byte_day',
|
|
53
58
|
'total_storage_byte_day': 'total_storage_byte_day',
|
|
59
|
+
'total_storage_soft_deleted_byte_day': 'total_storage_soft_deleted_byte_day',
|
|
54
60
|
'days': 'days'
|
|
55
61
|
}
|
|
56
62
|
|
|
@@ -66,12 +72,15 @@ class ReportUsage(object):
|
|
|
66
72
|
'group_compute_ms': 'group_compute_ms',
|
|
67
73
|
'total_compute_ms': 'total_compute_ms',
|
|
68
74
|
'center_storage_byte_day': 'center_storage_byte_day',
|
|
75
|
+
'center_storage_soft_deleted_byte_day': 'center_storage_soft_deleted_byte_day',
|
|
69
76
|
'group_storage_byte_day': 'group_storage_byte_day',
|
|
77
|
+
'group_storage_soft_deleted_byte_day': 'group_storage_soft_deleted_byte_day',
|
|
70
78
|
'total_storage_byte_day': 'total_storage_byte_day',
|
|
79
|
+
'total_storage_soft_deleted_byte_day': 'total_storage_soft_deleted_byte_day',
|
|
71
80
|
'days': 'days'
|
|
72
81
|
}
|
|
73
82
|
|
|
74
|
-
def __init__(self, project_label=None, group='', project=None, session_count=0, center_job_count=0, group_job_count=0, total_job_count=0, center_compute_ms=0, group_compute_ms=0, total_compute_ms=0, center_storage_byte_day=0, group_storage_byte_day=0, total_storage_byte_day=0, days=0): # noqa: E501
|
|
83
|
+
def __init__(self, project_label=None, group='', project=None, session_count=0, center_job_count=0, group_job_count=0, total_job_count=0, center_compute_ms=0, group_compute_ms=0, total_compute_ms=0, center_storage_byte_day=0, center_storage_soft_deleted_byte_day=0, group_storage_byte_day=0, group_storage_soft_deleted_byte_day=0, total_storage_byte_day=0, total_storage_soft_deleted_byte_day=0, days=0): # noqa: E501
|
|
75
84
|
"""ReportUsage - a model defined in Swagger"""
|
|
76
85
|
super(ReportUsage, self).__init__()
|
|
77
86
|
|
|
@@ -86,8 +95,11 @@ class ReportUsage(object):
|
|
|
86
95
|
self._group_compute_ms = None
|
|
87
96
|
self._total_compute_ms = None
|
|
88
97
|
self._center_storage_byte_day = None
|
|
98
|
+
self._center_storage_soft_deleted_byte_day = None
|
|
89
99
|
self._group_storage_byte_day = None
|
|
100
|
+
self._group_storage_soft_deleted_byte_day = None
|
|
90
101
|
self._total_storage_byte_day = None
|
|
102
|
+
self._total_storage_soft_deleted_byte_day = None
|
|
91
103
|
self._days = None
|
|
92
104
|
self.discriminator = None
|
|
93
105
|
self.alt_discriminator = None
|
|
@@ -114,10 +126,16 @@ class ReportUsage(object):
|
|
|
114
126
|
self.total_compute_ms = total_compute_ms
|
|
115
127
|
if center_storage_byte_day is not None:
|
|
116
128
|
self.center_storage_byte_day = center_storage_byte_day
|
|
129
|
+
if center_storage_soft_deleted_byte_day is not None:
|
|
130
|
+
self.center_storage_soft_deleted_byte_day = center_storage_soft_deleted_byte_day
|
|
117
131
|
if group_storage_byte_day is not None:
|
|
118
132
|
self.group_storage_byte_day = group_storage_byte_day
|
|
133
|
+
if group_storage_soft_deleted_byte_day is not None:
|
|
134
|
+
self.group_storage_soft_deleted_byte_day = group_storage_soft_deleted_byte_day
|
|
119
135
|
if total_storage_byte_day is not None:
|
|
120
136
|
self.total_storage_byte_day = total_storage_byte_day
|
|
137
|
+
if total_storage_soft_deleted_byte_day is not None:
|
|
138
|
+
self.total_storage_soft_deleted_byte_day = total_storage_soft_deleted_byte_day
|
|
121
139
|
if days is not None:
|
|
122
140
|
self.days = days
|
|
123
141
|
|
|
@@ -374,6 +392,29 @@ class ReportUsage(object):
|
|
|
374
392
|
|
|
375
393
|
self._center_storage_byte_day = center_storage_byte_day
|
|
376
394
|
|
|
395
|
+
@property
|
|
396
|
+
def center_storage_soft_deleted_byte_day(self):
|
|
397
|
+
"""Gets the center_storage_soft_deleted_byte_day of this ReportUsage.
|
|
398
|
+
|
|
399
|
+
The storage, in byte-days, used by soft deleted files originating from devices or center-designated gears in this project during the month (billable to the center)
|
|
400
|
+
|
|
401
|
+
:return: The center_storage_soft_deleted_byte_day of this ReportUsage.
|
|
402
|
+
:rtype: int
|
|
403
|
+
"""
|
|
404
|
+
return self._center_storage_soft_deleted_byte_day
|
|
405
|
+
|
|
406
|
+
@center_storage_soft_deleted_byte_day.setter
|
|
407
|
+
def center_storage_soft_deleted_byte_day(self, center_storage_soft_deleted_byte_day):
|
|
408
|
+
"""Sets the center_storage_soft_deleted_byte_day of this ReportUsage.
|
|
409
|
+
|
|
410
|
+
The storage, in byte-days, used by soft deleted files originating from devices or center-designated gears in this project during the month (billable to the center)
|
|
411
|
+
|
|
412
|
+
:param center_storage_soft_deleted_byte_day: The center_storage_soft_deleted_byte_day of this ReportUsage. # noqa: E501
|
|
413
|
+
:type: int
|
|
414
|
+
"""
|
|
415
|
+
|
|
416
|
+
self._center_storage_soft_deleted_byte_day = center_storage_soft_deleted_byte_day
|
|
417
|
+
|
|
377
418
|
@property
|
|
378
419
|
def group_storage_byte_day(self):
|
|
379
420
|
"""Gets the group_storage_byte_day of this ReportUsage.
|
|
@@ -397,6 +438,29 @@ class ReportUsage(object):
|
|
|
397
438
|
|
|
398
439
|
self._group_storage_byte_day = group_storage_byte_day
|
|
399
440
|
|
|
441
|
+
@property
|
|
442
|
+
def group_storage_soft_deleted_byte_day(self):
|
|
443
|
+
"""Gets the group_storage_soft_deleted_byte_day of this ReportUsage.
|
|
444
|
+
|
|
445
|
+
The storage, in byte-days, used by soft deleted files not originating from devices or non-center-designated (lab) gears in this project during the month (billable to the group)
|
|
446
|
+
|
|
447
|
+
:return: The group_storage_soft_deleted_byte_day of this ReportUsage.
|
|
448
|
+
:rtype: int
|
|
449
|
+
"""
|
|
450
|
+
return self._group_storage_soft_deleted_byte_day
|
|
451
|
+
|
|
452
|
+
@group_storage_soft_deleted_byte_day.setter
|
|
453
|
+
def group_storage_soft_deleted_byte_day(self, group_storage_soft_deleted_byte_day):
|
|
454
|
+
"""Sets the group_storage_soft_deleted_byte_day of this ReportUsage.
|
|
455
|
+
|
|
456
|
+
The storage, in byte-days, used by soft deleted files not originating from devices or non-center-designated (lab) gears in this project during the month (billable to the group)
|
|
457
|
+
|
|
458
|
+
:param group_storage_soft_deleted_byte_day: The group_storage_soft_deleted_byte_day of this ReportUsage. # noqa: E501
|
|
459
|
+
:type: int
|
|
460
|
+
"""
|
|
461
|
+
|
|
462
|
+
self._group_storage_soft_deleted_byte_day = group_storage_soft_deleted_byte_day
|
|
463
|
+
|
|
400
464
|
@property
|
|
401
465
|
def total_storage_byte_day(self):
|
|
402
466
|
"""Gets the total_storage_byte_day of this ReportUsage.
|
|
@@ -420,6 +484,29 @@ class ReportUsage(object):
|
|
|
420
484
|
|
|
421
485
|
self._total_storage_byte_day = total_storage_byte_day
|
|
422
486
|
|
|
487
|
+
@property
|
|
488
|
+
def total_storage_soft_deleted_byte_day(self):
|
|
489
|
+
"""Gets the total_storage_soft_deleted_byte_day of this ReportUsage.
|
|
490
|
+
|
|
491
|
+
The total storage, in byte-days, used by soft deleted files in this project during the month
|
|
492
|
+
|
|
493
|
+
:return: The total_storage_soft_deleted_byte_day of this ReportUsage.
|
|
494
|
+
:rtype: int
|
|
495
|
+
"""
|
|
496
|
+
return self._total_storage_soft_deleted_byte_day
|
|
497
|
+
|
|
498
|
+
@total_storage_soft_deleted_byte_day.setter
|
|
499
|
+
def total_storage_soft_deleted_byte_day(self, total_storage_soft_deleted_byte_day):
|
|
500
|
+
"""Sets the total_storage_soft_deleted_byte_day of this ReportUsage.
|
|
501
|
+
|
|
502
|
+
The total storage, in byte-days, used by soft deleted files in this project during the month
|
|
503
|
+
|
|
504
|
+
:param total_storage_soft_deleted_byte_day: The total_storage_soft_deleted_byte_day of this ReportUsage. # noqa: E501
|
|
505
|
+
:type: int
|
|
506
|
+
"""
|
|
507
|
+
|
|
508
|
+
self._total_storage_soft_deleted_byte_day = total_storage_soft_deleted_byte_day
|
|
509
|
+
|
|
423
510
|
@property
|
|
424
511
|
def days(self):
|
|
425
512
|
"""Gets the days of this ReportUsage.
|