UncountablePythonSDK 0.0.190__tar.gz → 0.0.192__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.190/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.192}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/SOURCES.txt +7 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/scm_file_list.json +7 -0
- uncountablepythonsdk-0.0.192/pkgs/argument_parser/parse_fallback.py +26 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_inner.py +116 -54
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/__init__.py +1 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_class.py +26 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/builder.py +61 -18
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/builder_types.py +6 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_io_ts.py +1 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_open_api.py +29 -32
- uncountablepythonsdk-0.0.192/pkgs/type_spec/emit_open_api_examples.py +221 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_python.py +17 -81
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_typescript_util.py +27 -8
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/parts/base.ts.prepart +6 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/client.py +4 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/file_upload.py +5 -3
- uncountablepythonsdk-0.0.192/uncountable/core/tls.py +34 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/cli.py +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/job.py +47 -30
- uncountablepythonsdk-0.0.192/uncountable/integration/job_queue.py +14 -0
- uncountablepythonsdk-0.0.192/uncountable/integration/ownership_lock.py +77 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/command_client.py +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/command_server.py +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +1 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +4 -4
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/types.py +1 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +14 -7
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/interface.py +6 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/job_scheduler.py +66 -23
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/worker.py +8 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/scheduler.py +86 -57
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/telemetry.py +13 -3
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_server/entrypoint.py +17 -5
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/__init__.py +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/listing/fetch_listing.py +2 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/notebooks/get_notebook_content.py +15 -1
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/client_base.py +5 -2
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/entity_t.py +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/listing.py +2 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/listing_t.py +18 -0
- uncountablepythonsdk-0.0.192/uncountable/types/notebook_files.py +10 -0
- uncountablepythonsdk-0.0.192/uncountable/types/notebook_files_t.py +64 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/README.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/.flowmarkignore +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/add_file_to_folder.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/create_ingredient.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/create_output.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/index.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/upload_file.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/async_batch_large_parse.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/basic_auth.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/create_ingredient_sdk.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_http_get.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_scale_connection.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/oauth.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/set_input_pdf_attribute.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/stream_dataset_measurements.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/cached_parser.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/field_name_resolution.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_base.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_builder.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_cache.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_error.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_function_type.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_options.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/type_predicates.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_file_share_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/unknown.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/usage.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/reuse_containers.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/serialize_for_api_encoding.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/source_encoding_serializer.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/AGENTS.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/CLAUDE.md +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_scss.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/builder.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/column.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/row.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/http_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/http_server/types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/job_process.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/job_runner.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/request_context.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/service.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/service_runner.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_bootstrap.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_server/gunicorn_config.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/condition_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/add_entity_comment.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/export_entities.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/list_aggregate.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/lookup_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_barcode.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/file_folders/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/push_notification.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/listing/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/listing/export_listing.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/get_analyze_results.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/get_suggest_results.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/submit_async_job.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/notebooks/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/output_parameters/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/get_output_organization.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/create_mix_order.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/runsheet/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/time_series/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/time_series/ingest_dataset_measurements.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/user/__init__.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/user/get_current_user_info.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/condition_match.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/condition_match_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/data.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/data_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/dataset_measurements.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/dataset_measurements_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/exports.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/exports_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_session.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_session_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integrations.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integrations_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/ml_reports.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/ml_reports_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notices.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notices_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notifications.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notifications_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_step_relationships_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_step_types.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/request_headers.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/request_headers_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet_format.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet_format_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/sockets.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/sockets_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/specs.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/specs_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/step_relationships.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/step_relationships_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/uploader.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/uploader_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook_t.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.190/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.192}/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.192
|
|
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.190 → uncountablepythonsdk-0.0.192/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.192
|
|
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
|
|
@@ -62,6 +62,7 @@ pkgs/argument_parser/__init__.py
|
|
|
62
62
|
pkgs/argument_parser/cached_parser.py
|
|
63
63
|
pkgs/argument_parser/case_convert.py
|
|
64
64
|
pkgs/argument_parser/field_name_resolution.py
|
|
65
|
+
pkgs/argument_parser/parse_fallback.py
|
|
65
66
|
pkgs/argument_parser/parser_base.py
|
|
66
67
|
pkgs/argument_parser/parser_builder.py
|
|
67
68
|
pkgs/argument_parser/parser_cache.py
|
|
@@ -111,6 +112,7 @@ pkgs/type_spec/config.py
|
|
|
111
112
|
pkgs/type_spec/cross_output_links.py
|
|
112
113
|
pkgs/type_spec/emit_io_ts.py
|
|
113
114
|
pkgs/type_spec/emit_open_api.py
|
|
115
|
+
pkgs/type_spec/emit_open_api_examples.py
|
|
114
116
|
pkgs/type_spec/emit_open_api_util.py
|
|
115
117
|
pkgs/type_spec/emit_python.py
|
|
116
118
|
pkgs/type_spec/emit_scss.py
|
|
@@ -143,6 +145,7 @@ uncountable/core/async_batch.py
|
|
|
143
145
|
uncountable/core/client.py
|
|
144
146
|
uncountable/core/environment.py
|
|
145
147
|
uncountable/core/file_upload.py
|
|
148
|
+
uncountable/core/tls.py
|
|
146
149
|
uncountable/core/types.py
|
|
147
150
|
uncountable/core/query/__init__.py
|
|
148
151
|
uncountable/core/query/builder.py
|
|
@@ -155,6 +158,8 @@ uncountable/integration/construct_client.py
|
|
|
155
158
|
uncountable/integration/cron.py
|
|
156
159
|
uncountable/integration/entrypoint.py
|
|
157
160
|
uncountable/integration/job.py
|
|
161
|
+
uncountable/integration/job_queue.py
|
|
162
|
+
uncountable/integration/ownership_lock.py
|
|
158
163
|
uncountable/integration/request_context.py
|
|
159
164
|
uncountable/integration/scan_profiles.py
|
|
160
165
|
uncountable/integration/scheduler.py
|
|
@@ -260,6 +265,8 @@ uncountable/types/listing.py
|
|
|
260
265
|
uncountable/types/listing_t.py
|
|
261
266
|
uncountable/types/ml_reports.py
|
|
262
267
|
uncountable/types/ml_reports_t.py
|
|
268
|
+
uncountable/types/notebook_files.py
|
|
269
|
+
uncountable/types/notebook_files_t.py
|
|
263
270
|
uncountable/types/notices.py
|
|
264
271
|
uncountable/types/notices_t.py
|
|
265
272
|
uncountable/types/notifications.py
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"pkgs/argument_parser/cached_parser.py",
|
|
57
57
|
"pkgs/argument_parser/case_convert.py",
|
|
58
58
|
"pkgs/argument_parser/field_name_resolution.py",
|
|
59
|
+
"pkgs/argument_parser/parse_fallback.py",
|
|
59
60
|
"pkgs/argument_parser/parser_base.py",
|
|
60
61
|
"pkgs/argument_parser/parser_builder.py",
|
|
61
62
|
"pkgs/argument_parser/parser_cache.py",
|
|
@@ -110,6 +111,7 @@
|
|
|
110
111
|
"pkgs/type_spec/cross_output_links.py",
|
|
111
112
|
"pkgs/type_spec/emit_io_ts.py",
|
|
112
113
|
"pkgs/type_spec/emit_open_api.py",
|
|
114
|
+
"pkgs/type_spec/emit_open_api_examples.py",
|
|
113
115
|
"pkgs/type_spec/emit_open_api_util.py",
|
|
114
116
|
"pkgs/type_spec/emit_python.py",
|
|
115
117
|
"pkgs/type_spec/emit_scss.py",
|
|
@@ -143,6 +145,7 @@
|
|
|
143
145
|
"uncountable/core/query/column.py",
|
|
144
146
|
"uncountable/core/query/row.py",
|
|
145
147
|
"uncountable/core/query/types.py",
|
|
148
|
+
"uncountable/core/tls.py",
|
|
146
149
|
"uncountable/core/types.py",
|
|
147
150
|
"uncountable/integration/__init__.py",
|
|
148
151
|
"uncountable/integration/cli.py",
|
|
@@ -159,6 +162,8 @@
|
|
|
159
162
|
"uncountable/integration/http_server/__init__.py",
|
|
160
163
|
"uncountable/integration/http_server/types.py",
|
|
161
164
|
"uncountable/integration/job.py",
|
|
165
|
+
"uncountable/integration/job_queue.py",
|
|
166
|
+
"uncountable/integration/ownership_lock.py",
|
|
162
167
|
"uncountable/integration/queue_runner/__init__.py",
|
|
163
168
|
"uncountable/integration/queue_runner/command_server/__init__.py",
|
|
164
169
|
"uncountable/integration/queue_runner/command_server/command_client.py",
|
|
@@ -388,6 +393,8 @@
|
|
|
388
393
|
"uncountable/types/listing_t.py",
|
|
389
394
|
"uncountable/types/ml_reports.py",
|
|
390
395
|
"uncountable/types/ml_reports_t.py",
|
|
396
|
+
"uncountable/types/notebook_files.py",
|
|
397
|
+
"uncountable/types/notebook_files_t.py",
|
|
391
398
|
"uncountable/types/notices.py",
|
|
392
399
|
"uncountable/types/notices_t.py",
|
|
393
400
|
"uncountable/types/notifications.py",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import dataclasses
|
|
2
|
+
import inspect
|
|
3
|
+
import typing
|
|
4
|
+
from collections.abc import Callable, Mapping
|
|
5
|
+
|
|
6
|
+
from .parser_function_type import ParserFunction
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclasses.dataclass(kw_only=True, frozen=True)
|
|
10
|
+
class DataclassParseFallback:
|
|
11
|
+
legacy_key: str
|
|
12
|
+
legacy_parser: ParserFunction[object]
|
|
13
|
+
convert: Callable[[typing.Any], object]
|
|
14
|
+
|
|
15
|
+
def applies(self, *, value: Mapping[str, object], field_raw_value: object) -> bool:
|
|
16
|
+
return (
|
|
17
|
+
field_raw_value is dataclasses.MISSING or field_raw_value is None
|
|
18
|
+
) and value.get(self.legacy_key) is not None
|
|
19
|
+
|
|
20
|
+
def parse(self, value: Mapping[str, object]) -> object:
|
|
21
|
+
return self.convert(self.legacy_parser(value[self.legacy_key]))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def parse_fallback_legacy_type(convert: Callable[..., object]) -> typing.Any:
|
|
25
|
+
legacy_parameter = next(iter(inspect.signature(convert).parameters))
|
|
26
|
+
return typing.get_type_hints(convert, include_extras=True)[legacy_parameter]
|
{uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_inner.py
RENAMED
|
@@ -15,6 +15,7 @@ import dateutil.parser
|
|
|
15
15
|
from pkgs.serialization import (
|
|
16
16
|
MissingSentryType,
|
|
17
17
|
OpaqueKey,
|
|
18
|
+
SerialClassDataInspector,
|
|
18
19
|
UnknownBrand,
|
|
19
20
|
get_serial_class_data,
|
|
20
21
|
get_serial_union_data,
|
|
@@ -22,6 +23,7 @@ from pkgs.serialization import (
|
|
|
22
23
|
|
|
23
24
|
from .case_convert import camel_to_snake_case, snake_to_camel_case
|
|
24
25
|
from .field_name_resolution import resolve_serialized_field_name
|
|
26
|
+
from .parse_fallback import DataclassParseFallback, parse_fallback_legacy_type
|
|
25
27
|
from .parser_error import (
|
|
26
28
|
ParserEnumError,
|
|
27
29
|
ParserError,
|
|
@@ -255,6 +257,39 @@ def _build_parser_for_type_alias(
|
|
|
255
257
|
return build_parser_inner(alias.__value__, context, merged_alias_map)
|
|
256
258
|
|
|
257
259
|
|
|
260
|
+
def _build_parser_for_dict(
|
|
261
|
+
*,
|
|
262
|
+
key_type: typing.Any,
|
|
263
|
+
value_type: typing.Any,
|
|
264
|
+
context: ParserContext,
|
|
265
|
+
type_var_map: dict[typing.TypeVar, type],
|
|
266
|
+
) -> ParserFunction[T]:
|
|
267
|
+
k_inner_parser = build_parser_inner(
|
|
268
|
+
key_type,
|
|
269
|
+
context,
|
|
270
|
+
type_var_map,
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
def key_parser(value: typing.Any) -> object:
|
|
274
|
+
inner = k_inner_parser(value)
|
|
275
|
+
if (
|
|
276
|
+
isinstance(inner, str)
|
|
277
|
+
# enum keys and OpaqueData's would also have string value types,
|
|
278
|
+
# but their explicit type is not a string, thus shouldn't be converted
|
|
279
|
+
and key_type is str
|
|
280
|
+
and context.options.is_api_encoding
|
|
281
|
+
):
|
|
282
|
+
return camel_to_snake_case(value)
|
|
283
|
+
return inner
|
|
284
|
+
|
|
285
|
+
v_parser = build_parser_inner(value_type, context, type_var_map)
|
|
286
|
+
|
|
287
|
+
def parse_dict(value: typing.Any) -> typing.Any:
|
|
288
|
+
return {key_parser(k): v_parser(v) for k, v in value.items()}
|
|
289
|
+
|
|
290
|
+
return parse_dict
|
|
291
|
+
|
|
292
|
+
|
|
258
293
|
def _build_parser_for_collection(
|
|
259
294
|
*,
|
|
260
295
|
parsed_type: type[T]
|
|
@@ -289,6 +324,32 @@ def _build_parser_for_collection(
|
|
|
289
324
|
return parse
|
|
290
325
|
|
|
291
326
|
|
|
327
|
+
# first parse ints to decimal to allow scientific notation and decimals
|
|
328
|
+
# e.g. (1) 1e4 => 1000, (2) 3.0 => 3
|
|
329
|
+
def _parse_int(value: typing.Any) -> int:
|
|
330
|
+
if isinstance(value, str):
|
|
331
|
+
assert "_" not in value, "numbers with underscores not considered integers"
|
|
332
|
+
|
|
333
|
+
dec_value = Decimal(value)
|
|
334
|
+
int_value = int(dec_value)
|
|
335
|
+
assert int_value == dec_value, (
|
|
336
|
+
f"value ({value}) cannot be parsed to int without discarding precision"
|
|
337
|
+
)
|
|
338
|
+
return int_value
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
def _parse_str(value: typing.Any) -> str:
|
|
342
|
+
if isinstance(value, str):
|
|
343
|
+
return value
|
|
344
|
+
if isinstance(value, (Decimal, float, int)):
|
|
345
|
+
return str(value)
|
|
346
|
+
raise ParserError(
|
|
347
|
+
f"Invalid string value: {type(value)}: {value}",
|
|
348
|
+
value=value,
|
|
349
|
+
expected_type=str,
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
|
|
292
353
|
def build_parser_inner(
|
|
293
354
|
parsed_type: type[T]
|
|
294
355
|
| typing.TypeVar
|
|
@@ -437,53 +498,20 @@ def build_parser_inner(
|
|
|
437
498
|
"Dict types only support two arguments for now",
|
|
438
499
|
expected_type=parsed_type,
|
|
439
500
|
)
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
501
|
+
key_type, value_type = args
|
|
502
|
+
return _build_parser_for_dict(
|
|
503
|
+
key_type=key_type,
|
|
504
|
+
value_type=value_type,
|
|
505
|
+
context=context,
|
|
506
|
+
type_var_map=type_var_map,
|
|
444
507
|
)
|
|
445
508
|
|
|
446
|
-
def key_parser(value: typing.Any) -> object:
|
|
447
|
-
inner = k_inner_parser(value)
|
|
448
|
-
if (
|
|
449
|
-
isinstance(inner, str)
|
|
450
|
-
# enum keys and OpaqueData's would also have string value types,
|
|
451
|
-
# but their explicit type is not a string, thus shouldn't be converted
|
|
452
|
-
and args[0] is str
|
|
453
|
-
and context.options.is_api_encoding
|
|
454
|
-
):
|
|
455
|
-
return camel_to_snake_case(value)
|
|
456
|
-
return inner
|
|
457
|
-
|
|
458
|
-
v_parser = build_parser_inner(args[1], context, type_var_map)
|
|
459
|
-
|
|
460
|
-
def parse_dict(value: typing.Any) -> typing.Any:
|
|
461
|
-
return origin((key_parser(k), v_parser(v)) for k, v in value.items())
|
|
462
|
-
|
|
463
|
-
return parse_dict
|
|
464
|
-
|
|
465
509
|
if origin == typing.Literal:
|
|
466
510
|
valid_values: set[T] = set(typing.get_args(parsed_type))
|
|
467
511
|
return lambda value: _invoke_membership_parser(valid_values, value)
|
|
468
512
|
|
|
469
513
|
if parsed_type is int:
|
|
470
|
-
#
|
|
471
|
-
# e.g. (1) 1e4 => 1000, (2) 3.0 => 3
|
|
472
|
-
|
|
473
|
-
def parse_int(value: typing.Any) -> int:
|
|
474
|
-
if isinstance(value, str):
|
|
475
|
-
assert "_" not in value, (
|
|
476
|
-
"numbers with underscores not considered integers"
|
|
477
|
-
)
|
|
478
|
-
|
|
479
|
-
dec_value = Decimal(value)
|
|
480
|
-
int_value = int(dec_value)
|
|
481
|
-
assert int_value == dec_value, (
|
|
482
|
-
f"value ({value}) cannot be parsed to int without discarding precision"
|
|
483
|
-
)
|
|
484
|
-
return int_value
|
|
485
|
-
|
|
486
|
-
return parse_int # type: ignore[return-value]
|
|
514
|
+
return _parse_int # type: ignore[return-value]
|
|
487
515
|
|
|
488
516
|
if parsed_type is datetime.datetime:
|
|
489
517
|
|
|
@@ -511,19 +539,7 @@ def build_parser_inner(
|
|
|
511
539
|
# MyPy: It's unclear why `parsed_type in (str, OpaqueKey)` is flagged as invalid
|
|
512
540
|
# Thus an or statement is used instead, which isn't flagged as invalid.
|
|
513
541
|
if parsed_type is str or parsed_type is OpaqueKey:
|
|
514
|
-
|
|
515
|
-
def parse_str(value: typing.Any) -> str:
|
|
516
|
-
if isinstance(value, str):
|
|
517
|
-
return value
|
|
518
|
-
if isinstance(value, (Decimal, float, int)):
|
|
519
|
-
return str(value)
|
|
520
|
-
raise ParserError(
|
|
521
|
-
f"Invalid string value: {type(value)}: {value}",
|
|
522
|
-
value=value,
|
|
523
|
-
expected_type=str,
|
|
524
|
-
)
|
|
525
|
-
|
|
526
|
-
return parse_str # type: ignore[return-value]
|
|
542
|
+
return _parse_str # type: ignore[return-value]
|
|
527
543
|
|
|
528
544
|
if parsed_type in (float, Decimal):
|
|
529
545
|
numeric_type: type[Decimal | float] = (
|
|
@@ -636,6 +652,7 @@ def _build_parser_dataclass(
|
|
|
636
652
|
] = []
|
|
637
653
|
|
|
638
654
|
serial_class_data = get_serial_class_data(parsed_type)
|
|
655
|
+
dc_parse_fallbacks: dict[str, DataclassParseFallback] = {}
|
|
639
656
|
|
|
640
657
|
def parse(value: typing.Any) -> typing.Any:
|
|
641
658
|
# Use an exact type match to prevent base/derived class mismatches
|
|
@@ -656,10 +673,17 @@ def _build_parser_dataclass(
|
|
|
656
673
|
serialized_field_name,
|
|
657
674
|
dataclasses.MISSING,
|
|
658
675
|
)
|
|
676
|
+
parse_fallback = dc_parse_fallbacks.get(field.name)
|
|
659
677
|
if context.options.strict_property_parsing:
|
|
660
678
|
all_allowed_field_names.add(serialized_field_name)
|
|
679
|
+
if parse_fallback is not None:
|
|
680
|
+
all_allowed_field_names.add(parse_fallback.legacy_key)
|
|
661
681
|
field_value: typing.Any
|
|
662
|
-
if
|
|
682
|
+
if parse_fallback is not None and parse_fallback.applies(
|
|
683
|
+
value=value, field_raw_value=field_raw_value
|
|
684
|
+
):
|
|
685
|
+
field_value = parse_fallback.parse(value)
|
|
686
|
+
elif field_raw_value == dataclasses.MISSING:
|
|
663
687
|
if serial_class_data.has_parse_require(field.name):
|
|
664
688
|
raise ParserError(
|
|
665
689
|
"missing-required-field", field_name=field.name
|
|
@@ -726,4 +750,42 @@ def _build_parser_dataclass(
|
|
|
726
750
|
build_parser_inner(field_type_hint, context, type_var_map),
|
|
727
751
|
))
|
|
728
752
|
|
|
753
|
+
dc_parse_fallbacks.update(
|
|
754
|
+
_build_dataclass_parse_fallbacks(
|
|
755
|
+
parsed_type=parsed_type,
|
|
756
|
+
serial_class_data=serial_class_data,
|
|
757
|
+
context=context,
|
|
758
|
+
type_var_map=type_var_map,
|
|
759
|
+
)
|
|
760
|
+
)
|
|
761
|
+
|
|
729
762
|
return parser_function
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
def _build_dataclass_parse_fallbacks(
|
|
766
|
+
*,
|
|
767
|
+
parsed_type: type[DataclassT],
|
|
768
|
+
serial_class_data: SerialClassDataInspector[DataclassT],
|
|
769
|
+
context: ParserContext,
|
|
770
|
+
type_var_map: dict[typing.TypeVar, type],
|
|
771
|
+
) -> dict[str, DataclassParseFallback]:
|
|
772
|
+
field_names = {field.name for field in dataclasses.fields(parsed_type)}
|
|
773
|
+
dc_parse_fallbacks: dict[str, DataclassParseFallback] = {}
|
|
774
|
+
for field_name, parse_fallback in serial_class_data.get_parse_fallbacks().items():
|
|
775
|
+
assert field_name in field_names, (
|
|
776
|
+
f"parse fallback for {field_name!r}, which is not a field of {parsed_type}"
|
|
777
|
+
)
|
|
778
|
+
dc_parse_fallbacks[field_name] = DataclassParseFallback(
|
|
779
|
+
legacy_key=resolve_serialized_field_name(
|
|
780
|
+
serial_class_data=serial_class_data,
|
|
781
|
+
field_name=parse_fallback.legacy_field,
|
|
782
|
+
source_encoding=context.options.encoding,
|
|
783
|
+
),
|
|
784
|
+
legacy_parser=build_parser_inner(
|
|
785
|
+
parse_fallback_legacy_type(parse_fallback.convert),
|
|
786
|
+
context,
|
|
787
|
+
type_var_map,
|
|
788
|
+
),
|
|
789
|
+
convert=parse_fallback.convert,
|
|
790
|
+
)
|
|
791
|
+
return dc_parse_fallbacks
|
{uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/__init__.py
RENAMED
|
@@ -12,6 +12,7 @@ from .serial_alias import (
|
|
|
12
12
|
serial_alias_annotation as serial_alias_annotation,
|
|
13
13
|
)
|
|
14
14
|
from .serial_class import (
|
|
15
|
+
ParseFallback as ParseFallback,
|
|
15
16
|
SerialClassDataInspector as SerialClassDataInspector,
|
|
16
17
|
get_serial_class_data as get_serial_class_data,
|
|
17
18
|
get_serial_string_enum_data as get_serial_string_enum_data,
|
{uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -3,11 +3,18 @@ from __future__ import annotations
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from collections.abc import Callable
|
|
5
5
|
from enum import StrEnum
|
|
6
|
-
from typing import Any, TypeVar, cast
|
|
6
|
+
from typing import Any, Generic, TypeVar, cast
|
|
7
7
|
|
|
8
8
|
from .annotation import SerialBase, SerialInspector, SerialType
|
|
9
9
|
|
|
10
10
|
ClassT = TypeVar("ClassT")
|
|
11
|
+
LegacyT = TypeVar("LegacyT")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclasses.dataclass(kw_only=True, frozen=True)
|
|
15
|
+
class ParseFallback(Generic[LegacyT]):
|
|
16
|
+
legacy_field: str
|
|
17
|
+
convert: Callable[[LegacyT], object]
|
|
11
18
|
|
|
12
19
|
|
|
13
20
|
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
@@ -17,6 +24,9 @@ class _SerialClassData(SerialBase):
|
|
|
17
24
|
to_string_values: set[str] = dataclasses.field(default_factory=set)
|
|
18
25
|
parse_require: set[str] = dataclasses.field(default_factory=set)
|
|
19
26
|
emit_api_overrides: dict[str, str] = dataclasses.field(default_factory=dict)
|
|
27
|
+
parse_fallbacks: dict[str, ParseFallback[Any]] = dataclasses.field(
|
|
28
|
+
default_factory=dict
|
|
29
|
+
)
|
|
20
30
|
named_type_path: str | None = None
|
|
21
31
|
|
|
22
32
|
|
|
@@ -30,6 +40,7 @@ def serial_class(
|
|
|
30
40
|
to_string_values: set[str] | None = None,
|
|
31
41
|
parse_require: set[str] | None = None,
|
|
32
42
|
emit_api_overrides: dict[str, str] | None = None,
|
|
43
|
+
parse_fallbacks: dict[str, ParseFallback[Any]] | None = None,
|
|
33
44
|
named_type_path: str | None = None,
|
|
34
45
|
is_dynamic_allowed: bool = False,
|
|
35
46
|
) -> Callable[[ClassT], ClassT]:
|
|
@@ -59,6 +70,12 @@ def serial_class(
|
|
|
59
70
|
storage encoding are unaffected. Replaces the default camelCase
|
|
60
71
|
conversion. Cannot be combined with `unconverted_keys` for the
|
|
61
72
|
same field; doing so raises at parse and serialize time.
|
|
73
|
+
@param parse_fallbacks
|
|
74
|
+
Maps Python field name -> a legacy field that the parser reads when
|
|
75
|
+
the input omits the field or sets it to null. The parser parses the
|
|
76
|
+
legacy value with the type of the first parameter of `convert`, and
|
|
77
|
+
stores the result of `convert` in the field. The legacy field is not
|
|
78
|
+
part of the type, so serialization never writes it.
|
|
62
79
|
@param named_type_path
|
|
63
80
|
The type_spec type-path to this type. This applies only to named types.
|
|
64
81
|
"""
|
|
@@ -70,6 +87,7 @@ def serial_class(
|
|
|
70
87
|
to_string_values=to_string_values or set(),
|
|
71
88
|
parse_require=parse_require or set(),
|
|
72
89
|
emit_api_overrides=emit_api_overrides or {},
|
|
90
|
+
parse_fallbacks=parse_fallbacks or {},
|
|
73
91
|
named_type_path=named_type_path,
|
|
74
92
|
from_decorator=True,
|
|
75
93
|
is_dynamic_allowed=is_dynamic_allowed,
|
|
@@ -103,6 +121,9 @@ class SerialClassDataInspector(SerialInspector[ClassT]):
|
|
|
103
121
|
def get_emit_api_override(self, key: str) -> str | None:
|
|
104
122
|
return self.current.emit_api_overrides.get(key)
|
|
105
123
|
|
|
124
|
+
def get_parse_fallbacks(self) -> dict[str, ParseFallback[Any]]:
|
|
125
|
+
return self.current.parse_fallbacks
|
|
126
|
+
|
|
106
127
|
|
|
107
128
|
def get_merged_serial_class_data(
|
|
108
129
|
type_class: SerialType[Any],
|
|
@@ -136,6 +157,10 @@ def get_merged_serial_class_data(
|
|
|
136
157
|
**curr_base_class_data.emit_api_overrides,
|
|
137
158
|
**base_class_data.emit_api_overrides,
|
|
138
159
|
},
|
|
160
|
+
parse_fallbacks={
|
|
161
|
+
**curr_base_class_data.parse_fallbacks,
|
|
162
|
+
**base_class_data.parse_fallbacks,
|
|
163
|
+
},
|
|
139
164
|
)
|
|
140
165
|
return base_class_data
|
|
141
166
|
|
|
@@ -17,11 +17,12 @@ import regex
|
|
|
17
17
|
from pkgs.serialization import Usage
|
|
18
18
|
|
|
19
19
|
from . import util
|
|
20
|
-
from .builder_types import CrossOutputPaths
|
|
20
|
+
from .builder_types import CrossOutputPaths, PythonParseFallback
|
|
21
21
|
from .non_discriminated_union_exceptions import NON_DISCRIMINATED_UNION_EXCEPTIONS
|
|
22
22
|
from .util import parse_type_str
|
|
23
23
|
|
|
24
24
|
RawDict = dict[Any, Any]
|
|
25
|
+
PYTHON_PARSE_FALLBACK_KEYS = {"legacy_property", "convert"}
|
|
25
26
|
EndpointKey = str
|
|
26
27
|
RE_TYPESCRIPT_ENUM_MEMBER_NAME = regex.compile(
|
|
27
28
|
r"^[$_\p{ID_Start}][$\p{ID_Continue}\u200c\u200d]*$"
|
|
@@ -312,6 +313,13 @@ def unwrap_literal_type(stype: SpecType) -> SpecTypeLiteralWrapper | None:
|
|
|
312
313
|
return None
|
|
313
314
|
|
|
314
315
|
|
|
316
|
+
def serialized_literal_value(*, literal: SpecTypeLiteralWrapper) -> str:
|
|
317
|
+
if isinstance(literal.value_type, SpecTypeDefnStringEnum):
|
|
318
|
+
assert isinstance(literal.value, str)
|
|
319
|
+
return literal.value_type.values[literal.value].value
|
|
320
|
+
return str(literal.value)
|
|
321
|
+
|
|
322
|
+
|
|
315
323
|
class SpecTypeDefn(SpecType):
|
|
316
324
|
"""
|
|
317
325
|
Base for type definitions. Do not instantiate this directly, use a derived class.
|
|
@@ -582,7 +590,7 @@ class SpecTypeDefnObject(SpecTypeDefn):
|
|
|
582
590
|
self.properties: dict[str, SpecProperty] | None = None
|
|
583
591
|
self._kw_only: bool = True
|
|
584
592
|
self.desc: str | None = None
|
|
585
|
-
self.
|
|
593
|
+
self.python_parse_fallbacks: dict[str, PythonParseFallback] = {}
|
|
586
594
|
|
|
587
595
|
def is_value_converted(self) -> bool:
|
|
588
596
|
if self.base and not self.base.is_value_converted():
|
|
@@ -615,7 +623,7 @@ class SpecTypeDefnObject(SpecTypeDefn):
|
|
|
615
623
|
"name_case",
|
|
616
624
|
"hashable",
|
|
617
625
|
"kw_only",
|
|
618
|
-
"
|
|
626
|
+
"python_parse_fallbacks",
|
|
619
627
|
],
|
|
620
628
|
)
|
|
621
629
|
type_base = builder.parse_type(self.namespace, data["type"], scope=self)
|
|
@@ -652,17 +660,47 @@ class SpecTypeDefnObject(SpecTypeDefn):
|
|
|
652
660
|
self._kw_only = data.get("kw_only", True)
|
|
653
661
|
self.desc = data.get("desc", None)
|
|
654
662
|
|
|
655
|
-
|
|
656
|
-
if
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
663
|
+
python_parse_fallbacks = data.get("python_parse_fallbacks")
|
|
664
|
+
if python_parse_fallbacks is not None:
|
|
665
|
+
self.python_parse_fallbacks = self._process_python_parse_fallbacks(
|
|
666
|
+
builder, python_parse_fallbacks
|
|
667
|
+
)
|
|
668
|
+
|
|
669
|
+
def _process_python_parse_fallbacks(
|
|
670
|
+
self, builder: SpecBuilder, data: object
|
|
671
|
+
) -> dict[str, PythonParseFallback]:
|
|
672
|
+
builder.ensure(
|
|
673
|
+
isinstance(data, dict),
|
|
674
|
+
"python_parse_fallbacks: expected a mapping of property name to fallback",
|
|
675
|
+
)
|
|
676
|
+
assert isinstance(data, dict)
|
|
677
|
+
property_names = set(self.properties or {})
|
|
678
|
+
parse_fallbacks: dict[str, PythonParseFallback] = {}
|
|
679
|
+
for property_name, fallback_data in data.items():
|
|
680
|
+
builder.ensure(
|
|
681
|
+
property_name in property_names,
|
|
682
|
+
f"python_parse_fallbacks: {property_name} is not a property of this type",
|
|
683
|
+
)
|
|
660
684
|
builder.ensure(
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
f"
|
|
685
|
+
isinstance(fallback_data, dict)
|
|
686
|
+
and set(fallback_data.keys()) == PYTHON_PARSE_FALLBACK_KEYS,
|
|
687
|
+
f"python_parse_fallbacks: {property_name} needs exactly the keys {sorted(PYTHON_PARSE_FALLBACK_KEYS)}",
|
|
664
688
|
)
|
|
665
|
-
|
|
689
|
+
legacy_property = fallback_data["legacy_property"]
|
|
690
|
+
convert = fallback_data["convert"]
|
|
691
|
+
builder.ensure(
|
|
692
|
+
isinstance(legacy_property, str) and isinstance(convert, str),
|
|
693
|
+
f"python_parse_fallbacks: {property_name} legacy_property and convert must be strings",
|
|
694
|
+
)
|
|
695
|
+
builder.ensure_python_prepart_function(
|
|
696
|
+
namespace_name=self.namespace.name,
|
|
697
|
+
function_name=convert,
|
|
698
|
+
option_name="python_parse_fallbacks",
|
|
699
|
+
)
|
|
700
|
+
parse_fallbacks[property_name] = PythonParseFallback(
|
|
701
|
+
legacy_property=legacy_property, convert=convert
|
|
702
|
+
)
|
|
703
|
+
return parse_fallbacks
|
|
666
704
|
|
|
667
705
|
def is_kw_only(self) -> bool:
|
|
668
706
|
return self._kw_only
|
|
@@ -758,12 +796,7 @@ class SpecTypeDefnUnion(SpecTypeDefn):
|
|
|
758
796
|
prop_type = unwrap_literal_type(discriminator_type.spec_type)
|
|
759
797
|
assert prop_type is not None
|
|
760
798
|
assert prop_type.is_value_to_string()
|
|
761
|
-
|
|
762
|
-
if isinstance(value_type, SpecTypeDefnStringEnum):
|
|
763
|
-
assert isinstance(prop_type.value, str)
|
|
764
|
-
discriminant = value_type.values[prop_type.value].value
|
|
765
|
-
else:
|
|
766
|
-
discriminant = str(prop_type.value)
|
|
799
|
+
discriminant = serialized_literal_value(literal=prop_type)
|
|
767
800
|
assert discriminant not in self.discriminator_map, (
|
|
768
801
|
f"duplicated-discriminant, {discriminant} in {sub_type}"
|
|
769
802
|
)
|
|
@@ -1741,6 +1774,16 @@ class SpecBuilder:
|
|
|
1741
1774
|
print(msg)
|
|
1742
1775
|
raise BuilderError()
|
|
1743
1776
|
|
|
1777
|
+
def ensure_python_prepart_function(
|
|
1778
|
+
self, *, namespace_name: str, function_name: str, option_name: str
|
|
1779
|
+
) -> None:
|
|
1780
|
+
python_prepart = self.preparts["python"].get(namespace_name, "")
|
|
1781
|
+
def_prefix = f"def {function_name}"
|
|
1782
|
+
self.ensure(
|
|
1783
|
+
f"{def_prefix}(" in python_prepart or f"{def_prefix}[" in python_prepart,
|
|
1784
|
+
f"{option_name}: the {namespace_name} python prepart file must define {function_name}",
|
|
1785
|
+
)
|
|
1786
|
+
|
|
1744
1787
|
def prescan(self, namespace_path: str, data: RawDict) -> None:
|
|
1745
1788
|
assert namespace_path not in self.namespaces
|
|
1746
1789
|
namespace = SpecNamespace(namespace_path)
|
|
@@ -73,7 +73,7 @@ def _emit_type_io_ts_impl(ctx: EmitTypescriptContext, stype: builder.SpecType) -
|
|
|
73
73
|
missable_lines = []
|
|
74
74
|
for prop in stype.properties.values():
|
|
75
75
|
ref_type = refer_to_io_ts(ctx, prop.spec_type)
|
|
76
|
-
prop_name = ts_property_name(prop
|
|
76
|
+
prop_name = ts_property_name(prop)
|
|
77
77
|
if prop.extant == builder.PropertyExtant.missing:
|
|
78
78
|
# Unlike optional below, missing does not imply null is possible. They
|
|
79
79
|
# treated distinctly.
|