flywheel-sdk 21.2.0__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.
Files changed (772) hide show
  1. flywheel/__init__.py +784 -0
  2. flywheel/api/__init__.py +46 -0
  3. flywheel/api/acquisitions_api.py +5014 -0
  4. flywheel/api/analyses_api.py +3848 -0
  5. flywheel/api/audit_trail_api.py +568 -0
  6. flywheel/api/auth_api.py +121 -0
  7. flywheel/api/batch_api.py +630 -0
  8. flywheel/api/bulk_api.py +140 -0
  9. flywheel/api/change_log_api.py +254 -0
  10. flywheel/api/collections_api.py +3913 -0
  11. flywheel/api/config_api.py +299 -0
  12. flywheel/api/container_tasks_api.py +137 -0
  13. flywheel/api/container_type_api.py +137 -0
  14. flywheel/api/containers_api.py +4784 -0
  15. flywheel/api/custom_filters_api.py +466 -0
  16. flywheel/api/data_view_executions_api.py +549 -0
  17. flywheel/api/dataexplorer_api.py +1192 -0
  18. flywheel/api/devices_api.py +1071 -0
  19. flywheel/api/dimse_api.py +814 -0
  20. flywheel/api/download_api.py +261 -0
  21. flywheel/api/files_api.py +1868 -0
  22. flywheel/api/form_responses_api.py +703 -0
  23. flywheel/api/gears_api.py +1875 -0
  24. flywheel/api/groups_api.py +2829 -0
  25. flywheel/api/jobs_api.py +2320 -0
  26. flywheel/api/jupyterlab_servers_api.py +245 -0
  27. flywheel/api/modalities_api.py +562 -0
  28. flywheel/api/packfiles_api.py +121 -0
  29. flywheel/api/projects_api.py +7820 -0
  30. flywheel/api/protocols_api.py +757 -0
  31. flywheel/api/reports_api.py +1057 -0
  32. flywheel/api/resolve_api.py +276 -0
  33. flywheel/api/roles_api.py +563 -0
  34. flywheel/api/sessions_api.py +5296 -0
  35. flywheel/api/site_api.py +1552 -0
  36. flywheel/api/staffing_pools_api.py +677 -0
  37. flywheel/api/subjects_api.py +5349 -0
  38. flywheel/api/tasks_api.py +897 -0
  39. flywheel/api/tree_api.py +266 -0
  40. flywheel/api/uids_api.py +140 -0
  41. flywheel/api/upload_api.py +842 -0
  42. flywheel/api/users_api.py +2142 -0
  43. flywheel/api/views_api.py +1089 -0
  44. flywheel/api_client.py +748 -0
  45. flywheel/client.py +291 -0
  46. flywheel/configuration.py +308 -0
  47. flywheel/drone_login.py +65 -0
  48. flywheel/file_spec.py +67 -0
  49. flywheel/finder.py +168 -0
  50. flywheel/flywheel.py +9867 -0
  51. flywheel/gear_context.py +374 -0
  52. flywheel/models/__init__.py +726 -0
  53. flywheel/models/access_level.py +30 -0
  54. flywheel/models/access_permission.py +197 -0
  55. flywheel/models/access_permission_output.py +192 -0
  56. flywheel/models/access_permission_update.py +166 -0
  57. flywheel/models/access_type.py +54 -0
  58. flywheel/models/accumulator.py +33 -0
  59. flywheel/models/acquisition.py +25 -0
  60. flywheel/models/acquisition_container_output.py +34 -0
  61. flywheel/models/acquisition_copy_input.py +223 -0
  62. flywheel/models/acquisition_input.py +297 -0
  63. flywheel/models/acquisition_list_output.py +767 -0
  64. flywheel/models/acquisition_modify_input.py +299 -0
  65. flywheel/models/acquisition_node.py +35 -0
  66. flywheel/models/acquisition_output.py +767 -0
  67. flywheel/models/acquisition_parents.py +241 -0
  68. flywheel/models/acquisition_template_options.py +275 -0
  69. flywheel/models/acquisition_upsert_input.py +383 -0
  70. flywheel/models/acquisition_upsert_output.py +243 -0
  71. flywheel/models/action.py +91 -0
  72. flywheel/models/adhoc_analysis_input.py +247 -0
  73. flywheel/models/analysis.py +25 -0
  74. flywheel/models/analysis_container_output.py +34 -0
  75. flywheel/models/analysis_files_create_ticket_output.py +241 -0
  76. flywheel/models/analysis_input.py +310 -0
  77. flywheel/models/analysis_input_legacy.py +25 -0
  78. flywheel/models/analysis_list_output.py +680 -0
  79. flywheel/models/analysis_list_output_inflated_job.py +650 -0
  80. flywheel/models/analysis_modify_input.py +191 -0
  81. flywheel/models/analysis_node.py +35 -0
  82. flywheel/models/analysis_output.py +683 -0
  83. flywheel/models/analysis_output_inflated_job.py +674 -0
  84. flywheel/models/analysis_parents.py +270 -0
  85. flywheel/models/analysis_update.py +25 -0
  86. flywheel/models/api_key_input_with_optional_label.py +191 -0
  87. flywheel/models/api_key_output.py +297 -0
  88. flywheel/models/as_storage.py +298 -0
  89. flywheel/models/assignee.py +192 -0
  90. flywheel/models/assignee_type.py +29 -0
  91. flywheel/models/audit_trail_report.py +486 -0
  92. flywheel/models/audit_trail_report_status.py +32 -0
  93. flywheel/models/auth0_auth_out.py +323 -0
  94. flywheel/models/auth0_options_out.py +319 -0
  95. flywheel/models/auth_out.py +357 -0
  96. flywheel/models/auth_session_output.py +272 -0
  97. flywheel/models/avatars.py +218 -0
  98. flywheel/models/aws_creds.py +191 -0
  99. flywheel/models/aws_storage.py +354 -0
  100. flywheel/models/azure_creds.py +190 -0
  101. flywheel/models/base_aet.py +245 -0
  102. flywheel/models/base_compute.py +426 -0
  103. flywheel/models/batch.py +360 -0
  104. flywheel/models/batch_cancel_output.py +36 -0
  105. flywheel/models/batch_create_filters.py +220 -0
  106. flywheel/models/batch_job_analysis_input.py +281 -0
  107. flywheel/models/batch_jobs_proposal_input.py +36 -0
  108. flywheel/models/batch_proposal.py +25 -0
  109. flywheel/models/batch_proposal_detail.py +36 -0
  110. flywheel/models/batch_proposal_input.py +25 -0
  111. flywheel/models/body.py +36 -0
  112. flywheel/models/body_regenerate_key_api_devices_device_id_key_post.py +25 -0
  113. flywheel/models/body_region.py +46 -0
  114. flywheel/models/bookmark.py +189 -0
  115. flywheel/models/bulk_move_input.py +272 -0
  116. flywheel/models/bulk_move_sessions.py +25 -0
  117. flywheel/models/callbacks_virus_scan_input.py +36 -0
  118. flywheel/models/cancelled_batch_output.py +163 -0
  119. flywheel/models/catalog_list_output.py +407 -0
  120. flywheel/models/central_out.py +299 -0
  121. flywheel/models/change.py +379 -0
  122. flywheel/models/change_log_container_type.py +38 -0
  123. flywheel/models/change_log_document.py +245 -0
  124. flywheel/models/change_method.py +33 -0
  125. flywheel/models/classic_batch_job_output.py +352 -0
  126. flywheel/models/classic_batch_job_output_inflated_jobs.py +379 -0
  127. flywheel/models/classic_batch_proposal_input.py +388 -0
  128. flywheel/models/classic_batch_proposal_output.py +471 -0
  129. flywheel/models/classification_add_delete.py +36 -0
  130. flywheel/models/classification_replace.py +36 -0
  131. flywheel/models/classification_update_input.py +36 -0
  132. flywheel/models/cohort.py +29 -0
  133. flywheel/models/collection.py +25 -0
  134. flywheel/models/collection_container_output.py +32 -0
  135. flywheel/models/collection_input.py +217 -0
  136. flywheel/models/collection_input_with_contents.py +248 -0
  137. flywheel/models/collection_node.py +192 -0
  138. flywheel/models/collection_node_level.py +31 -0
  139. flywheel/models/collection_operation.py +193 -0
  140. flywheel/models/collection_operation_type.py +29 -0
  141. flywheel/models/collection_output.py +639 -0
  142. flywheel/models/collection_with_stats.py +637 -0
  143. flywheel/models/column.py +286 -0
  144. flywheel/models/column_type.py +32 -0
  145. flywheel/models/common_classification.py +135 -0
  146. flywheel/models/common_deleted_count.py +25 -0
  147. flywheel/models/common_editions.py +25 -0
  148. flywheel/models/common_info.py +135 -0
  149. flywheel/models/common_join_origins.py +25 -0
  150. flywheel/models/common_key.py +36 -0
  151. flywheel/models/common_modified_count.py +25 -0
  152. flywheel/models/common_object_created.py +36 -0
  153. flywheel/models/common_project_settings.py +25 -0
  154. flywheel/models/common_settings.py +36 -0
  155. flywheel/models/complete_multipart_upload_output.py +189 -0
  156. flywheel/models/complete_s3_multipart_upload_input.py +241 -0
  157. flywheel/models/config_feature_map.py +36 -0
  158. flywheel/models/config_out.py +381 -0
  159. flywheel/models/config_output.py +36 -0
  160. flywheel/models/config_site_config_output.py +36 -0
  161. flywheel/models/config_site_settings.py +36 -0
  162. flywheel/models/config_site_settings_input.py +36 -0
  163. flywheel/models/conflict_types.py +30 -0
  164. flywheel/models/container_delete_reason.py +39 -0
  165. flywheel/models/container_filter.py +193 -0
  166. flywheel/models/container_id_view_input.py +521 -0
  167. flywheel/models/container_id_view_input_execute_and_save.py +308 -0
  168. flywheel/models/container_modify.py +536 -0
  169. flywheel/models/container_new_output.py +25 -0
  170. flywheel/models/container_node_min.py +350 -0
  171. flywheel/models/container_output.py +36 -0
  172. flywheel/models/container_output_with_files.py +283 -0
  173. flywheel/models/container_parents.py +311 -0
  174. flywheel/models/container_pipeline_input.py +536 -0
  175. flywheel/models/container_project_parents.py +25 -0
  176. flywheel/models/container_reference.py +193 -0
  177. flywheel/models/container_reference_with_label.py +219 -0
  178. flywheel/models/container_session_parents.py +25 -0
  179. flywheel/models/container_subject_parents.py +25 -0
  180. flywheel/models/container_type.py +39 -0
  181. flywheel/models/container_uidcheck.py +253 -0
  182. flywheel/models/container_update.py +135 -0
  183. flywheel/models/context_input.py +217 -0
  184. flywheel/models/copy_filter.py +299 -0
  185. flywheel/models/copy_status.py +32 -0
  186. flywheel/models/core_models_api_key_api_key_input.py +190 -0
  187. flywheel/models/core_models_audit_trail_create_report_input.py +273 -0
  188. flywheel/models/core_models_audit_trail_modify_report_input.py +167 -0
  189. flywheel/models/core_models_common_source.py +189 -0
  190. flywheel/models/core_models_jobs_api_key_input.py +191 -0
  191. flywheel/models/core_models_search_parent_type.py +33 -0
  192. flywheel/models/core_workflows_form_responses_models_form_parents.py +163 -0
  193. flywheel/models/core_workflows_form_responses_models_form_response_output.py +440 -0
  194. flywheel/models/core_workflows_reader_models_reader_task_parents.py +295 -0
  195. flywheel/models/creds.py +135 -0
  196. flywheel/models/curator.py +221 -0
  197. flywheel/models/current_user_output.py +707 -0
  198. flywheel/models/custom_field.py +437 -0
  199. flywheel/models/custom_form.py +244 -0
  200. flywheel/models/cvat_info.py +275 -0
  201. flywheel/models/cvat_settings.py +272 -0
  202. flywheel/models/cvat_settings_input.py +272 -0
  203. flywheel/models/cvat_sync_state.py +30 -0
  204. flywheel/models/daily_report_usage.py +565 -0
  205. flywheel/models/data_strategy.py +29 -0
  206. flywheel/models/data_view.py +25 -0
  207. flywheel/models/data_view_analysis_file_spec.py +221 -0
  208. flywheel/models/data_view_analysis_filter_spec.py +221 -0
  209. flywheel/models/data_view_column_alias.py +337 -0
  210. flywheel/models/data_view_column_spec.py +286 -0
  211. flywheel/models/data_view_execution.py +505 -0
  212. flywheel/models/data_view_execution_state.py +31 -0
  213. flywheel/models/data_view_file_spec.py +392 -0
  214. flywheel/models/data_view_group_by.py +166 -0
  215. flywheel/models/data_view_group_by_column.py +194 -0
  216. flywheel/models/data_view_name_filter_spec.py +194 -0
  217. flywheel/models/data_view_output.py +25 -0
  218. flywheel/models/data_view_save_data_view_input.py +25 -0
  219. flywheel/models/data_view_zip_filter_spec.py +223 -0
  220. flywheel/models/default_flywheel_role.py +30 -0
  221. flywheel/models/deid_log_skip_reason.py +29 -0
  222. flywheel/models/delete_by_search_query.py +253 -0
  223. flywheel/models/deleted_file.py +514 -0
  224. flywheel/models/deleted_result.py +194 -0
  225. flywheel/models/deprecated_action.py +29 -0
  226. flywheel/models/destination_container_type.py +30 -0
  227. flywheel/models/device.py +437 -0
  228. flywheel/models/device_admin_update.py +194 -0
  229. flywheel/models/device_create.py +219 -0
  230. flywheel/models/device_self_update.py +272 -0
  231. flywheel/models/device_status.py +36 -0
  232. flywheel/models/device_status_entry.py +221 -0
  233. flywheel/models/device_storage_strategy_update.py +193 -0
  234. flywheel/models/dimse_project_input.py +36 -0
  235. flywheel/models/dimse_project_output.py +36 -0
  236. flywheel/models/dimse_service_input.py +36 -0
  237. flywheel/models/dimse_service_output.py +36 -0
  238. flywheel/models/download.py +249 -0
  239. flywheel/models/download_container_filter.py +167 -0
  240. flywheel/models/download_container_filter_definition.py +222 -0
  241. flywheel/models/download_filter.py +221 -0
  242. flywheel/models/download_filter_definition.py +195 -0
  243. flywheel/models/download_format.py +29 -0
  244. flywheel/models/download_input.py +25 -0
  245. flywheel/models/download_node.py +189 -0
  246. flywheel/models/download_strategy.py +31 -0
  247. flywheel/models/download_ticket.py +36 -0
  248. flywheel/models/download_ticket_stub.py +249 -0
  249. flywheel/models/download_ticket_with_summary.py +36 -0
  250. flywheel/models/e_signature.py +242 -0
  251. flywheel/models/edition.py +169 -0
  252. flywheel/models/egress_device.py +597 -0
  253. flywheel/models/egress_device_page.py +219 -0
  254. flywheel/models/egress_provider.py +408 -0
  255. flywheel/models/egress_provider_id.py +164 -0
  256. flywheel/models/exchange_storage.py +243 -0
  257. flywheel/models/executor_info.py +353 -0
  258. flywheel/models/export_templates.py +195 -0
  259. flywheel/models/features.py +1838 -0
  260. flywheel/models/field_change.py +271 -0
  261. flywheel/models/field_change_log_document.py +245 -0
  262. flywheel/models/field_type.py +37 -0
  263. flywheel/models/file.py +1139 -0
  264. flywheel/models/file_classification_delta.py +245 -0
  265. flywheel/models/file_container_type.py +34 -0
  266. flywheel/models/file_entry.py +740 -0
  267. flywheel/models/file_export_templates.py +272 -0
  268. flywheel/models/file_format.py +33 -0
  269. flywheel/models/file_gear_info.py +215 -0
  270. flywheel/models/file_group.py +29 -0
  271. flywheel/models/file_list_output.py +1115 -0
  272. flywheel/models/file_modify_input.py +191 -0
  273. flywheel/models/file_move_input.py +221 -0
  274. flywheel/models/file_node.py +1138 -0
  275. flywheel/models/file_node_min.py +321 -0
  276. flywheel/models/file_origin.py +283 -0
  277. flywheel/models/file_output.py +1135 -0
  278. flywheel/models/file_parents.py +297 -0
  279. flywheel/models/file_reference.py +221 -0
  280. flywheel/models/file_suggestion.py +241 -0
  281. flywheel/models/file_template_options.py +299 -0
  282. flywheel/models/file_upsert_input.py +612 -0
  283. flywheel/models/file_upsert_origin.py +36 -0
  284. flywheel/models/file_upsert_output.py +1154 -0
  285. flywheel/models/file_version.py +190 -0
  286. flywheel/models/file_version_copy_of.py +273 -0
  287. flywheel/models/file_version_output.py +325 -0
  288. flywheel/models/file_via.py +245 -0
  289. flywheel/models/file_zip_entry.py +25 -0
  290. flywheel/models/file_zip_info.py +25 -0
  291. flywheel/models/filter.py +350 -0
  292. flywheel/models/filter_input.py +218 -0
  293. flywheel/models/filter_values.py +195 -0
  294. flywheel/models/filter_view.py +28 -0
  295. flywheel/models/fixed_file_version_input.py +216 -0
  296. flywheel/models/fixed_input.py +299 -0
  297. flywheel/models/form_definition.py +163 -0
  298. flywheel/models/form_response_base.py +311 -0
  299. flywheel/models/form_response_create.py +193 -0
  300. flywheel/models/gcp_creds.py +397 -0
  301. flywheel/models/gcp_storage.py +298 -0
  302. flywheel/models/gear.py +619 -0
  303. flywheel/models/gear_category.py +32 -0
  304. flywheel/models/gear_config.py +138 -0
  305. flywheel/models/gear_context_input.py +164 -0
  306. flywheel/models/gear_context_lookup.py +25 -0
  307. flywheel/models/gear_context_lookup_item.py +36 -0
  308. flywheel/models/gear_context_value_output.py +272 -0
  309. flywheel/models/gear_context_value_output_unfound.py +164 -0
  310. flywheel/models/gear_custom.py +135 -0
  311. flywheel/models/gear_directive.py +135 -0
  312. flywheel/models/gear_doc.py +25 -0
  313. flywheel/models/gear_document.py +332 -0
  314. flywheel/models/gear_document_input.py +303 -0
  315. flywheel/models/gear_document_legacy_input.py +302 -0
  316. flywheel/models/gear_environment.py +135 -0
  317. flywheel/models/gear_exchange.py +221 -0
  318. flywheel/models/gear_file_input.py +192 -0
  319. flywheel/models/gear_id_output.py +170 -0
  320. flywheel/models/gear_info.py +251 -0
  321. flywheel/models/gear_input_item.py +231 -0
  322. flywheel/models/gear_inputs.py +140 -0
  323. flywheel/models/gear_invocation.py +138 -0
  324. flywheel/models/gear_key_input.py +191 -0
  325. flywheel/models/gear_manifest.py +624 -0
  326. flywheel/models/gear_mixin.py +218 -0
  327. flywheel/models/gear_node.py +355 -0
  328. flywheel/models/gear_output_configuration.py +164 -0
  329. flywheel/models/gear_permissions.py +191 -0
  330. flywheel/models/gear_permissions_input.py +163 -0
  331. flywheel/models/gear_permissions_type.py +29 -0
  332. flywheel/models/gear_return_ticket.py +25 -0
  333. flywheel/models/gear_rule.py +653 -0
  334. flywheel/models/gear_rule_condition.py +219 -0
  335. flywheel/models/gear_rule_condition_type.py +37 -0
  336. flywheel/models/gear_rule_input.py +517 -0
  337. flywheel/models/gear_rule_modify_input.py +492 -0
  338. flywheel/models/gear_rule_output.py +652 -0
  339. flywheel/models/gear_save_submission.py +221 -0
  340. flywheel/models/gear_series.py +298 -0
  341. flywheel/models/gear_series_update.py +163 -0
  342. flywheel/models/gear_suggestion_output.py +301 -0
  343. flywheel/models/gear_ticket.py +245 -0
  344. flywheel/models/gear_ticket_output.py +163 -0
  345. flywheel/models/google_auth_out.py +299 -0
  346. flywheel/models/graph_filter.py +329 -0
  347. flywheel/models/group.py +25 -0
  348. flywheel/models/group_by.py +163 -0
  349. flywheel/models/group_by_column.py +36 -0
  350. flywheel/models/group_container_output.py +33 -0
  351. flywheel/models/group_input.py +248 -0
  352. flywheel/models/group_metadata_input.py +36 -0
  353. flywheel/models/group_node.py +34 -0
  354. flywheel/models/group_output.py +471 -0
  355. flywheel/models/group_report.py +218 -0
  356. flywheel/models/group_role.py +163 -0
  357. flywheel/models/group_settings_output.py +249 -0
  358. flywheel/models/group_update.py +249 -0
  359. flywheel/models/header_feature.py +37 -0
  360. flywheel/models/hierarchy_export_templates.py +272 -0
  361. flywheel/models/http_validation_error.py +167 -0
  362. flywheel/models/info.py +218 -0
  363. flywheel/models/info_add_remove.py +36 -0
  364. flywheel/models/info_container_type.py +35 -0
  365. flywheel/models/info_replace.py +36 -0
  366. flywheel/models/info_update_input.py +36 -0
  367. flywheel/models/ingress_provider.py +299 -0
  368. flywheel/models/ingress_providers.py +272 -0
  369. flywheel/models/ingress_site_settings.py +305 -0
  370. flywheel/models/ingress_update_provider.py +218 -0
  371. flywheel/models/inline_response200.py +163 -0
  372. flywheel/models/inline_response2001.py +171 -0
  373. flywheel/models/inline_response2002.py +163 -0
  374. flywheel/models/inline_response2003.py +36 -0
  375. flywheel/models/inline_response2005.py +25 -0
  376. flywheel/models/input_filter.py +221 -0
  377. flywheel/models/input_job.py +521 -0
  378. flywheel/models/input_job_profile.py +275 -0
  379. flywheel/models/inserted_id.py +163 -0
  380. flywheel/models/job.py +841 -0
  381. flywheel/models/job_analysis_input.py +273 -0
  382. flywheel/models/job_ask.py +301 -0
  383. flywheel/models/job_ask_response.py +195 -0
  384. flywheel/models/job_ask_response_job.py +978 -0
  385. flywheel/models/job_ask_return.py +25 -0
  386. flywheel/models/job_ask_return_criteria.py +245 -0
  387. flywheel/models/job_ask_state.py +25 -0
  388. flywheel/models/job_ask_state_response.py +163 -0
  389. flywheel/models/job_complete.py +220 -0
  390. flywheel/models/job_completion_input.py +25 -0
  391. flywheel/models/job_completion_ticket.py +25 -0
  392. flywheel/models/job_config.py +135 -0
  393. flywheel/models/job_config_input.py +272 -0
  394. flywheel/models/job_config_inputs.py +25 -0
  395. flywheel/models/job_config_output.py +25 -0
  396. flywheel/models/job_container_detail.py +25 -0
  397. flywheel/models/job_destination.py +189 -0
  398. flywheel/models/job_detail.py +925 -0
  399. flywheel/models/job_detail_container.py +190 -0
  400. flywheel/models/job_detail_file_entry.py +194 -0
  401. flywheel/models/job_detail_group.py +190 -0
  402. flywheel/models/job_detail_parent_info.py +303 -0
  403. flywheel/models/job_executor_info.py +369 -0
  404. flywheel/models/job_file_input.py +247 -0
  405. flywheel/models/job_file_input_list_output.py +247 -0
  406. flywheel/models/job_file_object.py +435 -0
  407. flywheel/models/job_file_object_list_output.py +407 -0
  408. flywheel/models/job_gear_match.py +25 -0
  409. flywheel/models/job_inputs_array_item.py +305 -0
  410. flywheel/models/job_inputs_item.py +242 -0
  411. flywheel/models/job_inputs_object.py +138 -0
  412. flywheel/models/job_list_entry.py +25 -0
  413. flywheel/models/job_list_output.py +979 -0
  414. flywheel/models/job_list_output_config.py +220 -0
  415. flywheel/models/job_log.py +189 -0
  416. flywheel/models/job_log_column.py +40 -0
  417. flywheel/models/job_log_record.py +192 -0
  418. flywheel/models/job_modify.py +193 -0
  419. flywheel/models/job_origin.py +190 -0
  420. flywheel/models/job_output.py +1005 -0
  421. flywheel/models/job_output_config.py +247 -0
  422. flywheel/models/job_parents.py +297 -0
  423. flywheel/models/job_priority.py +31 -0
  424. flywheel/models/job_priority_update.py +192 -0
  425. flywheel/models/job_profile.py +427 -0
  426. flywheel/models/job_profile_input.py +25 -0
  427. flywheel/models/job_request.py +221 -0
  428. flywheel/models/job_request_item.py +246 -0
  429. flywheel/models/job_request_item_type.py +31 -0
  430. flywheel/models/job_request_target.py +270 -0
  431. flywheel/models/job_state.py +32 -0
  432. flywheel/models/job_state_counts.py +25 -0
  433. flywheel/models/job_stats_by_state.py +25 -0
  434. flywheel/models/job_ticket_output.py +165 -0
  435. flywheel/models/job_transition_times.py +253 -0
  436. flywheel/models/job_version_info.py +135 -0
  437. flywheel/models/jobs_by_state.py +272 -0
  438. flywheel/models/jobs_list.py +166 -0
  439. flywheel/models/join_origin_device.py +164 -0
  440. flywheel/models/join_origin_job.py +219 -0
  441. flywheel/models/join_origin_user.py +189 -0
  442. flywheel/models/join_origins.py +223 -0
  443. flywheel/models/join_type.py +28 -0
  444. flywheel/models/jupyterhub_workspace.py +163 -0
  445. flywheel/models/jupyterlab_server_modify.py +275 -0
  446. flywheel/models/jupyterlab_server_origin.py +25 -0
  447. flywheel/models/jupyterlab_server_output.py +25 -0
  448. flywheel/models/jupyterlab_server_response.py +415 -0
  449. flywheel/models/jupyterlab_server_update.py +25 -0
  450. flywheel/models/ldap_sync.py +36 -0
  451. flywheel/models/ldap_sync_config.py +163 -0
  452. flywheel/models/ldap_sync_input.py +36 -0
  453. flywheel/models/ldap_sync_status.py +250 -0
  454. flywheel/models/legacy_api_key_output.py +271 -0
  455. flywheel/models/legacy_input.py +244 -0
  456. flywheel/models/legacy_usage_report.py +309 -0
  457. flywheel/models/legacys_usage_project_entry.py +194 -0
  458. flywheel/models/libs_workflows_models_parent_type.py +33 -0
  459. flywheel/models/libs_workflows_models_task_status.py +32 -0
  460. flywheel/models/local_storage.py +217 -0
  461. flywheel/models/location.py +189 -0
  462. flywheel/models/locked.py +219 -0
  463. flywheel/models/master_subject_code_dob_input.py +279 -0
  464. flywheel/models/master_subject_code_input.py +281 -0
  465. flywheel/models/master_subject_code_output.py +166 -0
  466. flywheel/models/matched_acquisition_output.py +518 -0
  467. flywheel/models/mfa_channel.py +30 -0
  468. flywheel/models/mfa_settings.py +167 -0
  469. flywheel/models/mixins.py +794 -0
  470. flywheel/models/ml_set_filter.py +194 -0
  471. flywheel/models/ml_type.py +30 -0
  472. flywheel/models/modality.py +250 -0
  473. flywheel/models/modality_input.py +244 -0
  474. flywheel/models/modality_modify.py +218 -0
  475. flywheel/models/modality_output.py +271 -0
  476. flywheel/models/modified_result.py +190 -0
  477. flywheel/models/modify_user_input.py +466 -0
  478. flywheel/models/move_conflict.py +300 -0
  479. flywheel/models/note.py +391 -0
  480. flywheel/models/note_input.py +165 -0
  481. flywheel/models/optional_input_policy.py +30 -0
  482. flywheel/models/order.py +29 -0
  483. flywheel/models/organ_system.py +64 -0
  484. flywheel/models/origin.py +193 -0
  485. flywheel/models/origin_type.py +35 -0
  486. flywheel/models/orphaned_count.py +163 -0
  487. flywheel/models/output_user_page.py +219 -0
  488. flywheel/models/packfile_cleanup_output.py +166 -0
  489. flywheel/models/packfile_removed_output.py +189 -0
  490. flywheel/models/page.py +216 -0
  491. flywheel/models/page_generic_file_output.py +219 -0
  492. flywheel/models/page_generic_filter.py +219 -0
  493. flywheel/models/page_generic_form_response_output.py +219 -0
  494. flywheel/models/page_generic_protocol.py +244 -0
  495. flywheel/models/page_generic_reader_task_output.py +244 -0
  496. flywheel/models/page_generic_staffing_pool.py +244 -0
  497. flywheel/models/parsed_query_response.py +194 -0
  498. flywheel/models/permission_access_permission.py +25 -0
  499. flywheel/models/premade_jobs_batch_job_output.py +298 -0
  500. flywheel/models/premade_jobs_batch_job_output_inflated_jobs.py +299 -0
  501. flywheel/models/premade_jobs_batch_proposal.py +334 -0
  502. flywheel/models/premade_jobs_batch_proposal_detail.py +166 -0
  503. flywheel/models/premade_jobs_batch_proposal_input.py +166 -0
  504. flywheel/models/project.py +25 -0
  505. flywheel/models/project_acquisition_upsert_input.py +25 -0
  506. flywheel/models/project_acquisition_upsert_output.py +25 -0
  507. flywheel/models/project_aet.py +331 -0
  508. flywheel/models/project_aet_input.py +248 -0
  509. flywheel/models/project_catalog_list_output.py +25 -0
  510. flywheel/models/project_contact.py +194 -0
  511. flywheel/models/project_container_output.py +41 -0
  512. flywheel/models/project_copy_input.py +245 -0
  513. flywheel/models/project_copy_output.py +215 -0
  514. flywheel/models/project_counters.py +346 -0
  515. flywheel/models/project_hierarchy_input.py +278 -0
  516. flywheel/models/project_hierarchy_output.py +222 -0
  517. flywheel/models/project_hierarchy_upsert_input.py +25 -0
  518. flywheel/models/project_hierarchy_upsert_output.py +25 -0
  519. flywheel/models/project_input.py +384 -0
  520. flywheel/models/project_institution.py +194 -0
  521. flywheel/models/project_list_output.py +897 -0
  522. flywheel/models/project_locking_reason.py +32 -0
  523. flywheel/models/project_modify.py +413 -0
  524. flywheel/models/project_node.py +42 -0
  525. flywheel/models/project_output.py +899 -0
  526. flywheel/models/project_parents.py +168 -0
  527. flywheel/models/project_report.py +463 -0
  528. flywheel/models/project_report_list.py +167 -0
  529. flywheel/models/project_session_upsert_input.py +25 -0
  530. flywheel/models/project_session_upsert_output.py +25 -0
  531. flywheel/models/project_settings_input.py +333 -0
  532. flywheel/models/project_settings_output.py +333 -0
  533. flywheel/models/project_settings_sharing.py +327 -0
  534. flywheel/models/project_settings_sharing_input.py +334 -0
  535. flywheel/models/project_settings_workspaces.py +167 -0
  536. flywheel/models/project_settings_workspaces_input.py +167 -0
  537. flywheel/models/project_share_level.py +29 -0
  538. flywheel/models/project_sharing_settings_project_contact.py +25 -0
  539. flywheel/models/project_sharing_settings_project_counters.py +36 -0
  540. flywheel/models/project_sharing_settings_project_institution.py +25 -0
  541. flywheel/models/project_sharing_settings_project_settings_input.py +25 -0
  542. flywheel/models/project_sharing_settings_project_settings_output.py +25 -0
  543. flywheel/models/project_sharing_settings_project_settings_sharing.py +25 -0
  544. flywheel/models/project_sharing_settings_project_settings_sharing_input.py +25 -0
  545. flywheel/models/project_sharing_settings_project_stats.py +36 -0
  546. flywheel/models/project_stats.py +270 -0
  547. flywheel/models/project_subject_upsert_input.py +25 -0
  548. flywheel/models/project_subject_upsert_output.py +25 -0
  549. flywheel/models/project_template.py +195 -0
  550. flywheel/models/project_template_input.py +195 -0
  551. flywheel/models/project_template_list_input.py +166 -0
  552. flywheel/models/project_template_requirement.py +36 -0
  553. flywheel/models/project_template_session_template.py +36 -0
  554. flywheel/models/project_upsert_origin.py +36 -0
  555. flywheel/models/protocol.py +515 -0
  556. flywheel/models/protocol_e_signature_config.py +191 -0
  557. flywheel/models/protocol_input.py +354 -0
  558. flywheel/models/protocol_modify.py +277 -0
  559. flywheel/models/protocol_status.py +30 -0
  560. flywheel/models/provider.py +461 -0
  561. flywheel/models/provider_access_type.py +29 -0
  562. flywheel/models/provider_class.py +29 -0
  563. flywheel/models/provider_deletion_status.py +189 -0
  564. flywheel/models/provider_input.py +25 -0
  565. flywheel/models/provider_links.py +282 -0
  566. flywheel/models/provider_type.py +34 -0
  567. flywheel/models/providers.py +277 -0
  568. flywheel/models/reader_batch_create.py +463 -0
  569. flywheel/models/reader_task.py +725 -0
  570. flywheel/models/reader_task_config.py +189 -0
  571. flywheel/models/reader_task_create.py +543 -0
  572. flywheel/models/reader_task_modify.py +303 -0
  573. flywheel/models/reader_task_output.py +752 -0
  574. flywheel/models/reader_task_parent_details.py +322 -0
  575. flywheel/models/report_access_log_context.py +301 -0
  576. flywheel/models/report_access_log_context_entry.py +194 -0
  577. flywheel/models/report_access_log_context_file_entry.py +165 -0
  578. flywheel/models/report_access_log_entry.py +624 -0
  579. flywheel/models/report_access_log_origin.py +194 -0
  580. flywheel/models/report_availability_list.py +167 -0
  581. flywheel/models/report_daily_usage_entry.py +501 -0
  582. flywheel/models/report_demographics_grid.py +36 -0
  583. flywheel/models/report_ethnicity_grid.py +252 -0
  584. flywheel/models/report_gender_count.py +222 -0
  585. flywheel/models/report_group_report.py +217 -0
  586. flywheel/models/report_legacy_usage_entry.py +36 -0
  587. flywheel/models/report_legacy_usage_project_entry.py +36 -0
  588. flywheel/models/report_project.py +25 -0
  589. flywheel/models/report_site.py +192 -0
  590. flywheel/models/report_time_period.py +193 -0
  591. flywheel/models/report_usage.py +630 -0
  592. flywheel/models/report_usage_entry.py +25 -0
  593. flywheel/models/resolve_input.py +163 -0
  594. flywheel/models/resolve_output.py +194 -0
  595. flywheel/models/resolver_acquisition_node.py +36 -0
  596. flywheel/models/resolver_analysis_node.py +36 -0
  597. flywheel/models/resolver_file_node.py +36 -0
  598. flywheel/models/resolver_gear_node.py +36 -0
  599. flywheel/models/resolver_group_node.py +36 -0
  600. flywheel/models/resolver_input.py +25 -0
  601. flywheel/models/resolver_node.py +182 -0
  602. flywheel/models/resolver_output.py +25 -0
  603. flywheel/models/resolver_project_node.py +36 -0
  604. flywheel/models/resolver_session_node.py +36 -0
  605. flywheel/models/resolver_subject_node.py +36 -0
  606. flywheel/models/role_input.py +192 -0
  607. flywheel/models/role_output.py +273 -0
  608. flywheel/models/role_permission.py +194 -0
  609. flywheel/models/role_permission_output.py +189 -0
  610. flywheel/models/role_permission_update.py +163 -0
  611. flywheel/models/role_type.py +32 -0
  612. flywheel/models/role_update.py +194 -0
  613. flywheel/models/roles_backwards_compatible_role_assignment.py +36 -0
  614. flywheel/models/roles_group_role_pool_input.py +36 -0
  615. flywheel/models/roles_role.py +36 -0
  616. flywheel/models/roles_role_assignment.py +195 -0
  617. flywheel/models/roles_role_input.py +36 -0
  618. flywheel/models/rule.py +467 -0
  619. flywheel/models/rule_any.py +216 -0
  620. flywheel/models/s3_addressing_style.py +29 -0
  621. flywheel/models/s3_compat_storage.py +381 -0
  622. flywheel/models/save_search.py +298 -0
  623. flywheel/models/save_search_input.py +219 -0
  624. flywheel/models/save_search_output.py +301 -0
  625. flywheel/models/save_search_page.py +219 -0
  626. flywheel/models/save_search_parent.py +192 -0
  627. flywheel/models/save_search_update.py +194 -0
  628. flywheel/models/search_acquisition_response.py +252 -0
  629. flywheel/models/search_analysis_response.py +254 -0
  630. flywheel/models/search_collection_response.py +254 -0
  631. flywheel/models/search_file_response.py +312 -0
  632. flywheel/models/search_group_response.py +196 -0
  633. flywheel/models/search_parent_acquisition.py +47 -0
  634. flywheel/models/search_parent_analysis.py +47 -0
  635. flywheel/models/search_parent_collection.py +46 -0
  636. flywheel/models/search_parent_project.py +54 -0
  637. flywheel/models/search_parent_response.py +213 -0
  638. flywheel/models/search_parent_session.py +48 -0
  639. flywheel/models/search_parent_subject.py +48 -0
  640. flywheel/models/search_parse_error.py +252 -0
  641. flywheel/models/search_parse_search_query_result.py +36 -0
  642. flywheel/models/search_project_response.py +196 -0
  643. flywheel/models/search_query.py +337 -0
  644. flywheel/models/search_query_suggestions.py +36 -0
  645. flywheel/models/search_response.py +448 -0
  646. flywheel/models/search_return_type.py +33 -0
  647. flywheel/models/search_save_search.py +36 -0
  648. flywheel/models/search_save_search_input.py +36 -0
  649. flywheel/models/search_save_search_parent.py +36 -0
  650. flywheel/models/search_save_search_update.py +36 -0
  651. flywheel/models/search_session_response.py +252 -0
  652. flywheel/models/search_status.py +166 -0
  653. flywheel/models/search_structured_search_query.py +25 -0
  654. flywheel/models/search_subject_response.py +225 -0
  655. flywheel/models/search_suggestion.py +36 -0
  656. flywheel/models/select_item.py +190 -0
  657. flywheel/models/server_state.py +303 -0
  658. flywheel/models/service_aet.py +301 -0
  659. flywheel/models/service_aet_input.py +276 -0
  660. flywheel/models/session.py +25 -0
  661. flywheel/models/session_container_output.py +35 -0
  662. flywheel/models/session_copy_input.py +253 -0
  663. flywheel/models/session_embedded_subject.py +299 -0
  664. flywheel/models/session_input.py +431 -0
  665. flywheel/models/session_list_output.py +897 -0
  666. flywheel/models/session_metadata_input.py +36 -0
  667. flywheel/models/session_modify.py +464 -0
  668. flywheel/models/session_node.py +36 -0
  669. flywheel/models/session_output.py +897 -0
  670. flywheel/models/session_parents.py +220 -0
  671. flywheel/models/session_template_options.py +221 -0
  672. flywheel/models/session_template_recalc_output.py +165 -0
  673. flywheel/models/session_upsert_input.py +464 -0
  674. flywheel/models/session_upsert_output.py +243 -0
  675. flywheel/models/sharing_filter_options.py +345 -0
  676. flywheel/models/signed_fs_upload_output.py +189 -0
  677. flywheel/models/signed_url_cleanup_input.py +189 -0
  678. flywheel/models/signed_url_upload_input.py +190 -0
  679. flywheel/models/signed_url_upload_output.py +349 -0
  680. flywheel/models/site.py +623 -0
  681. flywheel/models/site_report.py +194 -0
  682. flywheel/models/site_settings.py +385 -0
  683. flywheel/models/sort.py +192 -0
  684. flywheel/models/stable_api_key_input.py +25 -0
  685. flywheel/models/staffing_pool.py +324 -0
  686. flywheel/models/staffing_pool_create.py +216 -0
  687. flywheel/models/staffing_pool_list.py +164 -0
  688. flywheel/models/staffing_pool_modify.py +218 -0
  689. flywheel/models/state.py +32 -0
  690. flywheel/models/static_compute.py +218 -0
  691. flywheel/models/status_transitions.py +245 -0
  692. flywheel/models/status_type.py +31 -0
  693. flywheel/models/status_value.py +31 -0
  694. flywheel/models/storage_strategy.py +30 -0
  695. flywheel/models/storage_strategy_config.py +194 -0
  696. flywheel/models/structured_query.py +165 -0
  697. flywheel/models/structured_query_suggestions.py +196 -0
  698. flywheel/models/structured_query_value_suggestion.py +247 -0
  699. flywheel/models/subject.py +34 -0
  700. flywheel/models/subject_container_output.py +36 -0
  701. flywheel/models/subject_copy_input.py +223 -0
  702. flywheel/models/subject_input.py +627 -0
  703. flywheel/models/subject_modify.py +684 -0
  704. flywheel/models/subject_node.py +37 -0
  705. flywheel/models/subject_output.py +1008 -0
  706. flywheel/models/subject_output_for_list.py +1005 -0
  707. flywheel/models/subject_parents.py +194 -0
  708. flywheel/models/subject_role_permission.py +194 -0
  709. flywheel/models/subject_state.py +30 -0
  710. flywheel/models/subject_template_options.py +191 -0
  711. flywheel/models/subject_upsert_input.py +573 -0
  712. flywheel/models/subject_upsert_output.py +216 -0
  713. flywheel/models/sync_user_input.py +322 -0
  714. flywheel/models/tag.py +165 -0
  715. flywheel/models/task_assign.py +194 -0
  716. flywheel/models/task_facet.py +29 -0
  717. flywheel/models/task_parent_ref.py +245 -0
  718. flywheel/models/task_parent_ref_input.py +219 -0
  719. flywheel/models/task_priority.py +31 -0
  720. flywheel/models/task_submission.py +189 -0
  721. flywheel/models/therapeutic_area.py +60 -0
  722. flywheel/models/transitions.py +272 -0
  723. flywheel/models/tree_container_request_spec.py +281 -0
  724. flywheel/models/tree_graph.py +142 -0
  725. flywheel/models/tree_graph_connection.py +244 -0
  726. flywheel/models/tree_graph_connections.py +142 -0
  727. flywheel/models/tree_graph_node.py +166 -0
  728. flywheel/models/tree_request.py +25 -0
  729. flywheel/models/tree_response_item.py +142 -0
  730. flywheel/models/type_str.py +31 -0
  731. flywheel/models/uid_check_input_acquisitions.py +244 -0
  732. flywheel/models/uid_check_input_sessions.py +244 -0
  733. flywheel/models/uid_check_output.py +191 -0
  734. flywheel/models/upload_complete_s3_multipart_input.py +25 -0
  735. flywheel/models/upload_complete_s3_multipart_output.py +25 -0
  736. flywheel/models/upload_signed_fs_file_upload_output.py +36 -0
  737. flywheel/models/upload_signed_upload_url_input.py +36 -0
  738. flywheel/models/upload_signed_upload_url_output.py +36 -0
  739. flywheel/models/upload_ticket_output.py +215 -0
  740. flywheel/models/upload_token_output.py +163 -0
  741. flywheel/models/upsert_result.py +31 -0
  742. flywheel/models/user.py +760 -0
  743. flywheel/models/user_api_key.py +220 -0
  744. flywheel/models/user_input.py +461 -0
  745. flywheel/models/user_jobs.py +219 -0
  746. flywheel/models/user_jobs_output.py +25 -0
  747. flywheel/models/user_output.py +36 -0
  748. flywheel/models/user_output_id.py +163 -0
  749. flywheel/models/user_preferences.py +135 -0
  750. flywheel/models/user_wechat.py +135 -0
  751. flywheel/models/validation_error.py +215 -0
  752. flywheel/models/validation_rule.py +190 -0
  753. flywheel/models/version.py +363 -0
  754. flywheel/models/version_output.py +25 -0
  755. flywheel/models/view_id_output.py +164 -0
  756. flywheel/models/view_output.py +440 -0
  757. flywheel/models/viewer_app.py +381 -0
  758. flywheel/models/viewer_app_input.py +382 -0
  759. flywheel/models/viewer_app_type.py +29 -0
  760. flywheel/models/virus_scan.py +166 -0
  761. flywheel/models/virus_scan_state.py +30 -0
  762. flywheel/models/work_in_progress_features.py +135 -0
  763. flywheel/models/zipfile_info.py +192 -0
  764. flywheel/models/zipfile_member_info.py +241 -0
  765. flywheel/partial_reader.py +50 -0
  766. flywheel/rest.py +352 -0
  767. flywheel/util.py +95 -0
  768. flywheel/view_builder.py +449 -0
  769. flywheel_sdk-21.2.0.dist-info/METADATA +42 -0
  770. flywheel_sdk-21.2.0.dist-info/RECORD +772 -0
  771. flywheel_sdk-21.2.0.dist-info/WHEEL +4 -0
  772. flywheel_sdk-21.2.0.dist-info/licenses/LICENSE.txt +18 -0
