flywheel-sdk 19.5.0__py2.py3-none-any.whl → 20.0.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.
@@ -4183,7 +4183,7 @@ class AcquisitionsApi(object):
4183
4183
  auth_settings = ['ApiKey'] # noqa: E501
4184
4184
 
4185
4185
  return self.api_client.call_api(
4186
- '/acquisitions/{cid}/files/{filename}/classification', 'POST',
4186
+ '/acquisitions/{cid}/files/{filename}/classification', 'PATCH',
4187
4187
  path_params,
4188
4188
  query_params,
4189
4189
  header_params,
@@ -4306,7 +4306,7 @@ class AcquisitionsApi(object):
4306
4306
  auth_settings = ['ApiKey'] # noqa: E501
4307
4307
 
4308
4308
  return self.api_client.call_api(
4309
- '/acquisitions/{cid}/files/{filename}/info', 'POST',
4309
+ '/acquisitions/{cid}/files/{filename}/info', 'PATCH',
4310
4310
  path_params,
4311
4311
  query_params,
4312
4312
  header_params,
@@ -4421,7 +4421,7 @@ class AcquisitionsApi(object):
4421
4421
  auth_settings = ['ApiKey'] # noqa: E501
4422
4422
 
4423
4423
  return self.api_client.call_api(
4424
- '/acquisitions/{cid}/info', 'POST',
4424
+ '/acquisitions/{cid}/info', 'PATCH',
4425
4425
  path_params,
4426
4426
  query_params,
4427
4427
  header_params,
@@ -2415,7 +2415,7 @@ class AnalysesApi(object):
2415
2415
  auth_settings = ['ApiKey'] # noqa: E501
2416
2416
 
2417
2417
  return self.api_client.call_api(
2418
- '/analyses/{container_id}/info', 'POST',
2418
+ '/analyses/{container_id}/info', 'PATCH',
2419
2419
  path_params,
2420
2420
  query_params,
2421
2421
  header_params,
@@ -3218,7 +3218,7 @@ class CollectionsApi(object):
3218
3218
  auth_settings = ['ApiKey'] # noqa: E501
3219
3219
 
3220
3220
  return self.api_client.call_api(
3221
- '/collections/{cid}/files/{filename}/classification', 'POST',
3221
+ '/collections/{cid}/files/{filename}/classification', 'PATCH',
3222
3222
  path_params,
3223
3223
  query_params,
3224
3224
  header_params,
@@ -3341,7 +3341,7 @@ class CollectionsApi(object):
3341
3341
  auth_settings = ['ApiKey'] # noqa: E501
3342
3342
 
3343
3343
  return self.api_client.call_api(
3344
- '/collections/{cid}/files/{filename}/info', 'POST',
3344
+ '/collections/{cid}/files/{filename}/info', 'PATCH',
3345
3345
  path_params,
3346
3346
  query_params,
3347
3347
  header_params,
@@ -3456,7 +3456,7 @@ class CollectionsApi(object):
3456
3456
  auth_settings = ['ApiKey'] # noqa: E501
3457
3457
 
3458
3458
  return self.api_client.call_api(
3459
- '/collections/{cid}/info', 'POST',
3459
+ '/collections/{cid}/info', 'PATCH',
3460
3460
  path_params,
3461
3461
  query_params,
3462
3462
  header_params,
@@ -3961,7 +3961,7 @@ class ContainersApi(object):
3961
3961
  auth_settings = ['ApiKey'] # noqa: E501
3962
3962
 
3963
3963
  return self.api_client.call_api(
3964
- '/containers/{cid}/files/{filename}/classification', 'POST',
3964
+ '/containers/{cid}/files/{filename}/classification', 'PATCH',
3965
3965
  path_params,
3966
3966
  query_params,
3967
3967
  header_params,
@@ -4084,7 +4084,7 @@ class ContainersApi(object):
4084
4084
  auth_settings = ['ApiKey'] # noqa: E501
4085
4085
 
4086
4086
  return self.api_client.call_api(
4087
- '/containers/{cid}/files/{filename}/info', 'POST',
4087
+ '/containers/{cid}/files/{filename}/info', 'PATCH',
4088
4088
  path_params,
4089
4089
  query_params,
4090
4090
  header_params,
@@ -4199,7 +4199,7 @@ class ContainersApi(object):
4199
4199
  auth_settings = ['ApiKey'] # noqa: E501
4200
4200
 
4201
4201
  return self.api_client.call_api(
4202
- '/containers/{cid}/info', 'POST',
4202
+ '/containers/{cid}/info', 'PATCH',
4203
4203
  path_params,
4204
4204
  query_params,
4205
4205
  header_params,
@@ -335,6 +335,117 @@ class DevicesApi(object):
335
335
  _request_out=params.get('_request_out'),
336
336
  collection_formats=collection_formats)
337
337
 
338
+ def generate_key(self, device_id, **kwargs): # noqa: E501
339
+ """Generate device API key
340
+
341
+ Regenerate device API key
342
+ This method makes a synchronous HTTP request by default.
343
+
344
+ :param str device_id: (required)
345
+ :param ApiKeyInputWithOptionalLabel body:
346
+ :param bool async_: Perform the request asynchronously
347
+ :return: object
348
+ """
349
+ ignore_simplified_return_value = kwargs.pop('_ignore_simplified_return_value', False)
350
+ kwargs['_return_http_data_only'] = True
351
+
352
+ if kwargs.get('async_'):
353
+ return self.generate_key_with_http_info(device_id, **kwargs) # noqa: E501
354
+ else:
355
+ (data) = self.generate_key_with_http_info(device_id, **kwargs) # noqa: E501
356
+ if (
357
+ data
358
+ and hasattr(data, 'return_value')
359
+ and not ignore_simplified_return_value
360
+ ):
361
+ return data.return_value()
362
+ return data
363
+
364
+
365
+ def generate_key_with_http_info(self, device_id, **kwargs): # noqa: E501
366
+ """Generate device API key
367
+
368
+ Regenerate device API key
369
+ This method makes a synchronous HTTP request by default.
370
+
371
+ :param str device_id: (required)
372
+ :param ApiKeyInputWithOptionalLabel body:
373
+ :param bool async_: Perform the request asynchronously
374
+ :return: object
375
+ """
376
+
377
+ all_params = ['device_id','body',] # noqa: E501
378
+ all_params.append('async_')
379
+ all_params.append('_return_http_data_only')
380
+ all_params.append('_preload_content')
381
+ all_params.append('_request_timeout')
382
+ all_params.append('_request_out')
383
+
384
+ params = locals()
385
+ for key, val in six.iteritems(params['kwargs']):
386
+ if key not in all_params:
387
+ raise TypeError(
388
+ "Got an unexpected keyword argument '%s'"
389
+ " to method generate_key" % key
390
+ )
391
+ params[key] = val
392
+ del params['kwargs']
393
+ # verify the required parameter 'device_id' is set
394
+ if ('device_id' not in params or
395
+ params['device_id'] is None):
396
+ raise ValueError("Missing the required parameter `device_id` when calling `generate_key`") # noqa: E501
397
+
398
+ collection_formats = {}
399
+
400
+ path_params = {}
401
+ if 'device_id' in params:
402
+ path_params['device_id'] = params['device_id'] # noqa: E501
403
+
404
+ query_params = []
405
+
406
+ header_params = {}
407
+
408
+ form_params = []
409
+ local_var_files = {}
410
+
411
+ body_params = None
412
+ if 'body' in params:
413
+ if 'ApiKeyInputWithOptionalLabel'.startswith('union'):
414
+ body_type = type(params['body'])
415
+ if getattr(body_type, 'positional_to_model', None):
416
+ body_params = body_type.positional_to_model(params['body'])
417
+ else:
418
+ body_params = params['body']
419
+ else:
420
+ body_params = flywheel.models.ApiKeyInputWithOptionalLabel.positional_to_model(params['body'])
421
+ # HTTP header `Accept`
422
+ header_params['Accept'] = self.api_client.select_header_accept(
423
+ ['application/json']) # noqa: E501
424
+
425
+ # HTTP header `Content-Type`
426
+ header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501
427
+ ['application/json']) # noqa: E501
428
+
429
+ # Authentication setting
430
+ auth_settings = ['ApiKey'] # noqa: E501
431
+
432
+ return self.api_client.call_api(
433
+ '/devices/{device_id}/key', 'POST',
434
+ path_params,
435
+ query_params,
436
+ header_params,
437
+ body=body_params,
438
+ post_params=form_params,
439
+ files=local_var_files,
440
+ response_type='object', # noqa: E501
441
+ auth_settings=auth_settings,
442
+ async_=params.get('async_'),
443
+ _return_http_data_only=params.get('_return_http_data_only'),
444
+ _preload_content=params.get('_preload_content', True),
445
+ _request_timeout=params.get('_request_timeout'),
446
+ _request_out=params.get('_request_out'),
447
+ collection_formats=collection_formats)
448
+
338
449
  def get_all_devices(self, **kwargs): # noqa: E501
339
450
  """List all devices.
340
451
 
@@ -842,9 +953,8 @@ class DevicesApi(object):
842
953
  collection_formats=collection_formats)
843
954
 
844
955
  def regenerate_key(self, device_id, **kwargs): # noqa: E501
845
- """Regenerate device API key
956
+ """This method is DEPRECATED, use generate_key instead
846
957
 
847
- Regenerate device API key
848
958
  This method makes a synchronous HTTP request by default.
849
959
 
850
960
  :param str device_id: (required)
@@ -869,9 +979,8 @@ class DevicesApi(object):
869
979
 
870
980
 
871
981
  def regenerate_key_with_http_info(self, device_id, **kwargs): # noqa: E501
872
- """Regenerate device API key
982
+ """This method is DEPRECATED, use generate_key instead
873
983
 
874
- Regenerate device API key
875
984
  This method makes a synchronous HTTP request by default.
876
985
 
877
986
  :param str device_id: (required)
@@ -936,7 +1045,7 @@ class DevicesApi(object):
936
1045
  auth_settings = ['ApiKey'] # noqa: E501
937
1046
 
938
1047
  return self.api_client.call_api(
939
- '/devices/{device_id}/key', 'POST',
1048
+ '/devices/{device_id}/key-regen', 'POST',
940
1049
  path_params,
941
1050
  query_params,
942
1051
  header_params,
flywheel/api/jobs_api.py CHANGED
@@ -687,6 +687,217 @@ class JobsApi(object):
687
687
  _request_out=params.get('_request_out'),
688
688
  collection_formats=collection_formats)
689
689
 
690
+ def engine_complete_job(self, job_id, body, **kwargs): # noqa: E501
691
+ """Complete a job, with information.
692
+
693
+ This method makes a synchronous HTTP request by default.
694
+
695
+ :param str job_id: (required)
696
+ :param JobComplete body: (required)
697
+ :param str job_ticket_id: ticket id for job completion
698
+ :param bool async_: Perform the request asynchronously
699
+ :return: None
700
+ """
701
+ ignore_simplified_return_value = kwargs.pop('_ignore_simplified_return_value', False)
702
+ kwargs['_return_http_data_only'] = True
703
+
704
+ if kwargs.get('async_'):
705
+ return self.engine_complete_job_with_http_info(job_id, body, **kwargs) # noqa: E501
706
+ else:
707
+ (data) = self.engine_complete_job_with_http_info(job_id, body, **kwargs) # noqa: E501
708
+ if (
709
+ data
710
+ and hasattr(data, 'return_value')
711
+ and not ignore_simplified_return_value
712
+ ):
713
+ return data.return_value()
714
+ return data
715
+
716
+
717
+ def engine_complete_job_with_http_info(self, job_id, body, **kwargs): # noqa: E501
718
+ """Complete a job, with information.
719
+
720
+ This method makes a synchronous HTTP request by default.
721
+
722
+ :param str job_id: (required)
723
+ :param JobComplete body: (required)
724
+ :param str job_ticket_id: ticket id for job completion
725
+ :param bool async_: Perform the request asynchronously
726
+ :return: None
727
+ """
728
+
729
+ all_params = ['job_id','body','job_ticket_id',] # noqa: E501
730
+ all_params.append('async_')
731
+ all_params.append('_return_http_data_only')
732
+ all_params.append('_preload_content')
733
+ all_params.append('_request_timeout')
734
+ all_params.append('_request_out')
735
+
736
+ params = locals()
737
+ for key, val in six.iteritems(params['kwargs']):
738
+ if key not in all_params:
739
+ raise TypeError(
740
+ "Got an unexpected keyword argument '%s'"
741
+ " to method engine_complete_job" % key
742
+ )
743
+ params[key] = val
744
+ del params['kwargs']
745
+ # verify the required parameter 'job_id' is set
746
+ if ('job_id' not in params or
747
+ params['job_id'] is None):
748
+ raise ValueError("Missing the required parameter `job_id` when calling `engine_complete_job`") # noqa: E501
749
+ # verify the required parameter 'body' is set
750
+ if ('body' not in params or
751
+ params['body'] is None):
752
+ raise ValueError("Missing the required parameter `body` when calling `engine_complete_job`") # noqa: E501
753
+
754
+ collection_formats = {}
755
+
756
+ path_params = {}
757
+ if 'job_id' in params:
758
+ path_params['job_id'] = params['job_id'] # noqa: E501
759
+
760
+ query_params = []
761
+ if 'job_ticket_id' in params:
762
+ query_params.append(('job_ticket_id', params['job_ticket_id'])) # noqa: E501
763
+
764
+ header_params = {}
765
+
766
+ form_params = []
767
+ local_var_files = {}
768
+
769
+ body_params = None
770
+ if 'body' in params:
771
+ if 'JobComplete'.startswith('union'):
772
+ body_type = type(params['body'])
773
+ if getattr(body_type, 'positional_to_model', None):
774
+ body_params = body_type.positional_to_model(params['body'])
775
+ else:
776
+ body_params = params['body']
777
+ else:
778
+ body_params = flywheel.models.JobComplete.positional_to_model(params['body'])
779
+ # HTTP header `Accept`
780
+ header_params['Accept'] = self.api_client.select_header_accept(
781
+ ['application/json']) # noqa: E501
782
+
783
+ # HTTP header `Content-Type`
784
+ header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501
785
+ ['application/json']) # noqa: E501
786
+
787
+ # Authentication setting
788
+ auth_settings = ['ApiKey'] # noqa: E501
789
+
790
+ return self.api_client.call_api(
791
+ '/jobs/{job_id}/complete', 'PUT',
792
+ path_params,
793
+ query_params,
794
+ header_params,
795
+ body=body_params,
796
+ post_params=form_params,
797
+ files=local_var_files,
798
+ response_type=None, # noqa: E501
799
+ auth_settings=auth_settings,
800
+ async_=params.get('async_'),
801
+ _return_http_data_only=params.get('_return_http_data_only'),
802
+ _preload_content=params.get('_preload_content', True),
803
+ _request_timeout=params.get('_request_timeout'),
804
+ _request_out=params.get('_request_out'),
805
+ collection_formats=collection_formats)
806
+
807
+ def engine_prepare_complete_job(self, job_id, **kwargs): # noqa: E501
808
+ """Create a ticket for completing a job, with id and status.
809
+
810
+ This method makes a synchronous HTTP request by default.
811
+
812
+ :param str job_id: (required)
813
+ :param bool async_: Perform the request asynchronously
814
+ :return: JobTicketOutput
815
+ """
816
+ ignore_simplified_return_value = kwargs.pop('_ignore_simplified_return_value', False)
817
+ kwargs['_return_http_data_only'] = True
818
+
819
+ if kwargs.get('async_'):
820
+ return self.engine_prepare_complete_job_with_http_info(job_id, **kwargs) # noqa: E501
821
+ else:
822
+ (data) = self.engine_prepare_complete_job_with_http_info(job_id, **kwargs) # noqa: E501
823
+ if (
824
+ data
825
+ and hasattr(data, 'return_value')
826
+ and not ignore_simplified_return_value
827
+ ):
828
+ return data.return_value()
829
+ return data
830
+
831
+
832
+ def engine_prepare_complete_job_with_http_info(self, job_id, **kwargs): # noqa: E501
833
+ """Create a ticket for completing a job, with id and status.
834
+
835
+ This method makes a synchronous HTTP request by default.
836
+
837
+ :param str job_id: (required)
838
+ :param bool async_: Perform the request asynchronously
839
+ :return: JobTicketOutput
840
+ """
841
+
842
+ all_params = ['job_id',] # noqa: E501
843
+ all_params.append('async_')
844
+ all_params.append('_return_http_data_only')
845
+ all_params.append('_preload_content')
846
+ all_params.append('_request_timeout')
847
+ all_params.append('_request_out')
848
+
849
+ params = locals()
850
+ for key, val in six.iteritems(params['kwargs']):
851
+ if key not in all_params:
852
+ raise TypeError(
853
+ "Got an unexpected keyword argument '%s'"
854
+ " to method engine_prepare_complete_job" % key
855
+ )
856
+ params[key] = val
857
+ del params['kwargs']
858
+ # verify the required parameter 'job_id' is set
859
+ if ('job_id' not in params or
860
+ params['job_id'] is None):
861
+ raise ValueError("Missing the required parameter `job_id` when calling `engine_prepare_complete_job`") # noqa: E501
862
+
863
+ collection_formats = {}
864
+
865
+ path_params = {}
866
+ if 'job_id' in params:
867
+ path_params['job_id'] = params['job_id'] # noqa: E501
868
+
869
+ query_params = []
870
+
871
+ header_params = {}
872
+
873
+ form_params = []
874
+ local_var_files = {}
875
+
876
+ body_params = None
877
+ # HTTP header `Accept`
878
+ header_params['Accept'] = self.api_client.select_header_accept(
879
+ ['application/json']) # noqa: E501
880
+
881
+ # Authentication setting
882
+ auth_settings = ['ApiKey'] # noqa: E501
883
+
884
+ return self.api_client.call_api(
885
+ '/jobs/{job_id}/prepare-complete', 'PUT',
886
+ path_params,
887
+ query_params,
888
+ header_params,
889
+ body=body_params,
890
+ post_params=form_params,
891
+ files=local_var_files,
892
+ response_type='JobTicketOutput', # noqa: E501
893
+ auth_settings=auth_settings,
894
+ async_=params.get('async_'),
895
+ _return_http_data_only=params.get('_return_http_data_only'),
896
+ _preload_content=params.get('_preload_content', True),
897
+ _request_timeout=params.get('_request_timeout'),
898
+ _request_out=params.get('_request_out'),
899
+ collection_formats=collection_formats)
900
+
690
901
  def get_all_jobs(self, **kwargs): # noqa: E501
691
902
  """Return all jobs
692
903
 
@@ -5773,7 +5773,7 @@ class ProjectsApi(object):
5773
5773
  auth_settings = ['ApiKey'] # noqa: E501
5774
5774
 
5775
5775
  return self.api_client.call_api(
5776
- '/projects/{cid}/files/{filename}/classification', 'POST',
5776
+ '/projects/{cid}/files/{filename}/classification', 'PATCH',
5777
5777
  path_params,
5778
5778
  query_params,
5779
5779
  header_params,
@@ -5896,7 +5896,7 @@ class ProjectsApi(object):
5896
5896
  auth_settings = ['ApiKey'] # noqa: E501
5897
5897
 
5898
5898
  return self.api_client.call_api(
5899
- '/projects/{cid}/files/{filename}/info', 'POST',
5899
+ '/projects/{cid}/files/{filename}/info', 'PATCH',
5900
5900
  path_params,
5901
5901
  query_params,
5902
5902
  header_params,
@@ -6011,7 +6011,7 @@ class ProjectsApi(object):
6011
6011
  auth_settings = ['ApiKey'] # noqa: E501
6012
6012
 
6013
6013
  return self.api_client.call_api(
6014
- '/projects/{cid}/info', 'POST',
6014
+ '/projects/{cid}/info', 'PATCH',
6015
6015
  path_params,
6016
6016
  query_params,
6017
6017
  header_params,
@@ -4463,7 +4463,7 @@ class SessionsApi(object):
4463
4463
  auth_settings = ['ApiKey'] # noqa: E501
4464
4464
 
4465
4465
  return self.api_client.call_api(
4466
- '/sessions/{cid}/files/{filename}/classification', 'POST',
4466
+ '/sessions/{cid}/files/{filename}/classification', 'PATCH',
4467
4467
  path_params,
4468
4468
  query_params,
4469
4469
  header_params,
@@ -4586,7 +4586,7 @@ class SessionsApi(object):
4586
4586
  auth_settings = ['ApiKey'] # noqa: E501
4587
4587
 
4588
4588
  return self.api_client.call_api(
4589
- '/sessions/{cid}/files/{filename}/info', 'POST',
4589
+ '/sessions/{cid}/files/{filename}/info', 'PATCH',
4590
4590
  path_params,
4591
4591
  query_params,
4592
4592
  header_params,
@@ -4701,7 +4701,7 @@ class SessionsApi(object):
4701
4701
  auth_settings = ['ApiKey'] # noqa: E501
4702
4702
 
4703
4703
  return self.api_client.call_api(
4704
- '/sessions/{cid}/info', 'POST',
4704
+ '/sessions/{cid}/info', 'PATCH',
4705
4705
  path_params,
4706
4706
  query_params,
4707
4707
  header_params,
@@ -4419,7 +4419,7 @@ class SubjectsApi(object):
4419
4419
  auth_settings = ['ApiKey'] # noqa: E501
4420
4420
 
4421
4421
  return self.api_client.call_api(
4422
- '/subjects/{cid}/files/{filename}/classification', 'POST',
4422
+ '/subjects/{cid}/files/{filename}/classification', 'PATCH',
4423
4423
  path_params,
4424
4424
  query_params,
4425
4425
  header_params,
@@ -4542,7 +4542,7 @@ class SubjectsApi(object):
4542
4542
  auth_settings = ['ApiKey'] # noqa: E501
4543
4543
 
4544
4544
  return self.api_client.call_api(
4545
- '/subjects/{cid}/files/{filename}/info', 'POST',
4545
+ '/subjects/{cid}/files/{filename}/info', 'PATCH',
4546
4546
  path_params,
4547
4547
  query_params,
4548
4548
  header_params,
@@ -4657,7 +4657,7 @@ class SubjectsApi(object):
4657
4657
  auth_settings = ['ApiKey'] # noqa: E501
4658
4658
 
4659
4659
  return self.api_client.call_api(
4660
- '/subjects/{cid}/info', 'POST',
4660
+ '/subjects/{cid}/info', 'PATCH',
4661
4661
  path_params,
4662
4662
  query_params,
4663
4663
  header_params,
flywheel/api/users_api.py CHANGED
@@ -1873,7 +1873,7 @@ class UsersApi(object):
1873
1873
  auth_settings = ['ApiKey'] # noqa: E501
1874
1874
 
1875
1875
  return self.api_client.call_api(
1876
- '/users/self/info', 'POST',
1876
+ '/users/self/info', 'PATCH',
1877
1877
  path_params,
1878
1878
  query_params,
1879
1879
  header_params,
flywheel/api_client.py CHANGED
@@ -84,7 +84,7 @@ class ApiClient(object):
84
84
  self.default_query_params = []
85
85
  self.cookie = cookie
86
86
  # Set default User-Agent.
87
- self.user_agent = 'Swagger-Codegen/19.5.0/python'
87
+ self.user_agent = 'Swagger-Codegen/20.0.0/python'
88
88
  self.last_response = None
89
89
  self._version_check_fn = None
90
90
  self._context = context
flywheel/configuration.py CHANGED
@@ -252,6 +252,6 @@ class Configuration(six.with_metaclass(TypeWithDefault, object)):
252
252
  return "Python SDK Debug Report:\n"\
253
253
  "OS: {env}\n"\
254
254
  "Python Version: {pyversion}\n"\
255
- "Version of the API: sdk-push.7b015124\n"\
256
- "SDK Package Version: 19.5.0".\
255
+ "Version of the API: 20.0.0\n"\
256
+ "SDK Package Version: 20.0.0".\
257
257
  format(env=sys.platform, pyversion=sys.version)
flywheel/flywheel.py CHANGED
@@ -40,7 +40,7 @@ from flywheel.view_builder import ViewBuilder
40
40
  from flywheel.finder import Finder
41
41
  import flywheel.api
42
42
 
43
- SDK_VERSION = "19.5.0"
43
+ SDK_VERSION = "20.0.0"
44
44
 
45
45
  def config_from_api_key(api_key):
46
46
  parts = api_key.split(':')
@@ -2817,6 +2817,19 @@ class Flywheel:
2817
2817
  return self.devices_api.delete_device_key(device_id, key_id, **kwargs)
2818
2818
 
2819
2819
 
2820
+ def generate_key(self, device_id, **kwargs): # noqa: E501
2821
+ """Generate device API key
2822
+
2823
+ Regenerate device API key
2824
+
2825
+ :param str device_id: (required)
2826
+ :param ApiKeyInputWithOptionalLabel body:
2827
+ :param bool async_: Perform the request asynchronously
2828
+ :return: object
2829
+ """
2830
+ return self.devices_api.generate_key(device_id, **kwargs)
2831
+
2832
+
2820
2833
  def get_all_devices(self, **kwargs): # noqa: E501
2821
2834
  """List all devices.
2822
2835
 
@@ -2882,9 +2895,7 @@ class Flywheel:
2882
2895
 
2883
2896
 
2884
2897
  def regenerate_key(self, device_id, **kwargs): # noqa: E501
2885
- """Regenerate device API key
2886
-
2887
- Regenerate device API key
2898
+ """This method is DEPRECATED, use generate_key instead
2888
2899
 
2889
2900
  :param str device_id: (required)
2890
2901
  :param ApiKeyInputWithOptionalLabel body:
@@ -3860,6 +3871,28 @@ class Flywheel:
3860
3871
  return self.jobs_api.determine_provider_for_job(body, **kwargs)
3861
3872
 
3862
3873
 
3874
+ def engine_complete_job(self, job_id, body, **kwargs): # noqa: E501
3875
+ """Complete a job, with information.
3876
+
3877
+ :param str job_id: (required)
3878
+ :param JobComplete body: (required)
3879
+ :param str job_ticket_id: ticket id for job completion
3880
+ :param bool async_: Perform the request asynchronously
3881
+ :return: None
3882
+ """
3883
+ return self.jobs_api.engine_complete_job(job_id, body, **kwargs)
3884
+
3885
+
3886
+ def engine_prepare_complete_job(self, job_id, **kwargs): # noqa: E501
3887
+ """Create a ticket for completing a job, with id and status.
3888
+
3889
+ :param str job_id: (required)
3890
+ :param bool async_: Perform the request asynchronously
3891
+ :return: JobTicketOutput
3892
+ """
3893
+ return self.jobs_api.engine_prepare_complete_job(job_id, **kwargs)
3894
+
3895
+
3863
3896
  def get_all_jobs(self, **kwargs): # noqa: E501
3864
3897
  """Return all jobs
3865
3898
 
@@ -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: sdk-push.7b015124
9
+ OpenAPI spec version: 20.0.0
10
10
 
11
11
  Generated by: https://github.com/swagger-api/swagger-codegen.git
12
12
  """
@@ -21,31 +21,38 @@ import six
21
21
  class DeletedResult(object):
22
22
 
23
23
  swagger_types = {
24
- 'deleted': 'int'
24
+ 'deleted': 'int',
25
+ 'not_found': 'int'
25
26
  }
26
27
 
27
28
  attribute_map = {
28
- 'deleted': 'deleted'
29
+ 'deleted': 'deleted',
30
+ 'not_found': 'not_found'
29
31
  }
30
32
 
31
33
  rattribute_map = {
32
- 'deleted': 'deleted'
34
+ 'deleted': 'deleted',
35
+ 'not_found': 'not_found'
33
36
  }
34
37
 
35
- def __init__(self, deleted=None): # noqa: E501
38
+ def __init__(self, deleted=None, not_found=0): # noqa: E501
36
39
  """DeletedResult - a model defined in Swagger"""
37
40
  super(DeletedResult, self).__init__()
38
41
 
39
42
  self._deleted = None
43
+ self._not_found = None
40
44
  self.discriminator = None
41
45
  self.alt_discriminator = None
42
46
 
43
47
  self.deleted = deleted
48
+ if not_found is not None:
49
+ self.not_found = not_found
44
50
 
45
51
  @property
46
52
  def deleted(self):
47
53
  """Gets the deleted of this DeletedResult.
48
54
 
55
+ The number of containers that were deleted
49
56
 
50
57
  :return: The deleted of this DeletedResult.
51
58
  :rtype: int
@@ -56,6 +63,7 @@ class DeletedResult(object):
56
63
  def deleted(self, deleted):
57
64
  """Sets the deleted of this DeletedResult.
58
65
 
66
+ The number of containers that were deleted
59
67
 
60
68
  :param deleted: The deleted of this DeletedResult. # noqa: E501
61
69
  :type: int
@@ -63,6 +71,29 @@ class DeletedResult(object):
63
71
 
64
72
  self._deleted = deleted
65
73
 
74
+ @property
75
+ def not_found(self):
76
+ """Gets the not_found of this DeletedResult.
77
+
78
+ The number of containers that were specified by ID to be deleted, but were not found because they don't exist or were already deleted
79
+
80
+ :return: The not_found of this DeletedResult.
81
+ :rtype: int
82
+ """
83
+ return self._not_found
84
+
85
+ @not_found.setter
86
+ def not_found(self, not_found):
87
+ """Sets the not_found of this DeletedResult.
88
+
89
+ The number of containers that were specified by ID to be deleted, but were not found because they don't exist or were already deleted
90
+
91
+ :param not_found: The not_found of this DeletedResult. # noqa: E501
92
+ :type: int
93
+ """
94
+
95
+ self._not_found = not_found
96
+
66
97
 
67
98
  @staticmethod
68
99
  def positional_to_model(value):
@@ -53,6 +53,7 @@ class Features(object):
53
53
  'multipart_signed_url': 'bool',
54
54
  'multiproject': 'bool',
55
55
  'ohif_multi_subject_view': 'bool',
56
+ 'ohif_meteor': 'bool',
56
57
  'ohif_react': 'bool',
57
58
  'ohif_react_beta': 'bool',
58
59
  'ohif_slice_order': 'str',
@@ -117,6 +118,7 @@ class Features(object):
117
118
  'multipart_signed_url': 'multipart_signed_url',
118
119
  'multiproject': 'multiproject',
119
120
  'ohif_multi_subject_view': 'ohif_multi_subject_view',
121
+ 'ohif_meteor': 'ohif_meteor',
120
122
  'ohif_react': 'ohif_react',
121
123
  'ohif_react_beta': 'ohif_react_beta',
122
124
  'ohif_slice_order': 'ohif_slice_order',
@@ -181,6 +183,7 @@ class Features(object):
181
183
  'multipart_signed_url': 'multipart_signed_url',
182
184
  'multiproject': 'multiproject',
183
185
  'ohif_multi_subject_view': 'ohif_multi_subject_view',
186
+ 'ohif_meteor': 'ohif_meteor',
184
187
  'ohif_react': 'ohif_react',
185
188
  'ohif_react_beta': 'ohif_react_beta',
186
189
  'ohif_slice_order': 'ohif_slice_order',
@@ -212,7 +215,7 @@ class Features(object):
212
215
  'legacy_dicom_uploader': 'legacy_dicom_uploader'
213
216
  }
214
217
 
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
218
+ 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_meteor=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
219
  """Features - a model defined in Swagger"""
217
220
  super(Features, self).__init__()
218
221
 
@@ -248,6 +251,7 @@ class Features(object):
248
251
  self._multipart_signed_url = None
249
252
  self._multiproject = None
250
253
  self._ohif_multi_subject_view = None
254
+ self._ohif_meteor = None
251
255
  self._ohif_react = None
252
256
  self._ohif_react_beta = None
253
257
  self._ohif_slice_order = None
@@ -344,6 +348,8 @@ class Features(object):
344
348
  self.multiproject = multiproject
345
349
  if ohif_multi_subject_view is not None:
346
350
  self.ohif_multi_subject_view = ohif_multi_subject_view
351
+ if ohif_meteor is not None:
352
+ self.ohif_meteor = ohif_meteor
347
353
  if ohif_react is not None:
348
354
  self.ohif_react = ohif_react
349
355
  if ohif_react_beta is not None:
@@ -1075,6 +1081,27 @@ class Features(object):
1075
1081
 
1076
1082
  self._ohif_multi_subject_view = ohif_multi_subject_view
1077
1083
 
1084
+ @property
1085
+ def ohif_meteor(self):
1086
+ """Gets the ohif_meteor of this Features.
1087
+
1088
+
1089
+ :return: The ohif_meteor of this Features.
1090
+ :rtype: bool
1091
+ """
1092
+ return self._ohif_meteor
1093
+
1094
+ @ohif_meteor.setter
1095
+ def ohif_meteor(self, ohif_meteor):
1096
+ """Sets the ohif_meteor of this Features.
1097
+
1098
+
1099
+ :param ohif_meteor: The ohif_meteor of this Features. # noqa: E501
1100
+ :type: bool
1101
+ """
1102
+
1103
+ self._ohif_meteor = ohif_meteor
1104
+
1078
1105
  @property
1079
1106
  def ohif_react(self):
1080
1107
  """Gets the ohif_react of this Features.
flywheel/models/mixins.py CHANGED
@@ -272,6 +272,30 @@ class AnalysisMethods(object):
272
272
 
273
273
 
274
274
  class FileMethods(object):
275
+ def _warn_if_keys_will_be_sanitized(self, key):
276
+ """Log warning message for offending characters"""
277
+ if "$" in key:
278
+ warnings.warn(f"Key {key} contains '$', which will be replaced with '-'.")
279
+ if "." in key:
280
+ warnings.warn(f"Key {key} contains '.', which will be replaced with '_'.")
281
+
282
+ def _check_list(self, values):
283
+ """Check list values"""
284
+ for val in values:
285
+ if isinstance(val, list):
286
+ self._check_list(val)
287
+ elif isinstance(val, dict):
288
+ self._validate_keys(val)
289
+
290
+ def _validate_keys(self, body):
291
+ """Recursively check for keys that contain offending characters"""
292
+ for key, values in body.items():
293
+ self._warn_if_keys_will_be_sanitized(key)
294
+ if isinstance(values, dict):
295
+ self._validate_keys(values)
296
+ elif isinstance(values, list):
297
+ self._check_list(values)
298
+
275
299
  def upload_file(self, file, **kwargs):
276
300
  """Upload a file to a container"""
277
301
  return self._invoke_file_api("upload_file_to_{}", self.id, file, **kwargs)
@@ -303,12 +327,14 @@ class FileMethods(object):
303
327
 
304
328
  def replace_file_info(self, file_name, info, **kwargs):
305
329
  """Fully replace this file's info with the provided value"""
330
+ self._validate_keys(info)
306
331
  return self._invoke_file_api("replace_{}_file_info", self.id, file_name, info, **kwargs)
307
332
 
308
333
  def update_file_info(self, file_name, *args, **kwargs):
309
334
  """Update the file's info with the passed in arguments"""
310
335
  # Could either pass a dictionary or kwargs values
311
336
  body = util.params_to_dict("update_file_info", args, kwargs)
337
+ self._validate_keys(body)
312
338
  return self._invoke_file_api("set_{}_file_info", self.id, file_name, body)
313
339
 
314
340
  def delete_file_info(self, file_name, *args, **kwargs):
flywheel/rest.py CHANGED
@@ -41,7 +41,14 @@ logger = logging.getLogger(__name__)
41
41
 
42
42
  CONNECT_TIMEOUT = int(os.getenv('FLYWHEEL_SDK_CONNECT_TIMEOUT', 10))
43
43
  REQUEST_TIMEOUT = int(os.getenv('FLYWHEEL_SDK_REQUEST_TIMEOUT', 60))
44
- BACKOFF_FACTOR = float(os.getenv('FLYWHEEL_SDK_BACKOFF_FACTOR', 0.5))
44
+
45
+ # Retry logic
46
+ # Total number of times to retry requests that fail due to transient HTTP errors
47
+ TOTAL_RETRIES = int(os.getenv('FLYWHEEL_SDK_TOTAL_RETRIES', 7))
48
+ # Backoff factor--after the initial instant retry, the client will start waiting for
49
+ # {backoff factor} * (2 ** ({number of previous retries})) seconds before each retry
50
+ # So the second retry will happen after waiting for 2 * {backoff_factor} seconds
51
+ BACKOFF_FACTOR = float(os.getenv('FLYWHEEL_SDK_BACKOFF_FACTOR', 7.5 / 4)) / 2
45
52
 
46
53
  class RESTResponse(io.IOBase):
47
54
 
@@ -87,9 +94,10 @@ class RESTClientObject(object):
87
94
  503, # service unavailable
88
95
  504, # gateway timeout
89
96
  }
90
- # retries at 0.0s, 1s, 3s, 7s, 15s after the request by default
97
+ # retries at 0.0s, 1.875s, 3.75s, 7.5s, 15s, 30s, 60s after the request by default
91
98
  # sleeptime is 0 on 1st retry, then backoff * 2^(retry-1)
92
- retry = urllib3.util.Retry(total=5, backoff_factor=BACKOFF_FACTOR,
99
+ retry = urllib3.util.Retry(total=TOTAL_RETRIES,
100
+ backoff_factor=BACKOFF_FACTOR,
93
101
  status_forcelist=transient_http_errors)
94
102
  adapter = requests.adapters.HTTPAdapter(max_retries=retry)
95
103
  self.session.mount('http://', adapter)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: flywheel-sdk
3
- Version: 19.5.0
3
+ Version: 20.0.0
4
4
  Summary: Flywheel SDK
5
5
  Home-page:
6
6
  Author-email: support@flywheel.io
@@ -16,6 +16,13 @@ Requires-Dist: python-dateutil>=2.8.1
16
16
  Requires-Dist: packaging
17
17
  Requires-Dist: requests>=2.18.4
18
18
  Requires-Dist: requests-toolbelt
19
+ Dynamic: author-email
20
+ Dynamic: description
21
+ Dynamic: keywords
22
+ Dynamic: license
23
+ Dynamic: project-url
24
+ Dynamic: requires-dist
25
+ Dynamic: summary
19
26
 
20
27
 
21
28
  Flywheel SDK
@@ -1,52 +1,52 @@
1
1
  flywheel/__init__.py,sha256=LE9B1Aey0HGrusRPQc8yTl105-kI9h5yEqxUL6CrQzE,44975
2
- flywheel/api_client.py,sha256=RnoEoehs-FN_dlhBJzETyQfIteBf5BMw3v1lqD-GIk8,29570
2
+ flywheel/api_client.py,sha256=FIDo0XT31Qk2kgqNqktxSu8Os1Ske1B6UGyvUcgd_IY,29570
3
3
  flywheel/client.py,sha256=LMvn2aSdtn-waCpXzux8FKJxEB0469SJg5ZNnB5BqTc,10476
4
- flywheel/configuration.py,sha256=tKSjImgktMzR0AUZQ0Ryihn9djFUP2-lbSYCRlJyQT8,8650
4
+ flywheel/configuration.py,sha256=-14hALEh_BnIRuQGww4lY59EHB53mwc-xwF0TC7z_IM,8639
5
5
  flywheel/drone_login.py,sha256=8nELIBYBJMuPHQ0zdrGjWB20C3OTZbxpFVyxWmQ0kr0,2229
6
6
  flywheel/file_spec.py,sha256=0BnFgyH0qsDxuupJG5_g9LX2cLq7JxRiSODN3HdI-ak,2220
7
7
  flywheel/finder.py,sha256=ueECCweO48TTAJXudzh3xBbqyhV-Vbzt1NnPUSqEU9U,6739
8
- flywheel/flywheel.py,sha256=O7oC9TlZd2IxpZxk0wktow0dKL2dlJZi-i1Nbbw7TLQ,395085
8
+ flywheel/flywheel.py,sha256=MAkbTDhq4Cm7mssTXEbPSPLwijUQWhS7gWNnYD7nXQw,396272
9
9
  flywheel/gear_context.py,sha256=cFJs8cC_on6v184HVUTXSSVS9y5ee73QN0lCkPTQ5jk,13701
10
10
  flywheel/partial_reader.py,sha256=SkMgwaGZeeVaN7f9dzmVitBFnQv8ARLJgEaQP36l92s,1222
11
- flywheel/rest.py,sha256=hRPcmGLghBkiZ06jyFEE39iEdP0-6o4pDWj2Ocl7mSc,13119
11
+ flywheel/rest.py,sha256=Luybe_pjqufXgw3LHSwPrSWFKrrAH6UU3IvTtSeCoAQ,13604
12
12
  flywheel/util.py,sha256=_97fv5qRvxvSFi1eHsli4VszoOBhYMhtC26hz_ukrEA,2198
13
13
  flywheel/view_builder.py,sha256=0hGDvjiljUuyuHezawx-TSO5Nv885No6rGf3lb3qvxo,17758
14
14
  flywheel/api/__init__.py,sha256=S0erMpSONSRh8RUbADUNnAczZwUhe-Lt9s8E4TMGH5M,1760
15
- flywheel/api/acquisitions_api.py,sha256=Kjc5jdEQlXUyn3aH6-I2bqoDVlxfXANzcoVysVQMZ6Y,213201
16
- flywheel/api/analyses_api.py,sha256=0MqBGFQukb-Mm542MOS-Fc764XnkeyNsnin9OcXEFcU,117699
15
+ flywheel/api/acquisitions_api.py,sha256=4VG8y2Iqq9V-G8d--WN3FIg6EHKo642_3oyBCIV6lmA,213204
16
+ flywheel/api/analyses_api.py,sha256=fgnZx3PzJcKcqoGJcDqPC52q-bpiGWNPvFQcXhw-xtI,117700
17
17
  flywheel/api/audit_trail_api.py,sha256=dFinVdTCqO1TsCoRndTT1qqV61J2FWMyYS2FqQwqP54,21492
18
18
  flywheel/api/auth_api.py,sha256=w6wscqpCv-Rc9n9Q1KogyeaByM9YhiDNl4upvErV674,3703
19
19
  flywheel/api/batch_api.py,sha256=zpeo0U6ubk-AxlCQ_j-rTmVuKpjJue9icFq-zBP5ZVo,23287
20
20
  flywheel/api/bulk_api.py,sha256=kSIQUYBHS37yDKdM1TMNYNLhXTrIkfTYznRhtVuEUS0,4776
21
21
  flywheel/api/change_log_api.py,sha256=Nln-mDIsCRLcsDCBDo8e9sYv1jTCf6ql_JX9SfP5-ds,10003
22
- flywheel/api/collections_api.py,sha256=pufAm_gzR6doPFhrMqLYOl_v3m3yPt3klgpa69IPInc,165385
22
+ flywheel/api/collections_api.py,sha256=rXBTYe9L949ZyOgCu1xQTM91Titv-fxV8tthK4xzLEM,165388
23
23
  flywheel/api/config_api.py,sha256=rBURhYVyT22BpOjDIQ_2iJ3UOnfspgjowQnz2cKND_s,9584
24
- flywheel/api/containers_api.py,sha256=2Dzb0Xmc_SUbHf2HUFGTnhLen_p-yqhPnkqtsvj4h0M,202808
24
+ flywheel/api/containers_api.py,sha256=fReONdto78giDqvhU5EjIVf1M4nM5KaOw3X_UvGeR9c,202811
25
25
  flywheel/api/data_view_executions_api.py,sha256=vdQ3vRbebC2InZp0s7WUMGxJjRiq_aaXLrYIHi2lk4s,21544
26
26
  flywheel/api/dataexplorer_api.py,sha256=Qqu916GYB1oMYLshp6zagQtaszkAFGrbT6RnmNyRhLU,37594
27
- flywheel/api/devices_api.py,sha256=BXJt_dJdVQ94We1EYdmrCziAb6OerBGg7IkUlJVQDHk,39380
27
+ flywheel/api/devices_api.py,sha256=VsclxSE_yMSAvST5uxEKMBXNqq_eKJjI6XI4S3RKsas,43568
28
28
  flywheel/api/dimse_api.py,sha256=rTPcy5CTFFnpx1YWSuhsWMNjW4c9nTV85Q8EY1QcGN8,29974
29
29
  flywheel/api/download_api.py,sha256=fFOA8DgRq1yknYQ6YZC26fcaZDhGIDnGuWMjvYD_Ans,10590
30
30
  flywheel/api/files_api.py,sha256=fE8KWWhCsp79I5c8FqVoei6dh5YMnvbtjhZxo8aaK-I,57924
31
31
  flywheel/api/gears_api.py,sha256=Pu1bWBrlDgXHDsgsyIOJxPl2_6oxQvtm2JVaVOJ667c,73128
32
32
  flywheel/api/groups_api.py,sha256=XplP1S_fo9zVDrLTZpv0dXzzbnMnNumxfJpk-Tfoy9I,113596
33
- flywheel/api/jobs_api.py,sha256=VMu1r6k1gng9Sg1b0IlDaIfC1A7rvdqn3gHVXXd39-k,73963
33
+ flywheel/api/jobs_api.py,sha256=Af6fEmkCUylsJaMxx5LUvTTYlQnWpLWH2Nk0wLSk_g8,82096
34
34
  flywheel/api/jupyterlab_servers_api.py,sha256=FiwtzKL6SClFXiBnzbf5dtjHCjonMQ3jB7FHlrFNGQM,9180
35
35
  flywheel/api/modalities_api.py,sha256=GyqCWO1_iQ7RUgvKD6KeAOrPx6O7Q3XxxGsqksBBJEM,20862
36
36
  flywheel/api/packfiles_api.py,sha256=3IQHwnmjCYBw7L4gJIxnZwpGdIT6LqEZPb-eIHG3t8o,3847
37
- flywheel/api/projects_api.py,sha256=sTEl6wNlMUJokkik_PwYcTQ4Cy4AtjrtzjRRH9312A0,330414
37
+ flywheel/api/projects_api.py,sha256=ZAL2uJzx1ObIyiQFxNh8c6TldfeJJdfIZ1Ez0HhPl5o,330417
38
38
  flywheel/api/reports_api.py,sha256=6WW5CroopwNrw6GBE0_R34stBWbyqUXgRoyiHkAAZE4,36251
39
39
  flywheel/api/resolve_api.py,sha256=6yuXytZnhpFBPz0x5TN1B57jtRn9kuSqth6WtXWSYaw,11603
40
40
  flywheel/api/roles_api.py,sha256=2FQCdRZgg-bZDVP8Nv4JOb4UYMbGcX0Cstc3x6Cff1Y,20698
41
- flywheel/api/sessions_api.py,sha256=zABPloe1ISaKyGVC8SqzUyrw-YHm4zaeJ-6j2W08_y0,223474
41
+ flywheel/api/sessions_api.py,sha256=pr7qtOFyoE1bSRcMuGB_ApaWASkVn3v_ko5ZzYz-VnM,223477
42
42
  flywheel/api/site_api.py,sha256=6skw2iKO5JAO9AVaTJZCuusBaECbuFDMiiPKE8tIHHY,57379
43
- flywheel/api/subjects_api.py,sha256=oRhSwCZFr8bXeCw3JNkpHVlI_1JrGWIMA09KwNX4Ae8,227081
43
+ flywheel/api/subjects_api.py,sha256=5dckrcHqcGmUmEj2BENfoSZmKqTx5NDOIuhxaQYa544,227084
44
44
  flywheel/api/tree_api.py,sha256=NZ_1QbOIhPodTqx82nmgPvLfxCB7NwmTf7oPgzxgEbI,12337
45
45
  flywheel/api/uids_api.py,sha256=mFStWRKbdgymR_FYDHq8EsOiTfDKjz2XEcWT1XQUYtQ,4946
46
46
  flywheel/api/upload_api.py,sha256=emrzAmurhGb-uBI7Ewckbn5DyP9LBkfn6OI1zxhKnb8,38540
47
- flywheel/api/users_api.py,sha256=-eAz4T9PEhvG0OEOOos3BXLGxs7C8tcI8IjKXknNGEA,85396
47
+ flywheel/api/users_api.py,sha256=t6CgyTGKdr-ojDi_wW3Zpgw3XhiUE7shDXxKLK3__ZY,85397
48
48
  flywheel/api/views_api.py,sha256=ZbPYA_sOQ9qnOjkOUeioV0v08VPbsuuOnMP3EBySEVY,44375
49
- flywheel/models/__init__.py,sha256=Z38LQQcTl_xzNGGGnDB9JgPr_B2LO7EWTWZcYW9YhY8,42862
49
+ flywheel/models/__init__.py,sha256=BvuP0mmn158B30aLcxCMGZVzWdOvylb5VfxuA4zeAkI,42851
50
50
  flywheel/models/access_level.py,sha256=zSgO2gWTTSo-p1v49ilz3Q5ZizZ7DESA5P6Ur67fgX0,575
51
51
  flywheel/models/access_permission.py,sha256=-IYmy-yb8zecmGZx7iE0bhZW7PvuWpm3zAHr2FwCyLI,5336
52
52
  flywheel/models/access_permission_output.py,sha256=faCnvyMYozmSVSlLFYMdJw84hQc3ugxx7LH2JzBfnoE,5202
@@ -206,7 +206,7 @@ flywheel/models/data_view_zip_filter_spec.py,sha256=60_tTjdrqUw0d-QLl4pHjKMFu1Ya
206
206
  flywheel/models/default_flywheel_role.py,sha256=-AjXC5pWQXf7OmTDAWcGvaadd49ofv4HFuLdpj9iJKU,583
207
207
  flywheel/models/deid_log_skip_reason.py,sha256=KtHQjBrER4gEk8vXd1cjvuJDQ7LajqwgHuDgWDAMs74,615
208
208
  flywheel/models/deleted_file.py,sha256=VrwLIAu1316bVu6gk41czolPCmZnvmUm_4AdKSh9iM0,11647
209
- flywheel/models/deleted_result.py,sha256=CY_hRxhWw7ZItqHYfKrRa6qVBjxCq-wyCTZDJTmGZAo,4514
209
+ flywheel/models/deleted_result.py,sha256=3FAnMsLOoT20mch6-wNRSvFOkEJbetm45_oR7CHEorE,5584
210
210
  flywheel/models/deprecated_action.py,sha256=iuUrtOSr6r2iW-s6dK7YVFf3e-QfGySLE9CmO2sdbD8,602
211
211
  flywheel/models/destination_container_type.py,sha256=o8DNvTa4ccx3bC4S8YCJjyhYy3L9D_NpZhjePz6x4Zk,618
212
212
  flywheel/models/device.py,sha256=fsDxVAPsaUqjFhe8Q_VKnHc3fiZsMXBxyjxCtLWUuo4,10649
@@ -240,7 +240,7 @@ flywheel/models/egress_provider_id.py,sha256=1dKUprJXQii7w_sdUr_hB_PebJDkLgZt9yj
240
240
  flywheel/models/exchange_storage.py,sha256=J5ki23OZ78IU-snirVzcbXd6Jjuek4FjwHGG1FTlIzM,6719
241
241
  flywheel/models/executor_info.py,sha256=nbvDWU_yEi_xwpF52y186xEgKkuKSjmBLGOGqmVA_Wg,9216
242
242
  flywheel/models/export_templates.py,sha256=fAW_tPW2tBT1DhuzF4nS7GwSgvqHkFLED--Swl4ndco,5495
243
- flywheel/models/features.py,sha256=OtdhrBCjI8cgTpWhSx17LfGH_KTtrmiuZPQP9Gu-9G4,52792
243
+ flywheel/models/features.py,sha256=FvH5534pWpfdpcqNO_RFW4TOYdbFP0duFYkd--J1vl8,53507
244
244
  flywheel/models/field_change.py,sha256=H0QoBOIJuzgBsryMejJnhu5Vzwa2FpZ2ChQV7NnAgLU,7027
245
245
  flywheel/models/field_change_log_document.py,sha256=-G5oxplkcregMMHywMAXuexl5x21PRe5X2SQxaIaAj0,7091
246
246
  flywheel/models/file.py,sha256=SkL9vxFcvaTwveNQ8TO-33CnJ_EJttLSLf9iFInhSgw,27877
@@ -438,7 +438,7 @@ flywheel/models/master_subject_code_dob_input.py,sha256=IWAPS_rR-i7MP2c-yUafiz3M
438
438
  flywheel/models/master_subject_code_input.py,sha256=z1iYzK7jJsXxMBaJnwHLd7O7q1LiRx2cUGFrpiuH6bM,8106
439
439
  flywheel/models/master_subject_code_output.py,sha256=ejSXHL6KRfh2L94bsiFrIjxNHfuct9QLXmFi-dT9tV0,4620
440
440
  flywheel/models/matched_acquisition_output.py,sha256=whZ27xZHKL2ngnQKWI4cxQHcvwtTXFH9zg2NL-hi5Sk,14157
441
- flywheel/models/mixins.py,sha256=-lRQWitOoWqcdhTP1uX09sYaxAvaDdIW3AuT49PABMw,28580
441
+ flywheel/models/mixins.py,sha256=wWgiSEr1dYnXNBhdcKBYStxgI0T74DTnE-l9rKliNk8,29608
442
442
  flywheel/models/ml_set_filter.py,sha256=s7BWp9gbVv8waLmSmJQT5treYHp1y4YT_LL-BqB3_nM,5176
443
443
  flywheel/models/ml_type.py,sha256=lNe0BiH5vu_USajw5HMMa8sKdfjk9ZYWjZlL5yFlX10,602
444
444
  flywheel/models/modality.py,sha256=gsPmZbGNbXLONNqBdS--JKTla9rhljoToxVP17vUX0s,6690
@@ -706,8 +706,8 @@ flywheel/models/virus_scan_state.py,sha256=zBmk7x3ZoDhEozIeD-Gw7CEkU7yWYKFMFXklL
706
706
  flywheel/models/work_in_progress_features.py,sha256=dZ_cJTztcU3wPIUKptwZzb7hdv9mo27wXfWgolkJa1k,3944
707
707
  flywheel/models/zipfile_info.py,sha256=8ivqs0rTQaiC8KirTaK_WqSGkLvCndI_58dylOBKwa4,5243
708
708
  flywheel/models/zipfile_member_info.py,sha256=zAg9wRUeYXbz6bvXdo4xYFHtvv9eRSCjvyaTrQ3zvN4,6346
709
- flywheel_sdk-19.5.0.dist-info/LICENSE.txt,sha256=F_Wp8b8L-2vc2xxcRr402gN1gg-2y0p2oG8aSj3hdMA,1057
710
- flywheel_sdk-19.5.0.dist-info/METADATA,sha256=k_vIo21DhyS35qTFYFrJEj9FDpo_rrnA2ib9gzxDcXM,955
711
- flywheel_sdk-19.5.0.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
712
- flywheel_sdk-19.5.0.dist-info/top_level.txt,sha256=BQ1fXyhiudo2To7zMNcPOOGa6qtZuhx0V_I7CO-vU6w,9
713
- flywheel_sdk-19.5.0.dist-info/RECORD,,
709
+ flywheel_sdk-20.0.0.dist-info/LICENSE.txt,sha256=F_Wp8b8L-2vc2xxcRr402gN1gg-2y0p2oG8aSj3hdMA,1057
710
+ flywheel_sdk-20.0.0.dist-info/METADATA,sha256=nLmNC46e3x5g7IIlRz3Zu0fBdpwStG7af-FdfVzab38,1094
711
+ flywheel_sdk-20.0.0.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
712
+ flywheel_sdk-20.0.0.dist-info/top_level.txt,sha256=BQ1fXyhiudo2To7zMNcPOOGa6qtZuhx0V_I7CO-vU6w,9
713
+ flywheel_sdk-20.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any