UncountablePythonSDK 0.0.101__tar.gz → 0.0.104__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of UncountablePythonSDK might be problematic. Click here for more details.
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/.github/workflows/documentation.yml +9 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/.github/workflows/publish.yml +8 -2
- {uncountablepythonsdk-0.0.101/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.104}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/UncountablePythonSDK.egg-info/requires.txt +1 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/justfile +2 -2
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/integration-server/jobs/materials_auto/example_wh.py +4 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/integration-server/pyproject.toml +4 -4
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/argument_parser/__init__.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/argument_parser/argument_parser.py +30 -20
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/serial_class.py +21 -10
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/builder.py +3 -7
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/config.py +5 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_open_api.py +23 -13
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_open_api_util.py +0 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_python.py +13 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/type_info/__main__.py +3 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/type_info/emit_type_info.py +34 -5
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pyproject.toml +1 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/core/client.py +2 -2
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/telemetry.py +1 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/__init__.py +4 -0
- uncountablepythonsdk-0.0.104/uncountable/types/api/entity/lookup_entity.py +100 -0
- uncountablepythonsdk-0.0.104/uncountable/types/api/recipes/add_time_series_data.py +64 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/edit_recipe_inputs.py +2 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_recipe_links.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/lock_recipes.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/set_recipe_outputs.py +10 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/unlock_recipes.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/async_batch_processor.py +34 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/async_batch_t.py +2 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/client_base.py +26 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/client_config_t.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/entity_t.py +5 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/field_values.py +4 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/field_values_t.py +50 -1
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/generic_upload_t.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/job_definition_t.py +2 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_workflow_steps_t.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/response_t.py +1 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/README.md +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/annotation.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/serial_alias.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/serial_generic.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/cross_output_links.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/.github/workflows/documentation.yml
RENAMED
|
@@ -11,13 +11,21 @@ jobs:
|
|
|
11
11
|
steps:
|
|
12
12
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
13
13
|
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
|
|
14
|
+
with:
|
|
15
|
+
python-version: '3.12'
|
|
14
16
|
- uses: extractions/setup-crate@4993624604c307fbca528d28a3c8b60fa5ecc859 # v1
|
|
15
17
|
with:
|
|
16
18
|
repo: casey/just@0.10
|
|
19
|
+
- name: Set up UV
|
|
20
|
+
uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5
|
|
21
|
+
with:
|
|
22
|
+
version: "0.6.1"
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
enable-cache: true
|
|
17
25
|
- name: Install dependencies
|
|
18
26
|
run: |
|
|
19
27
|
# install the dependencies for the package
|
|
20
|
-
pip install .
|
|
28
|
+
uv pip install .
|
|
21
29
|
# install the dependencies for building the sphinx documentation
|
|
22
30
|
just -f docs/justfile docs-setup-python
|
|
23
31
|
- name: Sphinx build
|
|
@@ -24,10 +24,16 @@ jobs:
|
|
|
24
24
|
fetch-depth: 0
|
|
25
25
|
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
|
|
26
26
|
with:
|
|
27
|
-
python-version: '3.
|
|
27
|
+
python-version: '3.12'
|
|
28
|
+
- name: Set up UV
|
|
29
|
+
uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5
|
|
30
|
+
with:
|
|
31
|
+
version: "0.6.1"
|
|
32
|
+
python-version: "3.12"
|
|
33
|
+
enable-cache: true
|
|
28
34
|
- name: Install build dependencies
|
|
29
35
|
run: |
|
|
30
|
-
|
|
36
|
+
uv pip install --upgrade build
|
|
31
37
|
- name: Build distributions and wheels
|
|
32
38
|
run: |
|
|
33
39
|
python3 -m build
|
{uncountablepythonsdk-0.0.101/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.104}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.104
|
|
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,7 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.67.1
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
-
Requires-Dist: boto3-stubs[essential,ses]==1
|
|
41
|
+
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
42
|
Provides-Extra: test
|
|
43
43
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
44
44
|
Requires-Dist: ruff==0.*; extra == "test"
|
{uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.104
|
|
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,7 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.67.1
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
-
Requires-Dist: boto3-stubs[essential,ses]==1
|
|
41
|
+
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
42
|
Provides-Extra: test
|
|
43
43
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
44
44
|
Requires-Dist: ruff==0.*; extra == "test"
|
|
@@ -235,6 +235,7 @@ uncountable/types/api/entity/get_entities_data.py
|
|
|
235
235
|
uncountable/types/api/entity/grant_entity_permissions.py
|
|
236
236
|
uncountable/types/api/entity/list_entities.py
|
|
237
237
|
uncountable/types/api/entity/lock_entity.py
|
|
238
|
+
uncountable/types/api/entity/lookup_entity.py
|
|
238
239
|
uncountable/types/api/entity/resolve_entity_ids.py
|
|
239
240
|
uncountable/types/api/entity/set_entity_field_values.py
|
|
240
241
|
uncountable/types/api/entity/set_values.py
|
|
@@ -278,6 +279,7 @@ uncountable/types/api/recipe_metadata/__init__.py
|
|
|
278
279
|
uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py
|
|
279
280
|
uncountable/types/api/recipes/__init__.py
|
|
280
281
|
uncountable/types/api/recipes/add_recipe_to_project.py
|
|
282
|
+
uncountable/types/api/recipes/add_time_series_data.py
|
|
281
283
|
uncountable/types/api/recipes/archive_recipes.py
|
|
282
284
|
uncountable/types/api/recipes/associate_recipe_as_input.py
|
|
283
285
|
uncountable/types/api/recipes/associate_recipe_as_lot.py
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
docs-setup-python:
|
|
2
|
-
|
|
2
|
+
curl -LsSf https://astral.sh/uv/0.6.1/install.sh | sh
|
|
3
|
+
uv pip install -r requirements.txt
|
|
3
4
|
|
|
4
5
|
docs-clean:
|
|
5
6
|
rm -rf _build/
|
|
@@ -9,4 +10,3 @@ docs-build: docs-clean
|
|
|
9
10
|
|
|
10
11
|
docs-serve: docs-build
|
|
11
12
|
npx serve _build/dirhtml
|
|
12
|
-
|
|
@@ -13,3 +13,7 @@ class WebhookExample(WebhookJob):
|
|
|
13
13
|
def run(self, args: JobArguments, payload: typing.Any) -> JobResult:
|
|
14
14
|
args.logger.log_info(f"webhook invoked with payload: {payload}")
|
|
15
15
|
return JobResult(success=True)
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def webhook_payload_type(self) -> typing.Any:
|
|
19
|
+
return dict
|
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
|
12
12
|
"types-paramiko ==3.5.0.20240918",
|
|
13
13
|
"types-openpyxl == 3.*",
|
|
14
14
|
"types-pysftp == 0.*",
|
|
15
|
-
"types-pytz ==
|
|
15
|
+
"types-pytz ==2025.*",
|
|
16
16
|
"types-requests == 2.*",
|
|
17
17
|
"types-simplejson == 3.*",
|
|
18
18
|
"pandas-stubs",
|
|
@@ -173,9 +173,9 @@ lint.ignore = [
|
|
|
173
173
|
"SLOT000", # subclass of string should define slot. should add
|
|
174
174
|
"T201", # print. skip
|
|
175
175
|
"T203", # pprint. skip
|
|
176
|
-
"
|
|
177
|
-
"
|
|
178
|
-
"
|
|
176
|
+
"TC001", # move application import into type checking. skip
|
|
177
|
+
"TC002", # move third party import into type checking. consider
|
|
178
|
+
"TC003", # move library into type checking lbock. consider
|
|
179
179
|
"TD", # todo comments. skip
|
|
180
180
|
"TID252", # eliminate relative imports from parents. skip
|
|
181
181
|
"TRY002", # create your own exception. skip
|
{uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/argument_parser/__init__.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
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
|
+
from .argument_parser import ParserBase as ParserBase
|
|
3
4
|
from .argument_parser import ParserError as ParserError
|
|
4
5
|
from .argument_parser import ParserExtraFieldsError as ParserExtraFieldsError
|
|
5
6
|
from .argument_parser import ParserFunction as ParserFunction
|
|
@@ -4,6 +4,7 @@ import dataclasses
|
|
|
4
4
|
import math
|
|
5
5
|
import types
|
|
6
6
|
import typing
|
|
7
|
+
from abc import ABC, abstractmethod
|
|
7
8
|
from collections import defaultdict
|
|
8
9
|
from datetime import date, datetime
|
|
9
10
|
from decimal import Decimal
|
|
@@ -365,7 +366,7 @@ def _build_parser_inner[T](
|
|
|
365
366
|
context,
|
|
366
367
|
)
|
|
367
368
|
|
|
368
|
-
raise ValueError(f"Unhandled type {parsed_type}")
|
|
369
|
+
raise ValueError(f"Unhandled type {parsed_type}/{origin}")
|
|
369
370
|
|
|
370
371
|
|
|
371
372
|
def _build_parser_dataclass[T](
|
|
@@ -501,17 +502,7 @@ def build_parser[T](
|
|
|
501
502
|
return built_parser
|
|
502
503
|
|
|
503
504
|
|
|
504
|
-
class
|
|
505
|
-
def __init__(
|
|
506
|
-
self,
|
|
507
|
-
args: type[T],
|
|
508
|
-
strict_property_parsing: bool = False,
|
|
509
|
-
):
|
|
510
|
-
self.arguments = args
|
|
511
|
-
self.parser_api: ParserFunction[T] | None = None
|
|
512
|
-
self.parser_storage: ParserFunction[T] | None = None
|
|
513
|
-
self.strict_property_parsing = strict_property_parsing
|
|
514
|
-
|
|
505
|
+
class ParserBase[T](ABC):
|
|
515
506
|
def parse_from_encoding(
|
|
516
507
|
self,
|
|
517
508
|
args: typing.Any,
|
|
@@ -526,6 +517,33 @@ class CachedParser[T]:
|
|
|
526
517
|
case _:
|
|
527
518
|
typing.assert_never(source_encoding)
|
|
528
519
|
|
|
520
|
+
# IMPROVE: Args would be better typed as "object"
|
|
521
|
+
@abstractmethod
|
|
522
|
+
def parse_storage(self, args: typing.Any) -> T: ...
|
|
523
|
+
|
|
524
|
+
@abstractmethod
|
|
525
|
+
def parse_api(self, args: typing.Any) -> T: ...
|
|
526
|
+
|
|
527
|
+
def parse_yaml_file(self, path: str) -> T:
|
|
528
|
+
with open(path, encoding="utf-8") as data_in:
|
|
529
|
+
return self.parse_storage(yaml.safe_load(data_in))
|
|
530
|
+
|
|
531
|
+
def parse_yaml_resource(self, package: resources.Package, resource: str) -> T:
|
|
532
|
+
with resources.open_text(package, resource) as fp:
|
|
533
|
+
return self.parse_storage(yaml.safe_load(fp))
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
class CachedParser[T](ParserBase[T]):
|
|
537
|
+
def __init__(
|
|
538
|
+
self,
|
|
539
|
+
args: type[T],
|
|
540
|
+
strict_property_parsing: bool = False,
|
|
541
|
+
):
|
|
542
|
+
self.arguments = args
|
|
543
|
+
self.parser_api: ParserFunction[T] | None = None
|
|
544
|
+
self.parser_storage: ParserFunction[T] | None = None
|
|
545
|
+
self.strict_property_parsing = strict_property_parsing
|
|
546
|
+
|
|
529
547
|
def parse_api(self, args: typing.Any) -> T:
|
|
530
548
|
"""
|
|
531
549
|
Parses data coming from an API/Endpoint
|
|
@@ -557,11 +575,3 @@ class CachedParser[T]:
|
|
|
557
575
|
)
|
|
558
576
|
assert self.parser_storage is not None
|
|
559
577
|
return self.parser_storage(args)
|
|
560
|
-
|
|
561
|
-
def parse_yaml_file(self, path: str) -> T:
|
|
562
|
-
with open(path, encoding="utf-8") as data_in:
|
|
563
|
-
return self.parse_storage(yaml.safe_load(data_in))
|
|
564
|
-
|
|
565
|
-
def parse_yaml_resource(self, package: resources.Package, resource: str) -> T:
|
|
566
|
-
with resources.open_text(package, resource) as fp:
|
|
567
|
-
return self.parse_storage(yaml.safe_load(fp))
|
{uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -7,7 +7,7 @@ from typing import Any, TypeVar, cast
|
|
|
7
7
|
|
|
8
8
|
from .annotation import SerialBase, SerialInspector
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
ClassT = TypeVar("ClassT")
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
@@ -17,6 +17,7 @@ class _SerialClassData(SerialBase):
|
|
|
17
17
|
to_string_values: set[str] = dataclasses.field(default_factory=set)
|
|
18
18
|
parse_require: set[str] = dataclasses.field(default_factory=set)
|
|
19
19
|
named_type_path: str | None = None
|
|
20
|
+
explicit_defaults: set[str] = dataclasses.field(default_factory=set)
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
|
|
@@ -30,7 +31,8 @@ def serial_class(
|
|
|
30
31
|
parse_require: set[str] | None = None,
|
|
31
32
|
named_type_path: str | None = None,
|
|
32
33
|
is_dynamic_allowed: bool = False,
|
|
33
|
-
|
|
34
|
+
explicit_defaults: set[str] | None = None,
|
|
35
|
+
) -> Callable[[ClassT], ClassT]:
|
|
34
36
|
"""
|
|
35
37
|
An additional decorator to a dataclass that specifies serialization options.
|
|
36
38
|
|
|
@@ -52,9 +54,12 @@ def serial_class(
|
|
|
52
54
|
requiring them for the API input.
|
|
53
55
|
@param named_type_path
|
|
54
56
|
The type_spec type-path to this type. This applies only to named types.
|
|
57
|
+
@param explicit_defaults
|
|
58
|
+
Fields that have explicit defaults in the definition. This is useful for
|
|
59
|
+
falling back onto these defaults when the field is mandatory but receives a null value.
|
|
55
60
|
"""
|
|
56
61
|
|
|
57
|
-
def decorate(orig_class:
|
|
62
|
+
def decorate(orig_class: ClassT) -> ClassT:
|
|
58
63
|
cast(Any, orig_class).__unc_serial_data = _SerialClassData(
|
|
59
64
|
unconverted_keys=unconverted_keys or set(),
|
|
60
65
|
unconverted_values=unconverted_values or set(),
|
|
@@ -63,16 +68,17 @@ def serial_class(
|
|
|
63
68
|
named_type_path=named_type_path,
|
|
64
69
|
from_decorator=True,
|
|
65
70
|
is_dynamic_allowed=is_dynamic_allowed,
|
|
71
|
+
explicit_defaults=explicit_defaults or set(),
|
|
66
72
|
)
|
|
67
73
|
return orig_class
|
|
68
74
|
|
|
69
75
|
return decorate
|
|
70
76
|
|
|
71
77
|
|
|
72
|
-
class SerialClassDataInspector(SerialInspector[
|
|
78
|
+
class SerialClassDataInspector(SerialInspector[ClassT]):
|
|
73
79
|
def __init__(
|
|
74
80
|
self,
|
|
75
|
-
parsed_type: type[
|
|
81
|
+
parsed_type: type[ClassT],
|
|
76
82
|
current: _SerialClassData,
|
|
77
83
|
) -> None:
|
|
78
84
|
super().__init__(parsed_type, current)
|
|
@@ -90,6 +96,9 @@ class SerialClassDataInspector(SerialInspector[_ClassT]):
|
|
|
90
96
|
def has_parse_require(self, key: str) -> bool:
|
|
91
97
|
return key in self.current.parse_require
|
|
92
98
|
|
|
99
|
+
def has_explicit_default(self, key: str) -> bool:
|
|
100
|
+
return key in self.current.explicit_defaults
|
|
101
|
+
|
|
93
102
|
|
|
94
103
|
def get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | None:
|
|
95
104
|
base_class_data = (
|
|
@@ -115,13 +124,15 @@ def get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | No
|
|
|
115
124
|
| curr_base_class_data.to_string_values,
|
|
116
125
|
parse_require=base_class_data.parse_require
|
|
117
126
|
| curr_base_class_data.parse_require,
|
|
127
|
+
explicit_defaults=base_class_data.explicit_defaults
|
|
128
|
+
| curr_base_class_data.explicit_defaults,
|
|
118
129
|
)
|
|
119
130
|
return base_class_data
|
|
120
131
|
|
|
121
132
|
|
|
122
|
-
def get_serial_class_data[
|
|
123
|
-
type_class: type[
|
|
124
|
-
) -> SerialClassDataInspector[
|
|
133
|
+
def get_serial_class_data[ClassT](
|
|
134
|
+
type_class: type[ClassT],
|
|
135
|
+
) -> SerialClassDataInspector[ClassT]:
|
|
125
136
|
return SerialClassDataInspector(
|
|
126
137
|
type_class, get_merged_serial_class_data(type_class) or EMPTY_SERIAL_CLASS_DATA
|
|
127
138
|
)
|
|
@@ -135,12 +146,12 @@ class _SerialStringEnumData:
|
|
|
135
146
|
|
|
136
147
|
def serial_string_enum(
|
|
137
148
|
*, labels: dict[str, str] | None = None, deprecated: set[str] | None = None
|
|
138
|
-
) -> Callable[[
|
|
149
|
+
) -> Callable[[ClassT], ClassT]:
|
|
139
150
|
"""
|
|
140
151
|
A decorator for enums to provide serialization data, including labels.
|
|
141
152
|
"""
|
|
142
153
|
|
|
143
|
-
def decorate(orig_class:
|
|
154
|
+
def decorate(orig_class: ClassT) -> ClassT:
|
|
144
155
|
cast(Any, orig_class).__unc_serial_string_enum_data = _SerialStringEnumData(
|
|
145
156
|
labels=labels or {}, deprecated=deprecated or set()
|
|
146
157
|
)
|
|
@@ -26,7 +26,6 @@ class StabilityLevel(StrEnum):
|
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
28
|
draft = "draft"
|
|
29
|
-
alpha = "alpha"
|
|
30
29
|
beta = "beta"
|
|
31
30
|
stable = "stable"
|
|
32
31
|
|
|
@@ -63,6 +62,7 @@ class SpecProperty:
|
|
|
63
62
|
# Holds extra information that will be emitted along with type_info. The builder knows nothing
|
|
64
63
|
# about the contents of this information.
|
|
65
64
|
ext_info: Any = None
|
|
65
|
+
explicit_default: bool = False
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
class NameCase(StrEnum):
|
|
@@ -390,6 +390,7 @@ class SpecTypeDefn(SpecType):
|
|
|
390
390
|
ptype = builder.parse_type(self.namespace, data_type, scope=self)
|
|
391
391
|
|
|
392
392
|
default_spec = data.get("default", MISSING)
|
|
393
|
+
explicit_default = default_spec != MISSING
|
|
393
394
|
if default_spec == MISSING:
|
|
394
395
|
has_default = False
|
|
395
396
|
default = None
|
|
@@ -420,6 +421,7 @@ class SpecTypeDefn(SpecType):
|
|
|
420
421
|
parse_require=parse_require,
|
|
421
422
|
desc=data.get("desc", None),
|
|
422
423
|
ext_info=ext_info,
|
|
424
|
+
explicit_default=explicit_default,
|
|
423
425
|
)
|
|
424
426
|
finally:
|
|
425
427
|
builder.pop_where()
|
|
@@ -891,7 +893,6 @@ class SpecEndpoint:
|
|
|
891
893
|
method: RouteMethod
|
|
892
894
|
data_loader: bool
|
|
893
895
|
is_sdk: EndpointEmitType
|
|
894
|
-
is_beta: bool
|
|
895
896
|
stability_level: StabilityLevel | None
|
|
896
897
|
# Don't emit TypeScript endpoint code
|
|
897
898
|
suppress_ts: bool
|
|
@@ -920,7 +921,6 @@ class SpecEndpoint:
|
|
|
920
921
|
"path",
|
|
921
922
|
"data_loader",
|
|
922
923
|
"is_sdk",
|
|
923
|
-
"is_beta",
|
|
924
924
|
"stability_level",
|
|
925
925
|
"async_batch_path",
|
|
926
926
|
"function",
|
|
@@ -966,10 +966,6 @@ class SpecEndpoint:
|
|
|
966
966
|
assert account_type is None or isinstance(account_type, str)
|
|
967
967
|
self.account_type = account_type
|
|
968
968
|
|
|
969
|
-
is_beta = data.get("is_beta", False)
|
|
970
|
-
assert isinstance(is_beta, bool)
|
|
971
|
-
self.is_beta = is_beta
|
|
972
|
-
|
|
973
969
|
stability_level_raw = data.get("stability_level")
|
|
974
970
|
assert stability_level_raw is None or isinstance(stability_level_raw, str)
|
|
975
971
|
self.stability_level = (
|
|
@@ -67,6 +67,7 @@ class PythonConfig(BaseLanguageConfig):
|
|
|
67
67
|
emit_client_class: bool = False # emit the base class for the api client
|
|
68
68
|
all_named_type_exports: bool = False # emit __all__ for all named type exports
|
|
69
69
|
sdk_endpoints_only: bool = False # only emit is_sdk endpoints
|
|
70
|
+
type_info_output: str | None = None # folder for generated type info files
|
|
70
71
|
|
|
71
72
|
def __post_init__(self: Self) -> None:
|
|
72
73
|
self.routes_output = _parse_string_lookup(
|
|
@@ -78,6 +79,9 @@ class PythonConfig(BaseLanguageConfig):
|
|
|
78
79
|
else None
|
|
79
80
|
)
|
|
80
81
|
|
|
82
|
+
if self.type_info_output is not None:
|
|
83
|
+
self.type_info_output = os.path.abspath(self.type_info_output)
|
|
84
|
+
|
|
81
85
|
|
|
82
86
|
@dataclass(kw_only=True)
|
|
83
87
|
class OpenAPIConfig(BaseLanguageConfig):
|
|
@@ -103,7 +107,7 @@ class Config:
|
|
|
103
107
|
open_api: OpenAPIConfig | None
|
|
104
108
|
|
|
105
109
|
|
|
106
|
-
def _parse_language[
|
|
110
|
+
def _parse_language[T](config_class: type[T], raw_value: ConfigValueType) -> T:
|
|
107
111
|
assert isinstance(raw_value, dict), "expecting language config to have key/values."
|
|
108
112
|
return config_class(**raw_value)
|
|
109
113
|
|
{uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/emit_open_api.py
RENAMED
|
@@ -7,7 +7,7 @@ WORK-IN-PROGRESS, DON'T USE!
|
|
|
7
7
|
import dataclasses
|
|
8
8
|
import json
|
|
9
9
|
import re
|
|
10
|
-
from typing import Collection, cast
|
|
10
|
+
from typing import Collection, assert_never, cast
|
|
11
11
|
|
|
12
12
|
from pkgs.serialization import yaml
|
|
13
13
|
from pkgs.serialization_util import serialize_for_api
|
|
@@ -126,7 +126,11 @@ def emit_open_api(builder: builder.SpecBuilder, *, config: OpenAPIConfig) -> Non
|
|
|
126
126
|
for namespace in sorted(builder.namespaces.values(), key=lambda ns: ns.name):
|
|
127
127
|
ctx = EmitOpenAPIContext(namespace=namespace)
|
|
128
128
|
|
|
129
|
-
if
|
|
129
|
+
if (
|
|
130
|
+
ctx.namespace.endpoint is not None
|
|
131
|
+
and ctx.namespace.endpoint.stability_level
|
|
132
|
+
== EmitOpenAPIStabilityLevel.draft
|
|
133
|
+
):
|
|
130
134
|
continue
|
|
131
135
|
|
|
132
136
|
if ctx.namespace.name == "base":
|
|
@@ -252,18 +256,26 @@ def _emit_endpoint_parameters(
|
|
|
252
256
|
} | _emit_endpoint_parameter_examples(examples)
|
|
253
257
|
|
|
254
258
|
|
|
255
|
-
def _emit_is_beta(is_beta: bool) -> DictApiSchema:
|
|
256
|
-
if is_beta:
|
|
257
|
-
return {"x-beta": True}
|
|
258
|
-
return {}
|
|
259
|
-
|
|
260
|
-
|
|
261
259
|
def _emit_stability_level(
|
|
262
260
|
stability_level: EmitOpenAPIStabilityLevel | None,
|
|
263
261
|
) -> DictApiSchema:
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
262
|
+
stability_info: dict[str, ApiSchema] = {}
|
|
263
|
+
resolved_stability_level = (
|
|
264
|
+
stability_level
|
|
265
|
+
if stability_level is not None
|
|
266
|
+
else EmitOpenAPIStabilityLevel.stable
|
|
267
|
+
)
|
|
268
|
+
stability_info["x-stability-level"] = str(resolved_stability_level)
|
|
269
|
+
match resolved_stability_level:
|
|
270
|
+
case EmitOpenAPIStabilityLevel.draft:
|
|
271
|
+
stability_info["x-beta"] = True
|
|
272
|
+
case EmitOpenAPIStabilityLevel.beta:
|
|
273
|
+
stability_info["x-badges"] = [{"name": "Beta", "color": "DarkOrange"}]
|
|
274
|
+
case EmitOpenAPIStabilityLevel.stable:
|
|
275
|
+
pass
|
|
276
|
+
case _:
|
|
277
|
+
assert_never(stability_level)
|
|
278
|
+
return stability_info
|
|
267
279
|
|
|
268
280
|
|
|
269
281
|
def _emit_endpoint_request_body(
|
|
@@ -360,7 +372,6 @@ def _emit_namespace(
|
|
|
360
372
|
"summary": endpoint.summary,
|
|
361
373
|
}
|
|
362
374
|
| _emit_endpoint_description(endpoint.description, ctx.endpoint.guides)
|
|
363
|
-
| _emit_is_beta(endpoint.is_beta)
|
|
364
375
|
| _emit_stability_level(endpoint.stability_level)
|
|
365
376
|
| _emit_endpoint_parameters(endpoint, argument_type, ctx.endpoint.examples)
|
|
366
377
|
| _emit_endpoint_request_body(
|
|
@@ -579,7 +590,6 @@ def _emit_endpoint(
|
|
|
579
590
|
tags=[tag_name],
|
|
580
591
|
summary=f"{'/'.join(namespace.path[path_cutoff:])}",
|
|
581
592
|
description=description,
|
|
582
|
-
is_beta=namespace.endpoint.is_beta,
|
|
583
593
|
stability_level=namespace.endpoint.stability_level,
|
|
584
594
|
examples=[
|
|
585
595
|
EmitOpenAPIEndpointExample(
|
|
@@ -8,6 +8,7 @@ from . import builder, util
|
|
|
8
8
|
from .builder import EndpointEmitType, EndpointSpecificPath
|
|
9
9
|
from .config import PythonConfig
|
|
10
10
|
from .cross_output_links import get_path_links
|
|
11
|
+
from .emit_open_api_util import EmitOpenAPIStabilityLevel
|
|
11
12
|
|
|
12
13
|
INDENT = " "
|
|
13
14
|
LINE_BREAK = "\n"
|
|
@@ -601,7 +602,10 @@ def _emit_endpoint_invocation_function(
|
|
|
601
602
|
endpoint = namespace.endpoint
|
|
602
603
|
if endpoint is None:
|
|
603
604
|
return
|
|
604
|
-
if
|
|
605
|
+
if (
|
|
606
|
+
endpoint.is_sdk != EndpointEmitType.EMIT_ENDPOINT
|
|
607
|
+
or endpoint.stability_level == EmitOpenAPIStabilityLevel.draft
|
|
608
|
+
):
|
|
605
609
|
return
|
|
606
610
|
|
|
607
611
|
ctx.out.write("\n")
|
|
@@ -693,6 +697,7 @@ class EmittedPropertiesMetadata:
|
|
|
693
697
|
unconverted_values: set[str]
|
|
694
698
|
to_string_values: set[str]
|
|
695
699
|
parse_require: set[str]
|
|
700
|
+
explicit_defaults: set[str]
|
|
696
701
|
|
|
697
702
|
|
|
698
703
|
def _emit_type_properties(
|
|
@@ -724,6 +729,7 @@ def _emit_properties(
|
|
|
724
729
|
unconverted_values: set[str] = set()
|
|
725
730
|
to_string_values: set[str] = set()
|
|
726
731
|
parse_require: set[str] = set()
|
|
732
|
+
explicit_defaults: set[str] = set()
|
|
727
733
|
|
|
728
734
|
if len(properties) > 0:
|
|
729
735
|
|
|
@@ -744,6 +750,9 @@ def _emit_properties(
|
|
|
744
750
|
if prop.parse_require:
|
|
745
751
|
parse_require.add(py_name)
|
|
746
752
|
|
|
753
|
+
if prop.explicit_default:
|
|
754
|
+
explicit_defaults.add(py_name)
|
|
755
|
+
|
|
747
756
|
ref_type = refer_to(ctx, stype)
|
|
748
757
|
default = None
|
|
749
758
|
if prop.extant == builder.PropertyExtant.missing:
|
|
@@ -787,6 +796,7 @@ def _emit_properties(
|
|
|
787
796
|
unconverted_values=unconverted_values,
|
|
788
797
|
to_string_values=to_string_values,
|
|
789
798
|
parse_require=parse_require,
|
|
799
|
+
explicit_defaults=explicit_defaults,
|
|
790
800
|
)
|
|
791
801
|
|
|
792
802
|
|
|
@@ -877,6 +887,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
877
887
|
unconverted_values = emitted_properties_metadata.unconverted_values
|
|
878
888
|
to_string_values = emitted_properties_metadata.to_string_values
|
|
879
889
|
parse_require = emitted_properties_metadata.parse_require
|
|
890
|
+
explicit_defaults = emitted_properties_metadata.explicit_defaults
|
|
880
891
|
|
|
881
892
|
_emit_generics(ctx, generics)
|
|
882
893
|
|
|
@@ -898,6 +909,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
898
909
|
write_values("unconverted_values", unconverted_values)
|
|
899
910
|
write_values("to_string_values", to_string_values)
|
|
900
911
|
write_values("parse_require", parse_require)
|
|
912
|
+
write_values("explicit_defaults", explicit_defaults)
|
|
901
913
|
|
|
902
914
|
ctx.out.write(")\n")
|
|
903
915
|
|
{uncountablepythonsdk-0.0.101 → uncountablepythonsdk-0.0.104}/pkgs/type_spec/type_info/__main__.py
RENAMED
|
@@ -9,7 +9,7 @@ import sys
|
|
|
9
9
|
|
|
10
10
|
from ..config import parse_yaml_config
|
|
11
11
|
from ..load_types import load_types
|
|
12
|
-
from .emit_type_info import emit_type_info
|
|
12
|
+
from .emit_type_info import emit_type_info, emit_type_info_python
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def main() -> bool:
|
|
@@ -26,6 +26,8 @@ def main() -> bool:
|
|
|
26
26
|
|
|
27
27
|
assert config.typescript is not None
|
|
28
28
|
emit_type_info(builder, config.typescript.type_info_output)
|
|
29
|
+
if config.python.type_info_output is not None:
|
|
30
|
+
emit_type_info_python(builder, config.python.type_info_output)
|
|
29
31
|
|
|
30
32
|
return True
|
|
31
33
|
|
|
@@ -3,15 +3,15 @@ import dataclasses
|
|
|
3
3
|
import decimal
|
|
4
4
|
import io
|
|
5
5
|
import json
|
|
6
|
+
from enum import Enum
|
|
6
7
|
from typing import Any, cast
|
|
7
8
|
|
|
9
|
+
import yaml
|
|
10
|
+
|
|
8
11
|
from main.base.types import data_t, type_info_t
|
|
9
12
|
from main.base.types.base_t import PureJsonValue
|
|
10
13
|
from pkgs.argument_parser import CachedParser
|
|
11
|
-
from pkgs.serialization_util import
|
|
12
|
-
serialize_for_api,
|
|
13
|
-
serialize_for_storage,
|
|
14
|
-
)
|
|
14
|
+
from pkgs.serialization_util import serialize_for_api, serialize_for_storage
|
|
15
15
|
|
|
16
16
|
from .. import builder, util
|
|
17
17
|
from ..emit_typescript_util import MODIFY_NOTICE, ts_name
|
|
@@ -95,6 +95,35 @@ def emit_type_info(build: builder.SpecBuilder, output: str) -> None:
|
|
|
95
95
|
util.rewrite_file(f"{output}/type_map.ts", type_map_out.getvalue())
|
|
96
96
|
|
|
97
97
|
|
|
98
|
+
def _convert_value_for_yaml_dump(value: Any) -> Any:
|
|
99
|
+
if isinstance(value, Enum):
|
|
100
|
+
return value.value
|
|
101
|
+
elif isinstance(value, list):
|
|
102
|
+
return [_convert_value_for_yaml_dump(item) for item in value]
|
|
103
|
+
elif isinstance(value, dict):
|
|
104
|
+
return {k: _convert_value_for_yaml_dump(v) for k, v in value.items()}
|
|
105
|
+
elif isinstance(value, decimal.Decimal):
|
|
106
|
+
return str(value)
|
|
107
|
+
else:
|
|
108
|
+
return value
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def asdict_for_yaml_dump(dataclass_instance: Any) -> Any:
|
|
112
|
+
return {
|
|
113
|
+
k: _convert_value_for_yaml_dump(v)
|
|
114
|
+
for k, v in dataclasses.asdict(dataclass_instance).items()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def emit_type_info_python(build: builder.SpecBuilder, output: str) -> None:
|
|
119
|
+
type_map = _build_map_all(build)
|
|
120
|
+
|
|
121
|
+
stripped = _dict_null_strip(asdict_for_yaml_dump(type_map))
|
|
122
|
+
|
|
123
|
+
yaml_content = yaml.dump(stripped, default_flow_style=False, sort_keys=True)
|
|
124
|
+
util.rewrite_file(f"{output}/type_map.yaml", yaml_content)
|
|
125
|
+
|
|
126
|
+
|
|
98
127
|
@dataclasses.dataclass
|
|
99
128
|
class MapProperty:
|
|
100
129
|
api_name: str
|
|
@@ -106,7 +135,7 @@ class MapProperty:
|
|
|
106
135
|
desc: str | None
|
|
107
136
|
# We don't have typing on defaults yet, relying on emitters to check it. Limit
|
|
108
137
|
# use of this field, as it'll necessarily change when adding type info
|
|
109
|
-
default:
|
|
138
|
+
default: PureJsonValue
|
|
110
139
|
|
|
111
140
|
|
|
112
141
|
@dataclasses.dataclass
|