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.
- flywheel/__init__.py +784 -0
- flywheel/api/__init__.py +46 -0
- flywheel/api/acquisitions_api.py +5014 -0
- flywheel/api/analyses_api.py +3848 -0
- flywheel/api/audit_trail_api.py +568 -0
- flywheel/api/auth_api.py +121 -0
- flywheel/api/batch_api.py +630 -0
- flywheel/api/bulk_api.py +140 -0
- flywheel/api/change_log_api.py +254 -0
- flywheel/api/collections_api.py +3913 -0
- flywheel/api/config_api.py +299 -0
- flywheel/api/container_tasks_api.py +137 -0
- flywheel/api/container_type_api.py +137 -0
- flywheel/api/containers_api.py +4784 -0
- flywheel/api/custom_filters_api.py +466 -0
- flywheel/api/data_view_executions_api.py +549 -0
- flywheel/api/dataexplorer_api.py +1192 -0
- flywheel/api/devices_api.py +1071 -0
- flywheel/api/dimse_api.py +814 -0
- flywheel/api/download_api.py +261 -0
- flywheel/api/files_api.py +1868 -0
- flywheel/api/form_responses_api.py +703 -0
- flywheel/api/gears_api.py +1875 -0
- flywheel/api/groups_api.py +2829 -0
- flywheel/api/jobs_api.py +2320 -0
- flywheel/api/jupyterlab_servers_api.py +245 -0
- flywheel/api/modalities_api.py +562 -0
- flywheel/api/packfiles_api.py +121 -0
- flywheel/api/projects_api.py +7820 -0
- flywheel/api/protocols_api.py +757 -0
- flywheel/api/reports_api.py +1057 -0
- flywheel/api/resolve_api.py +276 -0
- flywheel/api/roles_api.py +563 -0
- flywheel/api/sessions_api.py +5296 -0
- flywheel/api/site_api.py +1552 -0
- flywheel/api/staffing_pools_api.py +677 -0
- flywheel/api/subjects_api.py +5349 -0
- flywheel/api/tasks_api.py +897 -0
- flywheel/api/tree_api.py +266 -0
- flywheel/api/uids_api.py +140 -0
- flywheel/api/upload_api.py +842 -0
- flywheel/api/users_api.py +2142 -0
- flywheel/api/views_api.py +1089 -0
- flywheel/api_client.py +748 -0
- flywheel/client.py +291 -0
- flywheel/configuration.py +308 -0
- flywheel/drone_login.py +65 -0
- flywheel/file_spec.py +67 -0
- flywheel/finder.py +168 -0
- flywheel/flywheel.py +9867 -0
- flywheel/gear_context.py +374 -0
- flywheel/models/__init__.py +726 -0
- flywheel/models/access_level.py +30 -0
- flywheel/models/access_permission.py +197 -0
- flywheel/models/access_permission_output.py +192 -0
- flywheel/models/access_permission_update.py +166 -0
- flywheel/models/access_type.py +54 -0
- flywheel/models/accumulator.py +33 -0
- flywheel/models/acquisition.py +25 -0
- flywheel/models/acquisition_container_output.py +34 -0
- flywheel/models/acquisition_copy_input.py +223 -0
- flywheel/models/acquisition_input.py +297 -0
- flywheel/models/acquisition_list_output.py +767 -0
- flywheel/models/acquisition_modify_input.py +299 -0
- flywheel/models/acquisition_node.py +35 -0
- flywheel/models/acquisition_output.py +767 -0
- flywheel/models/acquisition_parents.py +241 -0
- flywheel/models/acquisition_template_options.py +275 -0
- flywheel/models/acquisition_upsert_input.py +383 -0
- flywheel/models/acquisition_upsert_output.py +243 -0
- flywheel/models/action.py +91 -0
- flywheel/models/adhoc_analysis_input.py +247 -0
- flywheel/models/analysis.py +25 -0
- flywheel/models/analysis_container_output.py +34 -0
- flywheel/models/analysis_files_create_ticket_output.py +241 -0
- flywheel/models/analysis_input.py +310 -0
- flywheel/models/analysis_input_legacy.py +25 -0
- flywheel/models/analysis_list_output.py +680 -0
- flywheel/models/analysis_list_output_inflated_job.py +650 -0
- flywheel/models/analysis_modify_input.py +191 -0
- flywheel/models/analysis_node.py +35 -0
- flywheel/models/analysis_output.py +683 -0
- flywheel/models/analysis_output_inflated_job.py +674 -0
- flywheel/models/analysis_parents.py +270 -0
- flywheel/models/analysis_update.py +25 -0
- flywheel/models/api_key_input_with_optional_label.py +191 -0
- flywheel/models/api_key_output.py +297 -0
- flywheel/models/as_storage.py +298 -0
- flywheel/models/assignee.py +192 -0
- flywheel/models/assignee_type.py +29 -0
- flywheel/models/audit_trail_report.py +486 -0
- flywheel/models/audit_trail_report_status.py +32 -0
- flywheel/models/auth0_auth_out.py +323 -0
- flywheel/models/auth0_options_out.py +319 -0
- flywheel/models/auth_out.py +357 -0
- flywheel/models/auth_session_output.py +272 -0
- flywheel/models/avatars.py +218 -0
- flywheel/models/aws_creds.py +191 -0
- flywheel/models/aws_storage.py +354 -0
- flywheel/models/azure_creds.py +190 -0
- flywheel/models/base_aet.py +245 -0
- flywheel/models/base_compute.py +426 -0
- flywheel/models/batch.py +360 -0
- flywheel/models/batch_cancel_output.py +36 -0
- flywheel/models/batch_create_filters.py +220 -0
- flywheel/models/batch_job_analysis_input.py +281 -0
- flywheel/models/batch_jobs_proposal_input.py +36 -0
- flywheel/models/batch_proposal.py +25 -0
- flywheel/models/batch_proposal_detail.py +36 -0
- flywheel/models/batch_proposal_input.py +25 -0
- flywheel/models/body.py +36 -0
- flywheel/models/body_regenerate_key_api_devices_device_id_key_post.py +25 -0
- flywheel/models/body_region.py +46 -0
- flywheel/models/bookmark.py +189 -0
- flywheel/models/bulk_move_input.py +272 -0
- flywheel/models/bulk_move_sessions.py +25 -0
- flywheel/models/callbacks_virus_scan_input.py +36 -0
- flywheel/models/cancelled_batch_output.py +163 -0
- flywheel/models/catalog_list_output.py +407 -0
- flywheel/models/central_out.py +299 -0
- flywheel/models/change.py +379 -0
- flywheel/models/change_log_container_type.py +38 -0
- flywheel/models/change_log_document.py +245 -0
- flywheel/models/change_method.py +33 -0
- flywheel/models/classic_batch_job_output.py +352 -0
- flywheel/models/classic_batch_job_output_inflated_jobs.py +379 -0
- flywheel/models/classic_batch_proposal_input.py +388 -0
- flywheel/models/classic_batch_proposal_output.py +471 -0
- flywheel/models/classification_add_delete.py +36 -0
- flywheel/models/classification_replace.py +36 -0
- flywheel/models/classification_update_input.py +36 -0
- flywheel/models/cohort.py +29 -0
- flywheel/models/collection.py +25 -0
- flywheel/models/collection_container_output.py +32 -0
- flywheel/models/collection_input.py +217 -0
- flywheel/models/collection_input_with_contents.py +248 -0
- flywheel/models/collection_node.py +192 -0
- flywheel/models/collection_node_level.py +31 -0
- flywheel/models/collection_operation.py +193 -0
- flywheel/models/collection_operation_type.py +29 -0
- flywheel/models/collection_output.py +639 -0
- flywheel/models/collection_with_stats.py +637 -0
- flywheel/models/column.py +286 -0
- flywheel/models/column_type.py +32 -0
- flywheel/models/common_classification.py +135 -0
- flywheel/models/common_deleted_count.py +25 -0
- flywheel/models/common_editions.py +25 -0
- flywheel/models/common_info.py +135 -0
- flywheel/models/common_join_origins.py +25 -0
- flywheel/models/common_key.py +36 -0
- flywheel/models/common_modified_count.py +25 -0
- flywheel/models/common_object_created.py +36 -0
- flywheel/models/common_project_settings.py +25 -0
- flywheel/models/common_settings.py +36 -0
- flywheel/models/complete_multipart_upload_output.py +189 -0
- flywheel/models/complete_s3_multipart_upload_input.py +241 -0
- flywheel/models/config_feature_map.py +36 -0
- flywheel/models/config_out.py +381 -0
- flywheel/models/config_output.py +36 -0
- flywheel/models/config_site_config_output.py +36 -0
- flywheel/models/config_site_settings.py +36 -0
- flywheel/models/config_site_settings_input.py +36 -0
- flywheel/models/conflict_types.py +30 -0
- flywheel/models/container_delete_reason.py +39 -0
- flywheel/models/container_filter.py +193 -0
- flywheel/models/container_id_view_input.py +521 -0
- flywheel/models/container_id_view_input_execute_and_save.py +308 -0
- flywheel/models/container_modify.py +536 -0
- flywheel/models/container_new_output.py +25 -0
- flywheel/models/container_node_min.py +350 -0
- flywheel/models/container_output.py +36 -0
- flywheel/models/container_output_with_files.py +283 -0
- flywheel/models/container_parents.py +311 -0
- flywheel/models/container_pipeline_input.py +536 -0
- flywheel/models/container_project_parents.py +25 -0
- flywheel/models/container_reference.py +193 -0
- flywheel/models/container_reference_with_label.py +219 -0
- flywheel/models/container_session_parents.py +25 -0
- flywheel/models/container_subject_parents.py +25 -0
- flywheel/models/container_type.py +39 -0
- flywheel/models/container_uidcheck.py +253 -0
- flywheel/models/container_update.py +135 -0
- flywheel/models/context_input.py +217 -0
- flywheel/models/copy_filter.py +299 -0
- flywheel/models/copy_status.py +32 -0
- flywheel/models/core_models_api_key_api_key_input.py +190 -0
- flywheel/models/core_models_audit_trail_create_report_input.py +273 -0
- flywheel/models/core_models_audit_trail_modify_report_input.py +167 -0
- flywheel/models/core_models_common_source.py +189 -0
- flywheel/models/core_models_jobs_api_key_input.py +191 -0
- flywheel/models/core_models_search_parent_type.py +33 -0
- flywheel/models/core_workflows_form_responses_models_form_parents.py +163 -0
- flywheel/models/core_workflows_form_responses_models_form_response_output.py +440 -0
- flywheel/models/core_workflows_reader_models_reader_task_parents.py +295 -0
- flywheel/models/creds.py +135 -0
- flywheel/models/curator.py +221 -0
- flywheel/models/current_user_output.py +707 -0
- flywheel/models/custom_field.py +437 -0
- flywheel/models/custom_form.py +244 -0
- flywheel/models/cvat_info.py +275 -0
- flywheel/models/cvat_settings.py +272 -0
- flywheel/models/cvat_settings_input.py +272 -0
- flywheel/models/cvat_sync_state.py +30 -0
- flywheel/models/daily_report_usage.py +565 -0
- flywheel/models/data_strategy.py +29 -0
- flywheel/models/data_view.py +25 -0
- flywheel/models/data_view_analysis_file_spec.py +221 -0
- flywheel/models/data_view_analysis_filter_spec.py +221 -0
- flywheel/models/data_view_column_alias.py +337 -0
- flywheel/models/data_view_column_spec.py +286 -0
- flywheel/models/data_view_execution.py +505 -0
- flywheel/models/data_view_execution_state.py +31 -0
- flywheel/models/data_view_file_spec.py +392 -0
- flywheel/models/data_view_group_by.py +166 -0
- flywheel/models/data_view_group_by_column.py +194 -0
- flywheel/models/data_view_name_filter_spec.py +194 -0
- flywheel/models/data_view_output.py +25 -0
- flywheel/models/data_view_save_data_view_input.py +25 -0
- flywheel/models/data_view_zip_filter_spec.py +223 -0
- flywheel/models/default_flywheel_role.py +30 -0
- flywheel/models/deid_log_skip_reason.py +29 -0
- flywheel/models/delete_by_search_query.py +253 -0
- flywheel/models/deleted_file.py +514 -0
- flywheel/models/deleted_result.py +194 -0
- flywheel/models/deprecated_action.py +29 -0
- flywheel/models/destination_container_type.py +30 -0
- flywheel/models/device.py +437 -0
- flywheel/models/device_admin_update.py +194 -0
- flywheel/models/device_create.py +219 -0
- flywheel/models/device_self_update.py +272 -0
- flywheel/models/device_status.py +36 -0
- flywheel/models/device_status_entry.py +221 -0
- flywheel/models/device_storage_strategy_update.py +193 -0
- flywheel/models/dimse_project_input.py +36 -0
- flywheel/models/dimse_project_output.py +36 -0
- flywheel/models/dimse_service_input.py +36 -0
- flywheel/models/dimse_service_output.py +36 -0
- flywheel/models/download.py +249 -0
- flywheel/models/download_container_filter.py +167 -0
- flywheel/models/download_container_filter_definition.py +222 -0
- flywheel/models/download_filter.py +221 -0
- flywheel/models/download_filter_definition.py +195 -0
- flywheel/models/download_format.py +29 -0
- flywheel/models/download_input.py +25 -0
- flywheel/models/download_node.py +189 -0
- flywheel/models/download_strategy.py +31 -0
- flywheel/models/download_ticket.py +36 -0
- flywheel/models/download_ticket_stub.py +249 -0
- flywheel/models/download_ticket_with_summary.py +36 -0
- flywheel/models/e_signature.py +242 -0
- flywheel/models/edition.py +169 -0
- flywheel/models/egress_device.py +597 -0
- flywheel/models/egress_device_page.py +219 -0
- flywheel/models/egress_provider.py +408 -0
- flywheel/models/egress_provider_id.py +164 -0
- flywheel/models/exchange_storage.py +243 -0
- flywheel/models/executor_info.py +353 -0
- flywheel/models/export_templates.py +195 -0
- flywheel/models/features.py +1838 -0
- flywheel/models/field_change.py +271 -0
- flywheel/models/field_change_log_document.py +245 -0
- flywheel/models/field_type.py +37 -0
- flywheel/models/file.py +1139 -0
- flywheel/models/file_classification_delta.py +245 -0
- flywheel/models/file_container_type.py +34 -0
- flywheel/models/file_entry.py +740 -0
- flywheel/models/file_export_templates.py +272 -0
- flywheel/models/file_format.py +33 -0
- flywheel/models/file_gear_info.py +215 -0
- flywheel/models/file_group.py +29 -0
- flywheel/models/file_list_output.py +1115 -0
- flywheel/models/file_modify_input.py +191 -0
- flywheel/models/file_move_input.py +221 -0
- flywheel/models/file_node.py +1138 -0
- flywheel/models/file_node_min.py +321 -0
- flywheel/models/file_origin.py +283 -0
- flywheel/models/file_output.py +1135 -0
- flywheel/models/file_parents.py +297 -0
- flywheel/models/file_reference.py +221 -0
- flywheel/models/file_suggestion.py +241 -0
- flywheel/models/file_template_options.py +299 -0
- flywheel/models/file_upsert_input.py +612 -0
- flywheel/models/file_upsert_origin.py +36 -0
- flywheel/models/file_upsert_output.py +1154 -0
- flywheel/models/file_version.py +190 -0
- flywheel/models/file_version_copy_of.py +273 -0
- flywheel/models/file_version_output.py +325 -0
- flywheel/models/file_via.py +245 -0
- flywheel/models/file_zip_entry.py +25 -0
- flywheel/models/file_zip_info.py +25 -0
- flywheel/models/filter.py +350 -0
- flywheel/models/filter_input.py +218 -0
- flywheel/models/filter_values.py +195 -0
- flywheel/models/filter_view.py +28 -0
- flywheel/models/fixed_file_version_input.py +216 -0
- flywheel/models/fixed_input.py +299 -0
- flywheel/models/form_definition.py +163 -0
- flywheel/models/form_response_base.py +311 -0
- flywheel/models/form_response_create.py +193 -0
- flywheel/models/gcp_creds.py +397 -0
- flywheel/models/gcp_storage.py +298 -0
- flywheel/models/gear.py +619 -0
- flywheel/models/gear_category.py +32 -0
- flywheel/models/gear_config.py +138 -0
- flywheel/models/gear_context_input.py +164 -0
- flywheel/models/gear_context_lookup.py +25 -0
- flywheel/models/gear_context_lookup_item.py +36 -0
- flywheel/models/gear_context_value_output.py +272 -0
- flywheel/models/gear_context_value_output_unfound.py +164 -0
- flywheel/models/gear_custom.py +135 -0
- flywheel/models/gear_directive.py +135 -0
- flywheel/models/gear_doc.py +25 -0
- flywheel/models/gear_document.py +332 -0
- flywheel/models/gear_document_input.py +303 -0
- flywheel/models/gear_document_legacy_input.py +302 -0
- flywheel/models/gear_environment.py +135 -0
- flywheel/models/gear_exchange.py +221 -0
- flywheel/models/gear_file_input.py +192 -0
- flywheel/models/gear_id_output.py +170 -0
- flywheel/models/gear_info.py +251 -0
- flywheel/models/gear_input_item.py +231 -0
- flywheel/models/gear_inputs.py +140 -0
- flywheel/models/gear_invocation.py +138 -0
- flywheel/models/gear_key_input.py +191 -0
- flywheel/models/gear_manifest.py +624 -0
- flywheel/models/gear_mixin.py +218 -0
- flywheel/models/gear_node.py +355 -0
- flywheel/models/gear_output_configuration.py +164 -0
- flywheel/models/gear_permissions.py +191 -0
- flywheel/models/gear_permissions_input.py +163 -0
- flywheel/models/gear_permissions_type.py +29 -0
- flywheel/models/gear_return_ticket.py +25 -0
- flywheel/models/gear_rule.py +653 -0
- flywheel/models/gear_rule_condition.py +219 -0
- flywheel/models/gear_rule_condition_type.py +37 -0
- flywheel/models/gear_rule_input.py +517 -0
- flywheel/models/gear_rule_modify_input.py +492 -0
- flywheel/models/gear_rule_output.py +652 -0
- flywheel/models/gear_save_submission.py +221 -0
- flywheel/models/gear_series.py +298 -0
- flywheel/models/gear_series_update.py +163 -0
- flywheel/models/gear_suggestion_output.py +301 -0
- flywheel/models/gear_ticket.py +245 -0
- flywheel/models/gear_ticket_output.py +163 -0
- flywheel/models/google_auth_out.py +299 -0
- flywheel/models/graph_filter.py +329 -0
- flywheel/models/group.py +25 -0
- flywheel/models/group_by.py +163 -0
- flywheel/models/group_by_column.py +36 -0
- flywheel/models/group_container_output.py +33 -0
- flywheel/models/group_input.py +248 -0
- flywheel/models/group_metadata_input.py +36 -0
- flywheel/models/group_node.py +34 -0
- flywheel/models/group_output.py +471 -0
- flywheel/models/group_report.py +218 -0
- flywheel/models/group_role.py +163 -0
- flywheel/models/group_settings_output.py +249 -0
- flywheel/models/group_update.py +249 -0
- flywheel/models/header_feature.py +37 -0
- flywheel/models/hierarchy_export_templates.py +272 -0
- flywheel/models/http_validation_error.py +167 -0
- flywheel/models/info.py +218 -0
- flywheel/models/info_add_remove.py +36 -0
- flywheel/models/info_container_type.py +35 -0
- flywheel/models/info_replace.py +36 -0
- flywheel/models/info_update_input.py +36 -0
- flywheel/models/ingress_provider.py +299 -0
- flywheel/models/ingress_providers.py +272 -0
- flywheel/models/ingress_site_settings.py +305 -0
- flywheel/models/ingress_update_provider.py +218 -0
- flywheel/models/inline_response200.py +163 -0
- flywheel/models/inline_response2001.py +171 -0
- flywheel/models/inline_response2002.py +163 -0
- flywheel/models/inline_response2003.py +36 -0
- flywheel/models/inline_response2005.py +25 -0
- flywheel/models/input_filter.py +221 -0
- flywheel/models/input_job.py +521 -0
- flywheel/models/input_job_profile.py +275 -0
- flywheel/models/inserted_id.py +163 -0
- flywheel/models/job.py +841 -0
- flywheel/models/job_analysis_input.py +273 -0
- flywheel/models/job_ask.py +301 -0
- flywheel/models/job_ask_response.py +195 -0
- flywheel/models/job_ask_response_job.py +978 -0
- flywheel/models/job_ask_return.py +25 -0
- flywheel/models/job_ask_return_criteria.py +245 -0
- flywheel/models/job_ask_state.py +25 -0
- flywheel/models/job_ask_state_response.py +163 -0
- flywheel/models/job_complete.py +220 -0
- flywheel/models/job_completion_input.py +25 -0
- flywheel/models/job_completion_ticket.py +25 -0
- flywheel/models/job_config.py +135 -0
- flywheel/models/job_config_input.py +272 -0
- flywheel/models/job_config_inputs.py +25 -0
- flywheel/models/job_config_output.py +25 -0
- flywheel/models/job_container_detail.py +25 -0
- flywheel/models/job_destination.py +189 -0
- flywheel/models/job_detail.py +925 -0
- flywheel/models/job_detail_container.py +190 -0
- flywheel/models/job_detail_file_entry.py +194 -0
- flywheel/models/job_detail_group.py +190 -0
- flywheel/models/job_detail_parent_info.py +303 -0
- flywheel/models/job_executor_info.py +369 -0
- flywheel/models/job_file_input.py +247 -0
- flywheel/models/job_file_input_list_output.py +247 -0
- flywheel/models/job_file_object.py +435 -0
- flywheel/models/job_file_object_list_output.py +407 -0
- flywheel/models/job_gear_match.py +25 -0
- flywheel/models/job_inputs_array_item.py +305 -0
- flywheel/models/job_inputs_item.py +242 -0
- flywheel/models/job_inputs_object.py +138 -0
- flywheel/models/job_list_entry.py +25 -0
- flywheel/models/job_list_output.py +979 -0
- flywheel/models/job_list_output_config.py +220 -0
- flywheel/models/job_log.py +189 -0
- flywheel/models/job_log_column.py +40 -0
- flywheel/models/job_log_record.py +192 -0
- flywheel/models/job_modify.py +193 -0
- flywheel/models/job_origin.py +190 -0
- flywheel/models/job_output.py +1005 -0
- flywheel/models/job_output_config.py +247 -0
- flywheel/models/job_parents.py +297 -0
- flywheel/models/job_priority.py +31 -0
- flywheel/models/job_priority_update.py +192 -0
- flywheel/models/job_profile.py +427 -0
- flywheel/models/job_profile_input.py +25 -0
- flywheel/models/job_request.py +221 -0
- flywheel/models/job_request_item.py +246 -0
- flywheel/models/job_request_item_type.py +31 -0
- flywheel/models/job_request_target.py +270 -0
- flywheel/models/job_state.py +32 -0
- flywheel/models/job_state_counts.py +25 -0
- flywheel/models/job_stats_by_state.py +25 -0
- flywheel/models/job_ticket_output.py +165 -0
- flywheel/models/job_transition_times.py +253 -0
- flywheel/models/job_version_info.py +135 -0
- flywheel/models/jobs_by_state.py +272 -0
- flywheel/models/jobs_list.py +166 -0
- flywheel/models/join_origin_device.py +164 -0
- flywheel/models/join_origin_job.py +219 -0
- flywheel/models/join_origin_user.py +189 -0
- flywheel/models/join_origins.py +223 -0
- flywheel/models/join_type.py +28 -0
- flywheel/models/jupyterhub_workspace.py +163 -0
- flywheel/models/jupyterlab_server_modify.py +275 -0
- flywheel/models/jupyterlab_server_origin.py +25 -0
- flywheel/models/jupyterlab_server_output.py +25 -0
- flywheel/models/jupyterlab_server_response.py +415 -0
- flywheel/models/jupyterlab_server_update.py +25 -0
- flywheel/models/ldap_sync.py +36 -0
- flywheel/models/ldap_sync_config.py +163 -0
- flywheel/models/ldap_sync_input.py +36 -0
- flywheel/models/ldap_sync_status.py +250 -0
- flywheel/models/legacy_api_key_output.py +271 -0
- flywheel/models/legacy_input.py +244 -0
- flywheel/models/legacy_usage_report.py +309 -0
- flywheel/models/legacys_usage_project_entry.py +194 -0
- flywheel/models/libs_workflows_models_parent_type.py +33 -0
- flywheel/models/libs_workflows_models_task_status.py +32 -0
- flywheel/models/local_storage.py +217 -0
- flywheel/models/location.py +189 -0
- flywheel/models/locked.py +219 -0
- flywheel/models/master_subject_code_dob_input.py +279 -0
- flywheel/models/master_subject_code_input.py +281 -0
- flywheel/models/master_subject_code_output.py +166 -0
- flywheel/models/matched_acquisition_output.py +518 -0
- flywheel/models/mfa_channel.py +30 -0
- flywheel/models/mfa_settings.py +167 -0
- flywheel/models/mixins.py +794 -0
- flywheel/models/ml_set_filter.py +194 -0
- flywheel/models/ml_type.py +30 -0
- flywheel/models/modality.py +250 -0
- flywheel/models/modality_input.py +244 -0
- flywheel/models/modality_modify.py +218 -0
- flywheel/models/modality_output.py +271 -0
- flywheel/models/modified_result.py +190 -0
- flywheel/models/modify_user_input.py +466 -0
- flywheel/models/move_conflict.py +300 -0
- flywheel/models/note.py +391 -0
- flywheel/models/note_input.py +165 -0
- flywheel/models/optional_input_policy.py +30 -0
- flywheel/models/order.py +29 -0
- flywheel/models/organ_system.py +64 -0
- flywheel/models/origin.py +193 -0
- flywheel/models/origin_type.py +35 -0
- flywheel/models/orphaned_count.py +163 -0
- flywheel/models/output_user_page.py +219 -0
- flywheel/models/packfile_cleanup_output.py +166 -0
- flywheel/models/packfile_removed_output.py +189 -0
- flywheel/models/page.py +216 -0
- flywheel/models/page_generic_file_output.py +219 -0
- flywheel/models/page_generic_filter.py +219 -0
- flywheel/models/page_generic_form_response_output.py +219 -0
- flywheel/models/page_generic_protocol.py +244 -0
- flywheel/models/page_generic_reader_task_output.py +244 -0
- flywheel/models/page_generic_staffing_pool.py +244 -0
- flywheel/models/parsed_query_response.py +194 -0
- flywheel/models/permission_access_permission.py +25 -0
- flywheel/models/premade_jobs_batch_job_output.py +298 -0
- flywheel/models/premade_jobs_batch_job_output_inflated_jobs.py +299 -0
- flywheel/models/premade_jobs_batch_proposal.py +334 -0
- flywheel/models/premade_jobs_batch_proposal_detail.py +166 -0
- flywheel/models/premade_jobs_batch_proposal_input.py +166 -0
- flywheel/models/project.py +25 -0
- flywheel/models/project_acquisition_upsert_input.py +25 -0
- flywheel/models/project_acquisition_upsert_output.py +25 -0
- flywheel/models/project_aet.py +331 -0
- flywheel/models/project_aet_input.py +248 -0
- flywheel/models/project_catalog_list_output.py +25 -0
- flywheel/models/project_contact.py +194 -0
- flywheel/models/project_container_output.py +41 -0
- flywheel/models/project_copy_input.py +245 -0
- flywheel/models/project_copy_output.py +215 -0
- flywheel/models/project_counters.py +346 -0
- flywheel/models/project_hierarchy_input.py +278 -0
- flywheel/models/project_hierarchy_output.py +222 -0
- flywheel/models/project_hierarchy_upsert_input.py +25 -0
- flywheel/models/project_hierarchy_upsert_output.py +25 -0
- flywheel/models/project_input.py +384 -0
- flywheel/models/project_institution.py +194 -0
- flywheel/models/project_list_output.py +897 -0
- flywheel/models/project_locking_reason.py +32 -0
- flywheel/models/project_modify.py +413 -0
- flywheel/models/project_node.py +42 -0
- flywheel/models/project_output.py +899 -0
- flywheel/models/project_parents.py +168 -0
- flywheel/models/project_report.py +463 -0
- flywheel/models/project_report_list.py +167 -0
- flywheel/models/project_session_upsert_input.py +25 -0
- flywheel/models/project_session_upsert_output.py +25 -0
- flywheel/models/project_settings_input.py +333 -0
- flywheel/models/project_settings_output.py +333 -0
- flywheel/models/project_settings_sharing.py +327 -0
- flywheel/models/project_settings_sharing_input.py +334 -0
- flywheel/models/project_settings_workspaces.py +167 -0
- flywheel/models/project_settings_workspaces_input.py +167 -0
- flywheel/models/project_share_level.py +29 -0
- flywheel/models/project_sharing_settings_project_contact.py +25 -0
- flywheel/models/project_sharing_settings_project_counters.py +36 -0
- flywheel/models/project_sharing_settings_project_institution.py +25 -0
- flywheel/models/project_sharing_settings_project_settings_input.py +25 -0
- flywheel/models/project_sharing_settings_project_settings_output.py +25 -0
- flywheel/models/project_sharing_settings_project_settings_sharing.py +25 -0
- flywheel/models/project_sharing_settings_project_settings_sharing_input.py +25 -0
- flywheel/models/project_sharing_settings_project_stats.py +36 -0
- flywheel/models/project_stats.py +270 -0
- flywheel/models/project_subject_upsert_input.py +25 -0
- flywheel/models/project_subject_upsert_output.py +25 -0
- flywheel/models/project_template.py +195 -0
- flywheel/models/project_template_input.py +195 -0
- flywheel/models/project_template_list_input.py +166 -0
- flywheel/models/project_template_requirement.py +36 -0
- flywheel/models/project_template_session_template.py +36 -0
- flywheel/models/project_upsert_origin.py +36 -0
- flywheel/models/protocol.py +515 -0
- flywheel/models/protocol_e_signature_config.py +191 -0
- flywheel/models/protocol_input.py +354 -0
- flywheel/models/protocol_modify.py +277 -0
- flywheel/models/protocol_status.py +30 -0
- flywheel/models/provider.py +461 -0
- flywheel/models/provider_access_type.py +29 -0
- flywheel/models/provider_class.py +29 -0
- flywheel/models/provider_deletion_status.py +189 -0
- flywheel/models/provider_input.py +25 -0
- flywheel/models/provider_links.py +282 -0
- flywheel/models/provider_type.py +34 -0
- flywheel/models/providers.py +277 -0
- flywheel/models/reader_batch_create.py +463 -0
- flywheel/models/reader_task.py +725 -0
- flywheel/models/reader_task_config.py +189 -0
- flywheel/models/reader_task_create.py +543 -0
- flywheel/models/reader_task_modify.py +303 -0
- flywheel/models/reader_task_output.py +752 -0
- flywheel/models/reader_task_parent_details.py +322 -0
- flywheel/models/report_access_log_context.py +301 -0
- flywheel/models/report_access_log_context_entry.py +194 -0
- flywheel/models/report_access_log_context_file_entry.py +165 -0
- flywheel/models/report_access_log_entry.py +624 -0
- flywheel/models/report_access_log_origin.py +194 -0
- flywheel/models/report_availability_list.py +167 -0
- flywheel/models/report_daily_usage_entry.py +501 -0
- flywheel/models/report_demographics_grid.py +36 -0
- flywheel/models/report_ethnicity_grid.py +252 -0
- flywheel/models/report_gender_count.py +222 -0
- flywheel/models/report_group_report.py +217 -0
- flywheel/models/report_legacy_usage_entry.py +36 -0
- flywheel/models/report_legacy_usage_project_entry.py +36 -0
- flywheel/models/report_project.py +25 -0
- flywheel/models/report_site.py +192 -0
- flywheel/models/report_time_period.py +193 -0
- flywheel/models/report_usage.py +630 -0
- flywheel/models/report_usage_entry.py +25 -0
- flywheel/models/resolve_input.py +163 -0
- flywheel/models/resolve_output.py +194 -0
- flywheel/models/resolver_acquisition_node.py +36 -0
- flywheel/models/resolver_analysis_node.py +36 -0
- flywheel/models/resolver_file_node.py +36 -0
- flywheel/models/resolver_gear_node.py +36 -0
- flywheel/models/resolver_group_node.py +36 -0
- flywheel/models/resolver_input.py +25 -0
- flywheel/models/resolver_node.py +182 -0
- flywheel/models/resolver_output.py +25 -0
- flywheel/models/resolver_project_node.py +36 -0
- flywheel/models/resolver_session_node.py +36 -0
- flywheel/models/resolver_subject_node.py +36 -0
- flywheel/models/role_input.py +192 -0
- flywheel/models/role_output.py +273 -0
- flywheel/models/role_permission.py +194 -0
- flywheel/models/role_permission_output.py +189 -0
- flywheel/models/role_permission_update.py +163 -0
- flywheel/models/role_type.py +32 -0
- flywheel/models/role_update.py +194 -0
- flywheel/models/roles_backwards_compatible_role_assignment.py +36 -0
- flywheel/models/roles_group_role_pool_input.py +36 -0
- flywheel/models/roles_role.py +36 -0
- flywheel/models/roles_role_assignment.py +195 -0
- flywheel/models/roles_role_input.py +36 -0
- flywheel/models/rule.py +467 -0
- flywheel/models/rule_any.py +216 -0
- flywheel/models/s3_addressing_style.py +29 -0
- flywheel/models/s3_compat_storage.py +381 -0
- flywheel/models/save_search.py +298 -0
- flywheel/models/save_search_input.py +219 -0
- flywheel/models/save_search_output.py +301 -0
- flywheel/models/save_search_page.py +219 -0
- flywheel/models/save_search_parent.py +192 -0
- flywheel/models/save_search_update.py +194 -0
- flywheel/models/search_acquisition_response.py +252 -0
- flywheel/models/search_analysis_response.py +254 -0
- flywheel/models/search_collection_response.py +254 -0
- flywheel/models/search_file_response.py +312 -0
- flywheel/models/search_group_response.py +196 -0
- flywheel/models/search_parent_acquisition.py +47 -0
- flywheel/models/search_parent_analysis.py +47 -0
- flywheel/models/search_parent_collection.py +46 -0
- flywheel/models/search_parent_project.py +54 -0
- flywheel/models/search_parent_response.py +213 -0
- flywheel/models/search_parent_session.py +48 -0
- flywheel/models/search_parent_subject.py +48 -0
- flywheel/models/search_parse_error.py +252 -0
- flywheel/models/search_parse_search_query_result.py +36 -0
- flywheel/models/search_project_response.py +196 -0
- flywheel/models/search_query.py +337 -0
- flywheel/models/search_query_suggestions.py +36 -0
- flywheel/models/search_response.py +448 -0
- flywheel/models/search_return_type.py +33 -0
- flywheel/models/search_save_search.py +36 -0
- flywheel/models/search_save_search_input.py +36 -0
- flywheel/models/search_save_search_parent.py +36 -0
- flywheel/models/search_save_search_update.py +36 -0
- flywheel/models/search_session_response.py +252 -0
- flywheel/models/search_status.py +166 -0
- flywheel/models/search_structured_search_query.py +25 -0
- flywheel/models/search_subject_response.py +225 -0
- flywheel/models/search_suggestion.py +36 -0
- flywheel/models/select_item.py +190 -0
- flywheel/models/server_state.py +303 -0
- flywheel/models/service_aet.py +301 -0
- flywheel/models/service_aet_input.py +276 -0
- flywheel/models/session.py +25 -0
- flywheel/models/session_container_output.py +35 -0
- flywheel/models/session_copy_input.py +253 -0
- flywheel/models/session_embedded_subject.py +299 -0
- flywheel/models/session_input.py +431 -0
- flywheel/models/session_list_output.py +897 -0
- flywheel/models/session_metadata_input.py +36 -0
- flywheel/models/session_modify.py +464 -0
- flywheel/models/session_node.py +36 -0
- flywheel/models/session_output.py +897 -0
- flywheel/models/session_parents.py +220 -0
- flywheel/models/session_template_options.py +221 -0
- flywheel/models/session_template_recalc_output.py +165 -0
- flywheel/models/session_upsert_input.py +464 -0
- flywheel/models/session_upsert_output.py +243 -0
- flywheel/models/sharing_filter_options.py +345 -0
- flywheel/models/signed_fs_upload_output.py +189 -0
- flywheel/models/signed_url_cleanup_input.py +189 -0
- flywheel/models/signed_url_upload_input.py +190 -0
- flywheel/models/signed_url_upload_output.py +349 -0
- flywheel/models/site.py +623 -0
- flywheel/models/site_report.py +194 -0
- flywheel/models/site_settings.py +385 -0
- flywheel/models/sort.py +192 -0
- flywheel/models/stable_api_key_input.py +25 -0
- flywheel/models/staffing_pool.py +324 -0
- flywheel/models/staffing_pool_create.py +216 -0
- flywheel/models/staffing_pool_list.py +164 -0
- flywheel/models/staffing_pool_modify.py +218 -0
- flywheel/models/state.py +32 -0
- flywheel/models/static_compute.py +218 -0
- flywheel/models/status_transitions.py +245 -0
- flywheel/models/status_type.py +31 -0
- flywheel/models/status_value.py +31 -0
- flywheel/models/storage_strategy.py +30 -0
- flywheel/models/storage_strategy_config.py +194 -0
- flywheel/models/structured_query.py +165 -0
- flywheel/models/structured_query_suggestions.py +196 -0
- flywheel/models/structured_query_value_suggestion.py +247 -0
- flywheel/models/subject.py +34 -0
- flywheel/models/subject_container_output.py +36 -0
- flywheel/models/subject_copy_input.py +223 -0
- flywheel/models/subject_input.py +627 -0
- flywheel/models/subject_modify.py +684 -0
- flywheel/models/subject_node.py +37 -0
- flywheel/models/subject_output.py +1008 -0
- flywheel/models/subject_output_for_list.py +1005 -0
- flywheel/models/subject_parents.py +194 -0
- flywheel/models/subject_role_permission.py +194 -0
- flywheel/models/subject_state.py +30 -0
- flywheel/models/subject_template_options.py +191 -0
- flywheel/models/subject_upsert_input.py +573 -0
- flywheel/models/subject_upsert_output.py +216 -0
- flywheel/models/sync_user_input.py +322 -0
- flywheel/models/tag.py +165 -0
- flywheel/models/task_assign.py +194 -0
- flywheel/models/task_facet.py +29 -0
- flywheel/models/task_parent_ref.py +245 -0
- flywheel/models/task_parent_ref_input.py +219 -0
- flywheel/models/task_priority.py +31 -0
- flywheel/models/task_submission.py +189 -0
- flywheel/models/therapeutic_area.py +60 -0
- flywheel/models/transitions.py +272 -0
- flywheel/models/tree_container_request_spec.py +281 -0
- flywheel/models/tree_graph.py +142 -0
- flywheel/models/tree_graph_connection.py +244 -0
- flywheel/models/tree_graph_connections.py +142 -0
- flywheel/models/tree_graph_node.py +166 -0
- flywheel/models/tree_request.py +25 -0
- flywheel/models/tree_response_item.py +142 -0
- flywheel/models/type_str.py +31 -0
- flywheel/models/uid_check_input_acquisitions.py +244 -0
- flywheel/models/uid_check_input_sessions.py +244 -0
- flywheel/models/uid_check_output.py +191 -0
- flywheel/models/upload_complete_s3_multipart_input.py +25 -0
- flywheel/models/upload_complete_s3_multipart_output.py +25 -0
- flywheel/models/upload_signed_fs_file_upload_output.py +36 -0
- flywheel/models/upload_signed_upload_url_input.py +36 -0
- flywheel/models/upload_signed_upload_url_output.py +36 -0
- flywheel/models/upload_ticket_output.py +215 -0
- flywheel/models/upload_token_output.py +163 -0
- flywheel/models/upsert_result.py +31 -0
- flywheel/models/user.py +760 -0
- flywheel/models/user_api_key.py +220 -0
- flywheel/models/user_input.py +461 -0
- flywheel/models/user_jobs.py +219 -0
- flywheel/models/user_jobs_output.py +25 -0
- flywheel/models/user_output.py +36 -0
- flywheel/models/user_output_id.py +163 -0
- flywheel/models/user_preferences.py +135 -0
- flywheel/models/user_wechat.py +135 -0
- flywheel/models/validation_error.py +215 -0
- flywheel/models/validation_rule.py +190 -0
- flywheel/models/version.py +363 -0
- flywheel/models/version_output.py +25 -0
- flywheel/models/view_id_output.py +164 -0
- flywheel/models/view_output.py +440 -0
- flywheel/models/viewer_app.py +381 -0
- flywheel/models/viewer_app_input.py +382 -0
- flywheel/models/viewer_app_type.py +29 -0
- flywheel/models/virus_scan.py +166 -0
- flywheel/models/virus_scan_state.py +30 -0
- flywheel/models/work_in_progress_features.py +135 -0
- flywheel/models/zipfile_info.py +192 -0
- flywheel/models/zipfile_member_info.py +241 -0
- flywheel/partial_reader.py +50 -0
- flywheel/rest.py +352 -0
- flywheel/util.py +95 -0
- flywheel/view_builder.py +449 -0
- flywheel_sdk-21.2.0.dist-info/METADATA +42 -0
- flywheel_sdk-21.2.0.dist-info/RECORD +772 -0
- flywheel_sdk-21.2.0.dist-info/WHEEL +4 -0
- flywheel_sdk-21.2.0.dist-info/licenses/LICENSE.txt +18 -0
flywheel/view_builder.py
ADDED
|
@@ -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
|
+
```
|