UncountablePythonSDK 0.0.160__tar.gz → 0.0.163__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.160 → uncountablepythonsdk-0.0.163}/.github/workflows/publish.yml +1 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/PKG-INFO +2 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/PKG-INFO +2 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/SOURCES.txt +9 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/requires.txt +1 -0
- uncountablepythonsdk-0.0.163/docs/integration_examples/add_file_to_folder.md +57 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/integration_examples/index.md +1 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/requirements.txt +1 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/__init__.py +3 -3
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/argument_parser.py +50 -36
- uncountablepythonsdk-0.0.163/pkgs/argument_parser/parser_error.py +60 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pyproject.toml +1 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/query/column.py +1 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/command_server.py +11 -7
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +10 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/model.py +5 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/__init__.py +10 -2
- uncountablepythonsdk-0.0.163/uncountable/types/api/file_folders/add_file_to_folder.py +43 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/update_output_condition_parameter.py +1 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/create_recipe.py +1 -0
- uncountablepythonsdk-0.0.163/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +46 -0
- uncountablepythonsdk-0.0.163/uncountable/types/api/recipes/upsert_step_relationships.py +91 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/async_batch_processor.py +79 -1
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/async_batch_t.py +2 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/client_base.py +83 -19
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/entity_t.py +4 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/listing.py +1 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/listing_t.py +15 -1
- uncountablepythonsdk-0.0.163/uncountable/types/recipe_workflow_step_types.py +15 -0
- uncountablepythonsdk-0.0.163/uncountable/types/recipe_workflow_step_types_t.py +118 -0
- uncountablepythonsdk-0.0.163/uncountable/types/step_relationships.py +15 -0
- uncountablepythonsdk-0.0.163/uncountable/types/step_relationships_t.py +140 -0
- uncountablepythonsdk-0.0.160/uncountable/types/api/files/create_file_record.py +0 -41
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/.python-version +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/README.md +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/integration_examples/upload_file.md +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/async_batch_large_parse.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/set_input_pdf_attribute.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_file_share_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/unknown.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/builder_types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/query/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/query/builder.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/query/row.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/query/types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/http_server/types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/request_context.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/list_aggregate.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/set_barcode.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/file_folders/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/listing/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/listing/export_listing.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/listing/fetch_listing.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/notebooks/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/runsheet/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/user/__init__.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/notices.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/notices_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_step_relationships_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet_format.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet_format_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/specs.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/specs_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/types/workflows_t.py +0 -0
|
@@ -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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
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.163
|
|
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
|
|
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.78.0
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
+
Requires-Dist: azure-storage-file-share==12.*
|
|
41
42
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
43
|
Requires-Dist: msgspec<0.21,>=0.19
|
|
43
44
|
Requires-Dist: tabulate==0.9.0
|
{uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/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.163
|
|
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
|
|
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.78.0
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
+
Requires-Dist: azure-storage-file-share==12.*
|
|
41
42
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
43
|
Requires-Dist: msgspec<0.21,>=0.19
|
|
43
44
|
Requires-Dist: tabulate==0.9.0
|
|
@@ -14,6 +14,7 @@ docs/conf.py
|
|
|
14
14
|
docs/index.md
|
|
15
15
|
docs/justfile
|
|
16
16
|
docs/requirements.txt
|
|
17
|
+
docs/integration_examples/add_file_to_folder.md
|
|
17
18
|
docs/integration_examples/create_ingredient.md
|
|
18
19
|
docs/integration_examples/create_output.md
|
|
19
20
|
docs/integration_examples/index.md
|
|
@@ -58,6 +59,7 @@ pkgs/argument_parser/_is_enum.py
|
|
|
58
59
|
pkgs/argument_parser/_is_namedtuple.py
|
|
59
60
|
pkgs/argument_parser/argument_parser.py
|
|
60
61
|
pkgs/argument_parser/case_convert.py
|
|
62
|
+
pkgs/argument_parser/parser_error.py
|
|
61
63
|
pkgs/filesystem_utils/__init__.py
|
|
62
64
|
pkgs/filesystem_utils/_blob_session.py
|
|
63
65
|
pkgs/filesystem_utils/_file_share_session.py
|
|
@@ -251,6 +253,8 @@ uncountable/types/recipe_step_relationships.py
|
|
|
251
253
|
uncountable/types/recipe_step_relationships_t.py
|
|
252
254
|
uncountable/types/recipe_tags.py
|
|
253
255
|
uncountable/types/recipe_tags_t.py
|
|
256
|
+
uncountable/types/recipe_workflow_step_types.py
|
|
257
|
+
uncountable/types/recipe_workflow_step_types_t.py
|
|
254
258
|
uncountable/types/recipe_workflow_steps.py
|
|
255
259
|
uncountable/types/recipe_workflow_steps_t.py
|
|
256
260
|
uncountable/types/recipes.py
|
|
@@ -267,6 +271,8 @@ uncountable/types/sockets.py
|
|
|
267
271
|
uncountable/types/sockets_t.py
|
|
268
272
|
uncountable/types/specs.py
|
|
269
273
|
uncountable/types/specs_t.py
|
|
274
|
+
uncountable/types/step_relationships.py
|
|
275
|
+
uncountable/types/step_relationships_t.py
|
|
270
276
|
uncountable/types/units.py
|
|
271
277
|
uncountable/types/units_t.py
|
|
272
278
|
uncountable/types/uploader.py
|
|
@@ -307,9 +313,9 @@ uncountable/types/api/equipment/associate_equipment_input.py
|
|
|
307
313
|
uncountable/types/api/field_options/__init__.py
|
|
308
314
|
uncountable/types/api/field_options/upsert_field_options.py
|
|
309
315
|
uncountable/types/api/file_folders/__init__.py
|
|
316
|
+
uncountable/types/api/file_folders/add_file_to_folder.py
|
|
310
317
|
uncountable/types/api/file_folders/modify_file_system.py
|
|
311
318
|
uncountable/types/api/files/__init__.py
|
|
312
|
-
uncountable/types/api/files/create_file_record.py
|
|
313
319
|
uncountable/types/api/files/download_file.py
|
|
314
320
|
uncountable/types/api/id_source/__init__.py
|
|
315
321
|
uncountable/types/api/id_source/list_id_source.py
|
|
@@ -384,6 +390,8 @@ uncountable/types/api/recipes/set_recipe_tags.py
|
|
|
384
390
|
uncountable/types/api/recipes/set_recipe_total.py
|
|
385
391
|
uncountable/types/api/recipes/unarchive_recipes.py
|
|
386
392
|
uncountable/types/api/recipes/unlock_recipes.py
|
|
393
|
+
uncountable/types/api/recipes/upsert_recipe_workflow_step.py
|
|
394
|
+
uncountable/types/api/recipes/upsert_step_relationships.py
|
|
387
395
|
uncountable/types/api/runsheet/__init__.py
|
|
388
396
|
uncountable/types/api/runsheet/complete_async_upload.py
|
|
389
397
|
uncountable/types/api/runsheet/export_default_runsheet.py
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Add a File to a Folder
|
|
2
|
+
|
|
3
|
+
This is a two-step workflow: first upload the file using `upload_files`, then place it in a target folder using `add_file_to_folder`.
|
|
4
|
+
|
|
5
|
+
## Step 1: Upload the file
|
|
6
|
+
|
|
7
|
+
```{code-block} python
|
|
8
|
+
from io import BytesIO
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from uncountable.core import AuthDetailsApiKey, Client
|
|
12
|
+
from uncountable.core.client import ClientConfig
|
|
13
|
+
from uncountable.core.file_upload import DataFileUpload, UploadedFile
|
|
14
|
+
|
|
15
|
+
client: Client = Client(
|
|
16
|
+
base_url="<BASE_URL>",
|
|
17
|
+
auth_details=AuthDetailsApiKey(
|
|
18
|
+
api_id="<API_ID>", api_secret_key="<API_SECRET_KEY>"
|
|
19
|
+
),
|
|
20
|
+
config=ClientConfig(allow_insecure_tls=False),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
filepath = Path("<YOUR_FILE_PATH>")
|
|
24
|
+
file_io: BytesIO = BytesIO(filepath.read_bytes())
|
|
25
|
+
|
|
26
|
+
upload_file_response: list[UploadedFile] = client.upload_files(
|
|
27
|
+
file_uploads=[DataFileUpload(data=file_io, name=filepath.name)]
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
file_id = upload_file_response[0].file_id
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Step 2: Add the file to a folder
|
|
34
|
+
|
|
35
|
+
```{code-block} python
|
|
36
|
+
from uncountable.types import identifier_t
|
|
37
|
+
|
|
38
|
+
response = client.add_file_to_folder(
|
|
39
|
+
file_id=file_id,
|
|
40
|
+
folder_key=identifier_t.IdentifierKeyId(id=<FOLDER_ID>),
|
|
41
|
+
)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Example Response:
|
|
45
|
+
```{code}
|
|
46
|
+
Data(modification_made=True, result_id=4521, entity=Entity(id=892, type=<EntityType.FILE_FOLDER_MEMBERSHIP: 'file_folder_membership'>), result_values=None)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
To add the file to the root folder instead of a specific folder:
|
|
50
|
+
|
|
51
|
+
```{code-block} python
|
|
52
|
+
response = client.add_file_to_folder(
|
|
53
|
+
file_id=file_id,
|
|
54
|
+
folder_key=identifier_t.IdentifierKeyRefName(ref_name="root"),
|
|
55
|
+
)
|
|
56
|
+
```
|
|
57
|
+
|
{uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/__init__.py
RENAMED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
from ._is_enum import is_string_enum_class as is_string_enum_class
|
|
2
2
|
from .argument_parser import CachedParser as CachedParser
|
|
3
3
|
from .argument_parser import ParserBase as ParserBase
|
|
4
|
-
from .argument_parser import ParserError as ParserError
|
|
5
|
-
from .argument_parser import ParserExtraFieldsError as ParserExtraFieldsError
|
|
6
4
|
from .argument_parser import ParserFunction as ParserFunction
|
|
7
5
|
from .argument_parser import ParserOptions as ParserOptions
|
|
8
|
-
from .argument_parser import ParserTypeError as ParserTypeError
|
|
9
6
|
from .argument_parser import SourceEncoding as SourceEncoding
|
|
10
7
|
from .argument_parser import build_parser as build_parser
|
|
11
8
|
from .argument_parser import is_missing as is_missing
|
|
@@ -14,3 +11,6 @@ from .argument_parser import is_union as is_union
|
|
|
14
11
|
from .case_convert import camel_to_snake_case as camel_to_snake_case
|
|
15
12
|
from .case_convert import kebab_to_pascal_case as kebab_to_pascal_case
|
|
16
13
|
from .case_convert import snake_to_camel_case as snake_to_camel_case
|
|
14
|
+
from .parser_error import ParserError as ParserError
|
|
15
|
+
from .parser_error import ParserExtraFieldsError as ParserExtraFieldsError
|
|
16
|
+
from .parser_error import ParserTypeError as ParserTypeError
|
|
@@ -26,6 +26,7 @@ from pkgs.serialization import (
|
|
|
26
26
|
from ._is_enum import is_string_enum_class
|
|
27
27
|
from ._is_namedtuple import is_namedtuple_type
|
|
28
28
|
from .case_convert import camel_to_snake_case, snake_to_camel_case
|
|
29
|
+
from .parser_error import ParserError, ParserExtraFieldsError, ParserTypeError
|
|
29
30
|
|
|
30
31
|
T = typing.TypeVar("T")
|
|
31
32
|
ParserFunction = typing.Callable[[typing.Any], T]
|
|
@@ -72,22 +73,6 @@ class ParserContext:
|
|
|
72
73
|
cache: ParserCache
|
|
73
74
|
|
|
74
75
|
|
|
75
|
-
class ParserError(BaseException): ...
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
class ParserExtraFieldsError(ParserError):
|
|
79
|
-
extra_fields: set[str]
|
|
80
|
-
|
|
81
|
-
def __init__(self, extra_fields: set[str]) -> None:
|
|
82
|
-
self.extra_fields = extra_fields
|
|
83
|
-
|
|
84
|
-
def __str__(self) -> str:
|
|
85
|
-
return f"extra fields were provided: {', '.join(self.extra_fields)}"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class ParserTypeError(ParserError): ...
|
|
89
|
-
|
|
90
|
-
|
|
91
76
|
def is_union(field_type: typing.Any) -> bool:
|
|
92
77
|
origin = typing.get_origin(field_type)
|
|
93
78
|
return origin is typing.Union or origin is types.UnionType
|
|
@@ -152,8 +137,10 @@ def _invoke_fallback_parsers(
|
|
|
152
137
|
except Exception as e:
|
|
153
138
|
exceptions.append(e)
|
|
154
139
|
continue
|
|
155
|
-
raise
|
|
156
|
-
f"Unhandled value {value} cannot be cast to a member of {original_type}"
|
|
140
|
+
raise ParserError(
|
|
141
|
+
f"Unhandled value {value} cannot be cast to a member of {original_type}",
|
|
142
|
+
value=value,
|
|
143
|
+
expected_type=original_type,
|
|
157
144
|
) from ExceptionGroup("Fallback Parser Exception", exceptions)
|
|
158
145
|
|
|
159
146
|
|
|
@@ -169,7 +156,9 @@ def _invoke_membership_parser(
|
|
|
169
156
|
if value == test_value:
|
|
170
157
|
return test_value
|
|
171
158
|
|
|
172
|
-
raise
|
|
159
|
+
raise ParserError(
|
|
160
|
+
f"Expected value from {expected_values} but got value {value}", value=value
|
|
161
|
+
)
|
|
173
162
|
|
|
174
163
|
|
|
175
164
|
# Uses `is` to compare
|
|
@@ -179,8 +168,10 @@ def _build_identity_parser(
|
|
|
179
168
|
def parse(value: typing.Any) -> T:
|
|
180
169
|
if value is identity_value:
|
|
181
170
|
return identity_value
|
|
182
|
-
raise
|
|
183
|
-
f"Expected value {identity_value} (type: {type(identity_value)}) but got value {value} (type: {type(value)})"
|
|
171
|
+
raise ParserError(
|
|
172
|
+
f"Expected value {identity_value} (type: {type(identity_value)}) but got value {value} (type: {type(value)})",
|
|
173
|
+
value=value,
|
|
174
|
+
expected_type=type(identity_value),
|
|
184
175
|
)
|
|
185
176
|
|
|
186
177
|
return parse
|
|
@@ -206,12 +197,12 @@ def _build_parser_discriminated_union(
|
|
|
206
197
|
else:
|
|
207
198
|
discriminant = value.get(discriminator)
|
|
208
199
|
if discriminant is None:
|
|
209
|
-
raise
|
|
200
|
+
raise ParserError("missing-union-discriminant")
|
|
210
201
|
if not isinstance(discriminant, str):
|
|
211
|
-
raise
|
|
202
|
+
raise ParserError("union-discriminant-is-not-string", value=discriminant)
|
|
212
203
|
parser = discriminator_map.get(discriminant)
|
|
213
204
|
if parser is None:
|
|
214
|
-
raise
|
|
205
|
+
raise ParserError("missing-type-for-union-discriminant", value=discriminant)
|
|
215
206
|
return parser(value)
|
|
216
207
|
|
|
217
208
|
return parse
|
|
@@ -384,18 +375,22 @@ def _build_parser_inner(
|
|
|
384
375
|
if origin in (list, set):
|
|
385
376
|
args = typing.get_args(parsed_type)
|
|
386
377
|
if len(args) != 1:
|
|
387
|
-
raise
|
|
378
|
+
raise ParserError(
|
|
379
|
+
"List types only support one argument", expected_type=parsed_type
|
|
380
|
+
)
|
|
388
381
|
arg_parser = _build_parser_inner(args[0], context, type_var_map)
|
|
389
382
|
|
|
390
383
|
def parse_element(value: typing.Any) -> typing.Any:
|
|
391
384
|
try:
|
|
392
385
|
return arg_parser(value)
|
|
393
386
|
except Exception as e:
|
|
394
|
-
raise
|
|
387
|
+
raise ParserError("Failed to parse element", value=value) from e
|
|
395
388
|
|
|
396
389
|
def parse(value: typing.Any) -> typing.Any:
|
|
397
390
|
if not isinstance(value, list):
|
|
398
|
-
raise
|
|
391
|
+
raise ParserError(
|
|
392
|
+
"value is not a list", value=value, expected_type=parsed_type
|
|
393
|
+
)
|
|
399
394
|
return origin(parse_element(x) for x in value)
|
|
400
395
|
|
|
401
396
|
return parse
|
|
@@ -403,7 +398,10 @@ def _build_parser_inner(
|
|
|
403
398
|
if origin is dict:
|
|
404
399
|
args = typing.get_args(parsed_type)
|
|
405
400
|
if len(args) != 2:
|
|
406
|
-
raise
|
|
401
|
+
raise ParserError(
|
|
402
|
+
"Dict types only support two arguments for now",
|
|
403
|
+
expected_type=parsed_type,
|
|
404
|
+
)
|
|
407
405
|
k_inner_parser = _build_parser_inner(
|
|
408
406
|
args[0],
|
|
409
407
|
context,
|
|
@@ -479,7 +477,11 @@ def _build_parser_inner(
|
|
|
479
477
|
return value # type: ignore
|
|
480
478
|
if isinstance(value, (float, int)):
|
|
481
479
|
return str(value) # type: ignore
|
|
482
|
-
raise
|
|
480
|
+
raise ParserError(
|
|
481
|
+
f"Invalid string value: {type(value)}: {value}",
|
|
482
|
+
value=value,
|
|
483
|
+
expected_type=str,
|
|
484
|
+
)
|
|
483
485
|
|
|
484
486
|
return parse_str
|
|
485
487
|
|
|
@@ -488,7 +490,11 @@ def _build_parser_inner(
|
|
|
488
490
|
def parse_as_numeric_type(value: typing.Any) -> T:
|
|
489
491
|
numeric_value: Decimal | float = parsed_type(value) # type: ignore
|
|
490
492
|
if math.isnan(numeric_value):
|
|
491
|
-
raise
|
|
493
|
+
raise ParserError(
|
|
494
|
+
f"Invalid numeric value: {numeric_value}",
|
|
495
|
+
value=numeric_value,
|
|
496
|
+
expected_type=parsed_type,
|
|
497
|
+
)
|
|
492
498
|
|
|
493
499
|
return numeric_value # type: ignore
|
|
494
500
|
|
|
@@ -500,7 +506,7 @@ def _build_parser_inner(
|
|
|
500
506
|
if parsed_type is MissingSentryType:
|
|
501
507
|
|
|
502
508
|
def error(value: typing.Any) -> T:
|
|
503
|
-
raise
|
|
509
|
+
raise ParserError("Missing type cannot be parsed directly")
|
|
504
510
|
|
|
505
511
|
return error
|
|
506
512
|
|
|
@@ -519,7 +525,9 @@ def _build_parser_inner(
|
|
|
519
525
|
type_var_map,
|
|
520
526
|
)
|
|
521
527
|
|
|
522
|
-
raise
|
|
528
|
+
raise ParserError(
|
|
529
|
+
f"Unhandled type {parsed_type}/{origin}", expected_type=parsed_type
|
|
530
|
+
)
|
|
523
531
|
|
|
524
532
|
|
|
525
533
|
# Take in map of parameter name to materialized type
|
|
@@ -583,7 +591,9 @@ def _build_parser_dataclass(
|
|
|
583
591
|
field_value: typing.Any
|
|
584
592
|
if field_raw_value == dataclasses.MISSING:
|
|
585
593
|
if serial_class_data.has_parse_require(field.name):
|
|
586
|
-
raise
|
|
594
|
+
raise ParserError(
|
|
595
|
+
"missing-required-field", field_name=field.name
|
|
596
|
+
)
|
|
587
597
|
if _has_field_default(field):
|
|
588
598
|
field_value = _get_field_default(field)
|
|
589
599
|
elif is_missing(field_type):
|
|
@@ -596,7 +606,9 @@ def _build_parser_dataclass(
|
|
|
596
606
|
# Backwards compatibilty to dataclasses that didn't set a default value
|
|
597
607
|
field_value = False
|
|
598
608
|
else:
|
|
599
|
-
raise
|
|
609
|
+
raise ParserError(
|
|
610
|
+
"missing-value-for-field", field_name=field.name
|
|
611
|
+
)
|
|
600
612
|
elif (
|
|
601
613
|
field_raw_value is None
|
|
602
614
|
and not is_optional(field_type)
|
|
@@ -612,8 +624,10 @@ def _build_parser_dataclass(
|
|
|
612
624
|
data[field.name] = field_value
|
|
613
625
|
|
|
614
626
|
except Exception as e:
|
|
615
|
-
raise
|
|
616
|
-
f"unable-to-parse-field:{field.name}",
|
|
627
|
+
raise ParserError(
|
|
628
|
+
f"unable-to-parse-field:{field.name}",
|
|
629
|
+
field_name=field.name,
|
|
630
|
+
value=field_raw_value,
|
|
617
631
|
) from e
|
|
618
632
|
|
|
619
633
|
if context.options.strict_property_parsing:
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
_UNSET = object()
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ParserError(ValueError):
|
|
9
|
+
"""Raised when argument parsing fails. Carries structured context about the failure."""
|
|
10
|
+
|
|
11
|
+
def __init__(
|
|
12
|
+
self,
|
|
13
|
+
message: str,
|
|
14
|
+
*,
|
|
15
|
+
value: typing.Any = _UNSET,
|
|
16
|
+
expected_type: typing.Any = None,
|
|
17
|
+
field_name: str | None = None,
|
|
18
|
+
) -> None:
|
|
19
|
+
self.error_message = message
|
|
20
|
+
self.value = value
|
|
21
|
+
self.expected_type = expected_type
|
|
22
|
+
self.field_name = field_name
|
|
23
|
+
super().__init__(message)
|
|
24
|
+
|
|
25
|
+
def error_chain(self) -> list[ParserError]:
|
|
26
|
+
errors: list[ParserError] = []
|
|
27
|
+
current: BaseException | None = self
|
|
28
|
+
while isinstance(current, ParserError):
|
|
29
|
+
errors.append(current)
|
|
30
|
+
current = current.__cause__
|
|
31
|
+
return errors
|
|
32
|
+
|
|
33
|
+
def format_error_chain(self) -> str:
|
|
34
|
+
messages: list[str] = []
|
|
35
|
+
current: BaseException | None = self
|
|
36
|
+
while current is not None:
|
|
37
|
+
if isinstance(current, ParserError):
|
|
38
|
+
messages.append(current.error_message)
|
|
39
|
+
current = current.__cause__
|
|
40
|
+
else:
|
|
41
|
+
messages.append(str(current))
|
|
42
|
+
break
|
|
43
|
+
|
|
44
|
+
if len(messages) <= 1:
|
|
45
|
+
return self.error_message
|
|
46
|
+
|
|
47
|
+
return " → ".join(messages)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ParserExtraFieldsError(ParserError):
|
|
51
|
+
extra_fields: set[str]
|
|
52
|
+
|
|
53
|
+
def __init__(self, extra_fields: set[str]) -> None:
|
|
54
|
+
self.extra_fields = extra_fields
|
|
55
|
+
super().__init__(
|
|
56
|
+
f"extra fields were provided: {', '.join(extra_fields)}",
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class ParserTypeError(ParserError): ...
|
{uncountablepythonsdk-0.0.160 → uncountablepythonsdk-0.0.163}/uncountable/core/query/column.py
RENAMED
|
@@ -294,7 +294,7 @@ class BooleanColumn[
|
|
|
294
294
|
) -> ColumnFilter:
|
|
295
295
|
return ColumnFilter(
|
|
296
296
|
identifier=self.identifier,
|
|
297
|
-
filter=lambda x: listing_t.
|
|
297
|
+
filter=lambda x: listing_t.FilterSpecEqualsBoolean(column=x, value=other),
|
|
298
298
|
)
|
|
299
299
|
|
|
300
300
|
|
|
@@ -159,13 +159,17 @@ async def serve(command_queue: CommandQueue, datastore: DatastoreSqlite) -> None
|
|
|
159
159
|
else None
|
|
160
160
|
)
|
|
161
161
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
162
|
+
loop = asyncio.get_running_loop()
|
|
163
|
+
queued_job_metadata = await loop.run_in_executor(
|
|
164
|
+
None,
|
|
165
|
+
lambda: datastore.list_queued_job_metadata(
|
|
166
|
+
status=job_status,
|
|
167
|
+
limit=request.limit,
|
|
168
|
+
offset=request.offset,
|
|
169
|
+
job_ref_name=request.job_ref_name or None,
|
|
170
|
+
submitted_from=submitted_from,
|
|
171
|
+
submitted_to=submitted_to,
|
|
172
|
+
),
|
|
169
173
|
)
|
|
170
174
|
|
|
171
175
|
response_list: list[ListQueuedJobsResult.ListQueuedJobsResultItem] = []
|
|
@@ -36,6 +36,16 @@ class DatastoreSqlite(Datastore):
|
|
|
36
36
|
connection.execute(
|
|
37
37
|
text("alter table queued_jobs add column status VARCHAR")
|
|
38
38
|
)
|
|
39
|
+
connection.execute(
|
|
40
|
+
text(
|
|
41
|
+
"create index if not exists ix_queued_jobs_status on queued_jobs (status)"
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
connection.execute(
|
|
45
|
+
text(
|
|
46
|
+
"create index if not exists ix_queued_jobs_submitted_at on queued_jobs (submitted_at)"
|
|
47
|
+
)
|
|
48
|
+
)
|
|
39
49
|
|
|
40
50
|
def add_job_to_queue(
|
|
41
51
|
self, job_payload: queued_job_t.QueuedJobPayload, job_ref_name: str
|
|
@@ -13,7 +13,10 @@ class QueuedJob(Base):
|
|
|
13
13
|
id = Column(Text, primary_key=True)
|
|
14
14
|
job_ref_name = Column(Text, nullable=False, index=True)
|
|
15
15
|
submitted_at = Column(
|
|
16
|
-
DateTime(timezone=True),
|
|
16
|
+
DateTime(timezone=True),
|
|
17
|
+
server_default=func.current_timestamp(),
|
|
18
|
+
nullable=False,
|
|
19
|
+
index=True,
|
|
17
20
|
)
|
|
18
21
|
payload = Column(JSON, nullable=False)
|
|
19
22
|
num_attempts = Column(BigInteger, nullable=False, default=0, server_default="0")
|
|
@@ -21,4 +24,5 @@ class QueuedJob(Base):
|
|
|
21
24
|
Enum(queued_job_t.JobStatus, length=None),
|
|
22
25
|
default=queued_job_t.JobStatus.QUEUED,
|
|
23
26
|
nullable=True,
|
|
27
|
+
index=True,
|
|
24
28
|
)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# ruff: noqa: E402 Q003
|
|
3
3
|
# fmt: off
|
|
4
4
|
# isort: skip_file
|
|
5
|
+
from .api.file_folders import add_file_to_folder as add_file_to_folder_t
|
|
5
6
|
from .api.notebooks import add_notebook_content as add_notebook_content_t
|
|
6
7
|
from .api.recipes import add_recipe_to_project as add_recipe_to_project_t
|
|
7
8
|
from .api.recipes import add_time_series_data as add_time_series_data_t
|
|
@@ -22,7 +23,6 @@ from .api.runsheet import complete_async_upload as complete_async_upload_t
|
|
|
22
23
|
from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
|
|
23
24
|
from .api.entity import create_entities as create_entities_t
|
|
24
25
|
from .api.entity import create_entity as create_entity_t
|
|
25
|
-
from .api.files import create_file_record as create_file_record_t
|
|
26
26
|
from .api.inputs import create_inputs as create_inputs_t
|
|
27
27
|
from .api.recipes import create_mix_order as create_mix_order_t
|
|
28
28
|
from .api.entity import create_or_update_entity as create_or_update_entity_t
|
|
@@ -102,6 +102,7 @@ from . import recipe_metadata_t as recipe_metadata_t
|
|
|
102
102
|
from . import recipe_output_metadata_t as recipe_output_metadata_t
|
|
103
103
|
from . import recipe_step_relationships_t as recipe_step_relationships_t
|
|
104
104
|
from . import recipe_tags_t as recipe_tags_t
|
|
105
|
+
from . import recipe_workflow_step_types_t as recipe_workflow_step_types_t
|
|
105
106
|
from . import recipe_workflow_steps_t as recipe_workflow_steps_t
|
|
106
107
|
from . import recipes_t as recipes_t
|
|
107
108
|
from .api.integrations import register_sockets_token as register_sockets_token_t
|
|
@@ -132,6 +133,7 @@ from .api.recipes import set_recipe_total as set_recipe_total_t
|
|
|
132
133
|
from .api.entity import set_values as set_values_t
|
|
133
134
|
from . import sockets_t as sockets_t
|
|
134
135
|
from . import specs_t as specs_t
|
|
136
|
+
from . import step_relationships_t as step_relationships_t
|
|
135
137
|
from .api.entity import transition_entity_phase as transition_entity_phase_t
|
|
136
138
|
from .api.recipes import unarchive_recipes as unarchive_recipes_t
|
|
137
139
|
from . import units_t as units_t
|
|
@@ -142,12 +144,15 @@ from .api.outputs import update_output_condition_parameter as update_output_cond
|
|
|
142
144
|
from . import uploader_t as uploader_t
|
|
143
145
|
from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
|
|
144
146
|
from .api.field_options import upsert_field_options as upsert_field_options_t
|
|
147
|
+
from .api.recipes import upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
|
|
148
|
+
from .api.recipes import upsert_step_relationships as upsert_step_relationships_t
|
|
145
149
|
from . import users_t as users_t
|
|
146
150
|
from . import webhook_job_t as webhook_job_t
|
|
147
151
|
from . import workflows_t as workflows_t
|
|
148
152
|
|
|
149
153
|
|
|
150
154
|
__all__: list[str] = [
|
|
155
|
+
"add_file_to_folder_t",
|
|
151
156
|
"add_notebook_content_t",
|
|
152
157
|
"add_recipe_to_project_t",
|
|
153
158
|
"add_time_series_data_t",
|
|
@@ -168,7 +173,6 @@ __all__: list[str] = [
|
|
|
168
173
|
"convert_chemical_formats_t",
|
|
169
174
|
"create_entities_t",
|
|
170
175
|
"create_entity_t",
|
|
171
|
-
"create_file_record_t",
|
|
172
176
|
"create_inputs_t",
|
|
173
177
|
"create_mix_order_t",
|
|
174
178
|
"create_or_update_entity_t",
|
|
@@ -248,6 +252,7 @@ __all__: list[str] = [
|
|
|
248
252
|
"recipe_output_metadata_t",
|
|
249
253
|
"recipe_step_relationships_t",
|
|
250
254
|
"recipe_tags_t",
|
|
255
|
+
"recipe_workflow_step_types_t",
|
|
251
256
|
"recipe_workflow_steps_t",
|
|
252
257
|
"recipes_t",
|
|
253
258
|
"register_sockets_token_t",
|
|
@@ -278,6 +283,7 @@ __all__: list[str] = [
|
|
|
278
283
|
"set_values_t",
|
|
279
284
|
"sockets_t",
|
|
280
285
|
"specs_t",
|
|
286
|
+
"step_relationships_t",
|
|
281
287
|
"transition_entity_phase_t",
|
|
282
288
|
"unarchive_recipes_t",
|
|
283
289
|
"units_t",
|
|
@@ -288,6 +294,8 @@ __all__: list[str] = [
|
|
|
288
294
|
"uploader_t",
|
|
289
295
|
"upsert_condition_match_t",
|
|
290
296
|
"upsert_field_options_t",
|
|
297
|
+
"upsert_recipe_workflow_step_t",
|
|
298
|
+
"upsert_step_relationships_t",
|
|
291
299
|
"users_t",
|
|
292
300
|
"webhook_job_t",
|
|
293
301
|
"workflows_t",
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
13
|
+
from ... import identifier_t
|
|
14
|
+
|
|
15
|
+
__all__: list[str] = [
|
|
16
|
+
"Arguments",
|
|
17
|
+
"Data",
|
|
18
|
+
"ENDPOINT_METHOD",
|
|
19
|
+
"ENDPOINT_PATH",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
ENDPOINT_METHOD = "POST"
|
|
23
|
+
ENDPOINT_PATH = "api/external/file_folders/add_file_to_folder"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.file_folders.add_file_to_folder.Arguments",
|
|
29
|
+
)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
|
+
class Arguments:
|
|
32
|
+
file_id: base_t.ObjectId
|
|
33
|
+
folder_key: identifier_t.IdentifierKey
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
37
|
+
@serial_class(
|
|
38
|
+
named_type_path="sdk.api.file_folders.add_file_to_folder.Data",
|
|
39
|
+
)
|
|
40
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
42
|
+
pass
|
|
43
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -36,6 +36,7 @@ class Arguments:
|
|
|
36
36
|
update_type: post_base_t.UpdateType
|
|
37
37
|
requirement_type: ConditionParameterRequirementType | None = None
|
|
38
38
|
material_family_key: identifier_t.IdentifierKey | None = None
|
|
39
|
+
analytical_method_keys: list[identifier_t.IdentifierKey] | None = None
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|