UncountablePythonSDK 0.0.19__tar.gz → 0.0.21__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.19/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.21}/PKG-INFO +4 -2
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21/UncountablePythonSDK.egg-info}/PKG-INFO +4 -2
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/SOURCES.txt +19 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/requires.txt +3 -1
- uncountablepythonsdk-0.0.21/examples/upload_files.py +19 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/actions_registry/__main__.py +35 -23
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/actions_registry/emit_typescript.py +71 -9
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/builder.py +13 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/config.py +1 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_open_api.py +11 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_open_api_util.py +1 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_python.py +241 -55
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/type_info/emit_type_info.py +129 -8
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pyproject.toml +3 -1
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/create_entities.yaml +12 -1
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/create_entity.yaml +12 -1
- uncountablepythonsdk-0.0.21/type_spec/external/api/entity/transition_entity_phase.yaml +44 -0
- uncountablepythonsdk-0.0.21/type_spec/external/api/permissions/set_core_permissions.yaml +69 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/associate_recipe_as_input.yaml +4 -4
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/create_recipe.yaml +2 -1
- uncountablepythonsdk-0.0.21/type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +16 -0
- uncountablepythonsdk-0.0.21/type_spec/external/api/recipes/edit_recipe_inputs.yaml +88 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_curve.yaml +4 -1
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipes_data.yaml +6 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/set_recipe_metadata.yaml +1 -0
- uncountablepythonsdk-0.0.21/type_spec/external/api/recipes/set_recipe_tags.yaml +62 -0
- uncountablepythonsdk-0.0.21/uncountable/core/__init__.py +4 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/core/client.py +11 -9
- uncountablepythonsdk-0.0.21/uncountable/core/file_upload.py +95 -0
- uncountablepythonsdk-0.0.21/uncountable/core/types.py +22 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/__init__.py +18 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/create_entities.py +1 -1
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/create_entity.py +1 -1
- uncountablepythonsdk-0.0.21/uncountable/types/api/entity/transition_entity_phase.py +66 -0
- uncountablepythonsdk-0.0.21/uncountable/types/api/permissions/set_core_permissions.py +89 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/associate_recipe_as_input.py +4 -3
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/create_recipe.py +1 -1
- uncountablepythonsdk-0.0.21/uncountable/types/api/recipes/disassociate_recipe_as_input.py +35 -0
- uncountablepythonsdk-0.0.21/uncountable/types/api/recipes/edit_recipe_inputs.py +107 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_curve.py +2 -1
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipes_data.py +2 -0
- uncountablepythonsdk-0.0.21/uncountable/types/api/recipes/set_recipe_tags.py +91 -0
- uncountablepythonsdk-0.0.21/uncountable/types/api/triggers/__init__.py +1 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/async_batch.py +9 -0
- uncountablepythonsdk-0.0.21/uncountable/types/async_batch_processor.py +154 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/client_base.py +113 -48
- uncountablepythonsdk-0.0.21/uncountable/types/permissions.py +46 -0
- uncountablepythonsdk-0.0.21/uncountable/types/post_base.py +30 -0
- uncountablepythonsdk-0.0.21/uncountable/types/recipe_inputs.py +30 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_metadata.py +2 -0
- uncountablepythonsdk-0.0.21/uncountable/types/recipe_workflow_steps.py +77 -0
- uncountablepythonsdk-0.0.19/uncountable/core/__init__.py +0 -3
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/README.md +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/examples/recipe-import/importer.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/batch/execute_batch.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/batch/execute_batch_load_async.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/get_entities_data.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/list_entities.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/set_values.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/id_source/list_id_source.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/id_source/match_id_source.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/create_inputs.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/get_input_data.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/get_input_names.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/get_inputs_data.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/outputs/get_output_data.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/outputs/get_output_names.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/project/get_projects.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/project/get_projects_data.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/create_recipes.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_links.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_names.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/type_spec/external/api/triggers/run_trigger.yaml +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/integration/types.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.19/uncountable/types/api/project → uncountablepythonsdk-0.0.21/uncountable/types/api/permissions}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19/uncountable/types/api/recipe_links → uncountablepythonsdk-0.0.21/uncountable/types/api/project}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.19/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.21/uncountable/types/api/recipe_links}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.19/uncountable/types/api/recipes → uncountablepythonsdk-0.0.21/uncountable/types/api/recipe_metadata}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.19/uncountable/types/api/triggers → uncountablepythonsdk-0.0.21/uncountable/types/api/recipes}/__init__.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21}/uncountable/types/workflows.py +0 -0
{uncountablepythonsdk-0.0.19/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.21}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.21
|
|
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
|
|
@@ -16,10 +16,12 @@ Classifier: Topic :: Utilities
|
|
|
16
16
|
Classifier: Typing :: Typed
|
|
17
17
|
Requires-Python: >=3.11
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: aiotus==0.1.15
|
|
20
|
+
Requires-Dist: aiohttp==3.9.5
|
|
19
21
|
Requires-Dist: requests==2.31.0
|
|
20
22
|
Requires-Dist: SQLAlchemy==1.4.52
|
|
21
23
|
Requires-Dist: APScheduler==3.10.4
|
|
22
|
-
Requires-Dist: python-dateutil==2.9.0
|
|
24
|
+
Requires-Dist: python-dateutil==2.9.0.post0
|
|
23
25
|
Requires-Dist: shelljob==0.6.3
|
|
24
26
|
Requires-Dist: PyYAML==6.0.1
|
|
25
27
|
Provides-Extra: test
|
{uncountablepythonsdk-0.0.19 → uncountablepythonsdk-0.0.21/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.21
|
|
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
|
|
@@ -16,10 +16,12 @@ Classifier: Topic :: Utilities
|
|
|
16
16
|
Classifier: Typing :: Typed
|
|
17
17
|
Requires-Python: >=3.11
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: aiotus==0.1.15
|
|
20
|
+
Requires-Dist: aiohttp==3.9.5
|
|
19
21
|
Requires-Dist: requests==2.31.0
|
|
20
22
|
Requires-Dist: SQLAlchemy==1.4.52
|
|
21
23
|
Requires-Dist: APScheduler==3.10.4
|
|
22
|
-
Requires-Dist: python-dateutil==2.9.0
|
|
24
|
+
Requires-Dist: python-dateutil==2.9.0.post0
|
|
23
25
|
Requires-Dist: shelljob==0.6.3
|
|
24
26
|
Requires-Dist: PyYAML==6.0.1
|
|
25
27
|
Provides-Extra: test
|
|
@@ -25,6 +25,7 @@ docs/static/favicons/manifest.json
|
|
|
25
25
|
docs/static/favicons/mstile-150x150.png
|
|
26
26
|
docs/static/favicons/safari-pinned-tab.svg
|
|
27
27
|
examples/create_entity.py
|
|
28
|
+
examples/upload_files.py
|
|
28
29
|
examples/recipe-import/importer.py
|
|
29
30
|
pkgs/__init__.py
|
|
30
31
|
pkgs/argument_parser/__init__.py
|
|
@@ -76,6 +77,7 @@ type_spec/external/api/entity/get_entities_data.yaml
|
|
|
76
77
|
type_spec/external/api/entity/list_entities.yaml
|
|
77
78
|
type_spec/external/api/entity/resolve_entity_ids.yaml
|
|
78
79
|
type_spec/external/api/entity/set_values.yaml
|
|
80
|
+
type_spec/external/api/entity/transition_entity_phase.yaml
|
|
79
81
|
type_spec/external/api/id_source/list_id_source.yaml
|
|
80
82
|
type_spec/external/api/id_source/match_id_source.yaml
|
|
81
83
|
type_spec/external/api/input_groups/get_input_group_names.yaml
|
|
@@ -87,6 +89,7 @@ type_spec/external/api/inputs/set_input_attribute_values.yaml
|
|
|
87
89
|
type_spec/external/api/outputs/get_output_data.yaml
|
|
88
90
|
type_spec/external/api/outputs/get_output_names.yaml
|
|
89
91
|
type_spec/external/api/outputs/resolve_output_conditions.yaml
|
|
92
|
+
type_spec/external/api/permissions/set_core_permissions.yaml
|
|
90
93
|
type_spec/external/api/project/get_projects.yaml
|
|
91
94
|
type_spec/external/api/project/get_projects_data.yaml
|
|
92
95
|
type_spec/external/api/recipe_links/create_recipe_link.yaml
|
|
@@ -95,6 +98,8 @@ type_spec/external/api/recipes/associate_recipe_as_input.yaml
|
|
|
95
98
|
type_spec/external/api/recipes/associate_recipe_as_lot.yaml
|
|
96
99
|
type_spec/external/api/recipes/create_recipe.yaml
|
|
97
100
|
type_spec/external/api/recipes/create_recipes.yaml
|
|
101
|
+
type_spec/external/api/recipes/disassociate_recipe_as_input.yaml
|
|
102
|
+
type_spec/external/api/recipes/edit_recipe_inputs.yaml
|
|
98
103
|
type_spec/external/api/recipes/get_curve.yaml
|
|
99
104
|
type_spec/external/api/recipes/get_recipe_calculations.yaml
|
|
100
105
|
type_spec/external/api/recipes/get_recipe_links.yaml
|
|
@@ -104,11 +109,14 @@ type_spec/external/api/recipes/get_recipes_data.yaml
|
|
|
104
109
|
type_spec/external/api/recipes/set_recipe_inputs.yaml
|
|
105
110
|
type_spec/external/api/recipes/set_recipe_metadata.yaml
|
|
106
111
|
type_spec/external/api/recipes/set_recipe_outputs.yaml
|
|
112
|
+
type_spec/external/api/recipes/set_recipe_tags.yaml
|
|
107
113
|
type_spec/external/api/triggers/run_trigger.yaml
|
|
108
114
|
uncountable/__init__.py
|
|
109
115
|
uncountable/py.typed
|
|
110
116
|
uncountable/core/__init__.py
|
|
111
117
|
uncountable/core/client.py
|
|
118
|
+
uncountable/core/file_upload.py
|
|
119
|
+
uncountable/core/types.py
|
|
112
120
|
uncountable/integration/__init__.py
|
|
113
121
|
uncountable/integration/construct_client.py
|
|
114
122
|
uncountable/integration/cron.py
|
|
@@ -122,6 +130,7 @@ uncountable/integration/executors/__init__.py
|
|
|
122
130
|
uncountable/integration/executors/script_executor.py
|
|
123
131
|
uncountable/types/__init__.py
|
|
124
132
|
uncountable/types/async_batch.py
|
|
133
|
+
uncountable/types/async_batch_processor.py
|
|
125
134
|
uncountable/types/base.py
|
|
126
135
|
uncountable/types/calculations.py
|
|
127
136
|
uncountable/types/chemical_structure.py
|
|
@@ -136,12 +145,16 @@ uncountable/types/identifier.py
|
|
|
136
145
|
uncountable/types/input_attributes.py
|
|
137
146
|
uncountable/types/inputs.py
|
|
138
147
|
uncountable/types/outputs.py
|
|
148
|
+
uncountable/types/permissions.py
|
|
139
149
|
uncountable/types/phases.py
|
|
150
|
+
uncountable/types/post_base.py
|
|
140
151
|
uncountable/types/recipe_identifiers.py
|
|
152
|
+
uncountable/types/recipe_inputs.py
|
|
141
153
|
uncountable/types/recipe_links.py
|
|
142
154
|
uncountable/types/recipe_metadata.py
|
|
143
155
|
uncountable/types/recipe_output_metadata.py
|
|
144
156
|
uncountable/types/recipe_tags.py
|
|
157
|
+
uncountable/types/recipe_workflow_steps.py
|
|
145
158
|
uncountable/types/response.py
|
|
146
159
|
uncountable/types/units.py
|
|
147
160
|
uncountable/types/users.py
|
|
@@ -159,6 +172,7 @@ uncountable/types/api/entity/get_entities_data.py
|
|
|
159
172
|
uncountable/types/api/entity/list_entities.py
|
|
160
173
|
uncountable/types/api/entity/resolve_entity_ids.py
|
|
161
174
|
uncountable/types/api/entity/set_values.py
|
|
175
|
+
uncountable/types/api/entity/transition_entity_phase.py
|
|
162
176
|
uncountable/types/api/id_source/__init__.py
|
|
163
177
|
uncountable/types/api/id_source/list_id_source.py
|
|
164
178
|
uncountable/types/api/id_source/match_id_source.py
|
|
@@ -174,6 +188,8 @@ uncountable/types/api/outputs/__init__.py
|
|
|
174
188
|
uncountable/types/api/outputs/get_output_data.py
|
|
175
189
|
uncountable/types/api/outputs/get_output_names.py
|
|
176
190
|
uncountable/types/api/outputs/resolve_output_conditions.py
|
|
191
|
+
uncountable/types/api/permissions/__init__.py
|
|
192
|
+
uncountable/types/api/permissions/set_core_permissions.py
|
|
177
193
|
uncountable/types/api/project/__init__.py
|
|
178
194
|
uncountable/types/api/project/get_projects.py
|
|
179
195
|
uncountable/types/api/project/get_projects_data.py
|
|
@@ -186,6 +202,8 @@ uncountable/types/api/recipes/associate_recipe_as_input.py
|
|
|
186
202
|
uncountable/types/api/recipes/associate_recipe_as_lot.py
|
|
187
203
|
uncountable/types/api/recipes/create_recipe.py
|
|
188
204
|
uncountable/types/api/recipes/create_recipes.py
|
|
205
|
+
uncountable/types/api/recipes/disassociate_recipe_as_input.py
|
|
206
|
+
uncountable/types/api/recipes/edit_recipe_inputs.py
|
|
189
207
|
uncountable/types/api/recipes/get_curve.py
|
|
190
208
|
uncountable/types/api/recipes/get_recipe_calculations.py
|
|
191
209
|
uncountable/types/api/recipes/get_recipe_links.py
|
|
@@ -195,5 +213,6 @@ uncountable/types/api/recipes/get_recipes_data.py
|
|
|
195
213
|
uncountable/types/api/recipes/set_recipe_inputs.py
|
|
196
214
|
uncountable/types/api/recipes/set_recipe_metadata.py
|
|
197
215
|
uncountable/types/api/recipes/set_recipe_outputs.py
|
|
216
|
+
uncountable/types/api/recipes/set_recipe_tags.py
|
|
198
217
|
uncountable/types/api/triggers/__init__.py
|
|
199
218
|
uncountable/types/api/triggers/run_trigger.py
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pprint import pprint
|
|
3
|
+
|
|
4
|
+
from uncountable import AuthDetailsApiKey, Client, MediaFileUpload
|
|
5
|
+
|
|
6
|
+
client = Client(
|
|
7
|
+
base_url="http://localhost:5000",
|
|
8
|
+
auth_details=AuthDetailsApiKey(
|
|
9
|
+
api_id=os.environ["UNC_API_ID"],
|
|
10
|
+
api_secret_key=os.environ["UNC_API_SECRET_KEY"],
|
|
11
|
+
),
|
|
12
|
+
)
|
|
13
|
+
uploaded = client.upload_files(
|
|
14
|
+
file_uploads=[
|
|
15
|
+
MediaFileUpload(path="/my/file/path.doc"),
|
|
16
|
+
MediaFileUpload(path="/my/file/path2.doc"),
|
|
17
|
+
]
|
|
18
|
+
)
|
|
19
|
+
pprint(uploaded)
|
|
@@ -14,7 +14,7 @@ from pkgs.type_spec import builder
|
|
|
14
14
|
from ...argument_parser import CachedParser
|
|
15
15
|
from ..emit_typescript_util import ts_name
|
|
16
16
|
from ..util import rewrite_file
|
|
17
|
-
from .emit_typescript import emit_action_definitions
|
|
17
|
+
from .emit_typescript import ActionDefinitionWithArgument, emit_action_definitions
|
|
18
18
|
|
|
19
19
|
key_name = "name"
|
|
20
20
|
key_icon = "icon"
|
|
@@ -61,11 +61,11 @@ def get_action_registry_files_info() -> list[ActionRegistryFileInfo]:
|
|
|
61
61
|
|
|
62
62
|
def main() -> None:
|
|
63
63
|
files_info = get_action_registry_files_info()
|
|
64
|
-
action_definitions: defaultdict[str, list[
|
|
64
|
+
action_definitions: defaultdict[str, list[ActionDefinitionWithArgument]] = (
|
|
65
65
|
defaultdict(list)
|
|
66
66
|
)
|
|
67
|
-
all_action_definitions: list[actions_registry_t.
|
|
68
|
-
|
|
67
|
+
all_action_definitions: list[actions_registry_t.ActionDefinitionInternal] = []
|
|
68
|
+
action_definitions_with_arguments_list: list[ActionDefinitionWithArgument] = []
|
|
69
69
|
for file_info in files_info:
|
|
70
70
|
in_action_definitions = action_definition_parser.parse_yaml_file(
|
|
71
71
|
file_info.filepath
|
|
@@ -79,29 +79,41 @@ def main() -> None:
|
|
|
79
79
|
modules.append(file_info.filename)
|
|
80
80
|
|
|
81
81
|
module_str = "_".join(modules)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
action_definition = actions_registry_t.ActionDefinitionInternal(
|
|
83
|
+
name=definition.name,
|
|
84
|
+
short_description=definition.short_description,
|
|
85
|
+
description=definition.description,
|
|
86
|
+
icon=definition.icon,
|
|
87
|
+
ref_name=ref_name,
|
|
88
|
+
module=actions_registry_t.ActionsRegistryModule(
|
|
89
|
+
ts_name(module_str, name_case=builder.NameCase.convert)
|
|
90
|
+
),
|
|
91
|
+
visibility_scope=[
|
|
92
|
+
actions_registry_t.ActionDefinitionVisibilityScope(item)
|
|
93
|
+
for item in definition.visibility_scope
|
|
94
|
+
]
|
|
95
|
+
if definition.visibility_scope is not None
|
|
96
|
+
else None,
|
|
97
|
+
)
|
|
98
|
+
action_definitions_with_arguments_list.append(
|
|
99
|
+
ActionDefinitionWithArgument(
|
|
100
|
+
module=module_str,
|
|
88
101
|
ref_name=ref_name,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
),
|
|
92
|
-
visibility_scope=[
|
|
93
|
-
actions_registry_t.ActionDefinitionVisibilityScope(item)
|
|
94
|
-
for item in definition.visibility_scope
|
|
95
|
-
]
|
|
96
|
-
if definition.visibility_scope is not None
|
|
97
|
-
else None,
|
|
102
|
+
arguments=definition.arguments,
|
|
103
|
+
definition=action_definition,
|
|
98
104
|
)
|
|
99
105
|
)
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
all_action_definitions.append(action_definition)
|
|
107
|
+
action_definitions_with_arguments_list = sorted(
|
|
108
|
+
action_definitions_with_arguments_list,
|
|
109
|
+
key=lambda item: (item.module, item.ref_name),
|
|
102
110
|
)
|
|
103
|
-
|
|
104
|
-
|
|
111
|
+
|
|
112
|
+
for action_definition_with_argument in action_definitions_with_arguments_list:
|
|
113
|
+
action_definitions[action_definition_with_argument.module].append(
|
|
114
|
+
action_definition_with_argument
|
|
115
|
+
)
|
|
116
|
+
|
|
105
117
|
ts_content = emit_action_definitions(action_definitions)
|
|
106
118
|
rewrite_file(
|
|
107
119
|
"main/site/js/materials/base/actions_registry/action_definitions.tsx",
|
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
import io
|
|
2
2
|
from collections import defaultdict
|
|
3
|
+
from dataclasses import dataclass
|
|
3
4
|
|
|
4
5
|
from main.base.types import actions_registry_t
|
|
5
6
|
|
|
6
7
|
from ...type_spec import builder
|
|
7
|
-
from ..emit_typescript_util import
|
|
8
|
+
from ..emit_typescript_util import (
|
|
9
|
+
INDENT,
|
|
10
|
+
MODIFY_NOTICE,
|
|
11
|
+
resolve_namespace_ref,
|
|
12
|
+
ts_name,
|
|
13
|
+
ts_type_name,
|
|
14
|
+
)
|
|
8
15
|
from ..util import encode_common_string
|
|
9
16
|
|
|
10
17
|
|
|
11
|
-
def _action_symbol_name(
|
|
18
|
+
def _action_symbol_name(
|
|
19
|
+
action_definition: actions_registry_t.ActionDefinitionInternal,
|
|
20
|
+
) -> str:
|
|
12
21
|
return f"{ts_name(action_definition.ref_name, name_case=builder.NameCase.convert)}"
|
|
13
22
|
|
|
14
23
|
|
|
24
|
+
def _action_type_name(ref_name: str) -> str:
|
|
25
|
+
return f"{ts_type_name(ref_name)}"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _action_namespace_name(name: str) -> str:
|
|
29
|
+
return f"{resolve_namespace_ref(builder.SpecNamespace(name=name))}"
|
|
30
|
+
|
|
31
|
+
|
|
15
32
|
def _action_module_name_base(module: str) -> str:
|
|
16
33
|
return f"{ts_name(module, name_case=builder.NameCase.convert)}"
|
|
17
34
|
|
|
@@ -24,24 +41,54 @@ def _action_module_name(module: str) -> str:
|
|
|
24
41
|
return f"ActionsRegistryT.ActionsRegistryModule.{_action_module_name_base(module)}"
|
|
25
42
|
|
|
26
43
|
|
|
44
|
+
@dataclass(kw_only=True)
|
|
45
|
+
class ActionDefinitionWithArgument:
|
|
46
|
+
module: str
|
|
47
|
+
ref_name: str
|
|
48
|
+
arguments: str | None
|
|
49
|
+
definition: actions_registry_t.ActionDefinitionInternal
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _emit_imports(
|
|
53
|
+
action_definitions: defaultdict[str, list[ActionDefinitionWithArgument]],
|
|
54
|
+
) -> str:
|
|
55
|
+
out = io.StringIO()
|
|
56
|
+
namespaces = set()
|
|
57
|
+
for definitions in action_definitions.values():
|
|
58
|
+
for definition in definitions:
|
|
59
|
+
if definition.arguments is not None:
|
|
60
|
+
argument_parts = definition.arguments.split(".")
|
|
61
|
+
namespace = argument_parts[0]
|
|
62
|
+
namespaces.add(namespace)
|
|
63
|
+
namespaces_to_import = ", ".join(
|
|
64
|
+
sorted([f"type {_action_namespace_name(item)}" for item in list(namespaces)])
|
|
65
|
+
)
|
|
66
|
+
out.write(
|
|
67
|
+
f'import {{ ActionsRegistryT, {namespaces_to_import} }} from "unc_mat/types"\n\n'
|
|
68
|
+
)
|
|
69
|
+
out.write(MODIFY_NOTICE)
|
|
70
|
+
return out.getvalue()
|
|
71
|
+
|
|
72
|
+
|
|
27
73
|
def emit_action_definitions(
|
|
28
|
-
action_definitions: defaultdict[str, list[
|
|
74
|
+
action_definitions: defaultdict[str, list[ActionDefinitionWithArgument]],
|
|
29
75
|
) -> str:
|
|
30
76
|
out = io.StringIO()
|
|
31
77
|
out.write(MODIFY_NOTICE)
|
|
32
78
|
out.write("\n")
|
|
33
|
-
out.write(
|
|
34
|
-
out.write(MODIFY_NOTICE)
|
|
79
|
+
out.write(_emit_imports(action_definitions))
|
|
35
80
|
modules = []
|
|
36
81
|
for key, values in action_definitions.items():
|
|
37
82
|
out.write(MODIFY_NOTICE)
|
|
38
83
|
modules.append(key)
|
|
39
84
|
out.write(f"export const {_action_module_name_obj(key)} = {{\n")
|
|
40
|
-
for
|
|
85
|
+
for item in values:
|
|
41
86
|
out.write(MODIFY_NOTICE)
|
|
42
|
-
out.write(_emit_action_definition(
|
|
87
|
+
out.write(_emit_action_definition(item.definition, item.arguments, INDENT))
|
|
43
88
|
out.write("}\n")
|
|
44
89
|
|
|
90
|
+
out.write(MODIFY_NOTICE)
|
|
91
|
+
out.write("\n")
|
|
45
92
|
out.write(MODIFY_NOTICE)
|
|
46
93
|
out.write("\n")
|
|
47
94
|
out.write("export const actionDefinitions = {\n")
|
|
@@ -58,12 +105,27 @@ def emit_action_definitions(
|
|
|
58
105
|
return out.getvalue()
|
|
59
106
|
|
|
60
107
|
|
|
108
|
+
def _get_argument_type(arguments: str | None) -> str | None:
|
|
109
|
+
if arguments is None:
|
|
110
|
+
return None
|
|
111
|
+
argument_parts = arguments.split(".")
|
|
112
|
+
namespace = argument_parts[0]
|
|
113
|
+
type_name = argument_parts[1]
|
|
114
|
+
if namespace is not None and type_name is not None:
|
|
115
|
+
return f"{_action_namespace_name(namespace)}.{type_name}"
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
|
|
61
119
|
def _emit_action_definition(
|
|
62
|
-
action_definition: actions_registry_t.
|
|
120
|
+
action_definition: actions_registry_t.ActionDefinitionInternal,
|
|
121
|
+
arguments: str | None,
|
|
122
|
+
indent: str,
|
|
63
123
|
) -> str:
|
|
64
124
|
out = io.StringIO()
|
|
65
125
|
|
|
66
126
|
sub_indent = indent + INDENT
|
|
127
|
+
argument_type = _get_argument_type(arguments)
|
|
128
|
+
argument_type = f"<{argument_type}>" if argument_type is not None else ""
|
|
67
129
|
out.write(f"{indent}{_action_symbol_name(action_definition)}: {{\n")
|
|
68
130
|
out.write(f"{sub_indent}name: {encode_common_string(action_definition.name)},\n")
|
|
69
131
|
if action_definition.icon is not None:
|
|
@@ -85,7 +147,7 @@ def _emit_action_definition(
|
|
|
85
147
|
out.write(
|
|
86
148
|
f"{sub_indent}visibilityScope: {_emit_visibility_scope(action_definition.visibility_scope)},\n"
|
|
87
149
|
)
|
|
88
|
-
out.write(f"{indent}}},\n")
|
|
150
|
+
out.write(f"{indent}}} as ActionsRegistryT.ActionDefinition{argument_type},\n")
|
|
89
151
|
return out.getvalue()
|
|
90
152
|
|
|
91
153
|
|
|
@@ -680,9 +680,11 @@ class SpecEndpoint:
|
|
|
680
680
|
path_basename: str
|
|
681
681
|
data_loader: bool
|
|
682
682
|
is_sdk: bool
|
|
683
|
+
is_beta: bool
|
|
683
684
|
# Don't emit TypeScript endpoint code
|
|
684
685
|
suppress_ts: bool
|
|
685
686
|
function: Optional[str]
|
|
687
|
+
async_batch_path: str | None = None
|
|
686
688
|
result_type: ResultType = ResultType.json
|
|
687
689
|
has_attachment: bool = False
|
|
688
690
|
desc: str | None = None
|
|
@@ -701,6 +703,8 @@ class SpecEndpoint:
|
|
|
701
703
|
"path",
|
|
702
704
|
"data_loader",
|
|
703
705
|
"is_sdk",
|
|
706
|
+
"is_beta",
|
|
707
|
+
"async_batch_path",
|
|
704
708
|
"function",
|
|
705
709
|
"suppress_ts",
|
|
706
710
|
"desc",
|
|
@@ -727,6 +731,15 @@ class SpecEndpoint:
|
|
|
727
731
|
assert isinstance(is_sdk, bool)
|
|
728
732
|
self.is_sdk = is_sdk
|
|
729
733
|
|
|
734
|
+
is_beta = data.get("is_beta", False)
|
|
735
|
+
assert isinstance(is_beta, bool)
|
|
736
|
+
self.is_beta = is_beta
|
|
737
|
+
|
|
738
|
+
async_batch_path = data.get("async_batch_path")
|
|
739
|
+
if async_batch_path is not None:
|
|
740
|
+
assert isinstance(async_batch_path, str)
|
|
741
|
+
self.async_batch_path = async_batch_path
|
|
742
|
+
|
|
730
743
|
self.function = data.get("function")
|
|
731
744
|
|
|
732
745
|
suppress_ts = data.get("suppress_ts", False)
|
|
@@ -56,6 +56,7 @@ class PythonConfig(BaseLanguageConfig):
|
|
|
56
56
|
emit_api_argument_lookup: bool = (
|
|
57
57
|
False # emit a lookup for api endpoint path to argument type.
|
|
58
58
|
)
|
|
59
|
+
emit_async_batch_processor: bool = False # emit the async batch wrapping functions
|
|
59
60
|
emit_client_class: bool = False # emit the base class for the api client
|
|
60
61
|
all_named_type_exports: bool = False # emit __all__ for all named type exports
|
|
61
62
|
sdk_endpoints_only: bool = False # only emit is_sdk endpoints
|
|
@@ -99,6 +99,9 @@ def emit_open_api(builder: builder.SpecBuilder, *, config: OpenAPIConfig) -> Non
|
|
|
99
99
|
for namespace in sorted(builder.namespaces.values(), key=lambda ns: ns.name):
|
|
100
100
|
ctx = EmitOpenAPIContext(namespace=namespace)
|
|
101
101
|
|
|
102
|
+
if ctx.namespace.endpoint is not None and ctx.namespace.endpoint.is_beta:
|
|
103
|
+
continue
|
|
104
|
+
|
|
102
105
|
if ctx.namespace.name == "base":
|
|
103
106
|
# TODO: add additional base defintions here
|
|
104
107
|
ctx.types["ObjectId"] = OpenAPIIntegerT()
|
|
@@ -153,6 +156,12 @@ def _emit_endpoint_parameters(typ: OpenAPIType | None) -> dict[str, list[dict[st
|
|
|
153
156
|
}
|
|
154
157
|
|
|
155
158
|
|
|
159
|
+
def _emit_is_beta(is_beta: bool) -> dict[str, bool]:
|
|
160
|
+
if is_beta:
|
|
161
|
+
return {"x-beta": True}
|
|
162
|
+
return {}
|
|
163
|
+
|
|
164
|
+
|
|
156
165
|
def _emit_namespace(
|
|
157
166
|
gctx: EmitOpenAPIGlobalContext,
|
|
158
167
|
ctx: EmitOpenAPIContext,
|
|
@@ -179,6 +188,7 @@ def _emit_namespace(
|
|
|
179
188
|
"summary": endpoint.summary,
|
|
180
189
|
"description": endpoint.description,
|
|
181
190
|
}
|
|
191
|
+
| _emit_is_beta(endpoint.is_beta)
|
|
182
192
|
| _emit_endpoint_parameters(argument_type)
|
|
183
193
|
| {
|
|
184
194
|
"responses": {
|
|
@@ -386,6 +396,7 @@ def _emit_endpoint(
|
|
|
386
396
|
tags=[tag_name],
|
|
387
397
|
summary=f"{'/'.join(namespace.path[path_cutoff:])}",
|
|
388
398
|
description=description,
|
|
399
|
+
is_beta=namespace.endpoint.is_beta,
|
|
389
400
|
)
|
|
390
401
|
|
|
391
402
|
|