UncountablePythonSDK 0.0.143__tar.gz → 0.0.145__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.143 → uncountablepythonsdk-0.0.145}/.github/workflows/publish.yml +2 -2
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/UncountablePythonSDK.egg-info/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/UncountablePythonSDK.egg-info/requires.txt +1 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/integration_examples/index.md +1 -0
- uncountablepythonsdk-0.0.145/docs/integration_examples/upload_file.md +31 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/argument_parser/argument_parser.py +70 -13
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/builder.py +10 -5
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_python.py +43 -2
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_typescript_util.py +9 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/type_info/emit_type_info.py +38 -28
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pyproject.toml +1 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/cli.py +8 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/executors/executors.py +1 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/command_client.py +2 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/command_server.py +13 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +1 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +14 -14
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +7 -2
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +8 -2
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/datastore/interface.py +4 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/__init__.py +2 -0
- uncountablepythonsdk-0.0.145/uncountable/types/api/files/create_file_record.py +41 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/integrations/publish_realtime_data.py +15 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_outputs.py +1 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/async_batch_processor.py +1 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/client_base.py +19 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/entity_t.py +9 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/queued_job_t.py +1 -1
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/.python-version +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/README.md +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/builder_types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/http_server/types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/list_aggregate.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/set_barcode.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/listing/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/listing/fetch_listing.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/notebooks/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/runsheet/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/user/__init__.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/listing.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/listing_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/notices.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/notices_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/runsheet.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/runsheet_format.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/runsheet_format_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/runsheet_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/specs.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/specs_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/types/workflows_t.py +0 -0
|
@@ -36,7 +36,7 @@ jobs:
|
|
|
36
36
|
run: |
|
|
37
37
|
export SETUPTOOLS_SCM_PRETEND_VERSION_FOR_uncountablepythonsdk=$(git describe --tags --exact-match)
|
|
38
38
|
python3 -m build
|
|
39
|
-
- uses: actions/upload-artifact@
|
|
39
|
+
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
40
40
|
with:
|
|
41
41
|
name: package-distributions
|
|
42
42
|
path: dist/
|
|
@@ -50,7 +50,7 @@ jobs:
|
|
|
50
50
|
permissions:
|
|
51
51
|
id-token: write
|
|
52
52
|
steps:
|
|
53
|
-
- uses: actions/download-artifact@
|
|
53
|
+
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
54
54
|
with:
|
|
55
55
|
name: package-distributions
|
|
56
56
|
path: dist/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.145
|
|
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
|
|
@@ -41,7 +41,7 @@ Requires-Dist: azure-storage-blob==12.*
|
|
|
41
41
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
42
|
Requires-Dist: msgspec==0.19.*
|
|
43
43
|
Requires-Dist: tabulate==0.9.0
|
|
44
|
-
Requires-Dist: types-psutil~=
|
|
44
|
+
Requires-Dist: types-psutil~=7.0.0
|
|
45
45
|
Requires-Dist: psutil>=5.9.0
|
|
46
46
|
Provides-Extra: test
|
|
47
47
|
Requires-Dist: mypy==1.*; extra == "test"
|
{uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/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.145
|
|
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
|
|
@@ -41,7 +41,7 @@ Requires-Dist: azure-storage-blob==12.*
|
|
|
41
41
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
42
|
Requires-Dist: msgspec==0.19.*
|
|
43
43
|
Requires-Dist: tabulate==0.9.0
|
|
44
|
-
Requires-Dist: types-psutil~=
|
|
44
|
+
Requires-Dist: types-psutil~=7.0.0
|
|
45
45
|
Requires-Dist: psutil>=5.9.0
|
|
46
46
|
Provides-Extra: test
|
|
47
47
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
@@ -17,6 +17,7 @@ docs/requirements.txt
|
|
|
17
17
|
docs/integration_examples/create_ingredient.md
|
|
18
18
|
docs/integration_examples/create_output.md
|
|
19
19
|
docs/integration_examples/index.md
|
|
20
|
+
docs/integration_examples/upload_file.md
|
|
20
21
|
docs/static/logo_blue.png
|
|
21
22
|
docs/static/favicons/android-chrome-192x192.png
|
|
22
23
|
docs/static/favicons/android-chrome-512x512.png
|
|
@@ -294,6 +295,7 @@ uncountable/types/api/equipment/associate_equipment_input.py
|
|
|
294
295
|
uncountable/types/api/field_options/__init__.py
|
|
295
296
|
uncountable/types/api/field_options/upsert_field_options.py
|
|
296
297
|
uncountable/types/api/files/__init__.py
|
|
298
|
+
uncountable/types/api/files/create_file_record.py
|
|
297
299
|
uncountable/types/api/files/download_file.py
|
|
298
300
|
uncountable/types/api/id_source/__init__.py
|
|
299
301
|
uncountable/types/api/id_source/list_id_source.py
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Upload Files
|
|
2
|
+
|
|
3
|
+
This example demonstrates the efficient way to upload files using the External API SDK's `client.upload_files()` method.
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
from io import BytesIO
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from uncountable.core import AuthDetailsApiKey, Client
|
|
10
|
+
from uncountable.core.client import ClientConfig
|
|
11
|
+
from uncountable.core.file_upload import DataFileUpload, UploadedFile
|
|
12
|
+
|
|
13
|
+
client: Client = Client(
|
|
14
|
+
base_url="<BASE_URL>",
|
|
15
|
+
auth_details=AuthDetailsApiKey(
|
|
16
|
+
api_id="<API_ID>",
|
|
17
|
+
api_secret_key="<API_SECRET_KEY>"
|
|
18
|
+
),
|
|
19
|
+
config=ClientConfig(allow_insecure_tls=False),
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
filepath = Path("<YOUR_FILE_PATH>")
|
|
23
|
+
file_io: BytesIO = BytesIO(filepath.read_bytes())
|
|
24
|
+
|
|
25
|
+
upload_file_response: list[UploadedFile] = client.upload_files(
|
|
26
|
+
file_uploads=[DataFileUpload(data=file_io, name=filepath.name)]
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
uploaded_file_name = upload_file_response[0].name
|
|
30
|
+
uploaded_file_id = upload_file_response[0].file_id
|
|
31
|
+
```
|
|
@@ -213,6 +213,59 @@ def _build_parser_discriminated_union(
|
|
|
213
213
|
return parse
|
|
214
214
|
|
|
215
215
|
|
|
216
|
+
def _resolve_type_var(
|
|
217
|
+
*,
|
|
218
|
+
type_arg: typing.Any,
|
|
219
|
+
type_var_map: dict[typing.TypeVar, type],
|
|
220
|
+
) -> typing.Any:
|
|
221
|
+
if isinstance(type_arg, typing.TypeVar):
|
|
222
|
+
if type_arg in type_var_map:
|
|
223
|
+
return type_var_map[type_arg]
|
|
224
|
+
return type_arg
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def _resolve_base_type_vars(
|
|
228
|
+
*,
|
|
229
|
+
cls: type,
|
|
230
|
+
type_var_map: dict[typing.TypeVar, type],
|
|
231
|
+
) -> None:
|
|
232
|
+
"""Recursively resolve TypeVars from all base classes."""
|
|
233
|
+
for base in getattr(cls, "__orig_bases__", cls.__bases__):
|
|
234
|
+
base_origin = typing.get_origin(base)
|
|
235
|
+
|
|
236
|
+
# Skip typing.Generic marker
|
|
237
|
+
if base_origin is typing.Generic:
|
|
238
|
+
continue
|
|
239
|
+
|
|
240
|
+
base_args = typing.get_args(base)
|
|
241
|
+
if base_origin is None or base_args is None:
|
|
242
|
+
continue
|
|
243
|
+
|
|
244
|
+
# Map base class TypeVars
|
|
245
|
+
base_params = getattr(base_origin, "__parameters__", ())
|
|
246
|
+
for base_param, base_arg in zip(base_params, base_args, strict=True):
|
|
247
|
+
resolved_new_type = _resolve_type_var(
|
|
248
|
+
type_arg=base_arg, type_var_map=type_var_map
|
|
249
|
+
)
|
|
250
|
+
if base_param in type_var_map:
|
|
251
|
+
existing_type = type_var_map[base_param]
|
|
252
|
+
|
|
253
|
+
assert existing_type == resolved_new_type, (
|
|
254
|
+
f"Conflicting generic type variable mapping detected: "
|
|
255
|
+
f"TypeVar {base_param} is already mapped to {existing_type}, "
|
|
256
|
+
f"but attempting to remap to {resolved_new_type}. "
|
|
257
|
+
)
|
|
258
|
+
else:
|
|
259
|
+
type_var_map[base_param] = resolved_new_type
|
|
260
|
+
|
|
261
|
+
# Recurse into base's bases
|
|
262
|
+
if dataclasses.is_dataclass(base_origin):
|
|
263
|
+
_resolve_base_type_vars(
|
|
264
|
+
cls=base_origin, # type: ignore[arg-type]
|
|
265
|
+
type_var_map=type_var_map,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
|
|
216
269
|
def _build_parser_inner(
|
|
217
270
|
parsed_type: type[T] | typing.TypeVar,
|
|
218
271
|
context: ParserContext,
|
|
@@ -248,21 +301,25 @@ def _build_parser_inner(
|
|
|
248
301
|
origin = typing.get_origin(parsed_type)
|
|
249
302
|
type_args = typing.get_args(parsed_type)
|
|
250
303
|
if dataclasses.is_dataclass(origin) and type_args is not None:
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
304
|
+
# Build local TypeVar map
|
|
305
|
+
merged_map: dict[typing.TypeVar, type] = {
|
|
306
|
+
**type_var_map,
|
|
307
|
+
**{
|
|
308
|
+
param: _resolve_type_var(type_arg=arg, type_var_map=type_var_map)
|
|
309
|
+
for param, arg in zip(
|
|
310
|
+
getattr(origin, "__parameters__", ()), type_args, strict=True
|
|
311
|
+
)
|
|
312
|
+
},
|
|
313
|
+
}
|
|
259
314
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
315
|
+
# Resolve base class TypeVars
|
|
316
|
+
_resolve_base_type_vars(
|
|
317
|
+
cls=origin, # type: ignore[arg-type]
|
|
318
|
+
type_var_map=merged_map,
|
|
264
319
|
)
|
|
265
320
|
|
|
321
|
+
return _build_parser_dataclass(origin, context, merged_map) # type: ignore[arg-type]
|
|
322
|
+
|
|
266
323
|
# namedtuple support
|
|
267
324
|
if is_namedtuple_type(parsed_type):
|
|
268
325
|
type_hints = typing.get_type_hints(parsed_type)
|
|
@@ -564,7 +621,7 @@ def _build_parser_dataclass(
|
|
|
564
621
|
|
|
565
622
|
# Add to cache before building inner types, to support recursion
|
|
566
623
|
parser_function = parse
|
|
567
|
-
context.cache[
|
|
624
|
+
context.cache[cache_key] = parser_function
|
|
568
625
|
|
|
569
626
|
dc_field_parsers = []
|
|
570
627
|
for field in dataclasses.fields(parsed_type): # type:ignore[arg-type]
|
|
@@ -646,14 +646,17 @@ class SpecTypeDefnUnion(SpecTypeDefn):
|
|
|
646
646
|
if self.discriminator is not None:
|
|
647
647
|
self.discriminator_map = {}
|
|
648
648
|
for sub_type in self.types:
|
|
649
|
-
|
|
650
|
-
|
|
649
|
+
defn_type = sub_type
|
|
650
|
+
if isinstance(sub_type, SpecTypeInstance):
|
|
651
|
+
defn_type = sub_type.defn_type
|
|
652
|
+
builder.push_where(defn_type.name)
|
|
653
|
+
assert isinstance(defn_type, SpecTypeDefnObject), (
|
|
651
654
|
"union-type-must-be-object"
|
|
652
655
|
)
|
|
653
|
-
assert
|
|
654
|
-
discriminator_type =
|
|
656
|
+
assert defn_type.properties is not None
|
|
657
|
+
discriminator_type = defn_type.properties.get(self.discriminator)
|
|
655
658
|
assert discriminator_type is not None, (
|
|
656
|
-
f"missing-discriminator-field: {
|
|
659
|
+
f"missing-discriminator-field: {defn_type}"
|
|
657
660
|
)
|
|
658
661
|
prop_type = unwrap_literal_type(discriminator_type.spec_type)
|
|
659
662
|
assert prop_type is not None
|
|
@@ -1299,6 +1302,8 @@ class SpecNamespace:
|
|
|
1299
1302
|
spec_type = SpecTypeDefnAlias(self, name)
|
|
1300
1303
|
elif defn_type == DefnTypeName.s_union:
|
|
1301
1304
|
spec_type = SpecTypeDefnUnion(self, name)
|
|
1305
|
+
if parsed_name.parameters is not None:
|
|
1306
|
+
raise ValueError("Union types with parameters are not supported")
|
|
1302
1307
|
elif defn_type == DefnTypeName.s_external:
|
|
1303
1308
|
spec_type = SpecTypeDefnExternal(self, name)
|
|
1304
1309
|
elif defn_type == DefnTypeName.s_string_enum:
|
|
@@ -5,7 +5,12 @@ from decimal import Decimal
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
7
|
from . import builder, util
|
|
8
|
-
from .builder import
|
|
8
|
+
from .builder import (
|
|
9
|
+
EndpointEmitType,
|
|
10
|
+
EndpointSpecificPath,
|
|
11
|
+
PropertyExtant,
|
|
12
|
+
base_namespace_name,
|
|
13
|
+
)
|
|
9
14
|
from .config import PythonConfig
|
|
10
15
|
from .cross_output_links import get_path_links
|
|
11
16
|
from .emit_open_api_util import EmitOpenAPIStabilityLevel
|
|
@@ -115,9 +120,33 @@ def _check_type_match(stype: builder.SpecType, value: Any) -> bool:
|
|
|
115
120
|
return any(
|
|
116
121
|
_check_type_match(sub_type, value) for sub_type in stype.parameters
|
|
117
122
|
)
|
|
118
|
-
|
|
123
|
+
elif isinstance(stype, builder.SpecTypeDefnObject):
|
|
124
|
+
if not isinstance(value, dict):
|
|
125
|
+
return False
|
|
126
|
+
|
|
127
|
+
assert stype.properties is not None
|
|
128
|
+
value_keys_validated: set[str] = set()
|
|
129
|
+
for field in stype.properties.values():
|
|
130
|
+
# Note: This has a dependency on python_field_name since we are forcing the
|
|
131
|
+
# constant values to use python style field name casing
|
|
132
|
+
py_name = python_field_name(field.name, field.name_case)
|
|
133
|
+
if py_name in value:
|
|
134
|
+
sub_value = value[py_name]
|
|
135
|
+
value_keys_validated.add(py_name)
|
|
136
|
+
if not _check_type_match(field.spec_type, sub_value):
|
|
137
|
+
return False
|
|
138
|
+
elif field.extant == PropertyExtant.required:
|
|
139
|
+
return False
|
|
140
|
+
|
|
141
|
+
return value_keys_validated == set(value.keys())
|
|
119
142
|
elif isinstance(stype, builder.SpecTypeDefnStringEnum):
|
|
120
143
|
return value in stype.values
|
|
144
|
+
elif isinstance(stype, builder.SpecTypeDefnUnion):
|
|
145
|
+
assert stype.discriminator_map is not None
|
|
146
|
+
assert stype.discriminator is not None
|
|
147
|
+
return _check_type_match(
|
|
148
|
+
stype.discriminator_map[value[stype.discriminator]], value
|
|
149
|
+
)
|
|
121
150
|
|
|
122
151
|
raise Exception("invalid type", stype, value)
|
|
123
152
|
|
|
@@ -199,6 +228,18 @@ def _emit_value(
|
|
|
199
228
|
return f"{refer_to(ctx, stype)}.{_resolve_enum_name(value, stype.name_case)}"
|
|
200
229
|
elif isinstance(stype, builder.SpecTypeDefnAlias):
|
|
201
230
|
return _emit_value(ctx, stype.alias, value)
|
|
231
|
+
elif isinstance(stype, builder.SpecTypeDefnUnion):
|
|
232
|
+
assert stype.discriminator_map is not None
|
|
233
|
+
assert stype.discriminator is not None
|
|
234
|
+
sub_type = stype.discriminator_map[value[stype.discriminator]]
|
|
235
|
+
if not _check_type_match(sub_type, value):
|
|
236
|
+
raise Exception("invalid union type for constant", value, stype)
|
|
237
|
+
return _emit_value(
|
|
238
|
+
ctx,
|
|
239
|
+
sub_type,
|
|
240
|
+
value,
|
|
241
|
+
indent=indent,
|
|
242
|
+
)
|
|
202
243
|
elif isinstance(stype, builder.SpecTypeDefnObject):
|
|
203
244
|
assert isinstance(value, dict), (
|
|
204
245
|
f"Expected dict value for {stype.name} but got {value}"
|
{uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/pkgs/type_spec/emit_typescript_util.py
RENAMED
|
@@ -112,6 +112,15 @@ def emit_value_ts(
|
|
|
112
112
|
|
|
113
113
|
elif isinstance(stype, builder.SpecTypeDefnStringEnum):
|
|
114
114
|
return f"{refer_to(ctx, stype)}.{ts_enum_name(value, stype.name_case)}"
|
|
115
|
+
elif isinstance(stype, builder.SpecTypeDefnUnion):
|
|
116
|
+
assert stype.discriminator_map is not None
|
|
117
|
+
assert stype.discriminator is not None
|
|
118
|
+
return emit_value_ts(
|
|
119
|
+
ctx,
|
|
120
|
+
stype.discriminator_map[value[stype.discriminator]],
|
|
121
|
+
value,
|
|
122
|
+
indent=indent,
|
|
123
|
+
)
|
|
115
124
|
elif isinstance(stype, builder.SpecTypeDefnObject):
|
|
116
125
|
assert isinstance(value, dict), (
|
|
117
126
|
f"Expected dict value for {stype.name} but got {value}"
|
|
@@ -4,13 +4,14 @@ import decimal
|
|
|
4
4
|
import io
|
|
5
5
|
import json
|
|
6
6
|
from enum import Enum
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
11
|
from main.base.types import data_t, type_info_t
|
|
12
12
|
from main.base.types.base_t import PureJsonValue
|
|
13
13
|
from pkgs.argument_parser import CachedParser
|
|
14
|
+
from pkgs.serialization import OpaqueKey
|
|
14
15
|
from pkgs.serialization_util import serialize_for_api, serialize_for_storage
|
|
15
16
|
|
|
16
17
|
from .. import builder, util
|
|
@@ -87,11 +88,10 @@ def _dict_null_strip(data: dict[str, object]) -> dict[str, object]:
|
|
|
87
88
|
|
|
88
89
|
|
|
89
90
|
class JsonEncoder(json.JSONEncoder):
|
|
90
|
-
"""We have some defaults of special types that we need to emit"""
|
|
91
|
-
|
|
92
91
|
def default(self, obj: object) -> object:
|
|
93
92
|
if isinstance(obj, decimal.Decimal):
|
|
94
93
|
return str(obj)
|
|
94
|
+
|
|
95
95
|
return json.JSONEncoder.default(self, obj)
|
|
96
96
|
|
|
97
97
|
|
|
@@ -100,7 +100,9 @@ def emit_type_info(build: builder.SpecBuilder, output: str) -> None:
|
|
|
100
100
|
|
|
101
101
|
# sort for stability, indent for smaller diffs
|
|
102
102
|
stripped = _dict_null_strip(dataclasses.asdict(type_map))
|
|
103
|
-
serial = json.dumps(
|
|
103
|
+
serial = json.dumps(
|
|
104
|
+
serialize_for_api(stripped), sort_keys=True, indent=2, cls=JsonEncoder
|
|
105
|
+
)
|
|
104
106
|
type_map_out = io.StringIO()
|
|
105
107
|
type_map_out.write(MODIFY_NOTICE)
|
|
106
108
|
type_map_out.write(f"export const TYPE_MAP = {serial}")
|
|
@@ -109,12 +111,22 @@ def emit_type_info(build: builder.SpecBuilder, output: str) -> None:
|
|
|
109
111
|
|
|
110
112
|
|
|
111
113
|
def _convert_value_for_yaml_dump(value: Any) -> Any:
|
|
114
|
+
if dataclasses.is_dataclass(value):
|
|
115
|
+
return {
|
|
116
|
+
k: _convert_value_for_yaml_dump(v)
|
|
117
|
+
for k, v in dataclasses.asdict(value).items() # type: ignore[arg-type]
|
|
118
|
+
}
|
|
112
119
|
if isinstance(value, Enum):
|
|
113
120
|
return value.value
|
|
114
121
|
elif isinstance(value, list):
|
|
115
122
|
return [_convert_value_for_yaml_dump(item) for item in value]
|
|
116
123
|
elif isinstance(value, dict):
|
|
117
|
-
return {
|
|
124
|
+
return {
|
|
125
|
+
(
|
|
126
|
+
str(k) if isinstance(k, OpaqueKey) else _convert_value_for_yaml_dump(k)
|
|
127
|
+
): _convert_value_for_yaml_dump(v)
|
|
128
|
+
for k, v in value.items()
|
|
129
|
+
}
|
|
118
130
|
elif isinstance(value, decimal.Decimal):
|
|
119
131
|
return str(value)
|
|
120
132
|
else:
|
|
@@ -132,8 +144,9 @@ def emit_type_info_python(build: builder.SpecBuilder, output: str) -> None:
|
|
|
132
144
|
type_map = _build_map_all(build, python=True)
|
|
133
145
|
|
|
134
146
|
stripped = _dict_null_strip(asdict_for_yaml_dump(type_map))
|
|
147
|
+
serialized = serialize_for_storage(stripped)
|
|
135
148
|
|
|
136
|
-
yaml_content = yaml.dump(
|
|
149
|
+
yaml_content = yaml.dump(serialized, default_flow_style=False, sort_keys=True)
|
|
137
150
|
util.rewrite_file(f"{output}/type_map.yaml", yaml_content)
|
|
138
151
|
|
|
139
152
|
|
|
@@ -144,7 +157,7 @@ class MapProperty:
|
|
|
144
157
|
label: str | None
|
|
145
158
|
type_path: object
|
|
146
159
|
extant: str
|
|
147
|
-
ext_info:
|
|
160
|
+
ext_info: type_info_t.ExtInfo | None
|
|
148
161
|
desc: str | None
|
|
149
162
|
# We don't have typing on defaults yet, relying on emitters to check it. Limit
|
|
150
163
|
# use of this field, as it'll necessarily change when adding type info
|
|
@@ -156,13 +169,13 @@ class MapTypeBase:
|
|
|
156
169
|
type_name: str
|
|
157
170
|
label: str | None
|
|
158
171
|
desc: str | None
|
|
159
|
-
ext_info:
|
|
172
|
+
ext_info: type_info_t.ExtInfo | None
|
|
160
173
|
|
|
161
174
|
|
|
162
175
|
@dataclasses.dataclass
|
|
163
176
|
class MapTypeObject(MapTypeBase):
|
|
164
177
|
base_type_path: object
|
|
165
|
-
properties: dict[
|
|
178
|
+
properties: dict[OpaqueKey, MapProperty]
|
|
166
179
|
|
|
167
180
|
|
|
168
181
|
@dataclasses.dataclass
|
|
@@ -180,7 +193,7 @@ class StringEnumValue:
|
|
|
180
193
|
|
|
181
194
|
@dataclasses.dataclass
|
|
182
195
|
class MapStringEnum(MapTypeBase):
|
|
183
|
-
values: dict[
|
|
196
|
+
values: dict[OpaqueKey, StringEnumValue]
|
|
184
197
|
|
|
185
198
|
|
|
186
199
|
MapType = MapTypeObject | MapTypeAlias | MapStringEnum
|
|
@@ -188,12 +201,12 @@ MapType = MapTypeObject | MapTypeAlias | MapStringEnum
|
|
|
188
201
|
|
|
189
202
|
@dataclasses.dataclass
|
|
190
203
|
class MapNamespace:
|
|
191
|
-
types: dict[
|
|
204
|
+
types: dict[OpaqueKey, MapType]
|
|
192
205
|
|
|
193
206
|
|
|
194
207
|
@dataclasses.dataclass
|
|
195
208
|
class MapAll:
|
|
196
|
-
namespaces: dict[
|
|
209
|
+
namespaces: dict[OpaqueKey, MapNamespace]
|
|
197
210
|
|
|
198
211
|
|
|
199
212
|
def _build_map_all(build: builder.SpecBuilder, *, python: bool = False) -> MapAll:
|
|
@@ -207,12 +220,12 @@ def _build_map_all(build: builder.SpecBuilder, *, python: bool = False) -> MapAl
|
|
|
207
220
|
continue
|
|
208
221
|
|
|
209
222
|
map_namespace = MapNamespace(types={})
|
|
210
|
-
map_all.namespaces[namespace.name] = map_namespace
|
|
223
|
+
map_all.namespaces[OpaqueKey(key=namespace.name)] = map_namespace
|
|
211
224
|
|
|
212
225
|
for type_ in namespace.types.values():
|
|
213
226
|
map_type = _build_map_type(build, type_)
|
|
214
227
|
if map_type is not None:
|
|
215
|
-
map_namespace.types[type_.name] = map_type
|
|
228
|
+
map_namespace.types[OpaqueKey(key=type_.name)] = map_type
|
|
216
229
|
|
|
217
230
|
return map_all
|
|
218
231
|
|
|
@@ -382,14 +395,14 @@ def _build_map_type(
|
|
|
382
395
|
):
|
|
383
396
|
_, ext_info = _validate_type_ext_info(stype)
|
|
384
397
|
|
|
385
|
-
properties: dict[
|
|
398
|
+
properties: dict[OpaqueKey, MapProperty] = {}
|
|
386
399
|
map_type = MapTypeObject(
|
|
387
400
|
type_name=stype.name,
|
|
388
401
|
label=stype.label,
|
|
389
402
|
properties=properties,
|
|
390
403
|
desc=stype.desc,
|
|
391
404
|
base_type_path=type_path_of(stype.base),
|
|
392
|
-
ext_info=
|
|
405
|
+
ext_info=ext_info,
|
|
393
406
|
)
|
|
394
407
|
|
|
395
408
|
if stype.properties is not None:
|
|
@@ -403,21 +416,22 @@ def _build_map_type(
|
|
|
403
416
|
api_name=ts_name(prop.name, prop.name_case),
|
|
404
417
|
extant=prop.extant,
|
|
405
418
|
type_path=type_path_of(prop.spec_type),
|
|
406
|
-
ext_info=
|
|
419
|
+
ext_info=parts.ext_info,
|
|
407
420
|
desc=parts.desc,
|
|
408
421
|
default=prop.default,
|
|
409
422
|
)
|
|
410
|
-
map_type.properties[prop.name] = map_property
|
|
423
|
+
map_type.properties[OpaqueKey(key=prop.name)] = map_property
|
|
411
424
|
|
|
412
425
|
return map_type
|
|
413
426
|
|
|
414
427
|
if isinstance(stype, builder.SpecTypeDefnAlias):
|
|
428
|
+
ext_info = _parse_ext_info(stype.ext_info)
|
|
415
429
|
return MapTypeAlias(
|
|
416
430
|
type_name=stype.name,
|
|
417
431
|
label=stype.label,
|
|
418
432
|
desc=stype.desc,
|
|
419
433
|
alias_type_path=type_path_of(stype.alias),
|
|
420
|
-
ext_info=
|
|
434
|
+
ext_info=_parse_ext_info(stype.ext_info),
|
|
421
435
|
discriminator=stype.discriminator,
|
|
422
436
|
)
|
|
423
437
|
|
|
@@ -425,25 +439,27 @@ def _build_map_type(
|
|
|
425
439
|
# Emit as a basic alias for now, as the front-end supports only those for now
|
|
426
440
|
# IMPROVE: We should emit a proper union type and support that
|
|
427
441
|
backing = stype.get_backing_type()
|
|
442
|
+
ext_info = _parse_ext_info(stype.ext_info)
|
|
428
443
|
return MapTypeAlias(
|
|
429
444
|
type_name=stype.name,
|
|
430
445
|
label=stype.label,
|
|
431
446
|
desc=stype.desc,
|
|
432
447
|
alias_type_path=type_path_of(backing),
|
|
433
|
-
ext_info=
|
|
448
|
+
ext_info=_parse_ext_info(stype.ext_info),
|
|
434
449
|
discriminator=stype.discriminator,
|
|
435
450
|
)
|
|
436
451
|
|
|
437
452
|
if isinstance(stype, builder.SpecTypeDefnStringEnum):
|
|
453
|
+
ext_info = _parse_ext_info(stype.ext_info)
|
|
438
454
|
return MapStringEnum(
|
|
439
455
|
type_name=stype.name,
|
|
440
456
|
label=stype.label,
|
|
441
457
|
desc=stype.desc,
|
|
442
|
-
ext_info=
|
|
458
|
+
ext_info=_parse_ext_info(stype.ext_info),
|
|
443
459
|
# IMPROVE: We probably want the label here, but this requires a change
|
|
444
460
|
# to the front-end type-info and form code to handle
|
|
445
461
|
values={
|
|
446
|
-
entry.value: StringEnumValue(
|
|
462
|
+
OpaqueKey(key=entry.value): StringEnumValue(
|
|
447
463
|
value=entry.value,
|
|
448
464
|
label=entry.label or entry.name,
|
|
449
465
|
deprecated=entry.deprecated,
|
|
@@ -476,9 +492,3 @@ def _parse_ext_info(in_ext: Any) -> type_info_t.ExtInfo | None:
|
|
|
476
492
|
if "open_api" in mod_ext:
|
|
477
493
|
del mod_ext["open_api"]
|
|
478
494
|
return ext_info_parser.parse_storage(mod_ext)
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
def _convert_ext_info(in_ext: Any) -> PureJsonValue | None:
|
|
482
|
-
# we need to convert this to API storage since it'll be used as-is in the UI
|
|
483
|
-
parsed = _parse_ext_info(in_ext)
|
|
484
|
-
return cast(PureJsonValue, serialize_for_api(parsed))
|
{uncountablepythonsdk-0.0.143 → uncountablepythonsdk-0.0.145}/uncountable/integration/cli.py
RENAMED
|
@@ -108,6 +108,13 @@ def register_list_queued_jobs(
|
|
|
108
108
|
description="List all jobs queued on the integration server",
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
+
list_queued_jobs_parser.add_argument(
|
|
112
|
+
"--status",
|
|
113
|
+
type=str,
|
|
114
|
+
default=None,
|
|
115
|
+
help="Status of the retrieved jobs",
|
|
116
|
+
)
|
|
117
|
+
|
|
111
118
|
list_queued_jobs_parser.add_argument(
|
|
112
119
|
"--offset",
|
|
113
120
|
type=int,
|
|
@@ -123,6 +130,7 @@ def register_list_queued_jobs(
|
|
|
123
130
|
|
|
124
131
|
def _handle_list_queued_jobs(args: argparse.Namespace) -> None:
|
|
125
132
|
queued_jobs = send_list_queued_jobs_message(
|
|
133
|
+
status=args.status,
|
|
126
134
|
offset=args.offset,
|
|
127
135
|
limit=args.limit,
|
|
128
136
|
host=args.host,
|
|
@@ -92,7 +92,7 @@ def execute_job(
|
|
|
92
92
|
with args.logger.push_scope(job_definition.name) as job_logger:
|
|
93
93
|
job = resolve_executor(job_definition.executor, profile_metadata)
|
|
94
94
|
|
|
95
|
-
job_logger.log_info("running job")
|
|
95
|
+
job_logger.log_info(f"Started running job at `{job.__class__}`..")
|
|
96
96
|
|
|
97
97
|
run_entity: entity_t.Entity | None = None
|
|
98
98
|
try:
|
|
@@ -120,6 +120,7 @@ def check_health(*, host: str = _LOCAL_RPC_HOST, port: int) -> bool:
|
|
|
120
120
|
|
|
121
121
|
def send_list_queued_jobs_message(
|
|
122
122
|
*,
|
|
123
|
+
status: queued_job_t.JobStatus | None,
|
|
123
124
|
offset: int,
|
|
124
125
|
limit: int,
|
|
125
126
|
host: str = "localhost",
|
|
@@ -129,6 +130,7 @@ def send_list_queued_jobs_message(
|
|
|
129
130
|
request = ListQueuedJobsRequest(
|
|
130
131
|
offset=offset,
|
|
131
132
|
limit=limit,
|
|
133
|
+
status=status,
|
|
132
134
|
)
|
|
133
135
|
|
|
134
136
|
try:
|
|
@@ -135,8 +135,20 @@ async def serve(command_queue: CommandQueue, datastore: DatastoreSqlite) -> None
|
|
|
135
135
|
StatusCode.INVALID_ARGUMENT, "Offset cannot be negative."
|
|
136
136
|
)
|
|
137
137
|
|
|
138
|
+
try:
|
|
139
|
+
job_status = (
|
|
140
|
+
queued_job_t.JobStatus(request.status)
|
|
141
|
+
if request.status != ""
|
|
142
|
+
else None
|
|
143
|
+
)
|
|
144
|
+
except ValueError:
|
|
145
|
+
await context.abort(
|
|
146
|
+
StatusCode.INVALID_ARGUMENT,
|
|
147
|
+
f"Invalid status: '{request.status}'",
|
|
148
|
+
)
|
|
149
|
+
|
|
138
150
|
queued_job_metadata = datastore.list_queued_job_metadata(
|
|
139
|
-
|
|
151
|
+
status=job_status, limit=request.limit, offset=request.offset
|
|
140
152
|
)
|
|
141
153
|
|
|
142
154
|
response_list: list[ListQueuedJobsResult.ListQueuedJobsResultItem] = []
|