UncountablePythonSDK 0.0.158__tar.gz → 0.0.160__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.158 → uncountablepythonsdk-0.0.160}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
- uncountablepythonsdk-0.0.160/docs/static/favicons/manifest.json +18 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/async_batch_large_parse.py +7 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/pyproject.toml +1 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/__init__.py +2 -0
- uncountablepythonsdk-0.0.160/pkgs/filesystem_utils/_file_share_session.py +131 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/file_type_utils.py +9 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_open_api.py +21 -15
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/client.py +5 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/file_upload.py +30 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/job.py +5 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/worker.py +15 -2
- uncountablepythonsdk-0.0.160/uncountable/integration/request_context.py +34 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/edit_recipe_inputs.py +59 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/uploader/complete_async_parse.py +2 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/async_batch_processor.py +5 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/client_base.py +5 -1
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/queued_job_t.py +2 -0
- uncountablepythonsdk-0.0.158/docs/static/favicons/manifest.json +0 -18
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/.python-version +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/README.md +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/integration_examples/index.md +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/integration_examples/upload_file.md +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/set_input_pdf_attribute.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/unknown.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/builder_types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/query/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/query/builder.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/query/column.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/query/row.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/query/types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/http_server/types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/list_aggregate.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/set_barcode.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/file_folders/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/files/create_file_record.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/listing/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/listing/export_listing.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/listing/fetch_listing.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/notebooks/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/runsheet/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/user/__init__.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/entity_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/listing.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/listing_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/notices.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/notices_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_step_relationships_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/runsheet.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/runsheet_format.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/runsheet_format_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/runsheet_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/specs.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/specs_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/workflows_t.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.160
|
|
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
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/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.160
|
|
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
|
|
@@ -60,6 +60,7 @@ pkgs/argument_parser/argument_parser.py
|
|
|
60
60
|
pkgs/argument_parser/case_convert.py
|
|
61
61
|
pkgs/filesystem_utils/__init__.py
|
|
62
62
|
pkgs/filesystem_utils/_blob_session.py
|
|
63
|
+
pkgs/filesystem_utils/_file_share_session.py
|
|
63
64
|
pkgs/filesystem_utils/_gdrive_session.py
|
|
64
65
|
pkgs/filesystem_utils/_local_session.py
|
|
65
66
|
pkgs/filesystem_utils/_s3_session.py
|
|
@@ -133,6 +134,7 @@ uncountable/integration/construct_client.py
|
|
|
133
134
|
uncountable/integration/cron.py
|
|
134
135
|
uncountable/integration/entrypoint.py
|
|
135
136
|
uncountable/integration/job.py
|
|
137
|
+
uncountable/integration/request_context.py
|
|
136
138
|
uncountable/integration/scan_profiles.py
|
|
137
139
|
uncountable/integration/scheduler.py
|
|
138
140
|
uncountable/integration/server.py
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "",
|
|
3
|
+
"icons": [
|
|
4
|
+
{
|
|
5
|
+
"src": "/static/img/icons/android-chrome-192x192.png",
|
|
6
|
+
"sizes": "192x192",
|
|
7
|
+
"type": "image/png"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"src": "/static/img/icons/android-chrome-512x512.png",
|
|
11
|
+
"sizes": "512x512",
|
|
12
|
+
"type": "image/png"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"theme_color": "#ffffff",
|
|
16
|
+
"background_color": "#ffffff",
|
|
17
|
+
"display": "standalone"
|
|
18
|
+
}
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/examples/async_batch_large_parse.py
RENAMED
|
@@ -2,6 +2,7 @@ import os
|
|
|
2
2
|
from decimal import Decimal
|
|
3
3
|
|
|
4
4
|
from uncountable.core import AsyncBatchProcessor, AuthDetailsApiKey, Client
|
|
5
|
+
from uncountable.core.file_upload import UploaderFileUpload
|
|
5
6
|
from uncountable.types.generic_upload_t import UploadDestinationRecipe
|
|
6
7
|
from uncountable.types.identifier import IdentifierKeyId
|
|
7
8
|
from uncountable.types.uploader_t import (
|
|
@@ -37,8 +38,13 @@ parsed_file_data = [
|
|
|
37
38
|
]
|
|
38
39
|
|
|
39
40
|
batch_loader = AsyncBatchProcessor(client=client)
|
|
41
|
+
|
|
42
|
+
uploaded = client.upload_files(
|
|
43
|
+
file_uploads=[UploaderFileUpload(parsed_file_data=parsed_file_data)]
|
|
44
|
+
)
|
|
45
|
+
|
|
40
46
|
batch_loader.complete_async_parse(
|
|
41
|
-
|
|
47
|
+
file_id=uploaded[0].file_id,
|
|
42
48
|
async_job_key=IdentifierKeyId(id=1),
|
|
43
49
|
upload_destination=UploadDestinationRecipe(
|
|
44
50
|
recipe_key=IdentifierKeyId(id=1),
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/filesystem_utils/__init__.py
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from ._blob_session import BlobSession as BlobSession
|
|
2
|
+
from ._file_share_session import FileShareSession as FileShareSession
|
|
2
3
|
from ._gdrive_session import GDriveSession as GDriveSession
|
|
3
4
|
from ._gdrive_session import delete_gdrive_file as delete_gdrive_file
|
|
4
5
|
from ._gdrive_session import download_gdrive_file as download_gdrive_file
|
|
@@ -13,6 +14,7 @@ from ._sftp_session import move_sftp_files as move_sftp_files
|
|
|
13
14
|
from .file_type_utils import FileObjectData as FileObjectData
|
|
14
15
|
from .file_type_utils import FileSystemBlobConfig as FileSystemBlobConfig
|
|
15
16
|
from .file_type_utils import FileSystemFileReference as FileSystemFileReference
|
|
17
|
+
from .file_type_utils import FileSystemFileShareConfig as FileSystemFileShareConfig
|
|
16
18
|
from .file_type_utils import FileSystemObject as FileSystemObject
|
|
17
19
|
from .file_type_utils import FileSystemS3Config as FileSystemS3Config
|
|
18
20
|
from .file_type_utils import FileSystemSFTPConfig as FileSystemSFTPConfig
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
from io import BytesIO
|
|
2
|
+
from typing import Self
|
|
3
|
+
|
|
4
|
+
from azure.core.credentials import AzureSasCredential
|
|
5
|
+
from azure.storage.fileshare import ShareClient, ShareDirectoryClient
|
|
6
|
+
|
|
7
|
+
from pkgs.filesystem_utils.file_type_utils import (
|
|
8
|
+
FileObjectData,
|
|
9
|
+
FileSystemFileReference,
|
|
10
|
+
FileSystemFileShareConfig,
|
|
11
|
+
FileSystemObject,
|
|
12
|
+
FileTransfer,
|
|
13
|
+
IncompatibleFileReference,
|
|
14
|
+
)
|
|
15
|
+
from pkgs.filesystem_utils.filesystem_session import FileSystemSession
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class FileShareSession(FileSystemSession):
|
|
19
|
+
def __init__(self, config: FileSystemFileShareConfig) -> None:
|
|
20
|
+
super().__init__()
|
|
21
|
+
self.config = config
|
|
22
|
+
self._share_client: ShareClient | None = None
|
|
23
|
+
|
|
24
|
+
def start(self) -> None:
|
|
25
|
+
self._share_client = ShareClient(
|
|
26
|
+
account_url=self.config.account_url,
|
|
27
|
+
share_name=self.config.share_name,
|
|
28
|
+
credential=self.config.credential,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
def __enter__(self) -> Self:
|
|
32
|
+
self.start()
|
|
33
|
+
return self
|
|
34
|
+
|
|
35
|
+
def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
|
|
36
|
+
self._share_client = None
|
|
37
|
+
|
|
38
|
+
def _list_dir(
|
|
39
|
+
self,
|
|
40
|
+
dir_client: ShareDirectoryClient,
|
|
41
|
+
*,
|
|
42
|
+
recursive: bool,
|
|
43
|
+
valid_extensions: list[str] | None,
|
|
44
|
+
) -> list[FileSystemObject]:
|
|
45
|
+
results: list[FileSystemObject] = []
|
|
46
|
+
for item in dir_client.list_directories_and_files():
|
|
47
|
+
item_path = f"{dir_client.directory_path}/{item['name']}".lstrip("/")
|
|
48
|
+
if item["is_directory"]:
|
|
49
|
+
if recursive:
|
|
50
|
+
assert self._share_client is not None
|
|
51
|
+
results.extend(
|
|
52
|
+
self._list_dir(
|
|
53
|
+
self._share_client.get_directory_client(item_path),
|
|
54
|
+
recursive=recursive,
|
|
55
|
+
valid_extensions=valid_extensions,
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
elif valid_extensions is None or any(
|
|
59
|
+
item_path.endswith(ext) for ext in valid_extensions
|
|
60
|
+
):
|
|
61
|
+
results.append(FileSystemFileReference(filepath=item_path))
|
|
62
|
+
return results
|
|
63
|
+
|
|
64
|
+
def list_files(
|
|
65
|
+
self,
|
|
66
|
+
dir_path: FileSystemObject,
|
|
67
|
+
*,
|
|
68
|
+
recursive: bool = False,
|
|
69
|
+
valid_extensions: list[str] | None = None,
|
|
70
|
+
) -> list[FileSystemObject]:
|
|
71
|
+
if not isinstance(dir_path, FileSystemFileReference):
|
|
72
|
+
raise IncompatibleFileReference()
|
|
73
|
+
assert self._share_client is not None, (
|
|
74
|
+
"call to list_files on uninitialized file share session"
|
|
75
|
+
)
|
|
76
|
+
dir_client = self._share_client.get_directory_client(dir_path.filepath)
|
|
77
|
+
return self._list_dir(
|
|
78
|
+
dir_client, recursive=recursive, valid_extensions=valid_extensions
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
def download_files(self, filepaths: list[FileSystemObject]) -> list[FileObjectData]:
|
|
82
|
+
assert self._share_client is not None, (
|
|
83
|
+
"call to download_files on uninitialized file share session"
|
|
84
|
+
)
|
|
85
|
+
downloaded: list[FileObjectData] = []
|
|
86
|
+
for file_object in filepaths:
|
|
87
|
+
if (
|
|
88
|
+
not isinstance(file_object, FileSystemFileReference)
|
|
89
|
+
or not file_object.filename
|
|
90
|
+
):
|
|
91
|
+
raise IncompatibleFileReference()
|
|
92
|
+
file_client = self._share_client.get_file_client(file_object.filepath)
|
|
93
|
+
stream = file_client.download_file()
|
|
94
|
+
file_data = stream.readall()
|
|
95
|
+
downloaded.append(
|
|
96
|
+
FileObjectData(
|
|
97
|
+
file_data=file_data,
|
|
98
|
+
file_IO=BytesIO(file_data),
|
|
99
|
+
filename=file_object.filename,
|
|
100
|
+
filepath=file_object.filepath,
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
return downloaded
|
|
104
|
+
|
|
105
|
+
def move_files(self, file_mappings: list[FileTransfer]) -> None:
|
|
106
|
+
assert self._share_client is not None, (
|
|
107
|
+
"call to move_files on uninitialized file share session"
|
|
108
|
+
)
|
|
109
|
+
for src, dest in file_mappings:
|
|
110
|
+
if not isinstance(src, FileSystemFileReference) or not isinstance(
|
|
111
|
+
dest, FileSystemFileReference
|
|
112
|
+
):
|
|
113
|
+
raise IncompatibleFileReference()
|
|
114
|
+
src_client = self._share_client.get_file_client(src.filepath)
|
|
115
|
+
dest_client = self._share_client.get_file_client(dest.filepath)
|
|
116
|
+
source_url = (
|
|
117
|
+
f"{src_client.url}?{self.config.credential.signature}"
|
|
118
|
+
if isinstance(self.config.credential, AzureSasCredential)
|
|
119
|
+
else src_client.url
|
|
120
|
+
)
|
|
121
|
+
dest_client.start_copy_from_url(source_url)
|
|
122
|
+
src_client.delete_file()
|
|
123
|
+
|
|
124
|
+
def delete_files(self, filepaths: list[FileSystemObject]) -> None:
|
|
125
|
+
assert self._share_client is not None, (
|
|
126
|
+
"call to delete_files on uninitialized file share session"
|
|
127
|
+
)
|
|
128
|
+
for file_object in filepaths:
|
|
129
|
+
if not isinstance(file_object, FileSystemFileReference):
|
|
130
|
+
raise IncompatibleFileReference()
|
|
131
|
+
self._share_client.get_file_client(file_object.filepath).delete_file()
|
|
@@ -89,3 +89,12 @@ class FileSystemBlobConfig:
|
|
|
89
89
|
| None
|
|
90
90
|
)
|
|
91
91
|
container: ContainerProperties | str
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@dataclass(frozen=True, kw_only=True)
|
|
95
|
+
class FileSystemFileShareConfig:
|
|
96
|
+
account_url: str
|
|
97
|
+
credential: (
|
|
98
|
+
AzureNamedKeyCredential | AzureSasCredential | TokenCredential | str | None
|
|
99
|
+
)
|
|
100
|
+
share_name: str
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/pkgs/type_spec/emit_open_api.py
RENAMED
|
@@ -93,18 +93,29 @@ def _write_guide_as_html(guide: EmitOpenAPIGuide, *, is_open: bool) -> str:
|
|
|
93
93
|
</details>"""
|
|
94
94
|
|
|
95
95
|
|
|
96
|
+
_FRONTMATTER_RE = re.compile(r"^---\n.*?\n---\n", re.DOTALL)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _strip_guide_frontmatter(content: str) -> str:
|
|
100
|
+
return _FRONTMATTER_RE.sub("", content).lstrip("\n")
|
|
101
|
+
|
|
102
|
+
|
|
96
103
|
def _open_api_info(
|
|
97
|
-
config: OpenAPIConfig,
|
|
104
|
+
*, config: OpenAPIConfig, root_guides: list[builder.SpecGuide]
|
|
98
105
|
) -> GlobalContextInfo:
|
|
99
|
-
full_guides = "<br/>".join([
|
|
100
|
-
_write_guide_as_html(guide, is_open=True)
|
|
101
|
-
for guide in sorted(guides, key=lambda g: g.ref_name)
|
|
102
|
-
])
|
|
103
|
-
full_description = f"{config.description}<br/>{full_guides}"
|
|
104
106
|
info: GlobalContextInfo = dict()
|
|
105
107
|
info["version"] = "1.0.0"
|
|
106
108
|
info["title"] = "Uncountable API Documentation"
|
|
107
|
-
|
|
109
|
+
sorted_guides = sorted(root_guides, key=lambda g: g.ref_name)
|
|
110
|
+
description_parts = [
|
|
111
|
+
config.description,
|
|
112
|
+
*[
|
|
113
|
+
f'<a id="{guide.ref_name}" />\n\n'
|
|
114
|
+
+ _strip_guide_frontmatter(guide.markdown_content)
|
|
115
|
+
for guide in sorted_guides
|
|
116
|
+
],
|
|
117
|
+
]
|
|
118
|
+
info["description"] = "\n\n".join(description_parts)
|
|
108
119
|
info["x-logo"] = {
|
|
109
120
|
"url": "../static/images/logo_blue.png",
|
|
110
121
|
"altText": "Logo",
|
|
@@ -119,16 +130,11 @@ def _open_api_servers(config: OpenAPIConfig) -> list[EmitOpenAPIServer]:
|
|
|
119
130
|
|
|
120
131
|
|
|
121
132
|
def emit_open_api(builder: builder.SpecBuilder, *, config: OpenAPIConfig) -> None:
|
|
122
|
-
root_guides = builder.guides.get(RootGuideKey(), [])
|
|
123
|
-
openapi_guides = [
|
|
124
|
-
EmitOpenAPIGuide(
|
|
125
|
-
ref_name=guide.ref_name, title=guide.title, html_content=guide.html_content
|
|
126
|
-
)
|
|
127
|
-
for guide in root_guides
|
|
128
|
-
]
|
|
129
133
|
gctx = EmitOpenAPIGlobalContext(
|
|
130
134
|
version="3.0.0",
|
|
131
|
-
info=_open_api_info(
|
|
135
|
+
info=_open_api_info(
|
|
136
|
+
config=config, root_guides=builder.guides.get(RootGuideKey(), [])
|
|
137
|
+
),
|
|
132
138
|
servers=_open_api_servers(config),
|
|
133
139
|
)
|
|
134
140
|
|
|
@@ -330,6 +330,11 @@ class Client(ClientMethods):
|
|
|
330
330
|
headers = self._build_auth_headers()
|
|
331
331
|
headers[UNC_REQUEST_ID_HEADER] = request_id
|
|
332
332
|
headers[UNC_SDK_VERSION_HEADER] = get_version()
|
|
333
|
+
if self._cfg.request_context is not None:
|
|
334
|
+
if self._cfg.request_context.user_locale is not None:
|
|
335
|
+
headers["X-User-Locale"] = self._cfg.request_context.user_locale
|
|
336
|
+
if self._cfg.request_context.user_timezone is not None:
|
|
337
|
+
headers["X-User-Timezone"] = self._cfg.request_context.user_timezone
|
|
333
338
|
method = api_request.method.lower()
|
|
334
339
|
data = {"data": json.dumps(serialize_for_api(api_request.args))}
|
|
335
340
|
match method:
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/core/file_upload.py
RENAMED
|
@@ -8,8 +8,11 @@ from typing import Generator, Literal, Self, assert_never
|
|
|
8
8
|
|
|
9
9
|
import aiohttp
|
|
10
10
|
import aiotus
|
|
11
|
+
import simplejson as json
|
|
11
12
|
|
|
13
|
+
from pkgs.serialization_util import serialize_for_storage
|
|
12
14
|
from uncountable.integration.telemetry import Logger, push_scope_optional
|
|
15
|
+
from uncountable.types import uploader_t
|
|
13
16
|
|
|
14
17
|
from .types import AuthDetailsAll, AuthDetailsApiKey
|
|
15
18
|
|
|
@@ -19,6 +22,7 @@ _CHUNK_SIZE = 5 * 1024 * 1024 # s3 requires 5MiB minimum
|
|
|
19
22
|
class FileUploadType(StrEnum):
|
|
20
23
|
MEDIA_FILE_UPLOAD = "MEDIA_FILE_UPLOAD"
|
|
21
24
|
DATA_FILE_UPLOAD = "DATA_FILE_UPLOAD"
|
|
25
|
+
UPLOADER_FILE_UPLOAD = "UPLOADER_FILE_UPLOAD"
|
|
22
26
|
|
|
23
27
|
|
|
24
28
|
@dataclass(kw_only=True)
|
|
@@ -36,7 +40,20 @@ class DataFileUpload:
|
|
|
36
40
|
type: Literal[FileUploadType.DATA_FILE_UPLOAD] = FileUploadType.DATA_FILE_UPLOAD
|
|
37
41
|
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
@dataclass(kw_only=True)
|
|
44
|
+
class UploaderFileUpload:
|
|
45
|
+
parsed_file_data: list[uploader_t.ParsedFileData]
|
|
46
|
+
type: Literal[FileUploadType.UPLOADER_FILE_UPLOAD] = (
|
|
47
|
+
FileUploadType.UPLOADER_FILE_UPLOAD
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
FileUpload = MediaFileUpload | DataFileUpload | UploaderFileUpload
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@dataclass(kw_only=True)
|
|
55
|
+
class _ParsedFileDataWrapper:
|
|
56
|
+
parsed_file_data: list[uploader_t.ParsedFileData]
|
|
40
57
|
|
|
41
58
|
|
|
42
59
|
@dataclass(kw_only=True)
|
|
@@ -55,6 +72,16 @@ def file_upload_data(file_upload: FileUpload) -> Generator[FileBytes, None, None
|
|
|
55
72
|
)
|
|
56
73
|
case DataFileUpload():
|
|
57
74
|
yield FileBytes(name=file_upload.name, bytes_data=file_upload.data)
|
|
75
|
+
case UploaderFileUpload():
|
|
76
|
+
wrapper = _ParsedFileDataWrapper(
|
|
77
|
+
parsed_file_data=file_upload.parsed_file_data
|
|
78
|
+
)
|
|
79
|
+
serialized = serialize_for_storage(wrapper)
|
|
80
|
+
json_bytes = json.dumps(serialized).encode("utf-8")
|
|
81
|
+
yield FileBytes(
|
|
82
|
+
name="parsed_file_data.json",
|
|
83
|
+
bytes_data=BytesIO(json_bytes),
|
|
84
|
+
)
|
|
58
85
|
|
|
59
86
|
|
|
60
87
|
@dataclass(kw_only=True)
|
|
@@ -107,6 +134,8 @@ class FileUploader:
|
|
|
107
134
|
attributes["file_path"] = file_upload.path
|
|
108
135
|
case DataFileUpload():
|
|
109
136
|
attributes["file_name"] = file_upload.name
|
|
137
|
+
case UploaderFileUpload():
|
|
138
|
+
attributes["file_name"] = "parsed_file_data.json"
|
|
110
139
|
case _:
|
|
111
140
|
assert_never(file_upload)
|
|
112
141
|
with push_scope_optional(
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/integration/job.py
RENAMED
|
@@ -24,6 +24,7 @@ from uncountable.integration.queue_runner.command_server.command_client import (
|
|
|
24
24
|
from uncountable.integration.queue_runner.command_server.types import (
|
|
25
25
|
CommandServerException,
|
|
26
26
|
)
|
|
27
|
+
from uncountable.integration.request_context import extract_request_context
|
|
27
28
|
from uncountable.integration.secret_retrieval.retrieve_secret import retrieve_secret
|
|
28
29
|
from uncountable.integration.telemetry import JobLogger
|
|
29
30
|
from uncountable.types import (
|
|
@@ -210,12 +211,15 @@ class WebhookJob[WPT](Job[webhook_job_t.WebhookEventPayload]):
|
|
|
210
211
|
except (simplejson.JSONDecodeError, ValueError) as e:
|
|
211
212
|
raise HttpException.body_parse_error() from e
|
|
212
213
|
|
|
214
|
+
request_context = extract_request_context(headers=request.headers)
|
|
215
|
+
|
|
213
216
|
try:
|
|
214
217
|
send_job_queue_message(
|
|
215
218
|
job_ref_name=job_definition.id,
|
|
216
219
|
payload=queued_job_t.QueuedJobPayload(
|
|
217
220
|
invocation_context=queued_job_t.InvocationContextWebhook(
|
|
218
|
-
webhook_payload=webhook_payload
|
|
221
|
+
webhook_payload=webhook_payload,
|
|
222
|
+
request_context=request_context,
|
|
219
223
|
)
|
|
220
224
|
),
|
|
221
225
|
port=get_local_admin_server_port(),
|
|
@@ -23,7 +23,7 @@ from uncountable.integration.queue_runner.datastore.interface import Datastore
|
|
|
23
23
|
from uncountable.integration.queue_runner.types import ListenQueue, ResultQueue
|
|
24
24
|
from uncountable.integration.scan_profiles import load_profiles
|
|
25
25
|
from uncountable.integration.telemetry import JobLogger, Logger, get_otel_tracer
|
|
26
|
-
from uncountable.types import base_t, job_definition_t, queued_job_t
|
|
26
|
+
from uncountable.types import base_t, client_config_t, job_definition_t, queued_job_t
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class Worker:
|
|
@@ -89,6 +89,16 @@ def _resolve_queued_job_payload(queued_job: queued_job_t.QueuedJob) -> base_t.Js
|
|
|
89
89
|
return queued_job.payload.invocation_context.webhook_payload
|
|
90
90
|
|
|
91
91
|
|
|
92
|
+
def _resolve_queued_job_request_context(
|
|
93
|
+
queued_job: queued_job_t.QueuedJob,
|
|
94
|
+
) -> client_config_t.RequestContext | None:
|
|
95
|
+
match queued_job.payload.invocation_context:
|
|
96
|
+
case queued_job_t.InvocationContextWebhook():
|
|
97
|
+
return queued_job.payload.invocation_context.request_context
|
|
98
|
+
case _:
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
|
|
92
102
|
def run_queued_job(
|
|
93
103
|
queued_job: queued_job_t.QueuedJob,
|
|
94
104
|
) -> job_definition_t.JobResult:
|
|
@@ -108,8 +118,11 @@ def run_queued_job(
|
|
|
108
118
|
)
|
|
109
119
|
with job_logger.resource_tracking():
|
|
110
120
|
try:
|
|
121
|
+
request_context = _resolve_queued_job_request_context(queued_job)
|
|
111
122
|
client = construct_uncountable_client(
|
|
112
|
-
profile_meta=job_details.profile_metadata,
|
|
123
|
+
profile_meta=job_details.profile_metadata,
|
|
124
|
+
logger=job_logger,
|
|
125
|
+
request_context=request_context,
|
|
113
126
|
)
|
|
114
127
|
batch_processor = AsyncBatchProcessor(client=client)
|
|
115
128
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from uncountable.types import client_config_t
|
|
2
|
+
|
|
3
|
+
MAX_HEADER_LENGTH = 100
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def validated_header(*, headers: dict[str, str], key: str) -> str | None:
|
|
7
|
+
value = headers.get(key)
|
|
8
|
+
if value is not None and len(value) > MAX_HEADER_LENGTH:
|
|
9
|
+
return None
|
|
10
|
+
return value
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _parse_locale(*, raw_locale: str | None) -> client_config_t.SdkLocale | None:
|
|
14
|
+
if raw_locale is None:
|
|
15
|
+
return None
|
|
16
|
+
try:
|
|
17
|
+
return client_config_t.SdkLocale(raw_locale)
|
|
18
|
+
except ValueError:
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def extract_request_context(
|
|
23
|
+
*, headers: dict[str, str]
|
|
24
|
+
) -> client_config_t.RequestContext | None:
|
|
25
|
+
user_timezone = validated_header(headers=headers, key="X-User-Timezone")
|
|
26
|
+
user_locale = _parse_locale(
|
|
27
|
+
raw_locale=validated_header(headers=headers, key="X-User-Locale")
|
|
28
|
+
)
|
|
29
|
+
if user_timezone is None and user_locale is None:
|
|
30
|
+
return None
|
|
31
|
+
return client_config_t.RequestContext(
|
|
32
|
+
user_timezone=user_timezone,
|
|
33
|
+
user_locale=user_locale,
|
|
34
|
+
)
|
|
@@ -23,12 +23,15 @@ __all__: list[str] = [
|
|
|
23
23
|
"ENDPOINT_METHOD",
|
|
24
24
|
"ENDPOINT_PATH",
|
|
25
25
|
"MixStepMatchStrategy",
|
|
26
|
+
"PlaceholderAssignmentPlaceholderType",
|
|
26
27
|
"PlaceholderBase",
|
|
27
28
|
"PlaceholderDisplayMode",
|
|
28
29
|
"PlaceholderType",
|
|
30
|
+
"ProductRecipePlaceholderAssignment",
|
|
29
31
|
"RecipeInputEdit",
|
|
30
32
|
"RecipeInputEditAddInput",
|
|
31
33
|
"RecipeInputEditAddInstructions",
|
|
34
|
+
"RecipeInputEditAssignPlaceholder",
|
|
32
35
|
"RecipeInputEditBase",
|
|
33
36
|
"RecipeInputEditChangeBasisViewed",
|
|
34
37
|
"RecipeInputEditClearInputs",
|
|
@@ -41,6 +44,8 @@ __all__: list[str] = [
|
|
|
41
44
|
"RecipeInputEditUpdateAnnotations",
|
|
42
45
|
"RecipeInputEditUpsertInput",
|
|
43
46
|
"RecipeInputPlaceholder",
|
|
47
|
+
"RecipeInputPlaceholderAssignment",
|
|
48
|
+
"RecipeInputPlaceholderAssignmentBase",
|
|
44
49
|
"SubcategoryPlaceholder",
|
|
45
50
|
]
|
|
46
51
|
|
|
@@ -60,6 +65,7 @@ class RecipeInputEditType(StrEnum):
|
|
|
60
65
|
ADD_INSTRUCTIONS = "add_instructions"
|
|
61
66
|
SET_ROLE = "set_role"
|
|
62
67
|
SET_PLACEHOLDER = "set_placeholder"
|
|
68
|
+
ASSIGN_PLACEHOLDER = "assign_placeholder"
|
|
63
69
|
|
|
64
70
|
|
|
65
71
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -269,9 +275,60 @@ class RecipeInputEditPlaceholder(RecipeInputEditBase):
|
|
|
269
275
|
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
270
276
|
|
|
271
277
|
|
|
278
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
279
|
+
class PlaceholderAssignmentPlaceholderType(StrEnum):
|
|
280
|
+
PRODUCT = "product"
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
284
|
+
@serial_class(
|
|
285
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputPlaceholderAssignmentBase",
|
|
286
|
+
)
|
|
287
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
288
|
+
class RecipeInputPlaceholderAssignmentBase:
|
|
289
|
+
type: PlaceholderAssignmentPlaceholderType
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
293
|
+
@serial_class(
|
|
294
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.ProductRecipePlaceholderAssignment",
|
|
295
|
+
parse_require={"type"},
|
|
296
|
+
)
|
|
297
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
298
|
+
class ProductRecipePlaceholderAssignment(RecipeInputPlaceholderAssignmentBase):
|
|
299
|
+
type: typing.Literal[PlaceholderAssignmentPlaceholderType.PRODUCT] = PlaceholderAssignmentPlaceholderType.PRODUCT
|
|
300
|
+
product_key: identifier_t.IdentifierKey
|
|
301
|
+
recipe_key: identifier_t.IdentifierKey
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
305
|
+
RecipeInputPlaceholderAssignment = typing.Annotated[
|
|
306
|
+
typing.Union[ProductRecipePlaceholderAssignment],
|
|
307
|
+
serial_union_annotation(
|
|
308
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputPlaceholderAssignment",
|
|
309
|
+
discriminator="type",
|
|
310
|
+
discriminator_map={
|
|
311
|
+
"product": ProductRecipePlaceholderAssignment,
|
|
312
|
+
},
|
|
313
|
+
),
|
|
314
|
+
]
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
318
|
+
@serial_class(
|
|
319
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAssignPlaceholder",
|
|
320
|
+
parse_require={"type"},
|
|
321
|
+
)
|
|
322
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
323
|
+
class RecipeInputEditAssignPlaceholder(RecipeInputEditBase):
|
|
324
|
+
type: typing.Literal[RecipeInputEditType.ASSIGN_PLACEHOLDER] = RecipeInputEditType.ASSIGN_PLACEHOLDER
|
|
325
|
+
assignment: RecipeInputPlaceholderAssignment
|
|
326
|
+
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
327
|
+
|
|
328
|
+
|
|
272
329
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
273
330
|
RecipeInputEdit = typing.Annotated[
|
|
274
|
-
RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditSetPropagatedPercentage | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder,
|
|
331
|
+
RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditSetPropagatedPercentage | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder | RecipeInputEditAssignPlaceholder,
|
|
275
332
|
serial_union_annotation(
|
|
276
333
|
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEdit",
|
|
277
334
|
discriminator="type",
|
|
@@ -286,6 +343,7 @@ RecipeInputEdit = typing.Annotated[
|
|
|
286
343
|
"add_instructions": RecipeInputEditAddInstructions,
|
|
287
344
|
"set_role": RecipeInputEditSetRole,
|
|
288
345
|
"set_placeholder": RecipeInputEditPlaceholder,
|
|
346
|
+
"assign_placeholder": RecipeInputEditAssignPlaceholder,
|
|
289
347
|
},
|
|
290
348
|
),
|
|
291
349
|
]
|
|
@@ -31,9 +31,10 @@ ENDPOINT_PATH = "api/external/uploader/complete_async_parse"
|
|
|
31
31
|
)
|
|
32
32
|
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
33
33
|
class Arguments:
|
|
34
|
-
parsed_file_data: list[uploader_t.ParsedFileData]
|
|
35
34
|
async_job_key: identifier_t.IdentifierKey
|
|
36
35
|
upload_destination: generic_upload_t.UploadDestinationRecipe
|
|
36
|
+
parsed_file_data: list[uploader_t.ParsedFileData] | None = None
|
|
37
|
+
file_id: base_t.ObjectId | None = None
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -205,18 +205,22 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
205
205
|
def complete_async_parse(
|
|
206
206
|
self,
|
|
207
207
|
*,
|
|
208
|
-
parsed_file_data: list[uploader_t.ParsedFileData],
|
|
209
208
|
async_job_key: identifier_t.IdentifierKey,
|
|
210
209
|
upload_destination: generic_upload_t.UploadDestinationRecipe,
|
|
210
|
+
parsed_file_data: list[uploader_t.ParsedFileData] | None = None,
|
|
211
|
+
file_id: base_t.ObjectId | None = None,
|
|
211
212
|
depends_on: list[str] | None = None,
|
|
212
213
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
213
214
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
214
215
|
"""Parses uploaded files asynchronously
|
|
215
216
|
|
|
217
|
+
:param parsed_file_data: Inline parsed data. Provide either parsed_file_data or file_id, not both.
|
|
218
|
+
:param file_id: File ID containing parsed data. Provide either file_id or parsed_file_data, not both.
|
|
216
219
|
:param depends_on: A list of batch reference keys to process before processing this request
|
|
217
220
|
"""
|
|
218
221
|
args = complete_async_parse_t.Arguments(
|
|
219
222
|
parsed_file_data=parsed_file_data,
|
|
223
|
+
file_id=file_id,
|
|
220
224
|
async_job_key=async_job_key,
|
|
221
225
|
upload_destination=upload_destination,
|
|
222
226
|
)
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/client_base.py
RENAMED
|
@@ -340,16 +340,20 @@ class ClientMethods(ABC):
|
|
|
340
340
|
def complete_async_parse(
|
|
341
341
|
self,
|
|
342
342
|
*,
|
|
343
|
-
parsed_file_data: list[uploader_t.ParsedFileData],
|
|
344
343
|
async_job_key: identifier_t.IdentifierKey,
|
|
345
344
|
upload_destination: generic_upload_t.UploadDestinationRecipe,
|
|
345
|
+
parsed_file_data: list[uploader_t.ParsedFileData] | None = None,
|
|
346
|
+
file_id: base_t.ObjectId | None = None,
|
|
346
347
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
347
348
|
) -> complete_async_parse_t.Data:
|
|
348
349
|
"""Parses uploaded files asynchronously
|
|
349
350
|
|
|
351
|
+
:param parsed_file_data: Inline parsed data. Provide either parsed_file_data or file_id, not both.
|
|
352
|
+
:param file_id: File ID containing parsed data. Provide either file_id or parsed_file_data, not both.
|
|
350
353
|
"""
|
|
351
354
|
args = complete_async_parse_t.Arguments(
|
|
352
355
|
parsed_file_data=parsed_file_data,
|
|
356
|
+
file_id=file_id,
|
|
353
357
|
async_job_key=async_job_key,
|
|
354
358
|
upload_destination=upload_destination,
|
|
355
359
|
)
|
{uncountablepythonsdk-0.0.158 → uncountablepythonsdk-0.0.160}/uncountable/types/queued_job_t.py
RENAMED
|
@@ -11,6 +11,7 @@ import dataclasses
|
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
13
|
from . import base_t
|
|
14
|
+
from . import client_config_t
|
|
14
15
|
from . import job_definition_t
|
|
15
16
|
|
|
16
17
|
__all__: list[str] = [
|
|
@@ -74,6 +75,7 @@ class InvocationContextManual(InvocationContextBase):
|
|
|
74
75
|
class InvocationContextWebhook(InvocationContextBase):
|
|
75
76
|
type: typing.Literal[InvocationContextType.WEBHOOK] = InvocationContextType.WEBHOOK
|
|
76
77
|
webhook_payload: base_t.JsonValue
|
|
78
|
+
request_context: client_config_t.RequestContext | None = None
|
|
77
79
|
|
|
78
80
|
|
|
79
81
|
# DO NOT MODIFY -- This file is generated by type_spec
|