UncountablePythonSDK 0.0.92__tar.gz → 0.0.95__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.92/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.95}/PKG-INFO +2 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95/UncountablePythonSDK.egg-info}/PKG-INFO +2 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/UncountablePythonSDK.egg-info/SOURCES.txt +1 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/UncountablePythonSDK.egg-info/requires.txt +1 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/argument_parser/argument_parser.py +7 -7
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/_s3_session.py +2 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/annotation.py +3 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/missing_sentry.py +1 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/serial_alias.py +2 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/serial_class.py +1 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/serial_generic.py +1 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/serial_union.py +3 -3
- uncountablepythonsdk-0.0.95/pkgs/serialization_util/_env_flags.py +3 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization_util/serialization_helpers.py +5 -5
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/actions_registry/__main__.py +0 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/builder.py +25 -21
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/config.py +2 -5
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_open_api.py +1 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_python.py +44 -28
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_typescript.py +13 -6
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/parts/base.py.prepart +2 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/util.py +3 -5
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/value_spec/__main__.py +15 -5
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/value_spec/emit_python.py +5 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/value_spec/types.py +1 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pyproject.toml +2 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/core/client.py +14 -6
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/core/file_upload.py +5 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/job.py +2 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/types.py +1 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/server.py +4 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/__init__.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/batch/execute_batch.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/batch/execute_batch_load_async.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/create_entities.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/create_entity.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/get_entities_data.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/grant_entity_permissions.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/list_entities.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/lock_entity.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/resolve_entity_ids.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/set_entity_field_values.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/set_values.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/transition_entity_phase.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/unlock_entity.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/equipment/associate_equipment_input.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/field_options/upsert_field_options.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/files/download_file.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/id_source/list_id_source.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/id_source/match_id_source.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/input_groups/get_input_group_names.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/create_inputs.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/get_input_data.py +5 -6
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/get_input_names.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/get_inputs_data.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/set_input_category.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/set_input_subcategories.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/set_intermediate_type.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/material_families/update_entity_material_families.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/outputs/get_output_data.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/outputs/get_output_names.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/permissions/set_core_permissions.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/project/get_projects.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/project/get_projects_data.py +4 -5
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipe_links/create_recipe_link.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipe_links/remove_recipe_link.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/archive_recipes.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/create_recipe.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/create_recipes.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/edit_recipe_inputs.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_curve.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_recipe_links.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_recipe_names.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/get_recipes_data.py +13 -14
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/lock_recipes.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/set_recipe_inputs.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/set_recipe_output_annotations.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/set_recipe_outputs.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/set_recipe_tags.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/unarchive_recipes.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/unlock_recipes.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/triggers/run_trigger.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/uploader/invoke_uploader.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/async_batch.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/async_batch_processor.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/async_batch_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/async_jobs.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/async_jobs_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/auth_retrieval.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/auth_retrieval_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/base.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/base_t.py +2 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/calculations.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/calculations_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/chemical_structure.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/chemical_structure_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/client_base.py +29 -30
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/client_config.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/client_config_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/curves.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/curves_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/entity.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/entity_t.py +3 -4
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/experiment_groups.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/experiment_groups_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/field_values.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/field_values_t.py +6 -7
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/fields.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/fields_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/generic_upload.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/generic_upload_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/id_source.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/id_source_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/identifier.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/identifier_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/input_attributes.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/input_attributes_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/inputs.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/inputs_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/integration_server.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/integration_server_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/job_definition.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/job_definition_t.py +5 -6
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/outputs.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/outputs_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/overrides.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/overrides_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/permissions.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/permissions_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/phases.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/phases_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/post_base.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/post_base_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/queued_job.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/queued_job_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_identifiers.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_identifiers_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_inputs.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_inputs_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_links.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_links_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_metadata.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_metadata_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_output_metadata.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_output_metadata_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_tags.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_tags_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_workflow_steps.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipe_workflow_steps_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipes.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/recipes_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/response.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/response_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/secret_retrieval.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/secret_retrieval_t.py +2 -3
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/units.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/units_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/users.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/users_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/webhook_job.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/webhook_job_t.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/workflows.py +0 -1
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/workflows_t.py +1 -2
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/README.md +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/uncountable/types/api/uploader/__init__.py +0 -0
{uncountablepythonsdk-0.0.92/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.95}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.95
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.67.1
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
+
Requires-Dist: boto3-stubs[essential,ses]==1.36.4
|
|
41
42
|
Provides-Extra: test
|
|
42
43
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
43
44
|
Requires-Dist: ruff==0.*; extra == "test"
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.95
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.67.1
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
+
Requires-Dist: boto3-stubs[essential,ses]==1.36.4
|
|
41
42
|
Provides-Extra: test
|
|
42
43
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
43
44
|
Requires-Dist: ruff==0.*; extra == "test"
|
|
@@ -61,6 +61,7 @@ pkgs/serialization/serial_generic.py
|
|
|
61
61
|
pkgs/serialization/serial_union.py
|
|
62
62
|
pkgs/serialization/yaml.py
|
|
63
63
|
pkgs/serialization_util/__init__.py
|
|
64
|
+
pkgs/serialization_util/_env_flags.py
|
|
64
65
|
pkgs/serialization_util/_get_type_for_serialization.py
|
|
65
66
|
pkgs/serialization_util/convert_to_snakecase.py
|
|
66
67
|
pkgs/serialization_util/dataclasses.py
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/argument_parser/argument_parser.py
RENAMED
|
@@ -96,7 +96,7 @@ def is_missing(field_type: typing.Any) -> bool:
|
|
|
96
96
|
return not (len(args) == 0 or args[0] is not MissingSentryType)
|
|
97
97
|
|
|
98
98
|
|
|
99
|
-
def _invoke_tuple_parsers(
|
|
99
|
+
def _invoke_tuple_parsers[T](
|
|
100
100
|
tuple_type: type[T],
|
|
101
101
|
arg_parsers: typing.Sequence[typing.Callable[[typing.Any], object]],
|
|
102
102
|
has_ellipsis: bool,
|
|
@@ -133,7 +133,7 @@ def _invoke_fallback_parsers(
|
|
|
133
133
|
) from ExceptionGroup("Fallback Parser Exception", exceptions)
|
|
134
134
|
|
|
135
135
|
|
|
136
|
-
def _invoke_membership_parser(
|
|
136
|
+
def _invoke_membership_parser[T](
|
|
137
137
|
expected_values: set[T],
|
|
138
138
|
value: typing.Any,
|
|
139
139
|
) -> T:
|
|
@@ -148,7 +148,7 @@ def _invoke_membership_parser(
|
|
|
148
148
|
raise ValueError(f"Expected value from {expected_values} but got value {value}")
|
|
149
149
|
|
|
150
150
|
|
|
151
|
-
def _build_parser_discriminated_union(
|
|
151
|
+
def _build_parser_discriminated_union[T](
|
|
152
152
|
context: ParserContext,
|
|
153
153
|
discriminator: str,
|
|
154
154
|
discriminator_map: dict[str, ParserFunction[T]],
|
|
@@ -170,7 +170,7 @@ def _build_parser_discriminated_union(
|
|
|
170
170
|
return parse
|
|
171
171
|
|
|
172
172
|
|
|
173
|
-
def _build_parser_inner(
|
|
173
|
+
def _build_parser_inner[T](
|
|
174
174
|
parsed_type: type[T],
|
|
175
175
|
context: ParserContext,
|
|
176
176
|
) -> ParserFunction[T]:
|
|
@@ -368,7 +368,7 @@ def _build_parser_inner(
|
|
|
368
368
|
raise ValueError(f"Unhandled type {parsed_type}")
|
|
369
369
|
|
|
370
370
|
|
|
371
|
-
def _build_parser_dataclass(
|
|
371
|
+
def _build_parser_dataclass[T](
|
|
372
372
|
parsed_type: type[T],
|
|
373
373
|
context: ParserContext,
|
|
374
374
|
) -> ParserFunction[T]:
|
|
@@ -479,7 +479,7 @@ def _build_parser_dataclass(
|
|
|
479
479
|
_CACHE_MAP: dict[ParserOptions, ParserCache] = defaultdict(ParserCache)
|
|
480
480
|
|
|
481
481
|
|
|
482
|
-
def build_parser(
|
|
482
|
+
def build_parser[T](
|
|
483
483
|
parsed_type: type[T],
|
|
484
484
|
options: ParserOptions,
|
|
485
485
|
) -> ParserFunction[T]:
|
|
@@ -501,7 +501,7 @@ def build_parser(
|
|
|
501
501
|
return built_parser
|
|
502
502
|
|
|
503
503
|
|
|
504
|
-
class CachedParser
|
|
504
|
+
class CachedParser[T]:
|
|
505
505
|
def __init__(
|
|
506
506
|
self,
|
|
507
507
|
args: type[T],
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/filesystem_utils/_s3_session.py
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from io import BytesIO
|
|
2
2
|
|
|
3
3
|
from boto3.session import Session
|
|
4
|
+
from mypy_boto3_s3.service_resource import Bucket
|
|
4
5
|
|
|
5
6
|
from pkgs.filesystem_utils.file_type_utils import (
|
|
6
7
|
FileObjectData,
|
|
@@ -37,7 +38,7 @@ class S3Session(FileSystemSession):
|
|
|
37
38
|
aws_session_token=self.config.session_token,
|
|
38
39
|
)
|
|
39
40
|
|
|
40
|
-
self.bucket = s3_resource.Bucket(self.config.bucket_name)
|
|
41
|
+
self.bucket: Bucket | None = s3_resource.Bucket(self.config.bucket_name)
|
|
41
42
|
|
|
42
43
|
def __enter__(self) -> "S3Session":
|
|
43
44
|
self.start()
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/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(parsed_type: type[T]) -> SerialBase | None:
|
|
19
|
+
def get_serial_annotation[T](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(parsed_type: type[T]) -> SerialBase | None:
|
|
|
28
28
|
return serial
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class SerialInspector
|
|
31
|
+
class SerialInspector[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(typing.Generic[T]):
|
|
|
53
53
|
return self._serial_base.is_dynamic_allowed
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
def unwrap_annotated(parsed_type: type[T]) -> type[T]:
|
|
56
|
+
def unwrap_annotated[T](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.92 → uncountablepythonsdk-0.0.95}/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(value: MissingType[ClassT]) -> ClassT | None:
|
|
29
|
+
def coalesce_missing_sentry[ClassT](value: MissingType[ClassT]) -> ClassT | None:
|
|
30
30
|
return None if isinstance(value, MissingSentryType) else value
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/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(parsed_type: type[T]) -> _SerialAlias | None:
|
|
29
|
+
def _get_serial_alias[T](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(parsed_type: type[T]) -> SerialAliasInspector[T] | None:
|
|
42
|
+
def get_serial_alias_data[T](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.92 → uncountablepythonsdk-0.0.95}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -119,7 +119,7 @@ def get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | No
|
|
|
119
119
|
return base_class_data
|
|
120
120
|
|
|
121
121
|
|
|
122
|
-
def get_serial_class_data(
|
|
122
|
+
def get_serial_class_data[_ClassT](
|
|
123
123
|
type_class: type[_ClassT],
|
|
124
124
|
) -> SerialClassDataInspector[_ClassT]:
|
|
125
125
|
return SerialClassDataInspector(
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/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(parsed_type: type[T]) -> SerialInspector[T] | None:
|
|
9
|
+
def get_serial_data[T](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.92 → uncountablepythonsdk-0.0.95}/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
|
|
9
|
+
class IdentityHashWrapper[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(parsed_type: type[T]) -> _SerialUnion | None:
|
|
52
|
+
def _get_serial_union[T](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(parsed_type: type[T]) -> SerialClassInspector[T] | None:
|
|
79
|
+
def get_serial_union_data[T](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,7 +12,6 @@ from typing import (
|
|
|
12
12
|
Any,
|
|
13
13
|
ClassVar,
|
|
14
14
|
Protocol,
|
|
15
|
-
TypeVar,
|
|
16
15
|
Union,
|
|
17
16
|
overload,
|
|
18
17
|
)
|
|
@@ -24,6 +23,7 @@ from pkgs.serialization import (
|
|
|
24
23
|
get_serial_class_data,
|
|
25
24
|
)
|
|
26
25
|
|
|
26
|
+
from ._env_flags import USE_FASTJSON
|
|
27
27
|
from ._get_type_for_serialization import SerializationType, get_serialization_type
|
|
28
28
|
from .dataclasses import iterate_fields
|
|
29
29
|
|
|
@@ -34,14 +34,12 @@ if TYPE_CHECKING:
|
|
|
34
34
|
else:
|
|
35
35
|
JsonValue = Union[JsonScalar, dict[str, Any], list[Any]]
|
|
36
36
|
|
|
37
|
-
T = TypeVar("T")
|
|
38
|
-
|
|
39
37
|
|
|
40
38
|
class Dataclass(Protocol):
|
|
41
39
|
__dataclass_fields__: ClassVar[dict] # type: ignore[type-arg,unused-ignore]
|
|
42
40
|
|
|
43
41
|
|
|
44
|
-
def identity(x: T) -> T:
|
|
42
|
+
def identity[T](x: T) -> T:
|
|
45
43
|
return x
|
|
46
44
|
|
|
47
45
|
|
|
@@ -112,7 +110,9 @@ def _get_dataclass_conversion_lookups(dataclass_type: Any) -> DataclassConversio
|
|
|
112
110
|
if scd.has_to_string_value(key):
|
|
113
111
|
value_conversion_functions[key] = _to_string_value
|
|
114
112
|
elif scd.has_unconverted_value(key):
|
|
115
|
-
value_conversion_functions[key] =
|
|
113
|
+
value_conversion_functions[key] = (
|
|
114
|
+
serialize_for_storage if USE_FASTJSON else identity
|
|
115
|
+
)
|
|
116
116
|
else:
|
|
117
117
|
value_conversion_functions[key] = serialize_for_api
|
|
118
118
|
|
|
@@ -6,7 +6,6 @@ import os
|
|
|
6
6
|
import sys
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
from dataclasses import dataclass
|
|
9
|
-
from typing import TypeVar
|
|
10
9
|
|
|
11
10
|
from main.base.types import actions_registry_t
|
|
12
11
|
from pkgs.type_spec import builder
|
|
@@ -22,9 +21,6 @@ key_short_description = "short_description"
|
|
|
22
21
|
key_description = "description"
|
|
23
22
|
|
|
24
23
|
|
|
25
|
-
TypeT = TypeVar("TypeT")
|
|
26
|
-
|
|
27
|
-
|
|
28
24
|
class InvalidSpecException(Exception):
|
|
29
25
|
pass
|
|
30
26
|
|
|
@@ -901,16 +901,9 @@ class SpecEndpoint:
|
|
|
901
901
|
account_type: str | None
|
|
902
902
|
route_group: str | None
|
|
903
903
|
|
|
904
|
-
# to be deprecated in favor of path_per_api_endpoint:
|
|
905
|
-
# default function, path details
|
|
906
|
-
function: str | None
|
|
907
|
-
root: EndpointKey
|
|
908
|
-
path_root: str
|
|
909
|
-
path_dirname: str
|
|
910
|
-
path_basename: str
|
|
911
|
-
|
|
912
904
|
# function, path details per api endpoint
|
|
913
905
|
path_per_api_endpoint: dict[str, EndpointSpecificPath]
|
|
906
|
+
default_endpoint_key: EndpointKey
|
|
914
907
|
|
|
915
908
|
is_external: bool = False
|
|
916
909
|
|
|
@@ -997,14 +990,18 @@ class SpecEndpoint:
|
|
|
997
990
|
self.has_attachment = data.get("has_attachment", False)
|
|
998
991
|
self.desc = data.get("desc")
|
|
999
992
|
|
|
993
|
+
# compatibility with single-endpoint files
|
|
1000
994
|
default_endpoint_path = parse_endpoint_specific_path(
|
|
1001
995
|
builder,
|
|
1002
996
|
{"path": data.get("path"), "function": data.get("function")},
|
|
1003
997
|
)
|
|
1004
998
|
if default_endpoint_path is not None:
|
|
1005
|
-
|
|
999
|
+
assert default_endpoint_path.root in builder.api_endpoints, (
|
|
1000
|
+
"Default endpoint is not a valid API endpoint"
|
|
1001
|
+
)
|
|
1002
|
+
self.default_endpoint_key = default_endpoint_path.root
|
|
1006
1003
|
self.path_per_api_endpoint = {
|
|
1007
|
-
self.
|
|
1004
|
+
self.default_endpoint_key: default_endpoint_path,
|
|
1008
1005
|
}
|
|
1009
1006
|
else:
|
|
1010
1007
|
self.path_per_api_endpoint = {}
|
|
@@ -1021,27 +1018,34 @@ class SpecEndpoint:
|
|
|
1021
1018
|
if shared_function_name is None:
|
|
1022
1019
|
shared_function_name = fn_name
|
|
1023
1020
|
assert shared_function_name == fn_name
|
|
1024
|
-
assert self.path_per_api_endpoint != {}
|
|
1025
1021
|
|
|
1026
|
-
|
|
1027
|
-
|
|
1022
|
+
if builder.top_namespace in self.path_per_api_endpoint:
|
|
1023
|
+
self.default_endpoint_key = builder.top_namespace
|
|
1024
|
+
elif len(self.path_per_api_endpoint) == 1:
|
|
1025
|
+
self.default_endpoint_key = next(
|
|
1026
|
+
iter(self.path_per_api_endpoint.keys())
|
|
1027
|
+
)
|
|
1028
|
+
else:
|
|
1029
|
+
raise RuntimeError("no clear default endpoint")
|
|
1028
1030
|
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
self.path_basename = default_endpoint_path.path_basename
|
|
1033
|
-
self.path_root = default_endpoint_path.path_root
|
|
1031
|
+
assert len(self.path_per_api_endpoint) > 0, (
|
|
1032
|
+
"Missing API endpoint path and function definitions for API call"
|
|
1033
|
+
)
|
|
1034
1034
|
|
|
1035
1035
|
# IMPROVE: remove need for is_external flag
|
|
1036
|
-
self.is_external =
|
|
1036
|
+
self.is_external = (
|
|
1037
|
+
self.path_per_api_endpoint[self.default_endpoint_key].path_root
|
|
1038
|
+
== "api/external"
|
|
1039
|
+
)
|
|
1037
1040
|
|
|
1038
1041
|
assert self.is_sdk != EndpointEmitType.EMIT_ENDPOINT or self.desc is not None, (
|
|
1039
|
-
f"Endpoint description required for SDK endpoints, missing: {self.
|
|
1042
|
+
f"Endpoint description required for SDK endpoints, missing: {self.resolved_path}"
|
|
1040
1043
|
)
|
|
1041
1044
|
|
|
1042
1045
|
@property
|
|
1043
1046
|
def resolved_path(self: Self) -> str:
|
|
1044
|
-
|
|
1047
|
+
default_endpoint_path = self.path_per_api_endpoint[self.default_endpoint_key]
|
|
1048
|
+
return f"{default_endpoint_path.path_root}/{default_endpoint_path.path_dirname}/{default_endpoint_path.path_basename}"
|
|
1045
1049
|
|
|
1046
1050
|
|
|
1047
1051
|
def _parse_const(
|
|
@@ -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
|
|
5
5
|
|
|
6
6
|
from pkgs.serialization import yaml
|
|
7
7
|
|
|
@@ -103,10 +103,7 @@ class Config:
|
|
|
103
103
|
open_api: OpenAPIConfig | None
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
_T
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
def _parse_language(config_class: type[_T], raw_value: ConfigValueType) -> _T:
|
|
106
|
+
def _parse_language[_T](config_class: type[_T], raw_value: ConfigValueType) -> _T:
|
|
110
107
|
assert isinstance(raw_value, dict), "expecting language config to have key/values."
|
|
111
108
|
return config_class(**raw_value)
|
|
112
109
|
|
|
@@ -5,16 +5,14 @@ from decimal import Decimal
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
7
|
from . import builder, util
|
|
8
|
-
from .builder import EndpointEmitType
|
|
8
|
+
from .builder import EndpointEmitType, EndpointSpecificPath
|
|
9
9
|
from .config import PythonConfig
|
|
10
10
|
|
|
11
11
|
INDENT = " "
|
|
12
12
|
LINE_BREAK = "\n"
|
|
13
13
|
MODIFY_NOTICE = "# DO NOT MODIFY -- This file is generated by type_spec\n"
|
|
14
14
|
# Turn excess line length warning and turn off ruff formatting
|
|
15
|
-
LINT_HEADER =
|
|
16
|
-
"# flake8: noqa: F821\n# ruff: noqa: E402 Q003\n# fmt: off\n# isort: skip_file\n"
|
|
17
|
-
)
|
|
15
|
+
LINT_HEADER = "# ruff: noqa: E402 Q003\n# fmt: off\n# isort: skip_file\n"
|
|
18
16
|
LINT_FOOTER = "# fmt: on\n"
|
|
19
17
|
ROUTE_NOTICE = """# Routes are generated from $endpoint specifications in the
|
|
20
18
|
# type_spec API YAML files. Refer to the section on endpoints in the type_spec/README"""
|
|
@@ -221,7 +219,7 @@ def _emit_types_imports(*, out: io.StringIO, ctx: Context) -> None:
|
|
|
221
219
|
out.write("import datetime # noqa: F401\n")
|
|
222
220
|
out.write("from decimal import Decimal # noqa: F401\n")
|
|
223
221
|
if ctx.use_enum:
|
|
224
|
-
out.write("from
|
|
222
|
+
out.write("from enum import StrEnum\n")
|
|
225
223
|
if ctx.use_dataclass:
|
|
226
224
|
out.write("import dataclasses\n")
|
|
227
225
|
out.write("from pkgs.serialization import serial_class\n")
|
|
@@ -349,13 +347,17 @@ ENDPOINT_PATH = "ENDPOINT_PATH"
|
|
|
349
347
|
ENDPOINT_PATH_ALTERNATE = "ENDPOINT_PATH_ALTERNATE"
|
|
350
348
|
|
|
351
349
|
|
|
350
|
+
def _get_epf_root(endpoint_specific_path: EndpointSpecificPath) -> str:
|
|
351
|
+
return endpoint_specific_path.root
|
|
352
|
+
|
|
353
|
+
|
|
352
354
|
def _emit_namespace(ctx: Context, namespace: builder.SpecNamespace) -> None:
|
|
353
355
|
endpoint = namespace.endpoint
|
|
354
356
|
if endpoint is not None:
|
|
355
357
|
ctx.out.write("\n")
|
|
356
358
|
ctx.out.write(f'{ENDPOINT_METHOD} = "{endpoint.method.upper()}"\n')
|
|
357
359
|
for endpoint_specific_path in sorted(
|
|
358
|
-
endpoint.path_per_api_endpoint.values(), key=
|
|
360
|
+
endpoint.path_per_api_endpoint.values(), key=_get_epf_root
|
|
359
361
|
):
|
|
360
362
|
endpoint_path_name = ENDPOINT_PATH
|
|
361
363
|
|
|
@@ -457,8 +459,10 @@ def _emit_endpoint_invocation_function_signature(
|
|
|
457
459
|
else []
|
|
458
460
|
) + (extra_params if extra_params is not None else [])
|
|
459
461
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
+
# All endpoints share a function name
|
|
463
|
+
function = endpoint.path_per_api_endpoint[endpoint.default_endpoint_key].function
|
|
464
|
+
assert function is not None
|
|
465
|
+
function_name = function.split(".")[-1]
|
|
462
466
|
ctx.out.write(
|
|
463
467
|
f"""
|
|
464
468
|
def {function_name}(
|
|
@@ -716,40 +720,43 @@ def _emit_properties(
|
|
|
716
720
|
if len(properties) > 0:
|
|
717
721
|
|
|
718
722
|
def write_field(prop: builder.SpecProperty) -> None:
|
|
723
|
+
stype = prop.spec_type
|
|
719
724
|
if prop.name_case == builder.NameCase.preserve:
|
|
720
725
|
unconverted_keys.add(prop.name)
|
|
721
726
|
py_name = python_field_name(prop.name, prop.name_case)
|
|
722
727
|
|
|
723
728
|
if prop.convert_value == builder.PropertyConvertValue.no_convert:
|
|
724
729
|
unconverted_values.add(py_name)
|
|
725
|
-
elif not
|
|
730
|
+
elif not stype.is_value_converted():
|
|
726
731
|
assert prop.convert_value == builder.PropertyConvertValue.auto
|
|
727
732
|
unconverted_values.add(py_name)
|
|
728
|
-
if
|
|
733
|
+
if stype.is_value_to_string():
|
|
729
734
|
to_string_values.add(py_name)
|
|
730
735
|
|
|
731
736
|
if prop.parse_require:
|
|
732
737
|
parse_require.add(py_name)
|
|
733
738
|
|
|
734
|
-
ref_type = refer_to(ctx,
|
|
739
|
+
ref_type = refer_to(ctx, stype)
|
|
735
740
|
default = None
|
|
736
741
|
if prop.extant == builder.PropertyExtant.missing:
|
|
737
742
|
ref_type = f"MissingType[{ref_type}]"
|
|
738
743
|
default = "MISSING_SENTRY"
|
|
739
744
|
ctx.use_missing = True
|
|
740
745
|
elif prop.extant == builder.PropertyExtant.optional:
|
|
741
|
-
if
|
|
746
|
+
if isinstance(
|
|
747
|
+
stype, builder.SpecTypeInstance
|
|
748
|
+
) and stype.defn_type.is_base_type(builder.BaseTypeName.s_optional):
|
|
749
|
+
pass # base type already adds the None union
|
|
750
|
+
elif ref_type == "None":
|
|
751
|
+
pass # no need to add a None union to a none type
|
|
752
|
+
else:
|
|
742
753
|
ref_type = f"{ref_type} | None"
|
|
743
754
|
default = "None"
|
|
744
755
|
elif prop.has_default:
|
|
745
|
-
default = _emit_value(ctx,
|
|
756
|
+
default = _emit_value(ctx, stype, prop.default)
|
|
746
757
|
if (
|
|
747
|
-
isinstance(
|
|
748
|
-
and (
|
|
749
|
-
prop.spec_type.defn_type.is_base_type(
|
|
750
|
-
builder.BaseTypeName.s_list
|
|
751
|
-
)
|
|
752
|
-
)
|
|
758
|
+
isinstance(stype, builder.SpecTypeInstance)
|
|
759
|
+
and (stype.defn_type.is_base_type(builder.BaseTypeName.s_list))
|
|
753
760
|
and default == "[]"
|
|
754
761
|
):
|
|
755
762
|
default = "dataclasses.field(default_factory=list)"
|
|
@@ -939,13 +946,22 @@ base_name_map = {
|
|
|
939
946
|
|
|
940
947
|
def refer_to(ctx: TrackingContext, stype: builder.SpecType) -> str:
|
|
941
948
|
if isinstance(stype, builder.SpecTypeInstance):
|
|
942
|
-
params =
|
|
949
|
+
params = [refer_to(ctx, p) for p in stype.parameters]
|
|
950
|
+
|
|
951
|
+
if stype.defn_type.is_base_type(builder.BaseTypeName.s_union):
|
|
952
|
+
if len(stype.parameters) == 1:
|
|
953
|
+
return f"typing.Union[{params[0]}]"
|
|
954
|
+
return " | ".join(params)
|
|
943
955
|
|
|
944
956
|
if stype.defn_type.is_base_type(builder.BaseTypeName.s_readonly_array):
|
|
945
|
-
assert len(
|
|
946
|
-
|
|
957
|
+
assert len(params) == 1, "Read Only Array takes one parameter"
|
|
958
|
+
return f"tuple[{params[0]}, ...]"
|
|
959
|
+
|
|
960
|
+
if stype.defn_type.is_base_type(builder.BaseTypeName.s_optional):
|
|
961
|
+
assert len(params) == 1, "Optional only takes one parameter"
|
|
962
|
+
return f"{params[0]} | None"
|
|
947
963
|
|
|
948
|
-
return f"{refer_to(ctx, stype.defn_type)}[{params}]"
|
|
964
|
+
return f"{refer_to(ctx, stype.defn_type)}[{', '.join(params)}]"
|
|
949
965
|
|
|
950
966
|
if isinstance(stype, builder.SpecTypeLiteralWrapper):
|
|
951
967
|
return _emit_value(ctx, stype.value_type, stype.value)
|
|
@@ -1111,8 +1127,8 @@ def _emit_id_source(*, builder: builder.SpecBuilder, config: PythonConfig) -> No
|
|
|
1111
1127
|
return None
|
|
1112
1128
|
enum_out = io.StringIO()
|
|
1113
1129
|
enum_out.write(f"{LINT_HEADER}{MODIFY_NOTICE}\n")
|
|
1114
|
-
enum_out.write("
|
|
1115
|
-
enum_out.write("from
|
|
1130
|
+
enum_out.write("import typing\n")
|
|
1131
|
+
enum_out.write("from enum import StrEnum\n")
|
|
1116
1132
|
|
|
1117
1133
|
ctx = TrackingContext()
|
|
1118
1134
|
# In this context the propername
|
|
@@ -1128,11 +1144,11 @@ def _emit_id_source(*, builder: builder.SpecBuilder, config: PythonConfig) -> No
|
|
|
1128
1144
|
known_keys = []
|
|
1129
1145
|
enum_out.write("\nENUM_MAP: dict[str, type[StrEnum]] = {\n")
|
|
1130
1146
|
for key in sorted(named_enums.keys()):
|
|
1131
|
-
enum_out.write(f'"{key}": {named_enums[key]},\n')
|
|
1132
|
-
known_keys.append(f'
|
|
1147
|
+
enum_out.write(f'{INDENT}"{key}": {named_enums[key]},\n')
|
|
1148
|
+
known_keys.append(f'"{key}"')
|
|
1133
1149
|
enum_out.write(f"}}\n{MODIFY_NOTICE}\n")
|
|
1134
1150
|
|
|
1135
|
-
enum_out.write(f"\nKnownEnumsType =
|
|
1151
|
+
enum_out.write(f"\nKnownEnumsType = typing.Literal[\n{INDENT}")
|
|
1136
1152
|
enum_out.write(f",\n{INDENT}".join(known_keys))
|
|
1137
1153
|
enum_out.write(f"\n]\n{MODIFY_NOTICE}\n")
|
|
1138
1154
|
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/emit_typescript.py
RENAMED
|
@@ -2,6 +2,7 @@ import io
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
from . import builder, util
|
|
5
|
+
from .builder import EndpointKey, EndpointSpecificPath
|
|
5
6
|
from .config import TypeScriptConfig
|
|
6
7
|
from .emit_io_ts import emit_type_io_ts
|
|
7
8
|
from .emit_typescript_util import (
|
|
@@ -46,7 +47,10 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
|
46
47
|
and len(namespace.constants) == 0
|
|
47
48
|
):
|
|
48
49
|
# Try to capture some common incompleteness errors
|
|
49
|
-
if namespace.endpoint is None or
|
|
50
|
+
if namespace.endpoint is None or any(
|
|
51
|
+
endpoint_specific_path.function is None
|
|
52
|
+
for endpoint_specific_path in namespace.endpoint.path_per_api_endpoint.values()
|
|
53
|
+
):
|
|
50
54
|
raise Exception(
|
|
51
55
|
f"Namespace {'/'.join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
|
|
52
56
|
)
|
|
@@ -209,12 +213,15 @@ export type Response = DeprecatedResult
|
|
|
209
213
|
|
|
210
214
|
"""
|
|
211
215
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
216
|
+
if not has_multiple_endpoints:
|
|
217
|
+
default_endpoint_path = endpoint.path_per_api_endpoint[
|
|
218
|
+
endpoint.default_endpoint_key
|
|
219
|
+
]
|
|
220
|
+
endpoint_path_part = f'"{default_endpoint_path.path_root}/{default_endpoint_path.path_dirname}/{default_endpoint_path.path_basename}",'
|
|
221
|
+
else:
|
|
217
222
|
path_lookup_map = ""
|
|
223
|
+
api_endpoint_key: EndpointKey
|
|
224
|
+
endpoint_specific_path: EndpointSpecificPath
|
|
218
225
|
for (
|
|
219
226
|
api_endpoint_key,
|
|
220
227
|
endpoint_specific_path,
|
{uncountablepythonsdk-0.0.92 → uncountablepythonsdk-0.0.95}/pkgs/type_spec/parts/base.py.prepart
RENAMED
|
@@ -22,6 +22,8 @@ PureJsonScalar = Union[str, float, bool, None]
|
|
|
22
22
|
# Regular expressions for identifying ref names and IDs. Ref names should be
|
|
23
23
|
# using this regular expression as a constriant in the database.
|
|
24
24
|
REF_NAME_REGEX = r"^[a-zA-Z0-9_/-]+$"
|
|
25
|
+
REF_NAME_STRICT_REGEX_STRING = "^[a-zA-Z_][a-zA-Z0-9_]*$"
|
|
26
|
+
REF_NAME_STRICT_REGEX = rf"{REF_NAME_STRICT_REGEX_STRING}"
|
|
25
27
|
# Ids matching a strict integer number are converted to integers
|
|
26
28
|
ID_REGEX = r"-?[1-9][0-9]{0,20}"
|
|
27
29
|
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import os
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Union
|
|
5
5
|
|
|
6
6
|
import regex as re
|
|
7
7
|
|
|
8
|
-
T = TypeVar("T")
|
|
9
|
-
|
|
10
8
|
|
|
11
9
|
def rewrite_file(filename: str, content: str) -> bool:
|
|
12
10
|
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
|
@@ -156,7 +154,7 @@ def is_valid_property_name(name: str) -> bool:
|
|
|
156
154
|
return re_pattern_property_name.match(name) is not None
|
|
157
155
|
|
|
158
156
|
|
|
159
|
-
def check_fields(data: dict[str, T], allowed: list[str]) -> None:
|
|
157
|
+
def check_fields[T](data: dict[str, T], allowed: list[str]) -> None:
|
|
160
158
|
for key in data:
|
|
161
159
|
if key not in allowed:
|
|
162
160
|
raise Exception(f"unexpected-field: {key}. Allowed: {allowed}")
|
|
@@ -180,7 +178,7 @@ def encode_common_string(value: str) -> str:
|
|
|
180
178
|
return rep
|
|
181
179
|
|
|
182
180
|
|
|
183
|
-
def unused(_arg: T) -> None:
|
|
181
|
+
def unused[T](_arg: T) -> None:
|
|
184
182
|
"""
|
|
185
183
|
Identifies that an argument is intended not be used, as opposed to
|
|
186
184
|
simply forgotten, or a remnant. This can happen in patterned calls
|