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
@@ -0,0 +1,449 @@
1
+ from .models import (
2
+ DataView,
3
+ DataViewAnalysisFilterSpec,
4
+ DataViewColumnSpec,
5
+ DataViewFileSpec,
6
+ DataViewGroupBy,
7
+ DataViewGroupByColumn,
8
+ DataViewNameFilterSpec,
9
+ DataViewZipFilterSpec,
10
+ )
11
+
12
+
13
+ class ViewBuilder(object):
14
+ """Builder class that assists in constructing a DataView object.
15
+
16
+ :param str label: The optional label, if saving this data view.
17
+ :param bool public: Whether or not to make this data view public when saving it.
18
+ :param str match: The file match type, one of: first, last, newest, oldest, all
19
+ :param str zip_files: The zip file filter, see the zip_member_filter function
20
+ :param list columns: The columns or column groups to add
21
+ :param bool process_files: Whether or not to process files, default is true
22
+ :param bool include_ids: Whether or not to include id columns, default is true
23
+ :param bool include_labels: Whether or not to include label columns, default is true
24
+ :param bool error_column: Whether or not to include errors column, default is true
25
+ :param Union[str, list, DataViewGroupBy] group_by: The Columns or column to group by
26
+ :param str filter: The dataview pagination filter to save on the spec
27
+ :param str container: When matching files, the container to match on
28
+ :param str filename: When matching files, the filename pattern to match
29
+ :param str analysis_label: When matching analysis files, the label match string
30
+ :param str analysis_gear_name: When matching analysis files, the gear name match string
31
+ :param str analysis_gear_version: When matching analysis files, the gear version match string
32
+ :param bool sort: Option to sort results
33
+ """
34
+
35
+ def __init__(
36
+ self,
37
+ label=None,
38
+ description=None,
39
+ match=None,
40
+ zip_files=None,
41
+ columns=None,
42
+ process_files=True,
43
+ include_ids=True,
44
+ include_labels=True,
45
+ error_column=None,
46
+ group_by=None,
47
+ filter=None,
48
+ container=None,
49
+ filename=None,
50
+ analysis_label=None,
51
+ analysis_gear_name=None,
52
+ analysis_gear_version=None,
53
+ sort=True,
54
+ ):
55
+ self._label = label
56
+ self._description = description
57
+ self._columns = []
58
+ self._file_columns = []
59
+ self._file_container = None
60
+ self._file_filter = None
61
+ self._file_zip_filter = None
62
+ self._file_format = None
63
+ self._file_format_opts = {}
64
+ self._file_match = match
65
+ self._filter = filter
66
+
67
+ if isinstance(group_by, str):
68
+ self._group_by = DataViewGroupBy(columns=[DataViewGroupByColumn(src=group_by)])
69
+ elif isinstance(group_by, list):
70
+ self._group_by = DataViewGroupBy(columns=[DataViewGroupByColumn(src=col) for col in group_by])
71
+ elif isinstance(group_by, DataViewGroupBy):
72
+ self._group_by = group_by
73
+ else:
74
+ self._group_by = None
75
+
76
+ self._process_files = process_files
77
+ self._analysis_filter = None
78
+ self._include_ids = include_ids
79
+ self._include_labels = include_labels
80
+ self._error_column = error_column
81
+ self._missing_data_strategy = None
82
+ self._sort = sort
83
+
84
+ if zip_files is not None:
85
+ self.zip_member_filter(zip_files)
86
+
87
+ if filename is not None:
88
+ self.files(
89
+ container,
90
+ filename,
91
+ analysis_label=analysis_label,
92
+ analysis_gear_name=analysis_gear_name,
93
+ analysis_gear_version=analysis_gear_version,
94
+ )
95
+
96
+ # Add column/columns
97
+ if isinstance(columns, list):
98
+ for column in columns:
99
+ if isinstance(column, tuple):
100
+ self.column(*column)
101
+ else:
102
+ self.column(column)
103
+ elif isinstance(columns, tuple):
104
+ self.column(*columns)
105
+ elif columns is not None:
106
+ self.column(columns)
107
+
108
+ def build(self):
109
+ """Build the DataView constructed with this builder.
110
+
111
+ :return: The constructed DataView
112
+ """
113
+ file_spec = None
114
+ if self._file_container and self._file_filter:
115
+ file_spec = DataViewFileSpec(
116
+ container=self._file_container,
117
+ analysis_filter=self._analysis_filter,
118
+ filter=self._file_filter,
119
+ zip_member=self._file_zip_filter,
120
+ match=self._file_match,
121
+ format=self._file_format,
122
+ format_options=self._file_format_opts,
123
+ process_files=self._process_files,
124
+ columns=self._file_columns,
125
+ )
126
+ elif (
127
+ self._file_container
128
+ or self._file_filter
129
+ or self._file_columns
130
+ or self._file_zip_filter
131
+ or self._file_format
132
+ or self._analysis_filter
133
+ ):
134
+ raise ValueError("Both file_container and file_filter are required to process files!")
135
+ self._check_missing_data_strategy_and_error_column(self._missing_data_strategy, self._error_column)
136
+ return DataView(
137
+ label=self._label,
138
+ description=self._description,
139
+ columns=self._columns,
140
+ group_by=self._group_by,
141
+ file_spec=file_spec,
142
+ filter=self._filter,
143
+ include_ids=self._include_ids,
144
+ include_labels=self._include_labels,
145
+ error_column=self._error_column,
146
+ missing_data_strategy=self._missing_data_strategy,
147
+ sort=self._sort,
148
+ )
149
+
150
+ def label(self, label):
151
+ """Set the label for this data view.
152
+
153
+ :param str label: The new label for the data view.
154
+ :return: self
155
+ """
156
+ self._label = label
157
+
158
+ def description(self, description):
159
+ """Set the description for this data view.
160
+
161
+ :param str description: The new description for the data view.
162
+ :return: self
163
+ """
164
+ self._description = description
165
+ return self
166
+
167
+ def public(self, value=True):
168
+ """Set whether or not this data view should be made public.
169
+
170
+ :param bool value: True if the data view should be public. (default)
171
+ :return: self
172
+ """
173
+ self._public = value
174
+ return self
175
+
176
+ def filter(self, filter):
177
+ """Set the filter for this data view.
178
+
179
+ :param str filter: The dataview pagination filter to save on the spec.
180
+ :return: self
181
+ """
182
+ self._filter = filter
183
+ return self
184
+
185
+ def group_by(self, src, dst=None):
186
+ """Define a column for this data view.
187
+
188
+ :param str src: The source field, or column alias name.
189
+ :param str dst: The optional destination field (defaults to source)
190
+ :return: self
191
+ """
192
+ src, dst, _ = self._preprocess_column(src, dst, None)
193
+ if self._group_by is None:
194
+ self._group_by = DataViewGroupBy(columns=[])
195
+ self._group_by.columns.append(DataViewGroupByColumn(src=src, dst=dst))
196
+ return self
197
+
198
+ def column(self, src, dst=None, type=None, accumulator=None, expr=None):
199
+ """Define a column for this data view.
200
+
201
+ :param str src: The source field, or column alias name.
202
+ :param str dst: The optional destination field (defaults to source)
203
+ :param str type: The optional type for this column, one of: int, float, string bool.
204
+ :param str accumulator: The optional accumulation operation for group by aggregation.
205
+ :param str expr: The optional expression to apply
206
+ :return: self
207
+ """
208
+ src, dst, type = self._preprocess_column(src, dst, type)
209
+ self._columns.append(DataViewColumnSpec(src=src, dst=dst, type=type, accumulator=accumulator, expr=expr))
210
+ return self
211
+
212
+ def files(
213
+ self,
214
+ container,
215
+ filename,
216
+ analysis_label=None,
217
+ analysis_gear_name=None,
218
+ analysis_gear_version=None,
219
+ ):
220
+ """Set filter for matching files
221
+
222
+ Container is one of project, subject, session, acquisition
223
+ Filename filters can use the ``(*, ?)`` wildcards
224
+ Analysis filters also support wildcards
225
+
226
+ :param str container: When matching files, the container to match on: one of project, subject, session, acquisition
227
+ :param str filename: When matching files, the filename pattern to match
228
+ :param str analysis_label: When matching analysis files, the label match string
229
+ :param str analysis_gear_name: When matching analysis files, the gear name match string
230
+ :param str analysis_gear_version: When matching analysis files, the gear version match string
231
+ :return: self
232
+ """
233
+ if not container or not filename:
234
+ raise ValueError("Both container and filename are required for file matching")
235
+
236
+ self._file_container = container
237
+ self._file_filter = DataViewNameFilterSpec(value=filename)
238
+
239
+ if analysis_label or analysis_gear_name or analysis_gear_version:
240
+ self.analysis_filter(
241
+ label=analysis_label,
242
+ gear_name=analysis_gear_name,
243
+ gear_version=analysis_gear_version,
244
+ )
245
+
246
+ return self
247
+
248
+ def file_column(self, src, dst=None, type=None):
249
+ """Define a column to extract from a file.
250
+
251
+ :param str src: The source field.
252
+ :param str dst: The optional destination field (defaults to source)
253
+ :param str type: The optional type for this column, one of: int, float, string bool.
254
+ :return: self
255
+ """
256
+ self._file_columns.append(DataViewColumnSpec(src=src, dst=dst, type=type))
257
+ return self
258
+
259
+ def file_container(self, container):
260
+ """Set the container where files should be matched.
261
+
262
+ :param str container: The container name, one of: project, subject, session, acquisition
263
+ :return: self
264
+ """
265
+ self._file_container = container
266
+ return self
267
+
268
+ def file_match(self, match_value):
269
+ """Set the resolution strategy if multiple matching files or analyses are encountered.
270
+
271
+ :param str match_value: The file match type, one of: first, last, newest, oldest, all
272
+ :return: self
273
+ """
274
+ self._file_match = match_value
275
+ return self
276
+
277
+ def analysis_filter(self, label=None, gear_name=None, gear_version=None, regex=False):
278
+ """Set the filter to use for matching analyses. If this is set, then analyses files will be matched instead of container.
279
+
280
+ :param str label: The label match string, wildcards ``(*, ?)`` are supported.
281
+ :param str gear_name: The gear name match string, wildcards ``(*, ?)`` are supported.
282
+ :param str gear_version: The gear version match string, wildcards ``(*, ?)`` are supported.
283
+ :param bool regex: Whether to treat the match string as a regular expression (default is False)
284
+ :return: self
285
+ """
286
+ if not self._analysis_filter:
287
+ self._analysis_filter = DataViewAnalysisFilterSpec()
288
+
289
+ if label:
290
+ self._analysis_filter.label = DataViewNameFilterSpec(value=label, regex=regex)
291
+ if gear_name:
292
+ self._analysis_filter.gear_name = DataViewNameFilterSpec(value=gear_name, regex=regex)
293
+ if gear_version:
294
+ self._analysis_filter.gear_version = DataViewNameFilterSpec(value=gear_version, regex=regex)
295
+ return self
296
+
297
+ def file_filter(self, value=None, regex=False):
298
+ """Set the filter to use for matching files.
299
+
300
+ :param str value: The filename match string, wildcards ``(*, ?)`` are supported.
301
+ :param bool regex: Whether to treat the match string as a regular expression (default is False)
302
+ :return: self
303
+ """
304
+ self._file_filter = DataViewNameFilterSpec(value=value, regex=regex)
305
+ return self
306
+
307
+ def zip_member_filter(self, value=None, regex=False, match=None):
308
+ """Set the filter to use for matching members of a zip file.
309
+
310
+ :param str value: The filename match string, wildcards ``(*, ?)`` are supported.
311
+ :param bool regex: Whether to treat the match string as a regular expression (default is False)
312
+ :param str match: The file match type, one of: first, last, newest, oldest, all
313
+ :return: self
314
+ """
315
+ self._file_zip_filter = DataViewZipFilterSpec(value=value, regex=regex, match=match)
316
+ return self
317
+
318
+ def file_format(self, format_name):
319
+ """Set the expected format of files to read.
320
+
321
+ NOTE: This shouldn't be needed very often. If not specified, autodetect will be used for processing files.
322
+
323
+ :param str format_name: The expected file format, one of: csv, tsv, json.
324
+ :return: self
325
+ """
326
+ self._file_format = format_name
327
+ return self
328
+
329
+ def file_format_options(self, **kwargs):
330
+ """Set additional options for the file format. (e.g. arguments to be passed to csv reader function)
331
+
332
+ :param dict kwargs: Arguments to pass to the file reader
333
+ :return: self
334
+ """
335
+ self._file_format_opts.update(kwargs)
336
+ return self
337
+
338
+ def process_files(self, value):
339
+ """Set whether or not to process files (default is True)
340
+
341
+ By default, files will be read and return a row for each row in the file. If you just want file attributes or info
342
+ instead, you can set this to False.
343
+
344
+ :param bool value: Whether or not to process files
345
+ :return: self
346
+ """
347
+ self._process_files = value
348
+ return self
349
+
350
+ def include_labels(self, value=True):
351
+ """Set whether or not to include the label columns by default.
352
+
353
+ :param bool value: Whether or not to include labels (default is true)
354
+ :return: self
355
+ """
356
+ self._include_labels = value
357
+ return self
358
+
359
+ def include_ids(self, value=True):
360
+ """Set whether or not to include the id columns by default.
361
+
362
+ :param bool value: Whether or not to include ids (default is true)
363
+ :return: self
364
+ """
365
+ self._include_ids = value
366
+ return self
367
+
368
+ def error_column(self, value=True):
369
+ """Set whether or not to include error column by default.
370
+
371
+ :param bool value: Whether or not to include errors (default is true)
372
+ :return: self
373
+ """
374
+ self._error_column = value
375
+ return self
376
+
377
+ def missing_data_strategy(self, value):
378
+ """Set the resolution strategy if rows are missing data for a column. The default is to replace the column value with None.
379
+
380
+ :param str value: The strategy to use for missing data, one of: none, drop-row
381
+ :return: self
382
+ """
383
+ self._missing_data_strategy = value
384
+ return self
385
+
386
+ def sort(self, value=True):
387
+ """Set the option to opt out of sorting the rows by setting false
388
+
389
+ :param bool value: Opt out of sorting
390
+ :return: self
391
+ """
392
+ self._sort = value
393
+ return self
394
+
395
+ def _check_missing_data_strategy_and_error_column(self, missing_data_strategy=None, error_column=None):
396
+ """
397
+ If missing_data_strategy is 'drop-row' and if the user doesn't explicitly
398
+ set 'error_column'" to True, 'error_column' should be 'False'.
399
+ """
400
+ if error_column is None:
401
+ self._error_column = missing_data_strategy != "drop-row"
402
+
403
+ def _preprocess_column(self, src, dst, type):
404
+ """If file is in src name, then select but don't process files"""
405
+ src_parts = src.split(".")
406
+ file_idx = src_parts.index("file") if "file" in src_parts else -1
407
+ if file_idx < 1:
408
+ return src, dst, type
409
+
410
+ analysis_container = False
411
+ file_container = src_parts[0]
412
+ if file_idx > 1:
413
+ analysis_container = True
414
+
415
+ # If we currently have a file filter, validate
416
+ if self._file_container:
417
+ if file_container != self._file_container:
418
+ raise ValueError(
419
+ "Can only select files one one container ({} already selected)".format(self._file_container)
420
+ )
421
+ if analysis_container and not self._analysis_filter:
422
+ raise ValueError(
423
+ "Can only select files one one container ({} already selected)".format(self._file_container)
424
+ )
425
+ elif self._analysis_filter and not analysis_container:
426
+ raise ValueError(
427
+ "Can only select files one one container ({} analyses already selected)".format(
428
+ self._file_container
429
+ )
430
+ )
431
+ else:
432
+ # Setup the file matches.
433
+ # In this mode, we match all files, and drop any rows with missing data
434
+ self._file_container = file_container
435
+ self._file_filter = DataViewNameFilterSpec(value="*")
436
+ if analysis_container:
437
+ label_filter = DataViewNameFilterSpec(value="*")
438
+ self._analysis_filter = DataViewAnalysisFilterSpec(label=label_filter)
439
+
440
+ self._file_match = "all"
441
+ self._error_column = False
442
+ self._missing_data_strategy = "drop-row"
443
+ self._process_files = False
444
+
445
+ if not dst:
446
+ dst = src
447
+ src = ".".join(src_parts[file_idx:])
448
+
449
+ return src, dst, type
@@ -0,0 +1,42 @@
1
+ Metadata-Version: 2.4
2
+ Name: flywheel-sdk
3
+ Version: 21.2.0
4
+ Summary: Flywheel SDK
5
+ Project-URL: homepage, https://flywheel.io
6
+ Project-URL: documentation, https://api-docs.flywheel.io
7
+ Author-email: Flywheel <support@flywheel.io>
8
+ License-Expression: LicenseRef-Proprietary
9
+ License-File: LICENSE.txt
10
+ Keywords: flywheel,medical imaging,sdk
11
+ Requires-Python: >=3.10
12
+ Requires-Dist: certifi>=2024.12.14
13
+ Requires-Dist: packaging<26,>=25
14
+ Requires-Dist: python-dateutil>=2.9.0.post0
15
+ Requires-Dist: requests-toolbelt==1.0.0
16
+ Requires-Dist: requests>=2.31.0
17
+ Requires-Dist: six>=1.17.0
18
+ Requires-Dist: urllib3<3.0,>=2.5
19
+ Provides-Extra: asyncio
20
+ Requires-Dist: aiohttp>=3.8.4; extra == 'asyncio'
21
+ Provides-Extra: tornado
22
+ Requires-Dist: tornado>=6.3.3; extra == 'tornado'
23
+ Description-Content-Type: text/markdown
24
+
25
+ # Flywheel SDK
26
+
27
+ An SDK for interaction with a remote Flywheel instance.
28
+
29
+ ## Getting Started
30
+
31
+ ```py
32
+
33
+ import flywheel
34
+ from pprint import pprint
35
+
36
+ fw = flywheel.Client('api-key')
37
+
38
+ user = fw.get_current_user()
39
+ pprint(user)
40
+
41
+ fw.upload_file_to_project('project-id', '/path/to/file.txt')
42
+ ```