UncountablePythonSDK 0.0.142.dev0__tar.gz → 0.0.143__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.142.dev0 → uncountablepythonsdk-0.0.143}/.github/workflows/publish.yml +1 -3
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/UncountablePythonSDK.egg-info/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/UncountablePythonSDK.egg-info/SOURCES.txt +6 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/UncountablePythonSDK.egg-info/requires.txt +1 -1
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_http.py +1 -1
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +8 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/argument_parser/argument_parser.py +60 -18
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/builder.py +8 -1
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_python.py +8 -11
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_typescript_util.py +4 -1
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/parts/base.ts.prepart +3 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pyproject.toml +1 -2
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/client.py +5 -3
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/file_upload.py +5 -1
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/construct_client.py +1 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/worker.py +6 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/scan_profiles.py +2 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/telemetry.py +29 -5
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/__init__.py +6 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/list_aggregate.py +0 -1
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/runsheet/export_default_runsheet.py +2 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/client_base.py +30 -2
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/entity_t.py +51 -5
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/integration_server_t.py +1 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/job_definition_t.py +2 -0
- uncountablepythonsdk-0.0.143/uncountable/types/runsheet.py +21 -0
- uncountablepythonsdk-0.0.143/uncountable/types/runsheet_format.py +13 -0
- uncountablepythonsdk-0.0.143/uncountable/types/runsheet_format_t.py +92 -0
- uncountablepythonsdk-0.0.143/uncountable/types/runsheet_t.py +218 -0
- uncountablepythonsdk-0.0.143/uncountable/types/specs.py +7 -0
- uncountablepythonsdk-0.0.143/uncountable/types/specs_t.py +22 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/.python-version +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/README.md +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/integration_examples/index.md +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/builder_types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/http_server/types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/set_barcode.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/listing/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/listing/fetch_listing.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/notebooks/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/runsheet/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/user/__init__.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/listing.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/listing_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/notices.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/notices_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/.github/workflows/publish.yml
RENAMED
|
@@ -32,11 +32,9 @@ jobs:
|
|
|
32
32
|
- name: Install build dependencies
|
|
33
33
|
run: |
|
|
34
34
|
uv pip install --upgrade build
|
|
35
|
-
- name: Show changes
|
|
36
|
-
run: |
|
|
37
|
-
git status
|
|
38
35
|
- name: Build distributions and wheels
|
|
39
36
|
run: |
|
|
37
|
+
export SETUPTOOLS_SCM_PRETEND_VERSION_FOR_uncountablepythonsdk=$(git describe --tags --exact-match)
|
|
40
38
|
python3 -m build
|
|
41
39
|
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4
|
|
42
40
|
with:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.143
|
|
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
|
|
@@ -30,7 +30,7 @@ Requires-Dist: pysftp==0.*
|
|
|
30
30
|
Requires-Dist: opentelemetry-api==1.*
|
|
31
31
|
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.*
|
|
32
32
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.*
|
|
33
|
-
Requires-Dist: opentelemetry-sdk
|
|
33
|
+
Requires-Dist: opentelemetry-sdk<1.39.0
|
|
34
34
|
Requires-Dist: paramiko==3.*
|
|
35
35
|
Requires-Dist: boto3==1.*
|
|
36
36
|
Requires-Dist: flask==3.*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.143
|
|
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
|
|
@@ -30,7 +30,7 @@ Requires-Dist: pysftp==0.*
|
|
|
30
30
|
Requires-Dist: opentelemetry-api==1.*
|
|
31
31
|
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.*
|
|
32
32
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.*
|
|
33
|
-
Requires-Dist: opentelemetry-sdk
|
|
33
|
+
Requires-Dist: opentelemetry-sdk<1.39.0
|
|
34
34
|
Requires-Dist: paramiko==3.*
|
|
35
35
|
Requires-Dist: boto3==1.*
|
|
36
36
|
Requires-Dist: flask==3.*
|
|
@@ -244,10 +244,16 @@ uncountable/types/recipes.py
|
|
|
244
244
|
uncountable/types/recipes_t.py
|
|
245
245
|
uncountable/types/response.py
|
|
246
246
|
uncountable/types/response_t.py
|
|
247
|
+
uncountable/types/runsheet.py
|
|
248
|
+
uncountable/types/runsheet_format.py
|
|
249
|
+
uncountable/types/runsheet_format_t.py
|
|
250
|
+
uncountable/types/runsheet_t.py
|
|
247
251
|
uncountable/types/secret_retrieval.py
|
|
248
252
|
uncountable/types/secret_retrieval_t.py
|
|
249
253
|
uncountable/types/sockets.py
|
|
250
254
|
uncountable/types/sockets_t.py
|
|
255
|
+
uncountable/types/specs.py
|
|
256
|
+
uncountable/types/specs_t.py
|
|
251
257
|
uncountable/types/units.py
|
|
252
258
|
uncountable/types/units_t.py
|
|
253
259
|
uncountable/types/uploader.py
|
|
@@ -3,8 +3,8 @@ from dataclasses import dataclass
|
|
|
3
3
|
from uncountable.integration.http_server import (
|
|
4
4
|
GenericHttpRequest,
|
|
5
5
|
GenericHttpResponse,
|
|
6
|
+
HttpException,
|
|
6
7
|
)
|
|
7
|
-
from uncountable.integration.http_server.types import HttpException
|
|
8
8
|
from uncountable.integration.job import CustomHttpJob, register_job
|
|
9
9
|
from uncountable.types import job_definition_t
|
|
10
10
|
|
|
@@ -12,6 +12,8 @@ from uncountable.types import (
|
|
|
12
12
|
)
|
|
13
13
|
from uncountable.types.client_base import APIRequest
|
|
14
14
|
|
|
15
|
+
from pkgs.serialization_util import serialize_for_storage
|
|
16
|
+
|
|
15
17
|
RUNSHEET_REF_NAME = "recipe_export_runsheet"
|
|
16
18
|
RUNSHEET_REF_NAME_2 = "recipe_export_runsheet_2"
|
|
17
19
|
|
|
@@ -54,6 +56,12 @@ class StandardRunsheetGenerator(RunsheetWebhookJob):
|
|
|
54
56
|
return_type=export_default_runsheet_t.Data,
|
|
55
57
|
)
|
|
56
58
|
|
|
59
|
+
print(
|
|
60
|
+
"--------------------------------"
|
|
61
|
+
f"Runsheet metadata: {serialize_for_storage(response.default_runsheet_metadata.columns)}, "
|
|
62
|
+
"--------------------------------"
|
|
63
|
+
)
|
|
64
|
+
|
|
57
65
|
file_query = download_file_t.FileDownloadQueryTextDocumentId(
|
|
58
66
|
text_document_id=response.text_document_id,
|
|
59
67
|
)
|
|
@@ -214,13 +214,16 @@ def _build_parser_discriminated_union(
|
|
|
214
214
|
|
|
215
215
|
|
|
216
216
|
def _build_parser_inner(
|
|
217
|
-
parsed_type: type[T],
|
|
217
|
+
parsed_type: type[T] | typing.TypeVar,
|
|
218
218
|
context: ParserContext,
|
|
219
|
+
type_var_map: dict[typing.TypeVar, type],
|
|
219
220
|
) -> ParserFunction[T]:
|
|
220
221
|
"""
|
|
221
222
|
IMPROVE: We can now cache at this level, to avoid producing redundant
|
|
222
223
|
internal parsers.
|
|
223
224
|
"""
|
|
225
|
+
if isinstance(parsed_type, typing.TypeVar):
|
|
226
|
+
return _build_parser_inner(type_var_map[parsed_type], context, type_var_map)
|
|
224
227
|
|
|
225
228
|
serial_union = get_serial_union_data(parsed_type)
|
|
226
229
|
if serial_union is not None:
|
|
@@ -234,19 +237,40 @@ def _build_parser_inner(
|
|
|
234
237
|
context,
|
|
235
238
|
discriminator,
|
|
236
239
|
{
|
|
237
|
-
key: _build_parser_inner(value, context)
|
|
240
|
+
key: _build_parser_inner(value, context, type_var_map)
|
|
238
241
|
for key, value in discriminator_map.items()
|
|
239
242
|
},
|
|
240
243
|
)
|
|
241
244
|
|
|
242
245
|
if dataclasses.is_dataclass(parsed_type):
|
|
243
|
-
return _build_parser_dataclass(parsed_type, context)
|
|
246
|
+
return _build_parser_dataclass(parsed_type, context, type_var_map)
|
|
247
|
+
|
|
248
|
+
origin = typing.get_origin(parsed_type)
|
|
249
|
+
type_args = typing.get_args(parsed_type)
|
|
250
|
+
if dataclasses.is_dataclass(origin) and type_args is not None:
|
|
251
|
+
new_type_var_map = {}
|
|
252
|
+
type_params = getattr(origin, "__parameters__", ())
|
|
253
|
+
for type_param, type_arg in zip(type_params, type_args, strict=True):
|
|
254
|
+
resolved_type_arg = type_arg
|
|
255
|
+
if isinstance(type_arg, typing.TypeVar) and type_arg in type_var_map:
|
|
256
|
+
resolved_type_arg = type_var_map[type_arg]
|
|
257
|
+
|
|
258
|
+
new_type_var_map[type_param] = resolved_type_arg
|
|
259
|
+
|
|
260
|
+
return _build_parser_dataclass(
|
|
261
|
+
origin, # type: ignore[arg-type]
|
|
262
|
+
context,
|
|
263
|
+
new_type_var_map,
|
|
264
|
+
)
|
|
244
265
|
|
|
245
266
|
# namedtuple support
|
|
246
267
|
if is_namedtuple_type(parsed_type):
|
|
247
268
|
type_hints = typing.get_type_hints(parsed_type)
|
|
248
269
|
field_parsers = [
|
|
249
|
-
(
|
|
270
|
+
(
|
|
271
|
+
field_name,
|
|
272
|
+
_build_parser_inner(type_hints[field_name], context, type_var_map),
|
|
273
|
+
)
|
|
250
274
|
for field_name in parsed_type.__annotations__
|
|
251
275
|
]
|
|
252
276
|
return lambda value: parsed_type(**{
|
|
@@ -265,7 +289,6 @@ def _build_parser_inner(
|
|
|
265
289
|
# Need to convince type checker that parsed_type is type(None)
|
|
266
290
|
return typing.cast(ParserFunction[T], NONE_IDENTITY_PARSER)
|
|
267
291
|
|
|
268
|
-
origin = typing.get_origin(parsed_type)
|
|
269
292
|
if origin is tuple:
|
|
270
293
|
args = typing.get_args(parsed_type)
|
|
271
294
|
element_parsers: list[typing.Callable[[typing.Any], object]] = []
|
|
@@ -276,7 +299,7 @@ def _build_parser_inner(
|
|
|
276
299
|
assert len(element_parsers) == 1
|
|
277
300
|
has_ellipsis = True
|
|
278
301
|
else:
|
|
279
|
-
element_parsers.append(_build_parser_inner(arg, context))
|
|
302
|
+
element_parsers.append(_build_parser_inner(arg, context, type_var_map))
|
|
280
303
|
return lambda value: _invoke_tuple_parsers(
|
|
281
304
|
parsed_type, element_parsers, has_ellipsis, value
|
|
282
305
|
)
|
|
@@ -287,7 +310,9 @@ def _build_parser_inner(
|
|
|
287
310
|
args,
|
|
288
311
|
key=lambda subtype: (0 if subtype == type(None) else 1), # noqa: E721
|
|
289
312
|
)
|
|
290
|
-
arg_parsers = [
|
|
313
|
+
arg_parsers = [
|
|
314
|
+
_build_parser_inner(arg, context, type_var_map) for arg in sorted_args
|
|
315
|
+
]
|
|
291
316
|
return lambda value: _invoke_fallback_parsers(parsed_type, arg_parsers, value)
|
|
292
317
|
|
|
293
318
|
if parsed_type is typing.Any:
|
|
@@ -297,7 +322,7 @@ def _build_parser_inner(
|
|
|
297
322
|
args = typing.get_args(parsed_type)
|
|
298
323
|
if len(args) != 1:
|
|
299
324
|
raise ValueError("List types only support one argument")
|
|
300
|
-
arg_parser = _build_parser_inner(args[0], context)
|
|
325
|
+
arg_parser = _build_parser_inner(args[0], context, type_var_map)
|
|
301
326
|
|
|
302
327
|
def parse_element(value: typing.Any) -> typing.Any:
|
|
303
328
|
try:
|
|
@@ -319,6 +344,7 @@ def _build_parser_inner(
|
|
|
319
344
|
k_inner_parser = _build_parser_inner(
|
|
320
345
|
args[0],
|
|
321
346
|
context,
|
|
347
|
+
type_var_map,
|
|
322
348
|
)
|
|
323
349
|
|
|
324
350
|
def key_parser(value: typing.Any) -> object:
|
|
@@ -333,7 +359,7 @@ def _build_parser_inner(
|
|
|
333
359
|
return camel_to_snake_case(value)
|
|
334
360
|
return inner
|
|
335
361
|
|
|
336
|
-
v_parser = _build_parser_inner(args[1], context)
|
|
362
|
+
v_parser = _build_parser_inner(args[1], context, type_var_map)
|
|
337
363
|
return lambda value: origin(
|
|
338
364
|
(key_parser(k), v_parser(v)) for k, v in value.items()
|
|
339
365
|
)
|
|
@@ -422,23 +448,36 @@ def _build_parser_inner(
|
|
|
422
448
|
return _build_parser_inner(
|
|
423
449
|
parsed_type.__origin__, # type: ignore[attr-defined]
|
|
424
450
|
context,
|
|
451
|
+
type_var_map,
|
|
425
452
|
)
|
|
426
453
|
|
|
427
454
|
raise ValueError(f"Unhandled type {parsed_type}/{origin}")
|
|
428
455
|
|
|
429
456
|
|
|
457
|
+
# Take in map of parameter name to materialized type
|
|
430
458
|
def _build_parser_dataclass(
|
|
431
459
|
parsed_type: type[T],
|
|
432
460
|
context: ParserContext,
|
|
461
|
+
type_var_map: dict[typing.TypeVar, type],
|
|
433
462
|
) -> ParserFunction[T]:
|
|
434
463
|
"""
|
|
435
464
|
Use the cache so that recursion involve dataclasses is supported. This
|
|
436
465
|
requires the build order is a bit inverted: the dataclass parser is added
|
|
437
466
|
to the cache prior to building it's field parsers.
|
|
438
467
|
"""
|
|
439
|
-
|
|
468
|
+
|
|
469
|
+
type_params = getattr(parsed_type, "__parameters__", None)
|
|
470
|
+
cache_key: typing.Any = parsed_type
|
|
471
|
+
if type_params is not None and type_var_map:
|
|
472
|
+
cache_key = (
|
|
473
|
+
parsed_type,
|
|
474
|
+
tuple(type_var_map.items()),
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
cur_parser = context.cache.get(cache_key)
|
|
440
478
|
if cur_parser is not None:
|
|
441
479
|
return cur_parser
|
|
480
|
+
|
|
442
481
|
type_hints = typing.get_type_hints(parsed_type, include_extras=True)
|
|
443
482
|
dc_field_parsers: list[
|
|
444
483
|
tuple[
|
|
@@ -527,14 +566,17 @@ def _build_parser_dataclass(
|
|
|
527
566
|
parser_function = parse
|
|
528
567
|
context.cache[parsed_type] = parser_function
|
|
529
568
|
|
|
530
|
-
dc_field_parsers = [
|
|
531
|
-
|
|
569
|
+
dc_field_parsers = []
|
|
570
|
+
for field in dataclasses.fields(parsed_type): # type:ignore[arg-type]
|
|
571
|
+
field_type_hint = type_hints[field.name]
|
|
572
|
+
if isinstance(field_type_hint, typing.TypeVar):
|
|
573
|
+
field_type_hint = type_var_map[field_type_hint]
|
|
574
|
+
|
|
575
|
+
dc_field_parsers.append((
|
|
532
576
|
field,
|
|
533
|
-
|
|
534
|
-
_build_parser_inner(
|
|
535
|
-
)
|
|
536
|
-
for field in dataclasses.fields(parsed_type) # type:ignore[arg-type]
|
|
537
|
-
]
|
|
577
|
+
field_type_hint,
|
|
578
|
+
_build_parser_inner(field_type_hint, context, type_var_map),
|
|
579
|
+
))
|
|
538
580
|
|
|
539
581
|
return parser_function
|
|
540
582
|
|
|
@@ -559,7 +601,7 @@ def build_parser(
|
|
|
559
601
|
return cur_parser
|
|
560
602
|
|
|
561
603
|
context = ParserContext(options=options, cache=cache)
|
|
562
|
-
built_parser = _build_parser_inner(parsed_type, context)
|
|
604
|
+
built_parser = _build_parser_inner(parsed_type, context, {})
|
|
563
605
|
cache[parsed_type] = built_parser
|
|
564
606
|
return built_parser
|
|
565
607
|
|
{uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/builder.py
RENAMED
|
@@ -476,7 +476,7 @@ class SpecTypeGenericParameter(SpecType):
|
|
|
476
476
|
return True
|
|
477
477
|
|
|
478
478
|
def is_value_to_string(self) -> bool:
|
|
479
|
-
return
|
|
479
|
+
return False
|
|
480
480
|
|
|
481
481
|
def is_valid_parameter(self) -> bool:
|
|
482
482
|
return True
|
|
@@ -491,6 +491,7 @@ class SpecTypeGenericParameter(SpecType):
|
|
|
491
491
|
class SpecTypeDefnObject(SpecTypeDefn):
|
|
492
492
|
base: SpecTypeDefnObject | None
|
|
493
493
|
parameters: list[str]
|
|
494
|
+
base_type_instance: SpecTypeInstance | None
|
|
494
495
|
|
|
495
496
|
def __init__(
|
|
496
497
|
self,
|
|
@@ -514,6 +515,7 @@ class SpecTypeDefnObject(SpecTypeDefn):
|
|
|
514
515
|
self.parameters = parameters if parameters is not None else []
|
|
515
516
|
self.is_hashable = is_hashable
|
|
516
517
|
self.base = None
|
|
518
|
+
self.base_type_instance = None
|
|
517
519
|
self.properties: dict[str, SpecProperty] | None = None
|
|
518
520
|
self._kw_only: bool = True
|
|
519
521
|
self.desc: str | None = None
|
|
@@ -545,6 +547,11 @@ class SpecTypeDefnObject(SpecTypeDefn):
|
|
|
545
547
|
["type", "desc", "properties", "name_case", "hashable", "kw_only"],
|
|
546
548
|
)
|
|
547
549
|
type_base = builder.parse_type(self.namespace, data["type"], scope=self)
|
|
550
|
+
|
|
551
|
+
if isinstance(type_base, SpecTypeInstance):
|
|
552
|
+
self.base_type_instance = type_base
|
|
553
|
+
type_base = type_base.defn_type
|
|
554
|
+
|
|
548
555
|
builder.ensure(
|
|
549
556
|
isinstance(type_base, SpecTypeDefnObject),
|
|
550
557
|
"unsupported base type: not an Object",
|
{uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/pkgs/type_spec/emit_python.py
RENAMED
|
@@ -928,10 +928,15 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
928
928
|
class_out = io.StringIO()
|
|
929
929
|
base_class = ""
|
|
930
930
|
generics = stype.get_generics()
|
|
931
|
-
if
|
|
932
|
-
base_class = f"({refer_to(ctx, stype.base)})"
|
|
933
|
-
elif len(generics) > 0:
|
|
931
|
+
if len(generics) > 0:
|
|
934
932
|
base_class = f"[{', '.join(generics)}]"
|
|
933
|
+
|
|
934
|
+
if not stype.base.is_base:
|
|
935
|
+
if stype.base_type_instance is not None:
|
|
936
|
+
base_class += f"({refer_to(ctx, stype.base_type_instance)})"
|
|
937
|
+
else:
|
|
938
|
+
base_class += f"({refer_to(ctx, stype.base)})"
|
|
939
|
+
|
|
935
940
|
class_out.write(f"class {stype.name}{base_class}:\n")
|
|
936
941
|
|
|
937
942
|
emitted_properties_metadata = _emit_type_properties(
|
|
@@ -942,8 +947,6 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
942
947
|
to_string_values = emitted_properties_metadata.to_string_values
|
|
943
948
|
parse_require = emitted_properties_metadata.parse_require
|
|
944
949
|
|
|
945
|
-
_emit_generics(ctx, generics)
|
|
946
|
-
|
|
947
950
|
# Emit serial_class decorator
|
|
948
951
|
ctx.out.write("@serial_class(\n")
|
|
949
952
|
ctx.out.write(
|
|
@@ -985,12 +988,6 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
985
988
|
ctx.out.write(class_out.getvalue())
|
|
986
989
|
|
|
987
990
|
|
|
988
|
-
def _emit_generics(ctx: Context, generics: list[str]) -> None:
|
|
989
|
-
for generic in generics:
|
|
990
|
-
ctx.out.write(f'{generic} = typing.TypeVar("{generic}")\n')
|
|
991
|
-
ctx.out.write(f"{LINE_BREAK}{LINE_BREAK}")
|
|
992
|
-
|
|
993
|
-
|
|
994
991
|
def _emit_constant(ctx: Context, sconst: builder.SpecConstant) -> None:
|
|
995
992
|
ctx.out.write("\n\n")
|
|
996
993
|
ctx.out.write(MODIFY_NOTICE)
|
|
@@ -186,7 +186,10 @@ def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
|
|
|
186
186
|
|
|
187
187
|
base_type = ""
|
|
188
188
|
if not stype.base.is_base:
|
|
189
|
-
|
|
189
|
+
if stype.base_type_instance is not None:
|
|
190
|
+
base_type = f"({refer_to(ctx, stype.base_type_instance)}) & "
|
|
191
|
+
else:
|
|
192
|
+
base_type = f"{refer_to(ctx, stype.base)} & "
|
|
190
193
|
|
|
191
194
|
if stype.properties is None and base_type == "":
|
|
192
195
|
ctx.out.write(f"export type {stype.name} = TEmpty\n")
|
|
@@ -32,3 +32,6 @@ export interface nominal<T> {
|
|
|
32
32
|
|
|
33
33
|
// Ids matching a strict integer number are converted to integers
|
|
34
34
|
export const ID_REGEX = /^-?[1-9][0-9]{0,20}$/
|
|
35
|
+
// Matches ISO 8601 dates. Stricter than `Date.parse`.
|
|
36
|
+
// https://www.w3.org/TR/NOTE-datetime
|
|
37
|
+
export const ISO8601_DATE_REGEX = /^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
|
|
@@ -22,7 +22,6 @@ find = {}
|
|
|
22
22
|
[tool.setuptools_scm]
|
|
23
23
|
fallback_version = "0.0.0"
|
|
24
24
|
local_scheme = "no-local-version"
|
|
25
|
-
tag_regex = "^(?:v)?(?P<version>\\d+\\.\\d+\\.\\d+)$"
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
########################################################################################
|
|
@@ -66,7 +65,7 @@ dependencies = [
|
|
|
66
65
|
"opentelemetry-api==1.*",
|
|
67
66
|
"opentelemetry-exporter-otlp-proto-common==1.*",
|
|
68
67
|
"opentelemetry-exporter-otlp-proto-http==1.*",
|
|
69
|
-
"opentelemetry-sdk
|
|
68
|
+
"opentelemetry-sdk < 1.39.0",
|
|
70
69
|
"paramiko ==3.*",
|
|
71
70
|
"boto3 == 1.*",
|
|
72
71
|
"flask == 3.*",
|
{uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/client.py
RENAMED
|
@@ -185,6 +185,7 @@ class Client(ClientMethods):
|
|
|
185
185
|
base_url: str,
|
|
186
186
|
auth_details: AuthDetailsAll,
|
|
187
187
|
config: ClientConfig | None = None,
|
|
188
|
+
app_base_url: str | None = None,
|
|
188
189
|
):
|
|
189
190
|
self._auth_details = auth_details
|
|
190
191
|
self._base_url = base_url
|
|
@@ -192,10 +193,11 @@ class Client(ClientMethods):
|
|
|
192
193
|
self._session = requests.Session()
|
|
193
194
|
self._session.verify = not self._cfg.allow_insecure_tls
|
|
194
195
|
self._file_uploader = FileUploader(
|
|
195
|
-
self._base_url,
|
|
196
|
-
self._auth_details,
|
|
197
|
-
self._cfg.allow_insecure_tls,
|
|
196
|
+
base_url=self._base_url,
|
|
197
|
+
auth_details=self._auth_details,
|
|
198
|
+
allow_insecure_tls=self._cfg.allow_insecure_tls,
|
|
198
199
|
logger=self._cfg.logger,
|
|
200
|
+
app_base_url=app_base_url,
|
|
199
201
|
)
|
|
200
202
|
|
|
201
203
|
@classmethod
|
{uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/core/file_upload.py
RENAMED
|
@@ -70,22 +70,26 @@ class UploadFailed(Exception):
|
|
|
70
70
|
class FileUploader:
|
|
71
71
|
_auth_details: AuthDetailsAll
|
|
72
72
|
_base_url: str
|
|
73
|
+
_app_base_url: str
|
|
73
74
|
_allow_insecure_tls: bool
|
|
74
75
|
|
|
75
76
|
def __init__(
|
|
76
77
|
self: Self,
|
|
78
|
+
*,
|
|
77
79
|
base_url: str,
|
|
78
80
|
auth_details: AuthDetailsAll,
|
|
79
81
|
allow_insecure_tls: bool = False,
|
|
80
82
|
logger: Logger | None = None,
|
|
83
|
+
app_base_url: str | None = None,
|
|
81
84
|
) -> None:
|
|
82
85
|
self._base_url = base_url
|
|
86
|
+
self._app_base_url = app_base_url if app_base_url is not None else base_url
|
|
83
87
|
self._auth_details = auth_details
|
|
84
88
|
self._allow_insecure_tls = allow_insecure_tls
|
|
85
89
|
self._logger = logger
|
|
86
90
|
|
|
87
91
|
async def _upload_file(self: Self, file_upload: FileUpload) -> UploadedFile:
|
|
88
|
-
creation_url = f"{self.
|
|
92
|
+
creation_url = f"{self._app_base_url}/api/external/file_upload/files"
|
|
89
93
|
if not isinstance(self._auth_details, AuthDetailsApiKey):
|
|
90
94
|
raise NotImplementedError("Unsupported authentication method.")
|
|
91
95
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
import resource
|
|
2
3
|
from concurrent.futures import ProcessPoolExecutor
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
|
|
6
|
+
import psutil
|
|
5
7
|
from opentelemetry.trace import get_current_span
|
|
6
8
|
|
|
7
9
|
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
@@ -82,6 +84,10 @@ def run_queued_job(
|
|
|
82
84
|
queued_job: queued_job_t.QueuedJob,
|
|
83
85
|
) -> job_definition_t.JobResult:
|
|
84
86
|
with get_otel_tracer().start_as_current_span(name="run_queued_job") as span:
|
|
87
|
+
total_mem = psutil.virtual_memory().total
|
|
88
|
+
limit_bytes = int(total_mem * 0.9)
|
|
89
|
+
resource.setrlimit(resource.RLIMIT_AS, (limit_bytes, limit_bytes))
|
|
90
|
+
|
|
85
91
|
job_details = get_registered_job_details(queued_job.job_ref_name)
|
|
86
92
|
job_logger = JobLogger(
|
|
87
93
|
base_span=span,
|
|
@@ -43,6 +43,7 @@ def load_profiles() -> list[job_definition_t.ProfileMetadata]:
|
|
|
43
43
|
name=profile_name,
|
|
44
44
|
jobs=definition.jobs,
|
|
45
45
|
base_url=environment_config.base_url,
|
|
46
|
+
app_base_url=environment_config.app_base_url,
|
|
46
47
|
auth_retrieval=environment_config.auth_retrieval,
|
|
47
48
|
client_options=environment_config.client_options,
|
|
48
49
|
)
|
|
@@ -57,6 +58,7 @@ def load_profiles() -> list[job_definition_t.ProfileMetadata]:
|
|
|
57
58
|
name=profile_name,
|
|
58
59
|
jobs=definition.jobs,
|
|
59
60
|
base_url=definition.base_url,
|
|
61
|
+
app_base_url=definition.app_base_url,
|
|
60
62
|
auth_retrieval=definition.auth_retrieval,
|
|
61
63
|
client_options=definition.client_options,
|
|
62
64
|
)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import functools
|
|
2
2
|
import json
|
|
3
3
|
import os
|
|
4
|
+
import resource
|
|
4
5
|
import threading
|
|
5
6
|
import time
|
|
6
7
|
import traceback
|
|
@@ -12,6 +13,7 @@ from typing import Generator, assert_never, cast
|
|
|
12
13
|
|
|
13
14
|
import psutil
|
|
14
15
|
from opentelemetry import _logs, trace
|
|
16
|
+
from opentelemetry.context import get_current
|
|
15
17
|
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
|
|
16
18
|
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
|
17
19
|
from opentelemetry.sdk._logs import Logger as OTELLogger
|
|
@@ -25,7 +27,7 @@ from opentelemetry.sdk.trace import TracerProvider
|
|
|
25
27
|
from opentelemetry.sdk.trace.export import (
|
|
26
28
|
SimpleSpanProcessor,
|
|
27
29
|
)
|
|
28
|
-
from opentelemetry.trace import
|
|
30
|
+
from opentelemetry.trace import Span, Tracer
|
|
29
31
|
|
|
30
32
|
from uncountable.core.environment import (
|
|
31
33
|
get_otel_enabled,
|
|
@@ -87,6 +89,19 @@ class LogSeverity(StrEnum):
|
|
|
87
89
|
ERROR = "Error"
|
|
88
90
|
|
|
89
91
|
|
|
92
|
+
def _get_severity_number(severity: LogSeverity) -> _logs.SeverityNumber:
|
|
93
|
+
"""Map LogSeverity to OpenTelemetry SeverityNumber for Datadog."""
|
|
94
|
+
match severity:
|
|
95
|
+
case LogSeverity.INFO:
|
|
96
|
+
return _logs.SeverityNumber.INFO
|
|
97
|
+
case LogSeverity.WARN:
|
|
98
|
+
return _logs.SeverityNumber.WARN
|
|
99
|
+
case LogSeverity.ERROR:
|
|
100
|
+
return _logs.SeverityNumber.ERROR
|
|
101
|
+
case _:
|
|
102
|
+
assert_never(severity)
|
|
103
|
+
|
|
104
|
+
|
|
90
105
|
class Logger:
|
|
91
106
|
current_span: Span
|
|
92
107
|
|
|
@@ -134,10 +149,8 @@ class Logger:
|
|
|
134
149
|
attributes=self._patch_attributes(
|
|
135
150
|
message=message, severity=severity, attributes=attributes
|
|
136
151
|
),
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
trace_flags=DEFAULT_TRACE_OPTIONS,
|
|
140
|
-
severity_number=_logs.SeverityNumber.UNSPECIFIED,
|
|
152
|
+
context=get_current(),
|
|
153
|
+
severity_number=_get_severity_number(severity),
|
|
141
154
|
resource=get_otel_resource(),
|
|
142
155
|
)
|
|
143
156
|
otel_logger.emit(log_record)
|
|
@@ -237,7 +250,18 @@ class PerJobResourceTracker:
|
|
|
237
250
|
) -> None:
|
|
238
251
|
self.stop()
|
|
239
252
|
stats = dict(self.summary())
|
|
253
|
+
if isinstance(exc_value, MemoryError):
|
|
254
|
+
limit, _ = resource.getrlimit(resource.RLIMIT_AS)
|
|
255
|
+
self.logger.log_exception(
|
|
256
|
+
exc_value,
|
|
257
|
+
message=(
|
|
258
|
+
f"Job '{self.logger.job_definition.name}' (ID={self.logger.job_definition.id}) "
|
|
259
|
+
f"exceeded memory limit ({limit / (1024**3):.2f} GB)."
|
|
260
|
+
),
|
|
261
|
+
)
|
|
262
|
+
return
|
|
240
263
|
self.logger.log_info("Job resource usage summary", attributes=stats)
|
|
264
|
+
return
|
|
241
265
|
|
|
242
266
|
def summary(self) -> Attributes:
|
|
243
267
|
assert self.start_cpu_times is not None
|
{uncountablepythonsdk-0.0.142.dev0 → uncountablepythonsdk-0.0.143}/uncountable/types/__init__.py
RENAMED
|
@@ -106,6 +106,8 @@ from .api.entity import resolve_entity_ids as resolve_entity_ids_t
|
|
|
106
106
|
from .api.outputs import resolve_output_conditions as resolve_output_conditions_t
|
|
107
107
|
from . import response_t as response_t
|
|
108
108
|
from .api.triggers import run_trigger as run_trigger_t
|
|
109
|
+
from . import runsheet_format_t as runsheet_format_t
|
|
110
|
+
from . import runsheet_t as runsheet_t
|
|
109
111
|
from . import secret_retrieval_t as secret_retrieval_t
|
|
110
112
|
from .api.entity import set_barcode as set_barcode_t
|
|
111
113
|
from .api.permissions import set_core_permissions as set_core_permissions_t
|
|
@@ -123,6 +125,7 @@ from .api.recipes import set_recipe_tags as set_recipe_tags_t
|
|
|
123
125
|
from .api.recipes import set_recipe_total as set_recipe_total_t
|
|
124
126
|
from .api.entity import set_values as set_values_t
|
|
125
127
|
from . import sockets_t as sockets_t
|
|
128
|
+
from . import specs_t as specs_t
|
|
126
129
|
from .api.entity import transition_entity_phase as transition_entity_phase_t
|
|
127
130
|
from .api.recipes import unarchive_recipes as unarchive_recipes_t
|
|
128
131
|
from . import units_t as units_t
|
|
@@ -242,6 +245,8 @@ __all__: list[str] = [
|
|
|
242
245
|
"resolve_output_conditions_t",
|
|
243
246
|
"response_t",
|
|
244
247
|
"run_trigger_t",
|
|
248
|
+
"runsheet_format_t",
|
|
249
|
+
"runsheet_t",
|
|
245
250
|
"secret_retrieval_t",
|
|
246
251
|
"set_barcode_t",
|
|
247
252
|
"set_core_permissions_t",
|
|
@@ -259,6 +264,7 @@ __all__: list[str] = [
|
|
|
259
264
|
"set_recipe_total_t",
|
|
260
265
|
"set_values_t",
|
|
261
266
|
"sockets_t",
|
|
267
|
+
"specs_t",
|
|
262
268
|
"transition_entity_phase_t",
|
|
263
269
|
"unarchive_recipes_t",
|
|
264
270
|
"units_t",
|
|
@@ -38,7 +38,6 @@ class AttributeValue:
|
|
|
38
38
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
39
39
|
@serial_class(
|
|
40
40
|
named_type_path="sdk.api.entity.list_aggregate.Arguments",
|
|
41
|
-
unconverted_values={"attribute_values"},
|
|
42
41
|
)
|
|
43
42
|
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
44
43
|
class Arguments:
|
|
@@ -11,6 +11,7 @@ from pkgs.serialization import serial_class
|
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
from ... import identifier_t
|
|
14
|
+
from ... import runsheet_t
|
|
14
15
|
|
|
15
16
|
__all__: list[str] = [
|
|
16
17
|
"Arguments",
|
|
@@ -41,4 +42,5 @@ class Arguments:
|
|
|
41
42
|
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
42
43
|
class Data:
|
|
43
44
|
text_document_id: base_t.ObjectId
|
|
45
|
+
default_runsheet_metadata: runsheet_t.DefaultRunsheet
|
|
44
46
|
# DO NOT MODIFY -- This file is generated by type_spec
|