UncountablePythonSDK 0.0.104__tar.gz → 0.0.109__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.104 → uncountablepythonsdk-0.0.109}/.github/workflows/publish.yml +1 -1
- {uncountablepythonsdk-0.0.104/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.109}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/requirements.txt +2 -2
- uncountablepythonsdk-0.0.109/examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/argument_parser/argument_parser.py +52 -17
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/_gdrive_session.py +1 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/annotation.py +3 -3
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/missing_sentry.py +1 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_alias.py +2 -2
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_class.py +1 -12
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_generic.py +1 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_union.py +3 -3
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization_util/serialization_helpers.py +4 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/builder.py +4 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/config.py +5 -2
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/cross_output_links.py +1 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_open_api_util.py +3 -3
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_python.py +1 -9
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/type_info/emit_type_info.py +1 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/util.py +5 -3
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/value_spec/__main__.py +7 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/value_spec/emit_python.py +2 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/job.py +6 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +1 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/lookup_entity.py +2 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/add_time_series_data.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -2
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_recipe_links.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/lock_recipes.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/unlock_recipes.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/client_base.py +21 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/client_config_t.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/entity_t.py +55 -21
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/field_values.py +4 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/field_values_t.py +53 -3
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/generic_upload_t.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/job_definition_t.py +0 -2
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_workflow_steps_t.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/response_t.py +0 -1
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/webhook_job.py +1 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/webhook_job_t.py +11 -0
- uncountablepythonsdk-0.0.104/examples/integration-server/jobs/materials_auto/example_wh.py +0 -19
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/README.md +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/files/download_file.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.104/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.109}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.109
|
|
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.104 → uncountablepythonsdk-0.0.109/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.109
|
|
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
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from uncountable.integration.job import JobArguments, WebhookJob, register_job
|
|
4
|
+
from uncountable.types import job_definition_t
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass(kw_only=True)
|
|
8
|
+
class ExampleWebhookPayload:
|
|
9
|
+
id: int
|
|
10
|
+
message: str
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register_job
|
|
14
|
+
class WebhookExample(WebhookJob[ExampleWebhookPayload]):
|
|
15
|
+
def run(
|
|
16
|
+
self, args: JobArguments, payload: ExampleWebhookPayload
|
|
17
|
+
) -> job_definition_t.JobResult:
|
|
18
|
+
args.logger.log_info(f"webhook invoked with payload: {payload}")
|
|
19
|
+
return job_definition_t.JobResult(success=True)
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def webhook_payload_type(self) -> type:
|
|
23
|
+
return ExampleWebhookPayload
|
|
@@ -58,7 +58,9 @@ class ParserOptions:
|
|
|
58
58
|
return self.encoding == SourceEncoding.API
|
|
59
59
|
|
|
60
60
|
@property
|
|
61
|
-
def
|
|
61
|
+
def allow_direct_type(self) -> bool:
|
|
62
|
+
"""This allows parsing from a DB column without having to check whether it's
|
|
63
|
+
the native format of the type, a JSON column, or a string encoding."""
|
|
62
64
|
return self.encoding == SourceEncoding.STORAGE
|
|
63
65
|
|
|
64
66
|
|
|
@@ -97,7 +99,23 @@ def is_missing(field_type: typing.Any) -> bool:
|
|
|
97
99
|
return not (len(args) == 0 or args[0] is not MissingSentryType)
|
|
98
100
|
|
|
99
101
|
|
|
100
|
-
def
|
|
102
|
+
def _has_field_default(field: dataclasses.Field[typing.Any]) -> bool:
|
|
103
|
+
return (
|
|
104
|
+
field.default != dataclasses.MISSING
|
|
105
|
+
and not isinstance(field.default, MissingSentryType)
|
|
106
|
+
) or field.default_factory != dataclasses.MISSING
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _get_field_default(
|
|
110
|
+
field: dataclasses.Field[typing.Any],
|
|
111
|
+
) -> typing.Any:
|
|
112
|
+
if field.default != dataclasses.MISSING:
|
|
113
|
+
return field.default
|
|
114
|
+
assert field.default_factory != dataclasses.MISSING
|
|
115
|
+
return field.default_factory()
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _invoke_tuple_parsers(
|
|
101
119
|
tuple_type: type[T],
|
|
102
120
|
arg_parsers: typing.Sequence[typing.Callable[[typing.Any], object]],
|
|
103
121
|
has_ellipsis: bool,
|
|
@@ -134,7 +152,7 @@ def _invoke_fallback_parsers(
|
|
|
134
152
|
) from ExceptionGroup("Fallback Parser Exception", exceptions)
|
|
135
153
|
|
|
136
154
|
|
|
137
|
-
def _invoke_membership_parser
|
|
155
|
+
def _invoke_membership_parser(
|
|
138
156
|
expected_values: set[T],
|
|
139
157
|
value: typing.Any,
|
|
140
158
|
) -> T:
|
|
@@ -149,13 +167,13 @@ def _invoke_membership_parser[T](
|
|
|
149
167
|
raise ValueError(f"Expected value from {expected_values} but got value {value}")
|
|
150
168
|
|
|
151
169
|
|
|
152
|
-
def _build_parser_discriminated_union
|
|
170
|
+
def _build_parser_discriminated_union(
|
|
153
171
|
context: ParserContext,
|
|
154
172
|
discriminator: str,
|
|
155
173
|
discriminator_map: dict[str, ParserFunction[T]],
|
|
156
174
|
) -> ParserFunction[T]:
|
|
157
175
|
def parse(value: typing.Any) -> typing.Any:
|
|
158
|
-
if context.options.
|
|
176
|
+
if context.options.allow_direct_type and dataclasses.is_dataclass(value):
|
|
159
177
|
discriminant = getattr(value, discriminator)
|
|
160
178
|
else:
|
|
161
179
|
discriminant = value.get(discriminator)
|
|
@@ -171,7 +189,7 @@ def _build_parser_discriminated_union[T](
|
|
|
171
189
|
return parse
|
|
172
190
|
|
|
173
191
|
|
|
174
|
-
def _build_parser_inner
|
|
192
|
+
def _build_parser_inner(
|
|
175
193
|
parsed_type: type[T],
|
|
176
194
|
context: ParserContext,
|
|
177
195
|
) -> ParserFunction[T]:
|
|
@@ -318,10 +336,22 @@ def _build_parser_inner[T](
|
|
|
318
336
|
return parse_int
|
|
319
337
|
|
|
320
338
|
if parsed_type is datetime:
|
|
321
|
-
|
|
339
|
+
|
|
340
|
+
def parse_datetime(value: typing.Any) -> T:
|
|
341
|
+
if context.options.allow_direct_type and isinstance(value, datetime):
|
|
342
|
+
return value # type: ignore
|
|
343
|
+
return dateutil.parser.isoparse(value) # type:ignore
|
|
344
|
+
|
|
345
|
+
return parse_datetime
|
|
322
346
|
|
|
323
347
|
if parsed_type is date:
|
|
324
|
-
|
|
348
|
+
|
|
349
|
+
def parse_date(value: typing.Any) -> T:
|
|
350
|
+
if context.options.allow_direct_type and isinstance(value, date):
|
|
351
|
+
return value # type:ignore
|
|
352
|
+
return date.fromisoformat(value) # type:ignore
|
|
353
|
+
|
|
354
|
+
return parse_date
|
|
325
355
|
|
|
326
356
|
# MyPy: It's unclear why `parsed_type in (str, OpaqueKey)` is flagged as invalid
|
|
327
357
|
# Thus an or statement is used instead, which isn't flagged as invalid.
|
|
@@ -369,7 +399,7 @@ def _build_parser_inner[T](
|
|
|
369
399
|
raise ValueError(f"Unhandled type {parsed_type}/{origin}")
|
|
370
400
|
|
|
371
401
|
|
|
372
|
-
def _build_parser_dataclass
|
|
402
|
+
def _build_parser_dataclass(
|
|
373
403
|
parsed_type: type[T],
|
|
374
404
|
context: ParserContext,
|
|
375
405
|
) -> ParserFunction[T]:
|
|
@@ -405,7 +435,7 @@ def _build_parser_dataclass[T](
|
|
|
405
435
|
|
|
406
436
|
def parse(value: typing.Any) -> typing.Any:
|
|
407
437
|
# Use an exact type match to prevent base/derived class mismatches
|
|
408
|
-
if context.options.
|
|
438
|
+
if context.options.allow_direct_type and type(value) is parsed_type:
|
|
409
439
|
return value
|
|
410
440
|
|
|
411
441
|
data: dict[typing.Any, typing.Any] = {}
|
|
@@ -420,10 +450,8 @@ def _build_parser_dataclass[T](
|
|
|
420
450
|
if field_raw_value == dataclasses.MISSING:
|
|
421
451
|
if serial_class_data.has_parse_require(field.name):
|
|
422
452
|
raise ValueError("missing-required-field", field.name)
|
|
423
|
-
if field
|
|
424
|
-
field_value = field
|
|
425
|
-
elif field.default_factory != dataclasses.MISSING:
|
|
426
|
-
field_value = field.default_factory()
|
|
453
|
+
if _has_field_default(field):
|
|
454
|
+
field_value = _get_field_default(field)
|
|
427
455
|
elif is_missing(field_type):
|
|
428
456
|
field_value = MissingSentryType()
|
|
429
457
|
elif is_optional(field_type):
|
|
@@ -435,6 +463,13 @@ def _build_parser_dataclass[T](
|
|
|
435
463
|
field_value = False
|
|
436
464
|
else:
|
|
437
465
|
raise ValueError("missing-value-for-field", field.name)
|
|
466
|
+
elif (
|
|
467
|
+
field_raw_value is None
|
|
468
|
+
and not is_optional(field_type)
|
|
469
|
+
and _has_field_default(field)
|
|
470
|
+
and not serial_class_data.has_parse_require(field.name)
|
|
471
|
+
):
|
|
472
|
+
field_value = _get_field_default(field)
|
|
438
473
|
elif serial_class_data.has_unconverted_value(field.name):
|
|
439
474
|
field_value = field_raw_value
|
|
440
475
|
else:
|
|
@@ -480,7 +515,7 @@ def _build_parser_dataclass[T](
|
|
|
480
515
|
_CACHE_MAP: dict[ParserOptions, ParserCache] = defaultdict(ParserCache)
|
|
481
516
|
|
|
482
517
|
|
|
483
|
-
def build_parser
|
|
518
|
+
def build_parser(
|
|
484
519
|
parsed_type: type[T],
|
|
485
520
|
options: ParserOptions,
|
|
486
521
|
) -> ParserFunction[T]:
|
|
@@ -502,7 +537,7 @@ def build_parser[T](
|
|
|
502
537
|
return built_parser
|
|
503
538
|
|
|
504
539
|
|
|
505
|
-
class ParserBase[T]
|
|
540
|
+
class ParserBase(ABC, typing.Generic[T]):
|
|
506
541
|
def parse_from_encoding(
|
|
507
542
|
self,
|
|
508
543
|
args: typing.Any,
|
|
@@ -533,7 +568,7 @@ class ParserBase[T](ABC):
|
|
|
533
568
|
return self.parse_storage(yaml.safe_load(fp))
|
|
534
569
|
|
|
535
570
|
|
|
536
|
-
class CachedParser[T]
|
|
571
|
+
class CachedParser(ParserBase[T], typing.Generic[T]):
|
|
537
572
|
def __init__(
|
|
538
573
|
self,
|
|
539
574
|
args: type[T],
|
|
@@ -63,7 +63,7 @@ def download_gdrive_file(
|
|
|
63
63
|
downloader = MediaIoBaseDownload(file_handler, file_request)
|
|
64
64
|
download_complete = False
|
|
65
65
|
while not download_complete:
|
|
66
|
-
|
|
66
|
+
_status, download_complete = downloader.next_chunk()
|
|
67
67
|
|
|
68
68
|
file_handler.seek(0)
|
|
69
69
|
file_data = file_handler.read()
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/annotation.py
RENAMED
|
@@ -16,7 +16,7 @@ class SerialBase:
|
|
|
16
16
|
from_decorator: bool = False
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def get_serial_annotation
|
|
19
|
+
def get_serial_annotation(parsed_type: type[T]) -> SerialBase | None:
|
|
20
20
|
if not hasattr(parsed_type, "__metadata__"):
|
|
21
21
|
return None
|
|
22
22
|
metadata = parsed_type.__metadata__ # type:ignore[attr-defined]
|
|
@@ -28,7 +28,7 @@ def get_serial_annotation[T](parsed_type: type[T]) -> SerialBase | None:
|
|
|
28
28
|
return serial
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class SerialInspector[T]:
|
|
31
|
+
class SerialInspector(typing.Generic[T]):
|
|
32
32
|
def __init__(self, parsed_type: type[T], serial_base: SerialBase) -> None:
|
|
33
33
|
self._parsed_type = parsed_type
|
|
34
34
|
self._serial_base = serial_base
|
|
@@ -53,7 +53,7 @@ class SerialInspector[T]:
|
|
|
53
53
|
return self._serial_base.is_dynamic_allowed
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
def unwrap_annotated
|
|
56
|
+
def unwrap_annotated(parsed_type: type[T]) -> type[T]:
|
|
57
57
|
"""
|
|
58
58
|
If the type is an annotated type then return the origin of it.
|
|
59
59
|
Otherwise return the original type.
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/missing_sentry.py
RENAMED
|
@@ -26,5 +26,5 @@ MISSING_SENTRY = MissingSentryType()
|
|
|
26
26
|
MissingType = Union[MissingSentryType, ClassT]
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def coalesce_missing_sentry
|
|
29
|
+
def coalesce_missing_sentry(value: MissingType[ClassT]) -> ClassT | None:
|
|
30
30
|
return None if isinstance(value, MissingSentryType) else value
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_alias.py
RENAMED
|
@@ -26,7 +26,7 @@ def serial_alias_annotation(
|
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def _get_serial_alias
|
|
29
|
+
def _get_serial_alias(parsed_type: type[T]) -> _SerialAlias | None:
|
|
30
30
|
serial = get_serial_annotation(parsed_type)
|
|
31
31
|
if not isinstance(serial, _SerialAlias):
|
|
32
32
|
return None
|
|
@@ -39,7 +39,7 @@ class SerialAliasInspector(SerialInspector[T]):
|
|
|
39
39
|
self._serial_alias = serial_alias
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
def get_serial_alias_data
|
|
42
|
+
def get_serial_alias_data(parsed_type: type[T]) -> SerialAliasInspector[T] | None:
|
|
43
43
|
serial = _get_serial_alias(parsed_type)
|
|
44
44
|
if serial is None:
|
|
45
45
|
return None
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -17,7 +17,6 @@ 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)
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
|
|
@@ -31,7 +30,6 @@ def serial_class(
|
|
|
31
30
|
parse_require: set[str] | None = None,
|
|
32
31
|
named_type_path: str | None = None,
|
|
33
32
|
is_dynamic_allowed: bool = False,
|
|
34
|
-
explicit_defaults: set[str] | None = None,
|
|
35
33
|
) -> Callable[[ClassT], ClassT]:
|
|
36
34
|
"""
|
|
37
35
|
An additional decorator to a dataclass that specifies serialization options.
|
|
@@ -54,9 +52,6 @@ def serial_class(
|
|
|
54
52
|
requiring them for the API input.
|
|
55
53
|
@param named_type_path
|
|
56
54
|
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.
|
|
60
55
|
"""
|
|
61
56
|
|
|
62
57
|
def decorate(orig_class: ClassT) -> ClassT:
|
|
@@ -68,7 +63,6 @@ def serial_class(
|
|
|
68
63
|
named_type_path=named_type_path,
|
|
69
64
|
from_decorator=True,
|
|
70
65
|
is_dynamic_allowed=is_dynamic_allowed,
|
|
71
|
-
explicit_defaults=explicit_defaults or set(),
|
|
72
66
|
)
|
|
73
67
|
return orig_class
|
|
74
68
|
|
|
@@ -96,9 +90,6 @@ class SerialClassDataInspector(SerialInspector[ClassT]):
|
|
|
96
90
|
def has_parse_require(self, key: str) -> bool:
|
|
97
91
|
return key in self.current.parse_require
|
|
98
92
|
|
|
99
|
-
def has_explicit_default(self, key: str) -> bool:
|
|
100
|
-
return key in self.current.explicit_defaults
|
|
101
|
-
|
|
102
93
|
|
|
103
94
|
def get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | None:
|
|
104
95
|
base_class_data = (
|
|
@@ -124,13 +115,11 @@ def get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | No
|
|
|
124
115
|
| curr_base_class_data.to_string_values,
|
|
125
116
|
parse_require=base_class_data.parse_require
|
|
126
117
|
| curr_base_class_data.parse_require,
|
|
127
|
-
explicit_defaults=base_class_data.explicit_defaults
|
|
128
|
-
| curr_base_class_data.explicit_defaults,
|
|
129
118
|
)
|
|
130
119
|
return base_class_data
|
|
131
120
|
|
|
132
121
|
|
|
133
|
-
def get_serial_class_data
|
|
122
|
+
def get_serial_class_data(
|
|
134
123
|
type_class: type[ClassT],
|
|
135
124
|
) -> SerialClassDataInspector[ClassT]:
|
|
136
125
|
return SerialClassDataInspector(
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_generic.py
RENAMED
|
@@ -6,7 +6,7 @@ from .serial_class import get_merged_serial_class_data
|
|
|
6
6
|
T = typing.TypeVar("T")
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def get_serial_data
|
|
9
|
+
def get_serial_data(parsed_type: type[T]) -> SerialInspector[T] | None:
|
|
10
10
|
serial = get_serial_annotation(parsed_type)
|
|
11
11
|
if serial is None:
|
|
12
12
|
serial = get_merged_serial_class_data(parsed_type)
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/serialization/serial_union.py
RENAMED
|
@@ -6,7 +6,7 @@ from .annotation import SerialBase, SerialInspector, get_serial_annotation
|
|
|
6
6
|
T = typing.TypeVar("T")
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class IdentityHashWrapper[T]:
|
|
9
|
+
class IdentityHashWrapper(typing.Generic[T]):
|
|
10
10
|
"""This allows unhashable types to be used in the SerialUnion, like dict.
|
|
11
11
|
Since we have only one copy of the types themselves, we rely on
|
|
12
12
|
object identity for the hashing."""
|
|
@@ -49,7 +49,7 @@ def serial_union_annotation(
|
|
|
49
49
|
)
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
def _get_serial_union
|
|
52
|
+
def _get_serial_union(parsed_type: type[T]) -> _SerialUnion | None:
|
|
53
53
|
serial = get_serial_annotation(parsed_type)
|
|
54
54
|
if not isinstance(serial, _SerialUnion):
|
|
55
55
|
return None
|
|
@@ -76,7 +76,7 @@ class SerialClassInspector(SerialInspector[T]):
|
|
|
76
76
|
return self._serial_union.discriminator_map.inner
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
def get_serial_union_data
|
|
79
|
+
def get_serial_union_data(parsed_type: type[T]) -> SerialClassInspector[T] | None:
|
|
80
80
|
serial = _get_serial_union(parsed_type)
|
|
81
81
|
if serial is None:
|
|
82
82
|
return None
|
|
@@ -12,6 +12,7 @@ from typing import (
|
|
|
12
12
|
Any,
|
|
13
13
|
ClassVar,
|
|
14
14
|
Protocol,
|
|
15
|
+
TypeVar,
|
|
15
16
|
Union,
|
|
16
17
|
overload,
|
|
17
18
|
)
|
|
@@ -33,12 +34,14 @@ if TYPE_CHECKING:
|
|
|
33
34
|
else:
|
|
34
35
|
JsonValue = Union[JsonScalar, dict[str, Any], list[Any]]
|
|
35
36
|
|
|
37
|
+
T = TypeVar("T")
|
|
38
|
+
|
|
36
39
|
|
|
37
40
|
class Dataclass(Protocol):
|
|
38
41
|
__dataclass_fields__: ClassVar[dict] # type: ignore[type-arg,unused-ignore]
|
|
39
42
|
|
|
40
43
|
|
|
41
|
-
def identity
|
|
44
|
+
def identity(x: T) -> T:
|
|
42
45
|
return x
|
|
43
46
|
|
|
44
47
|
|
|
@@ -398,7 +398,10 @@ class SpecTypeDefn(SpecType):
|
|
|
398
398
|
has_default = True
|
|
399
399
|
# IMPROVE: check the type against the ptype
|
|
400
400
|
default = default_spec
|
|
401
|
-
|
|
401
|
+
if extant == PropertyExtant.missing and explicit_default:
|
|
402
|
+
raise Exception(
|
|
403
|
+
f"cannot have extant missing and default for property {name}"
|
|
404
|
+
)
|
|
402
405
|
parse_require = False
|
|
403
406
|
literal = unwrap_literal_type(ptype)
|
|
404
407
|
if literal is not None:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from collections.abc import Callable, Mapping
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Self
|
|
4
|
+
from typing import Self, TypeVar
|
|
5
5
|
|
|
6
6
|
from pkgs.serialization import yaml
|
|
7
7
|
|
|
@@ -107,7 +107,10 @@ class Config:
|
|
|
107
107
|
open_api: OpenAPIConfig | None
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
T = TypeVar("T")
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _parse_language(config_class: type[T], raw_value: ConfigValueType) -> T:
|
|
111
114
|
assert isinstance(raw_value, dict), "expecting language config to have key/values."
|
|
112
115
|
return config_class(**raw_value)
|
|
113
116
|
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/cross_output_links.py
RENAMED
|
@@ -11,7 +11,7 @@ def get_python_stub_file_path(
|
|
|
11
11
|
) -> str | None:
|
|
12
12
|
if function_name is None:
|
|
13
13
|
return None
|
|
14
|
-
module_dir, file_name,
|
|
14
|
+
module_dir, file_name, _func_name = function_name.rsplit(".", 2)
|
|
15
15
|
module_path = os.path.relpath(module_dir.replace(".", "/"))
|
|
16
16
|
api_stub_file = f"{module_path}/{file_name}.py"
|
|
17
17
|
return api_stub_file
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/emit_open_api_util.py
RENAMED
|
@@ -14,9 +14,9 @@ from .open_api_util import OpenAPIType
|
|
|
14
14
|
|
|
15
15
|
MODIFY_NOTICE = "# DO NOT MODIFY -- This file is generated by type_spec"
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
GlobalContextInfo = dict[str, str | dict[str, str]]
|
|
18
|
+
TagGroupToNamedTags = dict[str, str | list[str]]
|
|
19
|
+
TagPathsToRef = dict[str, dict[str, str]]
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
@dataclass
|
|
@@ -697,7 +697,6 @@ class EmittedPropertiesMetadata:
|
|
|
697
697
|
unconverted_values: set[str]
|
|
698
698
|
to_string_values: set[str]
|
|
699
699
|
parse_require: set[str]
|
|
700
|
-
explicit_defaults: set[str]
|
|
701
700
|
|
|
702
701
|
|
|
703
702
|
def _emit_type_properties(
|
|
@@ -729,7 +728,6 @@ def _emit_properties(
|
|
|
729
728
|
unconverted_values: set[str] = set()
|
|
730
729
|
to_string_values: set[str] = set()
|
|
731
730
|
parse_require: set[str] = set()
|
|
732
|
-
explicit_defaults: set[str] = set()
|
|
733
731
|
|
|
734
732
|
if len(properties) > 0:
|
|
735
733
|
|
|
@@ -750,9 +748,6 @@ def _emit_properties(
|
|
|
750
748
|
if prop.parse_require:
|
|
751
749
|
parse_require.add(py_name)
|
|
752
750
|
|
|
753
|
-
if prop.explicit_default:
|
|
754
|
-
explicit_defaults.add(py_name)
|
|
755
|
-
|
|
756
751
|
ref_type = refer_to(ctx, stype)
|
|
757
752
|
default = None
|
|
758
753
|
if prop.extant == builder.PropertyExtant.missing:
|
|
@@ -796,7 +791,6 @@ def _emit_properties(
|
|
|
796
791
|
unconverted_values=unconverted_values,
|
|
797
792
|
to_string_values=to_string_values,
|
|
798
793
|
parse_require=parse_require,
|
|
799
|
-
explicit_defaults=explicit_defaults,
|
|
800
794
|
)
|
|
801
795
|
|
|
802
796
|
|
|
@@ -887,7 +881,6 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
887
881
|
unconverted_values = emitted_properties_metadata.unconverted_values
|
|
888
882
|
to_string_values = emitted_properties_metadata.to_string_values
|
|
889
883
|
parse_require = emitted_properties_metadata.parse_require
|
|
890
|
-
explicit_defaults = emitted_properties_metadata.explicit_defaults
|
|
891
884
|
|
|
892
885
|
_emit_generics(ctx, generics)
|
|
893
886
|
|
|
@@ -909,7 +902,6 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
909
902
|
write_values("unconverted_values", unconverted_values)
|
|
910
903
|
write_values("to_string_values", to_string_values)
|
|
911
904
|
write_values("parse_require", parse_require)
|
|
912
|
-
write_values("explicit_defaults", explicit_defaults)
|
|
913
905
|
|
|
914
906
|
ctx.out.write(")\n")
|
|
915
907
|
|
|
@@ -1192,7 +1184,7 @@ def _emit_api_stubs(*, builder: builder.SpecBuilder, config: PythonConfig) -> No
|
|
|
1192
1184
|
if endpoint_function is None:
|
|
1193
1185
|
continue
|
|
1194
1186
|
|
|
1195
|
-
module_dir, file_name,
|
|
1187
|
+
module_dir, file_name, _func_name = endpoint_function.rsplit(".", 2)
|
|
1196
1188
|
module_path = os.path.abspath(module_dir.replace(".", "/"))
|
|
1197
1189
|
api_stub_file = f"{module_path}/{file_name}.py"
|
|
1198
1190
|
if os.path.isfile(api_stub_file):
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import os
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Union
|
|
4
|
+
from typing import TypeVar, Union
|
|
5
5
|
|
|
6
6
|
import regex as re
|
|
7
7
|
|
|
8
|
+
T = TypeVar("T")
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
def rewrite_file(filename: str, content: str) -> bool:
|
|
10
12
|
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
|
@@ -154,7 +156,7 @@ def is_valid_property_name(name: str) -> bool:
|
|
|
154
156
|
return re_pattern_property_name.match(name) is not None
|
|
155
157
|
|
|
156
158
|
|
|
157
|
-
def check_fields
|
|
159
|
+
def check_fields(data: dict[str, T], allowed: list[str]) -> None:
|
|
158
160
|
for key in data:
|
|
159
161
|
if key not in allowed:
|
|
160
162
|
raise Exception(f"unexpected-field: {key}. Allowed: {allowed}")
|
|
@@ -178,7 +180,7 @@ def encode_common_string(value: str) -> str:
|
|
|
178
180
|
return rep
|
|
179
181
|
|
|
180
182
|
|
|
181
|
-
def unused
|
|
183
|
+
def unused(_arg: T) -> None:
|
|
182
184
|
"""
|
|
183
185
|
Identifies that an argument is intended not be used, as opposed to
|
|
184
186
|
simply forgotten, or a remnant. This can happen in patterned calls
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/pkgs/type_spec/value_spec/__main__.py
RENAMED
|
@@ -155,6 +155,7 @@ key_return = "return"
|
|
|
155
155
|
key_description = "description"
|
|
156
156
|
key_brief = "brief"
|
|
157
157
|
key_name = "name"
|
|
158
|
+
key_draft = "draft"
|
|
158
159
|
|
|
159
160
|
|
|
160
161
|
TypeT = TypeVar("TypeT")
|
|
@@ -229,6 +230,11 @@ def main() -> None:
|
|
|
229
230
|
|
|
230
231
|
brief = get_as(spec, key_brief, str)
|
|
231
232
|
description = get_as(spec, key_description, str)
|
|
233
|
+
draft = (
|
|
234
|
+
get_as(spec, key_draft, bool)
|
|
235
|
+
if spec.get(key_draft) is not None
|
|
236
|
+
else None
|
|
237
|
+
)
|
|
232
238
|
|
|
233
239
|
return_value = get(spec, key_return)
|
|
234
240
|
where.append("return")
|
|
@@ -245,6 +251,7 @@ def main() -> None:
|
|
|
245
251
|
type=convert_to_value_spec_type(parsed.return_type_path),
|
|
246
252
|
description=return_description,
|
|
247
253
|
),
|
|
254
|
+
draft=draft,
|
|
248
255
|
)
|
|
249
256
|
)
|
|
250
257
|
where.pop()
|
|
@@ -164,6 +164,8 @@ def _emit_function(function: value_spec_t.Function, indent: str) -> str:
|
|
|
164
164
|
f"{sub_indent}description={encode_common_string(function.description)},\n"
|
|
165
165
|
)
|
|
166
166
|
out.write(f"{sub_indent}brief={encode_common_string(function.brief)},\n")
|
|
167
|
+
if function.draft:
|
|
168
|
+
out.write(f"{sub_indent}draft={function.draft},\n")
|
|
167
169
|
out.write(
|
|
168
170
|
f"{sub_indent}return_value={_emit_function_return(function.return_value, sub_indent)},\n"
|
|
169
171
|
)
|
{uncountablepythonsdk-0.0.104 → uncountablepythonsdk-0.0.109}/uncountable/integration/job.py
RENAMED
|
@@ -85,3 +85,9 @@ class WebhookJob[WPT](Job[webhook_job_t.WebhookEventPayload]):
|
|
|
85
85
|
def register_job(cls: type[Job]) -> type[Job]:
|
|
86
86
|
cls._unc_job_registered = True
|
|
87
87
|
return cls
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class RunsheetWebhookJob(WebhookJob[webhook_job_t.RunsheetWebhookPayload]):
|
|
91
|
+
@property
|
|
92
|
+
def webhook_payload_type(self) -> type:
|
|
93
|
+
return webhook_job_t.RunsheetWebhookPayload
|
|
@@ -56,7 +56,7 @@ class DatastoreSqlite(Datastore):
|
|
|
56
56
|
)
|
|
57
57
|
session.execute(update_stmt)
|
|
58
58
|
session.flush()
|
|
59
|
-
# IMPROVE: python3
|
|
59
|
+
# IMPROVE: python3's sqlite does not support the RETURNING clause
|
|
60
60
|
select_stmt = select(QueuedJob.num_attempts).filter(
|
|
61
61
|
QueuedJob.id == queued_job_uuid
|
|
62
62
|
)
|
|
@@ -13,6 +13,7 @@ from pkgs.serialization import serial_union_annotation
|
|
|
13
13
|
from ... import async_batch_t
|
|
14
14
|
from ... import base_t
|
|
15
15
|
from ... import entity_t
|
|
16
|
+
from ... import field_values_t
|
|
16
17
|
from ... import identifier_t
|
|
17
18
|
|
|
18
19
|
__all__: list[str] = [
|
|
@@ -54,6 +55,7 @@ class LookupEntityQueryBase:
|
|
|
54
55
|
class LookupFieldArgumentValue:
|
|
55
56
|
field_key: identifier_t.IdentifierKey
|
|
56
57
|
field_value: base_t.JsonValue
|
|
58
|
+
value_resolution: field_values_t.ValueResolution = field_values_t.ValueResolution.DIRECT
|
|
57
59
|
|
|
58
60
|
|
|
59
61
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -45,7 +45,6 @@ class TimeSeriesDatum:
|
|
|
45
45
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
46
46
|
@serial_class(
|
|
47
47
|
named_type_path="sdk.api.recipes.add_time_series_data.Arguments",
|
|
48
|
-
explicit_defaults={"on_conflict"},
|
|
49
48
|
)
|
|
50
49
|
@dataclasses.dataclass(kw_only=True)
|
|
51
50
|
class Arguments:
|