UncountablePythonSDK 0.0.128__tar.gz → 0.0.130__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.
Potentially problematic release.
This version of UncountablePythonSDK might be problematic. Click here for more details.
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/.github/workflows/documentation.yml +1 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/UncountablePythonSDK.egg-info/SOURCES.txt +8 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/requirements.txt +1 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/example_instrument.py +4 -3
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/example_parse.py +56 -3
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/example_predictions.py +2 -2
- uncountablepythonsdk-0.0.130/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/pyproject.toml +1 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/argument_parser/argument_parser.py +20 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization_util/serialization_helpers.py +3 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/builder.py +9 -3
- uncountablepythonsdk-0.0.130/pkgs/type_spec/builder_types.py +9 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/cross_output_links.py +2 -10
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_open_api.py +0 -12
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_python.py +72 -11
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_typescript_util.py +28 -6
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/load_types.py +1 -1
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/parts/base.ts.prepart +3 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/type_info/emit_type_info.py +13 -2
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/core/client.py +10 -3
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/command_server.py +8 -7
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/webhook_server/entrypoint.py +2 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/__init__.py +8 -0
- uncountablepythonsdk-0.0.130/uncountable/types/api/entity/list_aggregate.py +79 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/list_entities.py +25 -0
- uncountablepythonsdk-0.0.130/uncountable/types/api/notebooks/add_notebook_content.py +119 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_recipes_data.py +13 -0
- uncountablepythonsdk-0.0.130/uncountable/types/api/user/__init__.py +1 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/async_batch_processor.py +20 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/client_base.py +222 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/client_config.py +1 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/client_config_t.py +10 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/entity_t.py +2 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/integration_server_t.py +2 -0
- uncountablepythonsdk-0.0.130/uncountable/types/listing.py +9 -0
- uncountablepythonsdk-0.0.130/uncountable/types/listing_t.py +51 -0
- uncountablepythonsdk-0.0.130/uncountable/types/structured_filters.py +21 -0
- uncountablepythonsdk-0.0.130/uncountable/types/structured_filters_t.py +206 -0
- uncountablepythonsdk-0.0.128/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -36
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/.python-version +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/README.md +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/integration_examples/index.md +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/http_server/types.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/outputs → uncountablepythonsdk-0.0.130/uncountable/types/api/notebooks}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/permissions → uncountablepythonsdk-0.0.130/uncountable/types/api/outputs}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/project → uncountablepythonsdk-0.0.130/uncountable/types/api/permissions}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/recipe_links → uncountablepythonsdk-0.0.130/uncountable/types/api/project}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.130/uncountable/types/api/recipe_links}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/recipes → uncountablepythonsdk-0.0.130/uncountable/types/api/recipe_metadata}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/runsheet → uncountablepythonsdk-0.0.130/uncountable/types/api/recipes}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/triggers → uncountablepythonsdk-0.0.130/uncountable/types/api/runsheet}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/uploader → uncountablepythonsdk-0.0.130/uncountable/types/api/triggers}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.128/uncountable/types/api/user → uncountablepythonsdk-0.0.130/uncountable/types/api/uploader}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/.github/workflows/documentation.yml
RENAMED
|
@@ -10,7 +10,7 @@ jobs:
|
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
11
|
steps:
|
|
12
12
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
13
|
-
- uses: actions/setup-python@
|
|
13
|
+
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
|
|
14
14
|
- uses: extractions/setup-crate@4993624604c307fbca528d28a3c8b60fa5ecc859 # v1
|
|
15
15
|
with:
|
|
16
16
|
repo: casey/just@0.10
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.130
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
{uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/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.130
|
|
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
|
|
@@ -82,6 +82,7 @@ pkgs/strenum_compat/strenum_compat.py
|
|
|
82
82
|
pkgs/type_spec/__init__.py
|
|
83
83
|
pkgs/type_spec/__main__.py
|
|
84
84
|
pkgs/type_spec/builder.py
|
|
85
|
+
pkgs/type_spec/builder_types.py
|
|
85
86
|
pkgs/type_spec/config.py
|
|
86
87
|
pkgs/type_spec/cross_output_links.py
|
|
87
88
|
pkgs/type_spec/emit_io_ts.py
|
|
@@ -207,6 +208,8 @@ uncountable/types/integrations.py
|
|
|
207
208
|
uncountable/types/integrations_t.py
|
|
208
209
|
uncountable/types/job_definition.py
|
|
209
210
|
uncountable/types/job_definition_t.py
|
|
211
|
+
uncountable/types/listing.py
|
|
212
|
+
uncountable/types/listing_t.py
|
|
210
213
|
uncountable/types/notifications.py
|
|
211
214
|
uncountable/types/notifications_t.py
|
|
212
215
|
uncountable/types/outputs.py
|
|
@@ -243,6 +246,8 @@ uncountable/types/secret_retrieval.py
|
|
|
243
246
|
uncountable/types/secret_retrieval_t.py
|
|
244
247
|
uncountable/types/sockets.py
|
|
245
248
|
uncountable/types/sockets_t.py
|
|
249
|
+
uncountable/types/structured_filters.py
|
|
250
|
+
uncountable/types/structured_filters_t.py
|
|
246
251
|
uncountable/types/units.py
|
|
247
252
|
uncountable/types/units_t.py
|
|
248
253
|
uncountable/types/uploader.py
|
|
@@ -268,6 +273,7 @@ uncountable/types/api/entity/create_or_update_entity.py
|
|
|
268
273
|
uncountable/types/api/entity/export_entities.py
|
|
269
274
|
uncountable/types/api/entity/get_entities_data.py
|
|
270
275
|
uncountable/types/api/entity/grant_entity_permissions.py
|
|
276
|
+
uncountable/types/api/entity/list_aggregate.py
|
|
271
277
|
uncountable/types/api/entity/list_entities.py
|
|
272
278
|
uncountable/types/api/entity/lock_entity.py
|
|
273
279
|
uncountable/types/api/entity/lookup_entity.py
|
|
@@ -302,6 +308,8 @@ uncountable/types/api/integrations/push_notification.py
|
|
|
302
308
|
uncountable/types/api/integrations/register_sockets_token.py
|
|
303
309
|
uncountable/types/api/material_families/__init__.py
|
|
304
310
|
uncountable/types/api/material_families/update_entity_material_families.py
|
|
311
|
+
uncountable/types/api/notebooks/__init__.py
|
|
312
|
+
uncountable/types/api/notebooks/add_notebook_content.py
|
|
305
313
|
uncountable/types/api/outputs/__init__.py
|
|
306
314
|
uncountable/types/api/outputs/get_output_data.py
|
|
307
315
|
uncountable/types/api/outputs/get_output_names.py
|
|
@@ -3,8 +3,6 @@ import time
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from decimal import Decimal
|
|
5
5
|
|
|
6
|
-
from pkgs.argument_parser.argument_parser import CachedParser
|
|
7
|
-
from pkgs.serialization_util import serialize_for_api
|
|
8
6
|
from uncountable.integration.job import JobArguments, WebhookJob, register_job
|
|
9
7
|
from uncountable.types import (
|
|
10
8
|
base_t,
|
|
@@ -16,6 +14,9 @@ from uncountable.types.integration_session_t import IntegrationSessionInstrument
|
|
|
16
14
|
from websockets.sync.client import connect
|
|
17
15
|
from websockets.typing import Data
|
|
18
16
|
|
|
17
|
+
from pkgs.argument_parser.argument_parser import CachedParser
|
|
18
|
+
from pkgs.serialization_util import serialize_for_api
|
|
19
|
+
|
|
19
20
|
|
|
20
21
|
@dataclass(kw_only=True)
|
|
21
22
|
class InstrumentPayload:
|
|
@@ -34,7 +35,7 @@ class InstrumentExample(WebhookJob[InstrumentPayload]):
|
|
|
34
35
|
def parse_message(message: Data) -> sockets_t.SocketEventData | None:
|
|
35
36
|
try:
|
|
36
37
|
return parser.parse_api(json.loads(message)).data
|
|
37
|
-
except ValueError
|
|
38
|
+
except ValueError:
|
|
38
39
|
return None
|
|
39
40
|
|
|
40
41
|
integration_session = IntegrationSessionInstrument(
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
+
from decimal import Decimal
|
|
2
3
|
|
|
3
4
|
from uncountable.integration.job import JobArguments, WebhookJob, register_job
|
|
4
5
|
from uncountable.types import (
|
|
5
6
|
base_t,
|
|
7
|
+
entity_t,
|
|
6
8
|
generic_upload_t,
|
|
7
9
|
identifier_t,
|
|
8
10
|
job_definition_t,
|
|
11
|
+
notifications_t,
|
|
9
12
|
uploader_t,
|
|
10
13
|
)
|
|
11
14
|
|
|
@@ -20,9 +23,40 @@ class ParseExample(WebhookJob[ParsePayload]):
|
|
|
20
23
|
def run(
|
|
21
24
|
self, args: JobArguments, payload: ParsePayload
|
|
22
25
|
) -> job_definition_t.JobResult:
|
|
26
|
+
user_id: base_t.ObjectId | None = None
|
|
27
|
+
recipe_id: base_t.ObjectId | None = None
|
|
28
|
+
file_name: str | None = None
|
|
29
|
+
data = args.client.get_entities_data(
|
|
30
|
+
entity_ids=[payload.async_job_id], entity_type=entity_t.EntityType.ASYNC_JOB
|
|
31
|
+
)
|
|
32
|
+
for field_value in data.entity_details[0].field_values:
|
|
33
|
+
if field_value.field_ref_name == "core_async_job_jobData":
|
|
34
|
+
assert isinstance(field_value.value, dict)
|
|
35
|
+
assert isinstance(field_value.value["user_id"], int)
|
|
36
|
+
user_id = field_value.value["user_id"]
|
|
37
|
+
elif (
|
|
38
|
+
field_value.field_ref_name
|
|
39
|
+
== "unc_async_job_custom_parser_recipe_ids_in_view"
|
|
40
|
+
):
|
|
41
|
+
if field_value.value is None:
|
|
42
|
+
continue
|
|
43
|
+
assert isinstance(field_value.value, list)
|
|
44
|
+
if len(field_value.value) > 0:
|
|
45
|
+
assert isinstance(field_value.value[0], int)
|
|
46
|
+
recipe_id = field_value.value[0]
|
|
47
|
+
elif field_value.field_ref_name == "unc_async_job_custom_parser_input_file":
|
|
48
|
+
assert isinstance(field_value.value, list)
|
|
49
|
+
assert len(field_value.value) == 1
|
|
50
|
+
assert isinstance(field_value.value[0], dict)
|
|
51
|
+
assert isinstance(field_value.value[0]["name"], str)
|
|
52
|
+
file_name = field_value.value[0]["name"]
|
|
53
|
+
|
|
54
|
+
assert user_id is not None
|
|
55
|
+
assert file_name is not None
|
|
56
|
+
|
|
23
57
|
dummy_parsed_file_data: list[uploader_t.ParsedFileData] = [
|
|
24
58
|
uploader_t.ParsedFileData(
|
|
25
|
-
file_name=
|
|
59
|
+
file_name=file_name,
|
|
26
60
|
file_structures=[
|
|
27
61
|
uploader_t.DataChannel(
|
|
28
62
|
type=uploader_t.StructureElementType.CHANNEL,
|
|
@@ -68,18 +102,37 @@ class ParseExample(WebhookJob[ParsePayload]):
|
|
|
68
102
|
data=uploader_t.StringValue(value="my_file_to_upload.xlsx"),
|
|
69
103
|
),
|
|
70
104
|
),
|
|
105
|
+
uploader_t.HeaderEntry(
|
|
106
|
+
type=uploader_t.StructureElementType.HEADER,
|
|
107
|
+
value=uploader_t.NumericHeaderData(
|
|
108
|
+
name="file structure number",
|
|
109
|
+
data=uploader_t.DecimalValue(value=Decimal(99)),
|
|
110
|
+
),
|
|
111
|
+
),
|
|
71
112
|
],
|
|
72
113
|
)
|
|
73
114
|
]
|
|
74
115
|
|
|
75
|
-
args.
|
|
116
|
+
complete_async_parse_req = args.batch_processor.complete_async_parse(
|
|
76
117
|
parsed_file_data=dummy_parsed_file_data,
|
|
77
118
|
async_job_key=identifier_t.IdentifierKeyId(id=payload.async_job_id),
|
|
78
119
|
upload_destination=generic_upload_t.UploadDestinationRecipe(
|
|
79
|
-
recipe_key=identifier_t.IdentifierKeyId(id=1)
|
|
120
|
+
recipe_key=identifier_t.IdentifierKeyId(id=recipe_id or 1)
|
|
80
121
|
),
|
|
81
122
|
)
|
|
82
123
|
|
|
124
|
+
args.batch_processor.push_notification(
|
|
125
|
+
depends_on=[complete_async_parse_req.batch_reference],
|
|
126
|
+
notification_targets=[
|
|
127
|
+
notifications_t.NotificationTargetUser(
|
|
128
|
+
user_key=identifier_t.IdentifierKeyId(id=user_id)
|
|
129
|
+
)
|
|
130
|
+
],
|
|
131
|
+
subject="Upload complete",
|
|
132
|
+
message="Your file has been uploaded",
|
|
133
|
+
display_notice=True,
|
|
134
|
+
)
|
|
135
|
+
|
|
83
136
|
return job_definition_t.JobResult(success=True)
|
|
84
137
|
|
|
85
138
|
@property
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import random
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
-
from datetime import datetime
|
|
3
|
+
from datetime import UTC, datetime
|
|
4
4
|
from decimal import Decimal
|
|
5
5
|
|
|
6
6
|
from uncountable.integration.job import JobArguments, WebhookJob, register_job
|
|
@@ -25,7 +25,7 @@ class PredictionsExample(WebhookJob[PredictionsPayload]):
|
|
|
25
25
|
self, args: JobArguments, payload: PredictionsPayload
|
|
26
26
|
) -> job_definition_t.JobResult:
|
|
27
27
|
recipe_data = args.client.get_recipes_data(recipe_ids=payload.recipe_ids)
|
|
28
|
-
formatted_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
28
|
+
formatted_datetime = datetime.now(UTC).strftime("%Y-%m-%d %H:%M:%S")
|
|
29
29
|
|
|
30
30
|
for recipe in recipe_data.recipes:
|
|
31
31
|
test_sample_name = f"Predictions Model ({formatted_datetime})"
|
uncountablepythonsdk-0.0.130/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from io import BytesIO
|
|
2
|
+
|
|
3
|
+
from uncountable.core.file_upload import DataFileUpload, FileUpload
|
|
4
|
+
from uncountable.integration.job import JobArguments, RunsheetWebhookJob, register_job
|
|
5
|
+
from uncountable.types import (
|
|
6
|
+
download_file_t,
|
|
7
|
+
entity_t,
|
|
8
|
+
identifier_t,
|
|
9
|
+
webhook_job_t,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register_job
|
|
14
|
+
class StandardRunsheetGenerator(RunsheetWebhookJob):
|
|
15
|
+
def build_runsheet(
|
|
16
|
+
self,
|
|
17
|
+
*,
|
|
18
|
+
args: JobArguments,
|
|
19
|
+
payload: webhook_job_t.RunsheetWebhookPayload,
|
|
20
|
+
) -> FileUpload:
|
|
21
|
+
args.logger.log_info("Retrieving pre-exported runsheet file from async job")
|
|
22
|
+
|
|
23
|
+
file_query = download_file_t.FileDownloadQueryEntityField(
|
|
24
|
+
entity=entity_t.EntityIdentifier(
|
|
25
|
+
type=entity_t.EntityType.ASYNC_JOB,
|
|
26
|
+
identifier_key=identifier_t.IdentifierKeyId(id=payload.async_job_id),
|
|
27
|
+
),
|
|
28
|
+
field_key=identifier_t.IdentifierKeyRefName(
|
|
29
|
+
ref_name="unc_async_job_export_runsheet_recipe_export"
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
downloaded_files = args.client.download_files(file_query=file_query)
|
|
34
|
+
|
|
35
|
+
file_data = downloaded_files[0].data.read()
|
|
36
|
+
return DataFileUpload(
|
|
37
|
+
data=BytesIO(file_data),
|
|
38
|
+
name=downloaded_files[0].name,
|
|
39
|
+
)
|
|
@@ -115,7 +115,6 @@ lint.ignore = [
|
|
|
115
115
|
"PD010", # .pivottable. Should add
|
|
116
116
|
"PD011", # use .to_numpy. Skip
|
|
117
117
|
"PD015", # use .merge. Should add
|
|
118
|
-
"PD901", # avoid generic df name. Skip
|
|
119
118
|
"PERF203", # avoid try except in loop. Skip
|
|
120
119
|
"PERF401", # use list comprehension. Skip
|
|
121
120
|
"PERF402", # use list.copy. Skip
|
|
@@ -213,6 +212,7 @@ exclude = [
|
|
|
213
212
|
|
|
214
213
|
[tool.ruff.lint.isort]
|
|
215
214
|
split-on-trailing-comma = true
|
|
215
|
+
known-first-party = ["pkgs"]
|
|
216
216
|
|
|
217
217
|
[tool.ruff.lint.mccabe]
|
|
218
218
|
max-complexity = 130 # goal would be to bring this down to ~50 or so
|
|
@@ -168,6 +168,23 @@ def _invoke_membership_parser(
|
|
|
168
168
|
raise ValueError(f"Expected value from {expected_values} but got value {value}")
|
|
169
169
|
|
|
170
170
|
|
|
171
|
+
# Uses `is` to compare
|
|
172
|
+
def _build_identity_parser(
|
|
173
|
+
identity_value: T,
|
|
174
|
+
) -> ParserFunction[T]:
|
|
175
|
+
def parse(value: typing.Any) -> T:
|
|
176
|
+
if value is identity_value:
|
|
177
|
+
return identity_value
|
|
178
|
+
raise ValueError(
|
|
179
|
+
f"Expected value {identity_value} (type: {type(identity_value)}) but got value {value} (type: {type(value)})"
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
return parse
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
NONE_IDENTITY_PARSER = _build_identity_parser(None)
|
|
186
|
+
|
|
187
|
+
|
|
171
188
|
def _build_parser_discriminated_union(
|
|
172
189
|
context: ParserContext,
|
|
173
190
|
discriminator_raw: str,
|
|
@@ -243,8 +260,10 @@ def _build_parser_inner(
|
|
|
243
260
|
for field_name, field_parser in field_parsers
|
|
244
261
|
})
|
|
245
262
|
|
|
263
|
+
# IMPROVE: unclear why we need == here
|
|
246
264
|
if parsed_type == type(None): # noqa: E721
|
|
247
|
-
|
|
265
|
+
# Need to convince type checker that parsed_type is type(None)
|
|
266
|
+
return typing.cast(ParserFunction[T], NONE_IDENTITY_PARSER)
|
|
248
267
|
|
|
249
268
|
origin = typing.get_origin(parsed_type)
|
|
250
269
|
if origin is tuple:
|
|
@@ -85,7 +85,9 @@ def _serialize_dataclass(d: Any) -> dict[str, JsonValue]:
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
def _to_string_value(value: Any) -> str:
|
|
88
|
-
assert isinstance(value, (Decimal, int))
|
|
88
|
+
assert isinstance(value, (Decimal, int)), (
|
|
89
|
+
f"Expecting decimal or int, received: {value} (type={type(value)})"
|
|
90
|
+
)
|
|
89
91
|
return str(value)
|
|
90
92
|
|
|
91
93
|
|
|
@@ -13,7 +13,7 @@ from enum import Enum, StrEnum, auto
|
|
|
13
13
|
from typing import Any, Self
|
|
14
14
|
|
|
15
15
|
from . import util
|
|
16
|
-
from .
|
|
16
|
+
from .builder_types import CrossOutputPaths
|
|
17
17
|
from .non_discriminated_union_exceptions import NON_DISCRIMINATED_UNION_EXCEPTIONS
|
|
18
18
|
from .util import parse_type_str
|
|
19
19
|
|
|
@@ -1101,7 +1101,7 @@ def _parse_const(
|
|
|
1101
1101
|
elif const_type.defn_type.name == BaseTypeName.s_dict:
|
|
1102
1102
|
assert isinstance(value, dict)
|
|
1103
1103
|
builder.ensure(
|
|
1104
|
-
len(const_type.parameters) == 2, "constant-dict-expects-
|
|
1104
|
+
len(const_type.parameters) == 2, "constant-dict-expects-two-types"
|
|
1105
1105
|
)
|
|
1106
1106
|
key_type = const_type.parameters[0]
|
|
1107
1107
|
value_type = const_type.parameters[1]
|
|
@@ -1150,6 +1150,11 @@ def _parse_const(
|
|
|
1150
1150
|
)
|
|
1151
1151
|
return value
|
|
1152
1152
|
|
|
1153
|
+
if not const_type.is_base:
|
|
1154
|
+
# IMPROVE: validate the object type properties before emission stage
|
|
1155
|
+
builder.ensure(isinstance(value, dict), "invalid value for object constant")
|
|
1156
|
+
return value
|
|
1157
|
+
|
|
1153
1158
|
raise Exception("unsupported-const-scalar-type", const_type)
|
|
1154
1159
|
|
|
1155
1160
|
|
|
@@ -1271,7 +1276,8 @@ class SpecNamespace:
|
|
|
1271
1276
|
|
|
1272
1277
|
assert util.is_valid_type_name(name), f"{name} is not a valid type name"
|
|
1273
1278
|
assert name not in self.types, f"{name} is duplicate"
|
|
1274
|
-
defn_type = defn
|
|
1279
|
+
defn_type = defn.get("type")
|
|
1280
|
+
assert isinstance(defn_type, str), f"{name} requires a string type"
|
|
1275
1281
|
spec_type: SpecTypeDefn
|
|
1276
1282
|
if defn_type == DefnTypeName.s_alias:
|
|
1277
1283
|
spec_type = SpecTypeDefnAlias(self, name)
|
{uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/cross_output_links.py
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
-
from dataclasses import dataclass
|
|
5
4
|
|
|
6
|
-
from
|
|
5
|
+
from . import builder
|
|
6
|
+
from .builder_types import CrossOutputPaths
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def get_python_stub_file_path(
|
|
@@ -17,14 +17,6 @@ def get_python_stub_file_path(
|
|
|
17
17
|
return api_stub_file
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
@dataclass(kw_only=True, frozen=True)
|
|
21
|
-
class CrossOutputPaths:
|
|
22
|
-
python_types_output: str
|
|
23
|
-
typescript_types_output: str
|
|
24
|
-
typescript_routes_output_by_endpoint: dict[str, str]
|
|
25
|
-
typespec_files_input: list[str]
|
|
26
|
-
|
|
27
|
-
|
|
28
20
|
def get_python_api_file_path(
|
|
29
21
|
cross_output_paths: CrossOutputPaths,
|
|
30
22
|
namespace: builder.SpecNamespace,
|
{uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_open_api.py
RENAMED
|
@@ -610,18 +610,6 @@ def _emit_type(
|
|
|
610
610
|
ctx.types[stype.name] = final_type
|
|
611
611
|
|
|
612
612
|
|
|
613
|
-
def _emit_constant(ctx: EmitOpenAPIContext, sconst: builder.SpecConstant) -> None:
|
|
614
|
-
if sconst.value_type.is_base_type(builder.BaseTypeName.s_string):
|
|
615
|
-
value = util.encode_common_string(cast(str, sconst.value))
|
|
616
|
-
elif sconst.value_type.is_base_type(builder.BaseTypeName.s_integer):
|
|
617
|
-
value = str(sconst.value)
|
|
618
|
-
else:
|
|
619
|
-
raise Exception("invalid constant type", sconst.name)
|
|
620
|
-
|
|
621
|
-
const_name = sconst.name.upper()
|
|
622
|
-
print("_emit_constant", value, const_name)
|
|
623
|
-
|
|
624
|
-
|
|
625
613
|
def _emit_endpoint(
|
|
626
614
|
gctx: EmitOpenAPIGlobalContext,
|
|
627
615
|
ctx: EmitOpenAPIContext,
|
|
@@ -35,6 +35,11 @@ QUEUED_BATCH_REQUEST_STYPE = builder.SpecTypeDefnObject(
|
|
|
35
35
|
namespace=ASYNC_BATCH_TYPE_NAMESPACE, name="QueuedAsyncBatchRequest"
|
|
36
36
|
)
|
|
37
37
|
|
|
38
|
+
CLIENT_CONFIG_TYPE_NAMESPACE = builder.SpecNamespace(name="client_config")
|
|
39
|
+
REQUEST_OPTIONS_STYPE = builder.SpecTypeDefnObject(
|
|
40
|
+
namespace=CLIENT_CONFIG_TYPE_NAMESPACE, name="RequestOptions"
|
|
41
|
+
)
|
|
42
|
+
|
|
38
43
|
|
|
39
44
|
@dataclasses.dataclass(kw_only=True)
|
|
40
45
|
class TrackingContext:
|
|
@@ -117,26 +122,36 @@ def _check_type_match(stype: builder.SpecType, value: Any) -> bool:
|
|
|
117
122
|
raise Exception("invalid type", stype, value)
|
|
118
123
|
|
|
119
124
|
|
|
120
|
-
def _emit_value(
|
|
125
|
+
def _emit_value(
|
|
126
|
+
ctx: TrackingContext, stype: builder.SpecType, value: Any, indent: int = 0
|
|
127
|
+
) -> str:
|
|
121
128
|
literal = builder.unwrap_literal_type(stype)
|
|
122
129
|
if literal is not None:
|
|
123
130
|
return _emit_value(ctx, literal.value_type, literal.value)
|
|
124
131
|
|
|
125
132
|
if stype.is_base_type(builder.BaseTypeName.s_string):
|
|
126
|
-
assert isinstance(value, str)
|
|
133
|
+
assert isinstance(value, str), (
|
|
134
|
+
f"Expected str value for {stype.name} but got {value}"
|
|
135
|
+
)
|
|
127
136
|
return util.encode_common_string(value)
|
|
128
137
|
elif stype.is_base_type(builder.BaseTypeName.s_integer):
|
|
129
|
-
assert isinstance(value, int)
|
|
138
|
+
assert isinstance(value, int), (
|
|
139
|
+
f"Expected int value for {stype.name} but got {value}"
|
|
140
|
+
)
|
|
130
141
|
return str(value)
|
|
131
142
|
elif stype.is_base_type(builder.BaseTypeName.s_boolean):
|
|
132
|
-
assert isinstance(value, bool)
|
|
143
|
+
assert isinstance(value, bool), (
|
|
144
|
+
f"Expected bool value for {stype.name} but got {value}"
|
|
145
|
+
)
|
|
133
146
|
return "True" if value else "False"
|
|
134
147
|
elif stype.is_base_type(builder.BaseTypeName.s_decimal) or stype.is_base_type(
|
|
135
148
|
builder.BaseTypeName.s_lossy_decimal
|
|
136
149
|
):
|
|
137
150
|
# Note that decimal requires the `!decimal 123.12` style notation in the YAML
|
|
138
151
|
# file since PyYaml parses numbers as float, unfortuantely
|
|
139
|
-
assert isinstance(value, (Decimal, int))
|
|
152
|
+
assert isinstance(value, (Decimal, int)), (
|
|
153
|
+
f"Expected decimal value for {stype.name} but got {value} (type: {type(value)})"
|
|
154
|
+
)
|
|
140
155
|
if isinstance(value, int):
|
|
141
156
|
# skip quotes for integers
|
|
142
157
|
return f"Decimal({value})"
|
|
@@ -151,14 +166,14 @@ def _emit_value(ctx: TrackingContext, stype: builder.SpecType, value: Any) -> st
|
|
|
151
166
|
key_type = stype.parameters[0]
|
|
152
167
|
value_type = stype.parameters[1]
|
|
153
168
|
return (
|
|
154
|
-
"{\n
|
|
155
|
-
+ ",\n
|
|
169
|
+
f"{{\n{INDENT * (indent + 1)}"
|
|
170
|
+
+ f",\n{INDENT * (indent + 1)}".join(
|
|
156
171
|
_emit_value(ctx, key_type, dkey)
|
|
157
172
|
+ ": "
|
|
158
|
-
+ _emit_value(ctx, value_type, dvalue)
|
|
173
|
+
+ _emit_value(ctx, value_type, dvalue, indent=indent + 1)
|
|
159
174
|
for dkey, dvalue in value.items()
|
|
160
175
|
)
|
|
161
|
-
+ "\n}"
|
|
176
|
+
+ f"\n{INDENT * indent}}}"
|
|
162
177
|
)
|
|
163
178
|
|
|
164
179
|
if stype.defn_type.is_base_type(builder.BaseTypeName.s_optional):
|
|
@@ -184,6 +199,34 @@ def _emit_value(ctx: TrackingContext, stype: builder.SpecType, value: Any) -> st
|
|
|
184
199
|
return f"{refer_to(ctx, stype)}.{_resolve_enum_name(value, stype.name_case)}"
|
|
185
200
|
elif isinstance(stype, builder.SpecTypeDefnAlias):
|
|
186
201
|
return _emit_value(ctx, stype.alias, value)
|
|
202
|
+
elif isinstance(stype, builder.SpecTypeDefnObject):
|
|
203
|
+
assert isinstance(value, dict), (
|
|
204
|
+
f"Expected dict value for {stype.name} but got {value}"
|
|
205
|
+
)
|
|
206
|
+
if not stype.is_hashable:
|
|
207
|
+
raise Exception("invalid constant object type, non-hashable", value, stype)
|
|
208
|
+
obj_out = f"{refer_to(ctx, stype)}("
|
|
209
|
+
emitted_fields: set[str] = set()
|
|
210
|
+
for prop_name, prop in (stype.properties or {}).items():
|
|
211
|
+
if prop_name not in value:
|
|
212
|
+
continue
|
|
213
|
+
else:
|
|
214
|
+
value_to_emit = value[prop_name]
|
|
215
|
+
emitted_fields.add(prop_name)
|
|
216
|
+
py_name = python_field_name(prop.name, prop.name_case)
|
|
217
|
+
obj_out += f"\n{INDENT * (indent + 1)}{py_name}={_emit_value(ctx, prop.spec_type, value_to_emit, indent=indent + 1)},"
|
|
218
|
+
whitespace = f"\n{INDENT * indent}" if len(emitted_fields) > 0 else ""
|
|
219
|
+
obj_out += f"{whitespace})"
|
|
220
|
+
|
|
221
|
+
if emitted_fields != set(value.keys()):
|
|
222
|
+
raise Exception(
|
|
223
|
+
"invalid object type, extra fields found:",
|
|
224
|
+
value,
|
|
225
|
+
stype,
|
|
226
|
+
set(value.keys()) - emitted_fields,
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
return obj_out
|
|
187
230
|
|
|
188
231
|
raise Exception("invalid constant type", value, stype)
|
|
189
232
|
|
|
@@ -471,6 +514,19 @@ def _emit_endpoint_invocation_function_signature(
|
|
|
471
514
|
else []
|
|
472
515
|
) + (extra_params if extra_params is not None else [])
|
|
473
516
|
|
|
517
|
+
request_options_property = builder.SpecProperty(
|
|
518
|
+
name="_request_options",
|
|
519
|
+
label="_request_options",
|
|
520
|
+
spec_type=REQUEST_OPTIONS_STYPE,
|
|
521
|
+
extant=builder.PropertyExtant.optional,
|
|
522
|
+
convert_value=builder.PropertyConvertValue.auto,
|
|
523
|
+
name_case=builder.NameCase.convert,
|
|
524
|
+
default=None,
|
|
525
|
+
has_default=True,
|
|
526
|
+
desc=None,
|
|
527
|
+
)
|
|
528
|
+
all_arguments.append(request_options_property)
|
|
529
|
+
|
|
474
530
|
# All endpoints share a function name
|
|
475
531
|
function = endpoint.path_per_api_endpoint[endpoint.default_endpoint_key].function
|
|
476
532
|
assert function is not None
|
|
@@ -641,6 +697,7 @@ def _emit_endpoint_invocation_function(
|
|
|
641
697
|
method={refer_to(ctx=ctx, stype=endpoint_method_stype)},
|
|
642
698
|
endpoint={refer_to(ctx=ctx, stype=endpoint_path_stype)},
|
|
643
699
|
args=args,
|
|
700
|
+
request_options=_request_options,
|
|
644
701
|
)
|
|
645
702
|
return self.do_request(api_request=api_request, return_type={refer_to(ctx=ctx, stype=data_type)})"""
|
|
646
703
|
)
|
|
@@ -1396,7 +1453,7 @@ CLIENT_CLASS_IMPORTS = [
|
|
|
1396
1453
|
"import dataclasses",
|
|
1397
1454
|
]
|
|
1398
1455
|
ASYNC_BATCH_PROCESSOR_FILENAME = "async_batch_processor"
|
|
1399
|
-
|
|
1456
|
+
ASYNC_BATCH_PROCESSOR_BASE_IMPORTS = [
|
|
1400
1457
|
"import uuid",
|
|
1401
1458
|
"from abc import ABC, abstractmethod",
|
|
1402
1459
|
"from pkgs.serialization_util import serialize_for_api",
|
|
@@ -1434,8 +1491,11 @@ def _emit_async_batch_processor(
|
|
|
1434
1491
|
config=config,
|
|
1435
1492
|
)
|
|
1436
1493
|
|
|
1494
|
+
imports = ASYNC_BATCH_PROCESSOR_BASE_IMPORTS.copy()
|
|
1495
|
+
if ctx.use_dataclass:
|
|
1496
|
+
imports.append("import dataclasses")
|
|
1437
1497
|
async_batch_processor_out.write(
|
|
1438
|
-
f"""{LINE_BREAK.join(
|
|
1498
|
+
f"""{LINE_BREAK.join(imports)}
|
|
1439
1499
|
|
|
1440
1500
|
|
|
1441
1501
|
class AsyncBatchProcessorBase(ABC):
|
|
@@ -1498,6 +1558,7 @@ class APIRequest:
|
|
|
1498
1558
|
method: str
|
|
1499
1559
|
endpoint: str
|
|
1500
1560
|
args: typing.Any
|
|
1561
|
+
request_options: {refer_to(ctx=ctx, stype=REQUEST_OPTIONS_STYPE)} | None = None
|
|
1501
1562
|
|
|
1502
1563
|
|
|
1503
1564
|
class ClientMethods(ABC):
|
{uncountablepythonsdk-0.0.128 → uncountablepythonsdk-0.0.130}/pkgs/type_spec/emit_typescript_util.py
RENAMED
|
@@ -3,7 +3,7 @@ import typing
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
|
|
5
5
|
from . import builder, util
|
|
6
|
-
from .
|
|
6
|
+
from .builder_types import CrossOutputPaths
|
|
7
7
|
|
|
8
8
|
INDENT = " "
|
|
9
9
|
|
|
@@ -51,7 +51,10 @@ def ts_name(name: str, name_case: builder.NameCase) -> str:
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
def emit_value_ts(
|
|
54
|
-
ctx: EmitTypescriptContext,
|
|
54
|
+
ctx: EmitTypescriptContext,
|
|
55
|
+
stype: builder.SpecType,
|
|
56
|
+
value: typing.Any,
|
|
57
|
+
indent: int = 0,
|
|
55
58
|
) -> str:
|
|
56
59
|
"""Mimics emit_python even if not all types are used in TypeScript yet"""
|
|
57
60
|
literal = builder.unwrap_literal_type(stype)
|
|
@@ -88,17 +91,17 @@ def emit_value_ts(
|
|
|
88
91
|
raise Exception("invalid dict keys -- dict keys must be string or enum")
|
|
89
92
|
|
|
90
93
|
return (
|
|
91
|
-
"{\n
|
|
92
|
-
+ ",\n
|
|
94
|
+
f"{{\n{INDENT * (indent + 1)}"
|
|
95
|
+
+ f",\n{INDENT * (indent + 1)}".join(
|
|
93
96
|
(
|
|
94
97
|
f"[{emit_value_ts(ctx, key_type, dkey)}]: "
|
|
95
98
|
if not key_type.is_base_type(builder.BaseTypeName.s_string)
|
|
96
99
|
else f"{dkey}: "
|
|
97
100
|
)
|
|
98
|
-
+ emit_value_ts(ctx, value_type, dvalue)
|
|
101
|
+
+ emit_value_ts(ctx, value_type, dvalue, indent=indent + 1)
|
|
99
102
|
for dkey, dvalue in value.items()
|
|
100
103
|
)
|
|
101
|
-
+ "\n}"
|
|
104
|
+
+ f"\n{INDENT * (indent)}}}"
|
|
102
105
|
)
|
|
103
106
|
|
|
104
107
|
if stype.defn_type.is_base_type(builder.BaseTypeName.s_optional):
|
|
@@ -109,6 +112,25 @@ def emit_value_ts(
|
|
|
109
112
|
|
|
110
113
|
elif isinstance(stype, builder.SpecTypeDefnStringEnum):
|
|
111
114
|
return f"{refer_to(ctx, stype)}.{ts_enum_name(value, stype.name_case)}"
|
|
115
|
+
elif isinstance(stype, builder.SpecTypeDefnObject):
|
|
116
|
+
assert isinstance(value, dict), (
|
|
117
|
+
f"Expected dict value for {stype.name} but got {value}"
|
|
118
|
+
)
|
|
119
|
+
obj_out = "{"
|
|
120
|
+
did_emit = False
|
|
121
|
+
for prop_name, prop in (stype.properties or {}).items():
|
|
122
|
+
if prop_name not in value and prop.has_default:
|
|
123
|
+
value_to_emit = prop.default
|
|
124
|
+
elif prop_name not in value:
|
|
125
|
+
continue
|
|
126
|
+
else:
|
|
127
|
+
value_to_emit = value[prop_name]
|
|
128
|
+
did_emit = True
|
|
129
|
+
typescript_name = ts_name(prop.name, prop.name_case)
|
|
130
|
+
obj_out += f"\n{INDENT * (indent + 1)}{typescript_name}: {emit_value_ts(ctx, prop.spec_type, value_to_emit, indent=indent + 1)},"
|
|
131
|
+
whitespace = f"\n{INDENT * indent}" if did_emit else ""
|
|
132
|
+
obj_out += f"{whitespace}}} as const"
|
|
133
|
+
return obj_out
|
|
112
134
|
|
|
113
135
|
raise Exception("invalid constant type", value, stype, type(stype))
|
|
114
136
|
|
|
@@ -7,8 +7,8 @@ from shelljob import fs
|
|
|
7
7
|
from pkgs.serialization import yaml
|
|
8
8
|
|
|
9
9
|
from .builder import SpecBuilder
|
|
10
|
+
from .builder_types import CrossOutputPaths
|
|
10
11
|
from .config import Config
|
|
11
|
-
from .cross_output_links import CrossOutputPaths
|
|
12
12
|
|
|
13
13
|
ext_map = {
|
|
14
14
|
".ts": "typescript",
|