UncountablePythonSDK 0.0.184__tar.gz → 0.0.186__tar.gz
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.
- {uncountablepythonsdk-0.0.184/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.186}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/requires.txt +1 -1
- uncountablepythonsdk-0.0.186/examples/integration-server/jobs/materials_auto/example_http_get.py +44 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/profile.yaml +7 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/_get_type_for_serialization.py +4 -4
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/serialization_helpers.py +1 -2
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_python.py +58 -25
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/test.py +4 -4
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +17 -17
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pyproject.toml +1 -1
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/http_server/types.py +1 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/webhook_server/entrypoint.py +38 -6
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/__init__.py +2 -0
- uncountablepythonsdk-0.0.186/uncountable/types/api/entity/add_entity_comment.py +43 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/files/download_file.py +1 -1
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/uploader/invoke_uploader.py +2 -2
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_batch_processor.py +3 -2
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/client_base.py +29 -3
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/entity_t.py +12 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/job_definition.py +1 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/job_definition_t.py +8 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/README.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/.flowmarkignore +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/add_file_to_folder.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/index.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/upload_file.md +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/async_batch_large_parse.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/set_input_pdf_attribute.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/stream_dataset_measurements.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/cached_parser.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_base.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_builder.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_cache.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_error.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_function_type.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_inner.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_options.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/type_predicates.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_file_share_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/unknown.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/usage.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/builder_types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_scss.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/builder.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/column.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/row.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/job_process.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/job_runner.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/request_context.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/webhook_bootstrap.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/webhook_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/list_aggregate.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_barcode.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/file_folders/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/listing/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/listing/export_listing.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/listing/fetch_listing.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/get_analyze_results.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/get_suggest_results.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/submit_async_job.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/notebooks/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/output_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/runsheet/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/time_series/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/time_series/ingest_dataset_measurements.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/user/__init__.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/condition_match.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/condition_match_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/dataset_measurements.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/dataset_measurements_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/listing.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/listing_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/ml_reports.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/ml_reports_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notices.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notices_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_step_relationships_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_step_types.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/request_headers.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/request_headers_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet_format.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet_format_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/specs.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/specs_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/step_relationships_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook_t.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.184/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.186}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.186
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -34,7 +34,7 @@ Requires-Dist: paramiko==5.*
|
|
|
34
34
|
Requires-Dist: boto3==1.*
|
|
35
35
|
Requires-Dist: flask==3.*
|
|
36
36
|
Requires-Dist: simplejson==3.*
|
|
37
|
-
Requires-Dist: grpcio==1.
|
|
37
|
+
Requires-Dist: grpcio==1.83.0
|
|
38
38
|
Requires-Dist: protobuf>=4.21.1
|
|
39
39
|
Requires-Dist: azure-storage-blob==12.*
|
|
40
40
|
Requires-Dist: azure-storage-file-share==12.*
|
{uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.186
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -34,7 +34,7 @@ Requires-Dist: paramiko==5.*
|
|
|
34
34
|
Requires-Dist: boto3==1.*
|
|
35
35
|
Requires-Dist: flask==3.*
|
|
36
36
|
Requires-Dist: simplejson==3.*
|
|
37
|
-
Requires-Dist: grpcio==1.
|
|
37
|
+
Requires-Dist: grpcio==1.83.0
|
|
38
38
|
Requires-Dist: protobuf>=4.21.1
|
|
39
39
|
Requires-Dist: azure-storage-blob==12.*
|
|
40
40
|
Requires-Dist: azure-storage-file-share==12.*
|
|
@@ -47,6 +47,7 @@ examples/integration-server/pyproject.toml
|
|
|
47
47
|
examples/integration-server/jobs/materials_auto/concurrent_cron.py
|
|
48
48
|
examples/integration-server/jobs/materials_auto/example_cron.py
|
|
49
49
|
examples/integration-server/jobs/materials_auto/example_http.py
|
|
50
|
+
examples/integration-server/jobs/materials_auto/example_http_get.py
|
|
50
51
|
examples/integration-server/jobs/materials_auto/example_instrument.py
|
|
51
52
|
examples/integration-server/jobs/materials_auto/example_parse.py
|
|
52
53
|
examples/integration-server/jobs/materials_auto/example_predictions.py
|
|
@@ -322,6 +323,7 @@ uncountable/types/api/condition_parameters/__init__.py
|
|
|
322
323
|
uncountable/types/api/condition_parameters/upsert_condition_match.py
|
|
323
324
|
uncountable/types/api/condition_parameters/upsert_condition_matches.py
|
|
324
325
|
uncountable/types/api/entity/__init__.py
|
|
326
|
+
uncountable/types/api/entity/add_entity_comment.py
|
|
325
327
|
uncountable/types/api/entity/create_entities.py
|
|
326
328
|
uncountable/types/api/entity/create_entity.py
|
|
327
329
|
uncountable/types/api/entity/create_or_update_entities.py
|
uncountablepythonsdk-0.0.186/examples/integration-server/jobs/materials_auto/example_http_get.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
from uncountable.integration.http_server import (
|
|
4
|
+
GenericHttpRequest,
|
|
5
|
+
GenericHttpResponse,
|
|
6
|
+
HttpException,
|
|
7
|
+
)
|
|
8
|
+
from uncountable.integration.job import CustomHttpJob, register_job
|
|
9
|
+
from uncountable.types import job_definition_t
|
|
10
|
+
|
|
11
|
+
_EXPECTED_USER_ID = 1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@register_job
|
|
15
|
+
class HttpGetExample(CustomHttpJob):
|
|
16
|
+
@staticmethod
|
|
17
|
+
def validate_request(
|
|
18
|
+
*,
|
|
19
|
+
request: GenericHttpRequest,
|
|
20
|
+
job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
|
|
21
|
+
profile_meta: job_definition_t.ProfileMetadata,
|
|
22
|
+
) -> None:
|
|
23
|
+
if (
|
|
24
|
+
CustomHttpJob.get_validated_oauth_request_user_id(
|
|
25
|
+
request=request, profile_metadata=profile_meta
|
|
26
|
+
)
|
|
27
|
+
!= _EXPECTED_USER_ID
|
|
28
|
+
):
|
|
29
|
+
raise HttpException(
|
|
30
|
+
message="unauthorized; invalid oauth token", error_code=401
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def handle_request(
|
|
35
|
+
*,
|
|
36
|
+
request: GenericHttpRequest,
|
|
37
|
+
job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
|
|
38
|
+
profile_meta: job_definition_t.ProfileMetadata, # ruff:ignore[unused-static-method-argument]
|
|
39
|
+
) -> GenericHttpResponse:
|
|
40
|
+
return GenericHttpResponse(
|
|
41
|
+
response=json.dumps(request.query_params),
|
|
42
|
+
status_code=200,
|
|
43
|
+
headers={"Content-Type": "application/json"},
|
|
44
|
+
)
|
|
@@ -74,6 +74,13 @@ jobs:
|
|
|
74
74
|
executor:
|
|
75
75
|
type: script
|
|
76
76
|
import_path: example_http
|
|
77
|
+
- id: example_http_get
|
|
78
|
+
type: custom_http
|
|
79
|
+
name: Custom HTTP GET
|
|
80
|
+
http_method: get
|
|
81
|
+
executor:
|
|
82
|
+
type: script
|
|
83
|
+
import_path: example_http_get
|
|
77
84
|
- id: example_runsheet_wh
|
|
78
85
|
type: webhook
|
|
79
86
|
name: Runsheet Webhook
|
|
@@ -17,11 +17,11 @@ class SerializationType(StrEnum):
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@functools.lru_cache(maxsize=500000)
|
|
20
|
-
def get_serialization_type(
|
|
21
|
-
super_classes = set(
|
|
20
|
+
def get_serialization_type(obj_type: Any) -> SerializationType:
|
|
21
|
+
super_classes = set(obj_type.__mro__)
|
|
22
22
|
|
|
23
23
|
# check is named tuple
|
|
24
|
-
if tuple in super_classes and hasattr(
|
|
24
|
+
if tuple in super_classes and hasattr(obj_type, "_fields"):
|
|
25
25
|
return SerializationType.NAMED_TUPLE
|
|
26
26
|
|
|
27
27
|
if list in super_classes or set in super_classes or tuple in super_classes:
|
|
@@ -30,7 +30,7 @@ def get_serialization_type(type: Any) -> SerializationType:
|
|
|
30
30
|
if dict in super_classes:
|
|
31
31
|
return SerializationType.DICT
|
|
32
32
|
|
|
33
|
-
if dataclasses.is_dataclass(
|
|
33
|
+
if dataclasses.is_dataclass(obj_type):
|
|
34
34
|
return SerializationType.DATACLASS
|
|
35
35
|
|
|
36
36
|
if Enum in super_classes and str in super_classes:
|
|
@@ -210,8 +210,7 @@ def serialize_for_api(obj: Any) -> JsonValue:
|
|
|
210
210
|
serialization_type == SerializationType.UNKNOWN
|
|
211
211
|
): # performance optimization to not do function lookup
|
|
212
212
|
return obj # type: ignore
|
|
213
|
-
|
|
214
|
-
return r
|
|
213
|
+
return _CONVERSION_SERIALIZATION_FUNCS[serialization_type](obj)
|
|
215
214
|
|
|
216
215
|
|
|
217
216
|
_SERIALIZATION_FUNCS_DICT: dict[
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import dataclasses
|
|
2
|
+
import functools
|
|
2
3
|
import io
|
|
3
4
|
import os
|
|
4
5
|
from decimal import Decimal
|
|
@@ -1148,6 +1149,17 @@ def refer_to(ctx: TrackingContext, stype: builder.SpecType) -> str:
|
|
|
1148
1149
|
SpecEndpoint = builder.SpecEndpoint
|
|
1149
1150
|
|
|
1150
1151
|
|
|
1152
|
+
def _route_identifier(
|
|
1153
|
+
endpoint: SpecEndpoint, *, endpoint_root: str
|
|
1154
|
+
) -> tuple[str, str, str]:
|
|
1155
|
+
endpoint_specific_path = endpoint.path_per_api_endpoint[endpoint_root]
|
|
1156
|
+
return (
|
|
1157
|
+
endpoint_specific_path.path_dirname,
|
|
1158
|
+
endpoint_specific_path.path_basename,
|
|
1159
|
+
endpoint.method,
|
|
1160
|
+
)
|
|
1161
|
+
|
|
1162
|
+
|
|
1151
1163
|
def _emit_routes(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
|
|
1152
1164
|
for endpoint_root in builder.api_endpoints:
|
|
1153
1165
|
endpoints: list[SpecEndpoint] = []
|
|
@@ -1188,17 +1200,13 @@ from main.site.framework.types import {static_route_imports}
|
|
|
1188
1200
|
"""
|
|
1189
1201
|
)
|
|
1190
1202
|
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
endpoint_specific_path.path_dirname,
|
|
1195
|
-
endpoint_specific_path.path_basename,
|
|
1196
|
-
endpoint.method,
|
|
1197
|
-
)
|
|
1203
|
+
route_identifier = functools.partial(
|
|
1204
|
+
_route_identifier, endpoint_root=endpoint_root
|
|
1205
|
+
)
|
|
1198
1206
|
|
|
1199
|
-
sorted_endpoints = sorted(endpoints, key=
|
|
1207
|
+
sorted_endpoints = sorted(endpoints, key=route_identifier)
|
|
1200
1208
|
|
|
1201
|
-
assert len(endpoints) == len(set(map(
|
|
1209
|
+
assert len(endpoints) == len(set(map(route_identifier, endpoints))), (
|
|
1202
1210
|
"Endpoints are not unique"
|
|
1203
1211
|
)
|
|
1204
1212
|
|
|
@@ -1309,39 +1317,64 @@ def _emit_namespace_imports(
|
|
|
1309
1317
|
|
|
1310
1318
|
def _emit_id_source(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
|
|
1311
1319
|
"""
|
|
1312
|
-
Create a map of full-type-name to
|
|
1320
|
+
Create a map of full-type-name to enum data for use in id-source. The values are
|
|
1321
|
+
plain data (member values, labels, deprecated) so importing this file does not pull
|
|
1322
|
+
in the generated type modules.
|
|
1313
1323
|
"""
|
|
1314
1324
|
id_source_output = config.id_source_output
|
|
1315
1325
|
if id_source_output is None:
|
|
1316
1326
|
return
|
|
1317
|
-
enum_out = io.StringIO()
|
|
1318
|
-
enum_out.write(f"{LINT_HEADER}{MODIFY_NOTICE}\n")
|
|
1319
|
-
enum_out.write("import typing\n")
|
|
1320
|
-
enum_out.write("from enum import StrEnum\n")
|
|
1321
1327
|
|
|
1322
|
-
ctx = TrackingContext()
|
|
1323
|
-
# In this context the propername
|
|
1324
1328
|
named_enums = {
|
|
1325
|
-
builder.resolve_proper_name(string_enum):
|
|
1329
|
+
builder.resolve_proper_name(string_enum): string_enum
|
|
1326
1330
|
for string_enum in builder.emit_id_source_enums
|
|
1327
1331
|
}
|
|
1328
1332
|
|
|
1329
|
-
|
|
1330
|
-
out=enum_out, namespaces=ctx.namespaces, from_namespace=None, config=config
|
|
1331
|
-
)
|
|
1332
|
-
|
|
1333
|
+
body = io.StringIO()
|
|
1333
1334
|
known_keys = []
|
|
1334
|
-
|
|
1335
|
+
any_labels = False
|
|
1336
|
+
body.write("\nENUM_MAP: dict[str, EnumRegistryEntry] = {\n")
|
|
1335
1337
|
for key in sorted(named_enums.keys()):
|
|
1336
|
-
|
|
1338
|
+
string_enum = named_enums[key]
|
|
1339
|
+
entries = list(string_enum.values.values())
|
|
1340
|
+
member_values = [f'"{entry.value}"' for entry in entries]
|
|
1341
|
+
members = ", ".join(member_values)
|
|
1342
|
+
single_element_comma = "," if len(member_values) == 1 else ""
|
|
1343
|
+
labels = {
|
|
1344
|
+
entry.value: entry.label for entry in entries if entry.label is not None
|
|
1345
|
+
}
|
|
1346
|
+
deprecated = [entry.value for entry in entries if entry.deprecated is True]
|
|
1347
|
+
body.write(f'{INDENT}"{key}": EnumRegistryEntry(\n')
|
|
1348
|
+
body.write(f"{2 * INDENT}members=({members}{single_element_comma}),\n")
|
|
1349
|
+
if labels:
|
|
1350
|
+
any_labels = True
|
|
1351
|
+
body.write(f"{2 * INDENT}labels=MappingProxyType({{\n")
|
|
1352
|
+
for value, label in labels.items():
|
|
1353
|
+
body.write(f'{3 * INDENT}"{value}": "{label}",\n')
|
|
1354
|
+
body.write(f"{2 * INDENT}}}),\n")
|
|
1355
|
+
if deprecated:
|
|
1356
|
+
dep = ", ".join(f'"{value}"' for value in deprecated)
|
|
1357
|
+
body.write(f"{2 * INDENT}deprecated=frozenset({{{dep}}}),\n")
|
|
1358
|
+
body.write(f"{INDENT}),\n")
|
|
1337
1359
|
known_keys.append(f'"{key}"')
|
|
1338
|
-
|
|
1360
|
+
body.write(f"}}\n{MODIFY_NOTICE}\n")
|
|
1361
|
+
|
|
1362
|
+
enum_out = io.StringIO()
|
|
1363
|
+
enum_out.write(f"{LINT_HEADER}{MODIFY_NOTICE}\n")
|
|
1364
|
+
enum_out.write("import typing\n")
|
|
1365
|
+
if any_labels:
|
|
1366
|
+
enum_out.write("from types import MappingProxyType\n")
|
|
1367
|
+
enum_out.write(
|
|
1368
|
+
"from main.unc.materials.id_source_construct.enum_registry import "
|
|
1369
|
+
"EnumRegistryEntry\n"
|
|
1370
|
+
)
|
|
1371
|
+
enum_out.write(body.getvalue())
|
|
1339
1372
|
|
|
1340
1373
|
enum_out.write(f"\nKnownEnumsType = typing.Literal[\n{INDENT}")
|
|
1341
1374
|
enum_out.write(f",\n{INDENT}".join(known_keys))
|
|
1342
1375
|
enum_out.write(f"\n]\n{MODIFY_NOTICE}\n")
|
|
1343
1376
|
|
|
1344
|
-
enum_out.write(f'\n{MODIFY_NOTICE}\n__all__ = ["ENUM_MAP"]\n')
|
|
1377
|
+
enum_out.write(f'\n{MODIFY_NOTICE}\n__all__ = ["ENUM_MAP", "KnownEnumsType"]\n')
|
|
1345
1378
|
enum_out.write(f"{MODIFY_NOTICE}\n{LINT_FOOTER}")
|
|
1346
1379
|
|
|
1347
1380
|
util.rewrite_file(id_source_output, enum_out.getvalue())
|
|
@@ -2,11 +2,11 @@ from .util import format_parsed_type, parse_type_str
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
def test_parse() -> None:
|
|
5
|
-
def check(
|
|
6
|
-
pt = parse_type_str(
|
|
5
|
+
def check(type_str: str) -> None:
|
|
6
|
+
pt = parse_type_str(type_str)
|
|
7
7
|
fmt = format_parsed_type(pt)
|
|
8
|
-
assert
|
|
9
|
-
print(
|
|
8
|
+
assert type_str == fmt
|
|
9
|
+
print(type_str, "=", fmt)
|
|
10
10
|
|
|
11
11
|
check("Simple.path.more")
|
|
12
12
|
check("path.List<Integer>")
|
|
@@ -53,12 +53,12 @@ def ui_entry_variable_to_type_spec_type(
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
def construct_inputs_type_data(
|
|
56
|
-
|
|
56
|
+
action_vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
|
|
57
57
|
) -> RawDict:
|
|
58
|
-
if len(
|
|
58
|
+
if len(action_vars) == 0:
|
|
59
59
|
return {"type": BaseTypeName.s_object}
|
|
60
60
|
properties: dict[str, dict[str, str]] = {}
|
|
61
|
-
for input_name, input_defn in (
|
|
61
|
+
for input_name, input_defn in (action_vars).items():
|
|
62
62
|
properties[f"{input_name}"] = {
|
|
63
63
|
"type": ui_entry_variable_to_type_spec_type(input_defn)
|
|
64
64
|
}
|
|
@@ -66,12 +66,12 @@ def construct_inputs_type_data(
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
def construct_outputs_type_data(
|
|
69
|
-
|
|
69
|
+
action_vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
|
|
70
70
|
) -> RawDict:
|
|
71
|
-
if len(
|
|
71
|
+
if len(action_vars) == 0:
|
|
72
72
|
return {"type": BaseTypeName.s_object}
|
|
73
73
|
properties: dict[str, dict[str, str]] = {}
|
|
74
|
-
for output_name, output_defn in (
|
|
74
|
+
for output_name, output_defn in (action_vars).items():
|
|
75
75
|
# All outputs are optional
|
|
76
76
|
properties[f"{output_name}"] = {
|
|
77
77
|
"type": f"Optional<{convert_from_value_spec_type(output_defn.vs_type)}>"
|
|
@@ -82,7 +82,7 @@ def construct_outputs_type_data(
|
|
|
82
82
|
def construct_outputs_type(
|
|
83
83
|
*,
|
|
84
84
|
action_scope: ui_entry_actions_t.ActionScope,
|
|
85
|
-
|
|
85
|
+
action_vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
|
|
86
86
|
builder: SpecBuilder,
|
|
87
87
|
namespace: SpecNamespace,
|
|
88
88
|
) -> SpecTypeDefnObject:
|
|
@@ -93,7 +93,7 @@ def construct_outputs_type(
|
|
|
93
93
|
namespace.types[stype.name] = stype
|
|
94
94
|
stype.process(
|
|
95
95
|
builder=builder,
|
|
96
|
-
data=construct_outputs_type_data(
|
|
96
|
+
data=construct_outputs_type_data(action_vars=action_vars),
|
|
97
97
|
)
|
|
98
98
|
return stype
|
|
99
99
|
|
|
@@ -101,7 +101,7 @@ def construct_outputs_type(
|
|
|
101
101
|
def construct_inputs_type(
|
|
102
102
|
*,
|
|
103
103
|
action_scope: ui_entry_actions_t.ActionScope,
|
|
104
|
-
|
|
104
|
+
action_vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
|
|
105
105
|
builder: SpecBuilder,
|
|
106
106
|
namespace: SpecNamespace,
|
|
107
107
|
) -> SpecTypeDefnObject:
|
|
@@ -109,7 +109,7 @@ def construct_inputs_type(
|
|
|
109
109
|
namespace=namespace,
|
|
110
110
|
name=emit_typescript_util.ts_type_name(f"{action_scope}_inputs"),
|
|
111
111
|
)
|
|
112
|
-
stype.process(builder=builder, data=construct_inputs_type_data(
|
|
112
|
+
stype.process(builder=builder, data=construct_inputs_type_data(action_vars))
|
|
113
113
|
namespace.types[stype.name] = stype
|
|
114
114
|
return stype
|
|
115
115
|
|
|
@@ -140,13 +140,13 @@ def emit_entry_action_definition(
|
|
|
140
140
|
) -> EntryActionTypeInfo:
|
|
141
141
|
inputs_type = construct_inputs_type(
|
|
142
142
|
action_scope=action_scope,
|
|
143
|
-
|
|
143
|
+
action_vars=defn.inputs,
|
|
144
144
|
builder=builder,
|
|
145
145
|
namespace=ctx.namespace,
|
|
146
146
|
)
|
|
147
147
|
outputs_type = construct_outputs_type(
|
|
148
148
|
action_scope=action_scope,
|
|
149
|
-
|
|
149
|
+
action_vars=defn.outputs,
|
|
150
150
|
builder=builder,
|
|
151
151
|
namespace=ctx.namespace,
|
|
152
152
|
)
|
|
@@ -158,12 +158,12 @@ def emit_entry_action_definition(
|
|
|
158
158
|
)
|
|
159
159
|
|
|
160
160
|
|
|
161
|
-
def _validate_input(
|
|
162
|
-
if "_" in
|
|
163
|
-
raise ValueError(f"Expected camelCase for variable {
|
|
164
|
-
if not re.fullmatch(base_t.REF_NAME_STRICT_REGEX,
|
|
161
|
+
def _validate_input(variable: ui_entry_actions_t.UiEntryActionVariable) -> None:
|
|
162
|
+
if "_" in variable.vs_var_name:
|
|
163
|
+
raise ValueError(f"Expected camelCase for variable {variable.vs_var_name}")
|
|
164
|
+
if not re.fullmatch(base_t.REF_NAME_STRICT_REGEX, variable.vs_var_name):
|
|
165
165
|
raise ValueError(
|
|
166
|
-
f"Variable {
|
|
166
|
+
f"Variable {variable.vs_var_name} has invalid syntax. See REF_NAME_STRICT_REGEX"
|
|
167
167
|
)
|
|
168
168
|
|
|
169
169
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
from typing import assert_never
|
|
2
3
|
|
|
3
4
|
import flask
|
|
4
5
|
from flask.typing import ResponseReturnValue
|
|
@@ -16,12 +17,31 @@ from uncountable.types import job_definition_t
|
|
|
16
17
|
|
|
17
18
|
app = flask.Flask(__name__)
|
|
18
19
|
|
|
20
|
+
HttpJobDefinition = (
|
|
21
|
+
job_definition_t.CustomHttpJobDefinition
|
|
22
|
+
| job_definition_t.WebhookJobDefinition
|
|
23
|
+
| job_definition_t.UncountableWebhookJobDefinition
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _resolve_route_http_method(job: HttpJobDefinition) -> job_definition_t.HttpMethod:
|
|
28
|
+
match job:
|
|
29
|
+
case job_definition_t.CustomHttpJobDefinition():
|
|
30
|
+
return job.http_method
|
|
31
|
+
case (
|
|
32
|
+
job_definition_t.WebhookJobDefinition()
|
|
33
|
+
| job_definition_t.UncountableWebhookJobDefinition()
|
|
34
|
+
):
|
|
35
|
+
return job_definition_t.HttpMethod.POST
|
|
36
|
+
case _:
|
|
37
|
+
assert_never(job)
|
|
38
|
+
|
|
19
39
|
|
|
20
40
|
def register_route(
|
|
21
41
|
*,
|
|
22
42
|
server_logger: Logger,
|
|
23
43
|
profile_meta: job_definition_t.ProfileMetadata,
|
|
24
|
-
job:
|
|
44
|
+
job: HttpJobDefinition,
|
|
25
45
|
) -> None:
|
|
26
46
|
route = f"/{profile_meta.name}/{job.id}"
|
|
27
47
|
log_attributes = {
|
|
@@ -56,6 +76,7 @@ def register_route(
|
|
|
56
76
|
http_request = GenericHttpRequest(
|
|
57
77
|
body_base64=base64.b64encode(flask.request.get_data()).decode(),
|
|
58
78
|
headers=dict(flask.request.headers),
|
|
79
|
+
query_params=flask.request.args.to_dict(flat=False),
|
|
59
80
|
)
|
|
60
81
|
job_instance.validate_request(
|
|
61
82
|
request=http_request, job_definition=job, profile_meta=profile_meta
|
|
@@ -88,7 +109,7 @@ def register_route(
|
|
|
88
109
|
route,
|
|
89
110
|
endpoint=f"handle_request_{job.id}",
|
|
90
111
|
view_func=handle_request,
|
|
91
|
-
methods=[
|
|
112
|
+
methods=[_resolve_route_http_method(job).value.upper()],
|
|
92
113
|
)
|
|
93
114
|
|
|
94
115
|
server_logger.log_debug(
|
|
@@ -103,10 +124,21 @@ def main() -> None:
|
|
|
103
124
|
for profile_metadata in profiles:
|
|
104
125
|
server_logger = Logger(get_current_span())
|
|
105
126
|
for job in profile_metadata.jobs:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
match job:
|
|
128
|
+
case job_definition_t.CronJobDefinition():
|
|
129
|
+
continue
|
|
130
|
+
case (
|
|
131
|
+
job_definition_t.CustomHttpJobDefinition()
|
|
132
|
+
| job_definition_t.WebhookJobDefinition()
|
|
133
|
+
| job_definition_t.UncountableWebhookJobDefinition()
|
|
134
|
+
):
|
|
135
|
+
register_route(
|
|
136
|
+
server_logger=server_logger,
|
|
137
|
+
profile_meta=profile_metadata,
|
|
138
|
+
job=job,
|
|
139
|
+
)
|
|
140
|
+
case _:
|
|
141
|
+
assert_never(job)
|
|
110
142
|
|
|
111
143
|
|
|
112
144
|
main()
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# ruff: noqa: E402 Q003
|
|
3
3
|
# fmt: off
|
|
4
4
|
# isort: skip_file
|
|
5
|
+
from .api.entity import add_entity_comment as add_entity_comment_t
|
|
5
6
|
from .api.file_folders import add_file_to_folder as add_file_to_folder_t
|
|
6
7
|
from .api.notebooks import add_notebook_content as add_notebook_content_t
|
|
7
8
|
from .api.recipes import add_recipe_to_project as add_recipe_to_project_t
|
|
@@ -166,6 +167,7 @@ from . import workflows_t as workflows_t
|
|
|
166
167
|
|
|
167
168
|
|
|
168
169
|
__all__: list[str] = [
|
|
170
|
+
"add_entity_comment_t",
|
|
169
171
|
"add_file_to_folder_t",
|
|
170
172
|
"add_notebook_content_t",
|
|
171
173
|
"add_recipe_to_project_t",
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import entity_t
|
|
12
|
+
|
|
13
|
+
__all__: list[str] = [
|
|
14
|
+
"Arguments",
|
|
15
|
+
"Data",
|
|
16
|
+
"ENDPOINT_DESCRIPTION",
|
|
17
|
+
"ENDPOINT_METHOD",
|
|
18
|
+
"ENDPOINT_PATH",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
ENDPOINT_METHOD = "POST"
|
|
22
|
+
ENDPOINT_PATH = "api/external/entity/external_add_entity_comment"
|
|
23
|
+
ENDPOINT_DESCRIPTION = "Adds a comment to an entity, creating the entity's comment thread when one does not exist yet. Watchers of the entity and of its comment thread are notified. Comments are not idempotent: each call adds a new comment."
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.entity.add_entity_comment.Arguments",
|
|
29
|
+
)
|
|
30
|
+
@dataclasses.dataclass(slots=True, kw_only=True)
|
|
31
|
+
class Arguments:
|
|
32
|
+
entity_identifier: entity_t.EntityIdentifier
|
|
33
|
+
content: str
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
37
|
+
@serial_class(
|
|
38
|
+
named_type_path="sdk.api.entity.add_entity_comment.Data",
|
|
39
|
+
)
|
|
40
|
+
@dataclasses.dataclass(slots=True, kw_only=True)
|
|
41
|
+
class Data:
|
|
42
|
+
pass
|
|
43
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -30,7 +30,7 @@ __all__: list[str] = [
|
|
|
30
30
|
|
|
31
31
|
ENDPOINT_METHOD = "GET"
|
|
32
32
|
ENDPOINT_PATH = "api/external/files/download_file"
|
|
33
|
-
ENDPOINT_DESCRIPTION = "Download an attachment field value from an entity (e.g. a file attached to a form field) by entity + field reference, or download a text document by its ID. When querying by entity field, if the field contains a single file it is returned directly (X-File-Download-Type: raw); if multiple files are attached, they are bundled into a ZIP archive (X-File-Download-Type: archive). For downloading the binary file stored on a recipe output of type image or file, use recipes/external_download_recipe_output_file instead."
|
|
33
|
+
ENDPOINT_DESCRIPTION = "Download an attachment field value from an entity (e.g. a file attached to a form field) by entity + field reference, or download a text document by its ID. When querying by entity field, if the field contains a single file it is returned directly (X-File-Download-Type: raw); if multiple files are attached, they are bundled into a ZIP archive (X-File-Download-Type: archive). For downloading the binary file stored on a recipe output of type image or file, use recipes/external_download_recipe_output_file instead. A file that has not cleared virus scanning is not returned: a file still being scanned responds with HTTP 422 indicating the scan is in progress, and a file that failed the scan responds with HTTP 422 indicating a security-scan failure."
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -23,7 +23,7 @@ __all__: list[str] = [
|
|
|
23
23
|
|
|
24
24
|
ENDPOINT_METHOD = "POST"
|
|
25
25
|
ENDPOINT_PATH = "api/external/uploader/invoke_uploader"
|
|
26
|
-
ENDPOINT_DESCRIPTION = "Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key and
|
|
26
|
+
ENDPOINT_DESCRIPTION = "Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key, or selects it by detection keyword and file extension when uploader_key is null. Requires READ_ALL permission on the uploader entity. The file_ids parameter is preferred; file_id is deprecated. Non-SDK users should use file_upload/external_create_file_record to upload files first. SDK users can use the client.upload_files() helper method. Supports async batch execution."
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -32,7 +32,7 @@ ENDPOINT_DESCRIPTION = "Processes one or more uploaded files through a configure
|
|
|
32
32
|
)
|
|
33
33
|
@dataclasses.dataclass(slots=True, kw_only=True)
|
|
34
34
|
class Arguments:
|
|
35
|
-
uploader_key: identifier_t.IdentifierKey
|
|
35
|
+
uploader_key: identifier_t.IdentifierKey | None
|
|
36
36
|
destination: generic_upload_t.UploadDestination
|
|
37
37
|
file_id: base_t.ObjectId | None = None
|
|
38
38
|
file_ids: list[base_t.ObjectId] | None = None
|
|
@@ -532,16 +532,17 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
532
532
|
def invoke_uploader(
|
|
533
533
|
self,
|
|
534
534
|
*,
|
|
535
|
-
uploader_key: identifier_t.IdentifierKey,
|
|
535
|
+
uploader_key: identifier_t.IdentifierKey | None,
|
|
536
536
|
destination: generic_upload_t.UploadDestination,
|
|
537
537
|
file_id: base_t.ObjectId | None = None,
|
|
538
538
|
file_ids: list[base_t.ObjectId] | None = None,
|
|
539
539
|
depends_on: list[str] | None = None,
|
|
540
540
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
541
541
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
542
|
-
"""Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key and
|
|
542
|
+
"""Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key, or selects it by detection keyword and file extension when uploader_key is null. Requires READ_ALL permission on the uploader entity. The file_ids parameter is preferred; file_id is deprecated. Non-SDK users should use file_upload/external_create_file_record to upload files first. SDK users can use the client.upload_files() helper method. Supports async batch execution.
|
|
543
543
|
|
|
544
544
|
:param file_id: DEPRECATED: use file_ids
|
|
545
|
+
:param uploader_key: Name an uploader, or pass null to select one by detection keyword and file extension, which fails unless exactly one uploader matches.
|
|
545
546
|
:param depends_on: A list of batch reference keys to process before processing this request
|
|
546
547
|
"""
|
|
547
548
|
args = invoke_uploader_t.Arguments(
|