flywheel/client.py ADDED
@@ -0,0 +1,291 @@
1
+ import json
2
+ import os
3
+ import sys
4
+
5
+ from .util import params_to_dict
6
+ from .flywheel import Flywheel
7
+ from .view_builder import ViewBuilder
8
+ from .rest import ApiException
9
+
10
+ def get_api_key_from_cli(path):
11
+ try:
12
+ with open(path) as fp:
13
+ api_key = json.load(fp).get('key')
14
+ except FileNotFoundError:
15
+ raise Exception('Must login with flywheel command-line interface')
16
+ return api_key
17
+
18
+ class Client(object):
19
+ def __init__(self, api_key=None, **kwargs):
20
+ """Initialize Flywheel Client
21
+
22
+ Note: If you are initializing the client with a drone or device key,
23
+ you will need to set disable_auth_check to True
24
+
25
+ Args:
26
+ api_key: API key to Flywheel
27
+ kwargs: Other keyword arguments
28
+ disable_auth_check (bool): Disable authentication check.
29
+ Default False.
30
+
31
+ Returns:
32
+ Initialized Flywheel Client
33
+
34
+ Raises:
35
+ flywheel.rest.ApiException: If disable_auth_check is False and
36
+ authentication fails.
37
+ """
38
+ if not api_key:
39
+ api_key = get_api_key_from_cli(os.path.expanduser('~/.config/flywheel/user.json'))
40
+ disable_auth_check = kwargs.pop('disable_auth_check', False)
41
+
42
+ self._fw = Flywheel(api_key, minimum_supported_major_version=11,
43
+ **kwargs)
44
+
45
+ if not disable_auth_check:
46
+ self._fw.get_auth_status()
47
+
48
+
49
+ def shutdown(self):
50
+ """Release any outstanding resources"""
51
+ self._fw.shutdown()
52
+
53
+ def add_user(self, *args, **kwargs): # noqa: E501
54
+ """Add a new user"""
55
+ body = params_to_dict('add_user', args, kwargs)
56
+ return self._fw.add_user(body)
57
+
58
+ def add_group(self, *args, **kwargs):
59
+ """Add a group"""
60
+ body = params_to_dict('add_group', args, kwargs)
61
+ return self._fw.add_group(body)
62
+
63
+ def add_collection(self, *args, **kwargs):
64
+ """Create a collection"""
65
+ body = params_to_dict('add_collection', args, kwargs)
66
+ return self._fw.add_collection(body, **kwargs)
67
+
68
+ def add_gear(self, gear_name, body, **kwargs):
69
+ """Create or update a gear.
70
+
71
+ If no existing gear is found, one will be created Otherwise, the specified gear will be updated
72
+
73
+ :param str gear_name: Name of the gear to interact with (required)
74
+ :param GearDocumentLegacyInput body: (required)
75
+ :param bool async_: Perform the request asynchronously
76
+ :return: GearDocument
77
+ """
78
+ return self._fw.add_gear(gear_name, body, **kwargs)
79
+
80
+ def add_job(self, body, **kwargs):
81
+ """Add a job
82
+
83
+ :param Job body: (required)
84
+ :return: CommonObjectCreated
85
+ """
86
+ return self._fw.add_job(body, **kwargs)
87
+
88
+ def get_config(self, **kwargs):
89
+ """Return public Scitran configuration information
90
+
91
+ :return: ConfigOut
92
+ """
93
+ return self._fw.get_config(**kwargs)
94
+
95
+ def get_gear(self, gear_id, **kwargs):
96
+ """Return a gear referenced by gear_id
97
+
98
+ :param str gear_id: (required) The id of the gear to lookup
99
+ :return: Gear
100
+ """
101
+ return self._fw.get_gear(gear_id, **kwargs)
102
+
103
+ def get_version(self, **kwargs):
104
+ """Get server and database schema version info
105
+
106
+ :return: VersionOutput
107
+ """
108
+ return self._fw.get_version(**kwargs)
109
+
110
+ def get_current_user(self, **kwargs):
111
+ """Get current logged-in user
112
+
113
+ :return: User
114
+ """
115
+ return self._fw.get_current_user(**kwargs)
116
+
117
+ def get_modality(self, modality_id, **kwargs):
118
+ """Get a modality's classification specification
119
+
120
+ :param str modality_id: (required)
121
+ :return: Modality
122
+ """
123
+ return self._fw.get_modality(modality_id, **kwargs)
124
+
125
+ def get(self, id, **kwargs):
126
+ """Retrieve the specified object by id.
127
+
128
+ Objects that can be retrieved in this way are:
129
+ group, project, session, subject, acquisition, analysis and collection
130
+
131
+ :param str id: The id of the object to retrieve
132
+ :return: ContainerOutput
133
+ """
134
+ return self._fw.get(id, **kwargs)
135
+
136
+ def resolve(self, path):
137
+ """Perform a path based lookup of nodes in the Flywheel hierarchy.
138
+
139
+ :param str path: (required) The path to resolve
140
+ :return: ResolverOutput
141
+ """
142
+ return self._fw.resolve(path)
143
+
144
+ def lookup(self, path):
145
+ """Perform a path based lookup of a single node in the Flywheel hierarchy.
146
+
147
+ :param str path: (required) The path to resolve
148
+ :return: ResolverOutput
149
+ """
150
+ return self._fw.lookup(path)
151
+
152
+ def file_url(self, path):
153
+ """Perform a path based lookup of a file in the Flywheel hierarchy, and return a single-use download URL.
154
+
155
+ :param str path: (required) The path to resolve
156
+ :return: The file URL if found, otherwise raises an error
157
+ """
158
+ return self._fw.file_url(path)
159
+
160
+ def download_tar(self, containers, dest_file, include_types=None, exclude_types=None):
161
+ """Download the given set of containers as a tarball to dest_file.
162
+
163
+ Supports downloading Projects, Sessions, Acquisitions and/or Analyses.
164
+
165
+ :param containers: (required) The container, or list of containers to download.
166
+ :param str dest_file: (required) The destination file on disk
167
+ :param list include_types: The optional list of types to include in the download (e.g. ['nifti'])
168
+ :param list exclude_types: The optional list of types to exclude from the download (e.g. ['dicom'])
169
+ :return: A summary of the download
170
+ """
171
+ return self._fw.download_tar(containers, dest_file, include_types=include_types, exclude_types=exclude_types)
172
+
173
+ def download_zip(self, containers, dest_file, include_types=None, exclude_types=None):
174
+ """Download the given set of containers as a zip archive to dest_file.
175
+
176
+ Supports downloading Projects, Sessions, Acquisitions and/or Analyses.
177
+
178
+ :param containers: (required) The container, or list of containers to download.
179
+ :param str dest_file: (required) The destination file on disk
180
+ :param list include_types: The optional list of types to include in the download (e.g. ['nifti'])
181
+ :param list exclude_types: The optional list of types to exclude from the download (e.g. ['dicom'])
182
+ :return: A summary of the download
183
+ """
184
+ return self._fw.download_zip(containers, dest_file, include_types=include_types, exclude_types=exclude_types)
185
+
186
+ @property
187
+ def users(self):
188
+ """Returns the users finder object"""
189
+ return self._fw.users
190
+
191
+ @property
192
+ def groups(self):
193
+ """Returns the groups finder object"""
194
+ return self._fw.groups
195
+
196
+ @property
197
+ def projects(self):
198
+ """Returns the projects finder object"""
199
+ return self._fw.projects
200
+
201
+ @property
202
+ def subjects(self):
203
+ """Returns the subjects finder object"""
204
+ return self._fw.subjects
205
+
206
+ @property
207
+ def sessions(self):
208
+ """Returns the sessions finder object"""
209
+ return self._fw.sessions
210
+
211
+ @property
212
+ def acquisitions(self):
213
+ """Returns the acquisitions finder object"""
214
+ return self._fw.acquisitions
215
+
216
+ @property
217
+ def jobs(self):
218
+ """Returns the jobs finder object"""
219
+ return self._fw.jobs
220
+
221
+ @property
222
+ def gears(self):
223
+ """Returns the gears finder object"""
224
+ return self._fw.gears
225
+
226
+ @property
227
+ def collections(self):
228
+ """Returns the collections finder object"""
229
+ return self._fw.collections
230
+
231
+ @property
232
+ def data_view_executions(self):
233
+ """Returns the data_view_executions finder object"""
234
+ return self._fw.data_view_executions
235
+
236
+ def View(self, **kwargs):
237
+ """Short-hand for ``flywheel.ViewBuilder(**kwargs).build()``
238
+
239
+ :param kwargs: The arguments to pass directly to ViewBuilder
240
+ :return: The built data view
241
+ """
242
+ return ViewBuilder(**kwargs).build()
243
+
244
+ def print_view_columns(self, file=sys.stdout):
245
+ """Print a list of column aliases that can be used in data views.
246
+
247
+ :param file-like file: The file to print to
248
+ """
249
+ return self._fw.print_view_columns(file=file)
250
+
251
+ def read_view_data(self, view, container_id, decode=True, **kwargs):
252
+ """Execute a data view against container, and return a file-like object that can be streamed.
253
+
254
+ :param view: The view id or DataView object to execute.
255
+ :type view: str or DataView
256
+ :param str container_id: The id of the container to execute the view against
257
+ :param bool decode: Whether or not to decode the stream to utf-8 (default is true)
258
+ :param kwargs: Additional arguments to pass to the evaluate_view call. (e.g. format='csv')
259
+ :return: A file-like object where the contents can be read
260
+ """
261
+ return self._fw.read_view_data(view, container_id, decode=decode, **kwargs)
262
+
263
+ def read_view_dataframe(self, view, container_id, opts=None, **kwargs):
264
+ """Execute a data view against container, and return a DataFrame.
265
+
266
+ NOTE: This requires that the pandas module be installed on the system.
267
+
268
+ :param view: The view id or DataView object to execute.
269
+ :type view: str or DataView
270
+ :param str container_id: The id of the container to execute the view against
271
+ :param object opts: Additional options to pass to the pandas read_json function
272
+ :param kwargs: Additional arguments to pass to the evaluate_view call.
273
+ :return: A pandas DataFrame
274
+ """
275
+ return self._fw.read_view_dataframe(view, container_id, opts=opts, **kwargs)
276
+
277
+
278
+ def save_view_data(self, view, container_id, dest_file, **kwargs):
279
+ """Execute a data view against container, and save the results to disk.
280
+
281
+ :param view: The view id or DataView object to execute.
282
+ :type view: str or DataView
283
+ :param str container_id: The id of the container to execute the view against
284
+ :param str dest_file: The destination file path
285
+ :param kwargs: Additional arguments to pass to the evaluate_view call. (e.g. format='csv')
286
+ """
287
+ return self._fw.save_view_data(view, container_id, dest_file, **kwargs)
288
+
289
+ def __getattr__(self, name):
290
+ # By default return flywheel attributes, but don't auto-complete them
291
+ return getattr(self._fw, name)
@@ -0,0 +1,308 @@
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
+ from __future__ import absolute_import
15
+
16
+ import copy
17
+ import logging
18
+ import multiprocessing
19
+ import sys
20
+ import urllib3
21
+
22
+ import six
23
+ from six.moves import http_client as httplib
24
+
25
+
26
+ class TypeWithDefault(type):
27
+ def __init__(cls, name, bases, dct):
28
+ super(TypeWithDefault, cls).__init__(name, bases, dct)
29
+ cls._default = None
30
+
31
+ def __call__(cls):
32
+ if cls._default is None:
33
+ cls._default = type.__call__(cls)
34
+ return copy.copy(cls._default)
35
+
36
+ def set_default(cls, default):
37
+ cls._default = copy.copy(default)
38
+
39
+
40
+ class Configuration(six.with_metaclass(TypeWithDefault, object)):
41
+ """NOTE: This class is auto generated by the swagger code generator program.
42
+
43
+ Ref: https://github.com/swagger-api/swagger-codegen
44
+ Do not edit the class manually.
45
+ """
46
+
47
+ def __init__(self):
48
+ """Constructor"""
49
+ # Property defaults
50
+ self.__debug = False
51
+ self.__logger_file = None
52
+ self.__logger_format = None
53
+ self.logger_formatter = None
54
+ self.__logging_filters = list()
55
+
56
+ # Default Base url
57
+ self.host = "https://dev.flywheel.io/api"
58
+ # Temp file folder for downloading files
59
+ self.temp_folder_path = None
60
+
61
+ # Authentication Settings
62
+ # dict to store API key(s)
63
+ self.api_key = {}
64
+ # dict to store API prefix (e.g. Bearer)
65
+ self.api_key_prefix = {}
66
+ # Username for HTTP basic authentication
67
+ self.username = ""
68
+ # Password for HTTP basic authentication
69
+ self.password = ""
70
+ # Logging Settings
71
+ self.logger = {}
72
+ self.logger["package_logger"] = logging.getLogger("flywheel")
73
+ self.logger["urllib3_logger"] = logging.getLogger("urllib3")
74
+ self.logger["http_client_logger"] = logging.getLogger("http.client")
75
+ # Log format
76
+ self.logger_format = '%(asctime)s %(levelname)s %(message)s'
77
+ # Log stream handler
78
+ self.logger_stream_handler = None
79
+ # Log file handler
80
+ self.logger_file_handler = None
81
+ # Debug file location
82
+ self.logger_file = None
83
+ # Debug switch
84
+ self.debug = False
85
+
86
+ # SSL/TLS verification
87
+ # Set this to false to skip verifying SSL certificate when calling API
88
+ # from https server.
89
+ self.verify_ssl = True
90
+ # Set this to customize the certificate file to verify the peer.
91
+ self.ssl_ca_cert = None
92
+ # client certificate file
93
+ self.cert_file = None
94
+ # client key file
95
+ self.key_file = None
96
+ # Set this to True/False to enable/disable SSL hostname verification.
97
+ self.assert_hostname = None
98
+
99
+ # urllib3 connection pool's maximum number of connections saved
100
+ # per pool. urllib3 uses 1 connection as default value, but this is
101
+ # not the best value when you are making a lot of possibly parallel
102
+ # requests to the same host, which is often the case here.
103
+ # cpu_count * 5 is used as default value to increase performance.
104
+ self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
105
+
106
+ # Proxy URL
107
+ self.proxy = None
108
+ # Safe chars for path_param
109
+ self.safe_chars_for_path_param = ''
110
+
111
+ @property
112
+ def logger_file(self):
113
+ """The logger file.
114
+
115
+ If the logger_file is None, then add stream handler and remove file
116
+ handler. Otherwise, add file handler and remove stream handler.
117
+
118
+ :param value: The logger_file path.
119
+ :type: str
120
+ """
121
+ return self.__logger_file
122
+
123
+ @logger_file.setter
124
+ def logger_file(self, value):
125
+ """The logger file.
126
+
127
+ If the logger_file is None, then add stream handler and remove file
128
+ handler. Otherwise, add file handler and remove stream handler.
129
+
130
+ :param value: The logger_file path.
131
+ :type: str
132
+ """
133
+ self.__logger_file = value
134
+ if self.__logger_file:
135
+ # If set logging file,
136
+ # then add file handler and remove stream handler.
137
+ self.logger_file_handler = logging.FileHandler(self.__logger_file)
138
+ self.logger_file_handler.setFormatter(self.logger_formatter)
139
+ for _, logger in six.iteritems(self.logger):
140
+ logger.addHandler(self.logger_file_handler)
141
+ if self.logger_stream_handler:
142
+ logger.removeHandler(self.logger_stream_handler)
143
+ else:
144
+ # If not set logging file,
145
+ # then add stream handler and remove file handler.
146
+ self.logger_stream_handler = logging.StreamHandler()
147
+ self.logger_stream_handler.setFormatter(self.logger_formatter)
148
+ for _, logger in six.iteritems(self.logger):
149
+ logger.addHandler(self.logger_stream_handler)
150
+ if self.logger_file_handler:
151
+ logger.removeHandler(self.logger_file_handler)
152
+
153
+ @property
154
+ def debug(self):
155
+ """Debug status
156
+
157
+ :param value: The debug status, True or False.
158
+ :type: bool
159
+ """
160
+ return self.__debug
161
+
162
+ @debug.setter
163
+ def debug(self, value):
164
+ """Debug status
165
+
166
+ :param value: The debug status, True or False.
167
+ :type: bool
168
+ """
169
+ self.__debug = value
170
+ if self.__debug:
171
+ # if debug status is True, turn on debug logging
172
+ for _, logger in six.iteritems(self.logger):
173
+ logger.setLevel(logging.DEBUG)
174
+ # turn on httplib debug
175
+ httplib.HTTPConnection.debuglevel = 1
176
+ httpclient_logger = self.logger["http_client_logger"]
177
+ httplib.print = lambda *args: httpclient_logger.log(
178
+ logging.DEBUG, " ".join(map(str, args)))
179
+ else:
180
+ # if debug status is False, turn off debug logging,
181
+ # setting log level to default `logging.WARNING`
182
+ for _, logger in six.iteritems(self.logger):
183
+ logger.setLevel(logging.WARNING)
184
+ # turn off httplib debug
185
+ httplib.HTTPConnection.debuglevel = 0
186
+ if hasattr(httplib, "print"):
187
+ delattr(httplib, "print")
188
+
189
+ @property
190
+ def logger_format(self):
191
+ """The logger format.
192
+
193
+ The logger_formatter will be updated when sets logger_format.
194
+
195
+ :param value: The format string.
196
+ :type: str
197
+ """
198
+ return self.__logger_format
199
+
200
+ @logger_format.setter
201
+ def logger_format(self, value):
202
+ """The logger format.
203
+
204
+ The logger_formatter will be updated when sets logger_format.
205
+
206
+ :param value: The format string.
207
+ :type: str
208
+ """
209
+ self.__logger_format = value
210
+ self.logger_formatter = logging.Formatter(self.__logger_format)
211
+
212
+ def get_api_key_with_prefix(self, identifier):
213
+ """Gets API key (with prefix if set).
214
+
215
+ :param identifier: The identifier of apiKey.
216
+ :return: The token for api key authentication.
217
+ """
218
+ if (self.api_key.get(identifier) and
219
+ self.api_key_prefix.get(identifier)):
220
+ return self.api_key_prefix[identifier] + ' ' + self.api_key[identifier] # noqa: E501
221
+ elif self.api_key.get(identifier):
222
+ return self.api_key[identifier]
223
+
224
+ def get_basic_auth_token(self):
225
+ """Gets HTTP basic authentication header (string).
226
+
227
+ :return: The token for basic HTTP authentication.
228
+ """
229
+ return urllib3.util.make_headers(
230
+ basic_auth=self.username + ':' + self.password
231
+ ).get('authorization')
232
+
233
+ def auth_settings(self):
234
+ """Gets Auth Settings dict for api client.
235
+
236
+ :return: The Auth Settings information dict.
237
+ """
238
+ return {
239
+ 'ApiKey':
240
+ {
241
+ 'type': 'api_key',
242
+ 'in': 'header',
243
+ 'key': 'Authorization',
244
+ 'value': self.get_api_key_with_prefix('Authorization')
245
+ },
246
+ }
247
+
248
+ def to_debug_report(self):
249
+ """Gets the essential information for debugging.
250
+
251
+ :return: The report for debugging.
252
+ """
253
+ return "Python SDK Debug Report:\n"\
254
+ "OS: {env}\n"\
255
+ "Python Version: {pyversion}\n"\
256
+ "Version of the API: 21.2.0\n"\
257
+ "SDK Package Version: 21.2.0".\
258
+ format(env=sys.platform, pyversion=sys.version)
259
+
260
+ def enable_message_cutoff(self, message_cutoff):
261
+ self.__logging_filters[:] = []
262
+
263
+ class SendFilter(logging.Filter):
264
+ def __init__(self, cutoff):
265
+ self.cutoff = cutoff
266
+
267
+ def filter(self, record):
268
+ # http.client lib doesn't use formatting strings
269
+ if record.msg.startswith("send: b'") and record.msg.endswith("'"):
270
+ data = record.msg[8:-1].encode("utf8").decode("unicode_escape")
271
+ data_len = len(data)
272
+ if data_len > self.cutoff:
273
+ first_part = data[:(self.cutoff//2)]
274
+ last_part = data[-(self.cutoff//2):]
275
+ shortened = f"{first_part}...[{data_len} bytes total]...{last_part}"
276
+ shortened_bytes = shortened.encode("utf8")
277
+ record.msg = f"send: {shortened_bytes!r}"
278
+ return True
279
+
280
+ filt = SendFilter(message_cutoff)
281
+ logger = logging.getLogger("http.client")
282
+ logger.addFilter(filt)
283
+ self.__logging_filters.append((logger, filt))
284
+
285
+ class ReceiveFilter(logging.Filter):
286
+ def __init__(self, cutoff):
287
+ self.cutoff = cutoff
288
+
289
+ def filter(self, record):
290
+ if record.msg == "response body: %s" and len(record.args) == 1:
291
+ body = record.args[0]
292
+ body_len = len(body)
293
+ if body_len > self.cutoff:
294
+ first_part = body[:(self.cutoff//2)]
295
+ last_part = body[-(self.cutoff//2):]
296
+ shortened = f"{first_part}...[{body_len} bytes total]...{last_part}"
297
+ record.args = (shortened,)
298
+ return True
299
+
300
+ filt = ReceiveFilter(message_cutoff)
301
+ logger = logging.getLogger("flywheel.rest")
302
+ logger.addFilter(filt)
303
+ self.__logging_filters.append((logger, filt))
304
+
305
+ def disable_message_cutoff(self):
306
+ for logger, filt in self.__logging_filters:
307
+ logger.removeFilter(filt)
308
+ self.__logging_filters[:] = []
@@ -0,0 +1,65 @@
1
+ """Provides Drone-based login credentials"""
2
+
3
+ import requests
4
+
5
+ from . import util
6
+ from .client import Client
7
+ from .rest import ApiException
8
+
9
+
10
+ def create_drone_client(host, secret, method, name, port=443, **kwargs):
11
+ """Create a Client instance using drone credentials.
12
+
13
+ :param str host: The hostname of the flywheel instance
14
+ :param str secret: The drone secret
15
+ :param str method: The method (device type)
16
+ :param str name: The name of the device
17
+ :param int port: The optional port (if not 443)
18
+ :param kwargs: Additional arguments to pass to the created Client instance
19
+ :return: The authorized Client instance
20
+ :rtype: flywheel.Client
21
+ """
22
+ with requests.Session() as session:
23
+ util.set_verify_ssl(session)
24
+
25
+ # Get auth status to determine device id
26
+ force_insecure = kwargs.pop("_force_insecure", False) is True
27
+ if force_insecure:
28
+ base_uri = "http://{}:{}/api".format(host, port)
29
+ else:
30
+ base_uri = "https://{}:{}/api".format(host, port)
31
+
32
+ session.headers.update(
33
+ {
34
+ "X-SciTran-Auth": secret,
35
+ "X-SciTran-Method": method,
36
+ "X-SciTran-Name": name,
37
+ }
38
+ )
39
+
40
+ # Get the status
41
+ resp = session.get(base_uri + "/auth/status")
42
+ if not resp.ok:
43
+ raise ApiException(http_resp=resp)
44
+
45
+ status = resp.json()
46
+ if not status["is_device"] or not status.get("origin", {}).get("id"):
47
+ raise RuntimeError("Provided login is not a device login")
48
+
49
+ # Get the device, with API key
50
+ device_id = status["origin"]["id"]
51
+ resp = session.get(base_uri + "/devices/" + device_id)
52
+ if not resp.ok:
53
+ raise ApiException(http_resp=resp)
54
+
55
+ device = resp.json()
56
+ if "key" not in device:
57
+ raise RuntimeError("Got device, but could not get key!")
58
+
59
+ # NOTE: _force_insecure is not recommended nor supported for general consumption
60
+ if force_insecure:
61
+ api_key = "{}:{}:__force_insecure:{}".format(host, port, device["key"])
62
+ else:
63
+ api_key = "{}:{}:{}".format(host, port, device["key"])
64
+
65
+ return Client(api_key, **kwargs)