UncountablePythonSDK 0.0.35__tar.gz → 0.0.36__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.

Files changed (199) hide show
  1. {uncountablepythonsdk-0.0.35/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.36}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/SOURCES.txt +1 -0
  4. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/builder.py +21 -0
  5. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_open_api.py +11 -0
  6. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_open_api_util.py +4 -0
  7. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/__init__.py +2 -0
  8. uncountablepythonsdk-0.0.36/uncountable/types/api/recipes/lock_recipes.py +53 -0
  9. uncountablepythonsdk-0.0.36/uncountable/types/api/recipes/unlock_recipes.py +43 -0
  10. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/async_batch.py +2 -0
  11. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/client_base.py +44 -3
  12. uncountablepythonsdk-0.0.35/uncountable/types/api/recipes/lock_recipes.py +0 -89
  13. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/.github/workflows/documentation.yml +0 -0
  14. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/.github/workflows/publish.yml +0 -0
  15. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/.gitignore +0 -0
  16. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/README.md +0 -0
  17. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  18. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  19. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  20. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/.gitignore +0 -0
  21. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/conf.py +0 -0
  22. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/index.md +0 -0
  23. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/justfile +0 -0
  24. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/quickstart.md +0 -0
  25. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/requirements.txt +0 -0
  26. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/android-chrome-192x192.png +0 -0
  27. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/android-chrome-512x512.png +0 -0
  28. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/apple-touch-icon.png +0 -0
  29. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/browserconfig.xml +0 -0
  30. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/favicon-16x16.png +0 -0
  31. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/favicon-32x32.png +0 -0
  32. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/manifest.json +0 -0
  33. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/mstile-150x150.png +0 -0
  34. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  35. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/docs/static/logo_blue.png +0 -0
  36. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/examples/async_batch.py +0 -0
  37. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/examples/create_entity.py +0 -0
  38. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/examples/edit_recipe_inputs.py +0 -0
  39. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/examples/upload_files.py +0 -0
  40. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/__init__.py +0 -0
  41. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/__init__.py +0 -0
  42. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/_is_enum.py +0 -0
  43. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  44. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/argument_parser.py +0 -0
  45. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/case_convert.py +0 -0
  46. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization/__init__.py +0 -0
  47. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization/missing_sentry.py +0 -0
  48. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization/opaque_key.py +0 -0
  49. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization/serial_class.py +0 -0
  50. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization/serial_union.py +0 -0
  51. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/__init__.py +0 -0
  52. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  53. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  54. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/serialization_helpers.py +0 -0
  55. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/strenum_compat/__init__.py +0 -0
  56. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/strenum_compat/strenum_compat.py +0 -0
  57. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/__init__.py +0 -0
  58. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/__main__.py +0 -0
  59. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  60. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  61. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  62. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/config.py +0 -0
  63. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_io_ts.py +0 -0
  64. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_python.py +0 -0
  65. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_typescript.py +0 -0
  66. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_typescript_util.py +0 -0
  67. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/load_types.py +0 -0
  68. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/open_api_util.py +0 -0
  69. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/parts/base.py.prepart +0 -0
  70. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  71. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/test.py +0 -0
  72. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/type_info/__main__.py +0 -0
  73. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  74. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/util.py +0 -0
  75. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/__init__.py +0 -0
  76. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/__main__.py +0 -0
  77. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  78. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  79. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/types.py +0 -0
  80. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/pyproject.toml +0 -0
  81. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/setup.cfg +0 -0
  82. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/__init__.py +0 -0
  83. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/core/__init__.py +0 -0
  84. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/core/async_batch.py +0 -0
  85. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/core/client.py +0 -0
  86. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/core/file_upload.py +0 -0
  87. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/core/types.py +0 -0
  88. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/__init__.py +0 -0
  89. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/construct_client.py +0 -0
  90. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/cron.py +0 -0
  91. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/db/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/db/connect.py +0 -0
  93. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/entrypoint.py +0 -0
  94. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/executors/__init__.py +0 -0
  95. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/executors/script_executor.py +0 -0
  96. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/job.py +0 -0
  97. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/server.py +0 -0
  98. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/integration/types.py +0 -0
  99. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/py.typed +0 -0
  100. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/__init__.py +0 -0
  101. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/batch/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/batch/execute_batch.py +0 -0
  103. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  104. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/chemical/__init__.py +0 -0
  105. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  106. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/__init__.py +0 -0
  107. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/create_entities.py +0 -0
  108. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/create_entity.py +0 -0
  109. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/get_entities_data.py +0 -0
  110. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/list_entities.py +0 -0
  111. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/lock_entity.py +0 -0
  112. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  113. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/set_values.py +0 -0
  114. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  115. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/unlock_entity.py +0 -0
  116. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/field_options/__init__.py +0 -0
  117. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  118. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/id_source/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/id_source/list_id_source.py +0 -0
  120. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/id_source/match_id_source.py +0 -0
  121. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/input_groups/__init__.py +0 -0
  122. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  123. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/create_inputs.py +0 -0
  125. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/get_input_data.py +0 -0
  126. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/get_input_names.py +0 -0
  127. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  128. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  129. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_input_category.py +0 -0
  130. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  131. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  132. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/material_families/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  134. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/get_output_data.py +0 -0
  136. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/get_output_names.py +0 -0
  137. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  138. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/permissions/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  140. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/project/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/project/get_projects.py +0 -0
  142. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/project/get_projects_data.py +0 -0
  143. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_links/__init__.py +0 -0
  144. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  145. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  147. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/__init__.py +0 -0
  148. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  149. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  150. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  151. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  152. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/create_recipe.py +0 -0
  153. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/create_recipes.py +0 -0
  154. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  155. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  156. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_curve.py +0 -0
  157. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  158. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  159. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  160. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  161. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  162. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  163. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  164. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  165. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  166. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  167. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  168. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  169. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/triggers/__init__.py +0 -0
  170. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/api/triggers/run_trigger.py +0 -0
  171. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/async_batch_processor.py +0 -0
  172. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/base.py +0 -0
  173. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/calculations.py +0 -0
  174. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/chemical_structure.py +0 -0
  175. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/curves.py +0 -0
  176. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/entity.py +0 -0
  177. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/experiment_groups.py +0 -0
  178. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/field_values.py +0 -0
  179. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/fields.py +0 -0
  180. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/id_source.py +0 -0
  181. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/identifier.py +0 -0
  182. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/input_attributes.py +0 -0
  183. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/inputs.py +0 -0
  184. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/outputs.py +0 -0
  185. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/permissions.py +0 -0
  186. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/phases.py +0 -0
  187. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/post_base.py +0 -0
  188. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_identifiers.py +0 -0
  189. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_inputs.py +0 -0
  190. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_links.py +0 -0
  191. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_metadata.py +0 -0
  192. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_output_metadata.py +0 -0
  193. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_tags.py +0 -0
  194. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_workflow_steps.py +0 -0
  195. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/recipes.py +0 -0
  196. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/response.py +0 -0
  197. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/units.py +0 -0
  198. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/users.py +0 -0
  199. {uncountablepythonsdk-0.0.35 → uncountablepythonsdk-0.0.36}/uncountable/types/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.35
3
+ Version: 0.0.36
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.35
3
+ Version: 0.0.36
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
@@ -191,5 +191,6 @@ uncountable/types/api/recipes/set_recipe_output_annotations.py
191
191
  uncountable/types/api/recipes/set_recipe_outputs.py
192
192
  uncountable/types/api/recipes/set_recipe_tags.py
193
193
  uncountable/types/api/recipes/unarchive_recipes.py
194
+ uncountable/types/api/recipes/unlock_recipes.py
194
195
  uncountable/types/api/triggers/__init__.py
195
196
  uncountable/types/api/triggers/run_trigger.py
@@ -18,6 +18,17 @@ from .util import parse_type_str, unused
18
18
  RawDict = dict[Any, Any]
19
19
 
20
20
 
21
+ class StabilityLevel(StrEnum):
22
+ """These are currently used for open api,
23
+ see: https://github.com/Tufin/oasdiff/blob/main/docs/STABILITY.md
24
+ """
25
+
26
+ draft = "draft"
27
+ alpha = "alpha"
28
+ beta = "beta"
29
+ stable = "stable"
30
+
31
+
21
32
  class PropertyExtant(StrEnum):
22
33
  required = "required"
23
34
  optional = "optional"
@@ -791,6 +802,7 @@ class SpecEndpoint:
791
802
  data_loader: bool
792
803
  is_sdk: bool
793
804
  is_beta: bool
805
+ stability_level: StabilityLevel | None
794
806
  # Don't emit TypeScript endpoint code
795
807
  suppress_ts: bool
796
808
  function: Optional[str]
@@ -816,6 +828,7 @@ class SpecEndpoint:
816
828
  "data_loader",
817
829
  "is_sdk",
818
830
  "is_beta",
831
+ "stability_level",
819
832
  "async_batch_path",
820
833
  "function",
821
834
  "suppress_ts",
@@ -857,6 +870,14 @@ class SpecEndpoint:
857
870
  assert isinstance(is_beta, bool)
858
871
  self.is_beta = is_beta
859
872
 
873
+ stability_level_raw = data.get("stability_level")
874
+ assert stability_level_raw is None or isinstance(stability_level_raw, str)
875
+ self.stability_level = (
876
+ StabilityLevel(stability_level_raw)
877
+ if stability_level_raw is not None
878
+ else None
879
+ )
880
+
860
881
  async_batch_path = data.get("async_batch_path")
861
882
  if async_batch_path is not None:
862
883
  assert isinstance(async_batch_path, str)
@@ -23,6 +23,7 @@ from .emit_open_api_util import (
23
23
  EmitOpenAPIGuide,
24
24
  EmitOpenAPIPath,
25
25
  EmitOpenAPIServer,
26
+ EmitOpenAPIStabilityLevel,
26
27
  EmitOpenAPITag,
27
28
  GlobalContextInfo,
28
29
  TagGroupToNamedTags,
@@ -256,6 +257,14 @@ def _emit_is_beta(is_beta: bool) -> DictApiSchema:
256
257
  return {}
257
258
 
258
259
 
260
+ def _emit_stability_level(
261
+ stability_level: EmitOpenAPIStabilityLevel | None,
262
+ ) -> DictApiSchema:
263
+ if stability_level is not None:
264
+ return {"x-stability-level": str(stability_level)}
265
+ return {}
266
+
267
+
259
268
  def _emit_endpoint_request_body(
260
269
  endpoint: EmitOpenAPIEndpoint,
261
270
  arguments_type: OpenAPIType | None,
@@ -349,6 +358,7 @@ def _emit_namespace(
349
358
  }
350
359
  | _emit_endpoint_description(endpoint.description, ctx.endpoint.guides)
351
360
  | _emit_is_beta(endpoint.is_beta)
361
+ | _emit_stability_level(endpoint.stability_level)
352
362
  | _emit_endpoint_parameters(endpoint, argument_type, ctx.endpoint.examples)
353
363
  | _emit_endpoint_request_body(endpoint, argument_type, ctx.endpoint.examples)
354
364
  | {
@@ -564,6 +574,7 @@ def _emit_endpoint(
564
574
  summary=f"{'/'.join(namespace.path[path_cutoff:])}",
565
575
  description=description,
566
576
  is_beta=namespace.endpoint.is_beta,
577
+ stability_level=namespace.endpoint.stability_level,
567
578
  examples=[
568
579
  EmitOpenAPIEndpointExample(
569
580
  ref_name=f"ex_{i}",
@@ -72,6 +72,9 @@ class EmitOpenAPIEndpointExample:
72
72
  data: dict[str, object]
73
73
 
74
74
 
75
+ EmitOpenAPIStabilityLevel = builder.StabilityLevel
76
+
77
+
75
78
  @dataclass
76
79
  class EmitOpenAPIEndpoint:
77
80
  method: str
@@ -79,6 +82,7 @@ class EmitOpenAPIEndpoint:
79
82
  summary: str
80
83
  description: str
81
84
  is_beta: bool
85
+ stability_level: EmitOpenAPIStabilityLevel | None
82
86
  examples: list[EmitOpenAPIEndpointExample]
83
87
  guides: list[EmitOpenAPIGuide]
84
88
 
@@ -84,6 +84,7 @@ from .api.entity import transition_entity_phase as transition_entity_phase_t
84
84
  from .api.recipes import unarchive_recipes as unarchive_recipes_t
85
85
  from . import units as units_t
86
86
  from .api.entity import unlock_entity as unlock_entity_t
87
+ from .api.recipes import unlock_recipes as unlock_recipes_t
87
88
  from .api.material_families import update_entity_material_families as update_entity_material_families_t
88
89
  from .api.field_options import upsert_field_options as upsert_field_options_t
89
90
  from . import users as users_t
@@ -172,6 +173,7 @@ __all__: list[str] = [
172
173
  "unarchive_recipes_t",
173
174
  "units_t",
174
175
  "unlock_entity_t",
176
+ "unlock_recipes_t",
175
177
  "update_entity_material_families_t",
176
178
  "upsert_field_options_t",
177
179
  "users_t",
@@ -0,0 +1,53 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from dataclasses import dataclass
12
+ from ... import identifier as identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ "RecipeLockBase",
20
+ "RecipeLockType",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "POST"
24
+ ENDPOINT_PATH = "api/external/recipes/lock_recipes"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ class RecipeLockType(StrEnum):
29
+ ALL = "all"
30
+ INPUTS_ONLY = "inputs_only"
31
+
32
+
33
+ # DO NOT MODIFY -- This file is generated by type_spec
34
+ @dataclass(kw_only=True)
35
+ class RecipeLockBase:
36
+ recipe: identifier_t.IdentifierKey
37
+
38
+
39
+ # DO NOT MODIFY -- This file is generated by type_spec
40
+ @dataclass(kw_only=True)
41
+ class Arguments:
42
+ type: RecipeLockType = RecipeLockType.ALL
43
+ recipes: list[identifier_t.IdentifierKey]
44
+ globally_removable: bool
45
+ lock_samples: typing.Optional[bool] = None
46
+ comments: typing.Optional[str] = None
47
+
48
+
49
+ # DO NOT MODIFY -- This file is generated by type_spec
50
+ @dataclass(kw_only=True)
51
+ class Data:
52
+ pass
53
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,43 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from dataclasses import dataclass
12
+ from ... import identifier as identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ "RecipeUnlockType",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "POST"
23
+ ENDPOINT_PATH = "api/external/recipes/unlock_recipes"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ class RecipeUnlockType(StrEnum):
28
+ STANDARD = "standard"
29
+
30
+
31
+ # DO NOT MODIFY -- This file is generated by type_spec
32
+ @dataclass(kw_only=True)
33
+ class Arguments:
34
+ type: RecipeUnlockType = RecipeUnlockType.STANDARD
35
+ recipes: list[identifier_t.IdentifierKey]
36
+ unlock_samples: typing.Optional[bool] = None
37
+
38
+
39
+ # DO NOT MODIFY -- This file is generated by type_spec
40
+ @dataclass(kw_only=True)
41
+ class Data:
42
+ pass
43
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,6 +27,8 @@ class AsyncBatchRequestPath(StrEnum):
27
27
  SET_RECIPE_TAGS = "recipes/set_recipe_tags"
28
28
  EDIT_RECIPE_INPUTS = "recipes/edit_recipe_inputs"
29
29
  ARCHIVE_RECIPES = "recipes/archive"
30
+ LOCK_RECIPES = "recipes/lock_recipes"
31
+ UNLOCK_RECIPES = "recipes/unlock_recipes"
30
32
 
31
33
 
32
34
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -75,6 +75,7 @@ import uncountable.types.api.entity.set_values as set_values_t
75
75
  import uncountable.types.api.entity.transition_entity_phase as transition_entity_phase_t
76
76
  import uncountable.types.api.recipes.unarchive_recipes as unarchive_recipes_t
77
77
  import uncountable.types.api.entity.unlock_entity as unlock_entity_t
78
+ import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
78
79
  import uncountable.types.api.material_families.update_entity_material_families as update_entity_material_families_t
79
80
  import uncountable.types.api.field_options.upsert_field_options as upsert_field_options_t
80
81
  from abc import ABC, abstractmethod
@@ -911,14 +912,29 @@ class ClientMethods(ABC):
911
912
  def lock_recipes(
912
913
  self,
913
914
  *,
914
- locks: list[lock_recipes_t.RecipeLock],
915
+ type: lock_recipes_t.RecipeLockType = lock_recipes_t.RecipeLockType.ALL,
916
+ recipes: list[identifier_t.IdentifierKey],
917
+ globally_removable: bool,
918
+ lock_samples: typing.Optional[bool] = None,
919
+ comments: typing.Optional[str] = None,
915
920
  ) -> lock_recipes_t.Data:
916
921
  """Lock experiments. Experiments will require unlocking to be editable. Edits to the experiments are blocked while they are locked.
917
922
 
918
- :param locks: The recipe locks to apply, a maximum of 100 can be sent
923
+ :param type: The type of lock to set.
924
+ All = both inputs and measurements are locked.
925
+ Inputs Only = only inputs are locked from editing.
926
+
927
+ :param recipes: The recipes to lock, a maximum of 100 can be sent
928
+ :param globally_removable: If true any user can unlock the experiment. If false the locking user is the only user that can unlock.
929
+ :param lock_samples: Should associated experiment test samples also be locked.
930
+ :param comments: Optional comment describing the purpose of locking
919
931
  """
920
932
  args = lock_recipes_t.Arguments(
921
- locks=locks,
933
+ type=type,
934
+ recipes=recipes,
935
+ globally_removable=globally_removable,
936
+ lock_samples=lock_samples,
937
+ comments=comments,
922
938
  )
923
939
  api_request = APIRequest(
924
940
  method=lock_recipes_t.ENDPOINT_METHOD,
@@ -1333,6 +1349,31 @@ class ClientMethods(ABC):
1333
1349
  )
1334
1350
  return self.do_request(api_request=api_request, return_type=unlock_entity_t.Data)
1335
1351
 
1352
+ def unlock_recipes(
1353
+ self,
1354
+ *,
1355
+ type: unlock_recipes_t.RecipeUnlockType = unlock_recipes_t.RecipeUnlockType.STANDARD,
1356
+ recipes: list[identifier_t.IdentifierKey],
1357
+ unlock_samples: typing.Optional[bool] = None,
1358
+ ) -> unlock_recipes_t.Data:
1359
+ """Unlock experiments. Experiments will edtiable after unlocking if they are currently locked.
1360
+
1361
+ :param type: The method to unlock recipes. Default is standard.
1362
+ :param recipes: The recipes to unlock, a maximum of 100 can be sent
1363
+ :param unlock_samples: Should associated experiment test samples also be unlocked.
1364
+ """
1365
+ args = unlock_recipes_t.Arguments(
1366
+ type=type,
1367
+ recipes=recipes,
1368
+ unlock_samples=unlock_samples,
1369
+ )
1370
+ api_request = APIRequest(
1371
+ method=unlock_recipes_t.ENDPOINT_METHOD,
1372
+ endpoint=unlock_recipes_t.ENDPOINT_PATH,
1373
+ args=args,
1374
+ )
1375
+ return self.do_request(api_request=api_request, return_type=unlock_recipes_t.Data)
1376
+
1336
1377
  def update_entity_material_families(
1337
1378
  self,
1338
1379
  *,
@@ -1,89 +0,0 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
- # ruff: noqa: E402
4
- # fmt: off
5
- # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
12
- from pkgs.serialization import serial_class
13
- from pkgs.serialization import serial_union_annotation
14
- from ... import identifier as identifier_t
15
-
16
- __all__: list[str] = [
17
- "Arguments",
18
- "Data",
19
- "ENDPOINT_METHOD",
20
- "ENDPOINT_PATH",
21
- "RecipeLock",
22
- "RecipeLockAll",
23
- "RecipeLockBase",
24
- "RecipeLockInputs",
25
- "RecipeLockType",
26
- ]
27
-
28
- ENDPOINT_METHOD = "POST"
29
- ENDPOINT_PATH = "api/external/recipes/lock_recipes"
30
-
31
-
32
- # DO NOT MODIFY -- This file is generated by type_spec
33
- class RecipeLockType(StrEnum):
34
- ALL = "all"
35
- INPUTS_ONLY = "inputs_only"
36
-
37
-
38
- # DO NOT MODIFY -- This file is generated by type_spec
39
- @dataclass(kw_only=True)
40
- class RecipeLockBase:
41
- recipe: identifier_t.IdentifierKey
42
- globally_removable: bool
43
- type: RecipeLockType
44
- lock_samples: typing.Optional[bool] = None
45
- comments: typing.Optional[str] = None
46
-
47
-
48
- # DO NOT MODIFY -- This file is generated by type_spec
49
- @serial_class(
50
- parse_require={"type"},
51
- )
52
- @dataclass(kw_only=True)
53
- class RecipeLockAll(RecipeLockBase):
54
- type: typing.Literal[RecipeLockType.ALL] = RecipeLockType.ALL
55
-
56
-
57
- # DO NOT MODIFY -- This file is generated by type_spec
58
- @serial_class(
59
- parse_require={"type"},
60
- )
61
- @dataclass(kw_only=True)
62
- class RecipeLockInputs(RecipeLockBase):
63
- type: typing.Literal[RecipeLockType.INPUTS_ONLY] = RecipeLockType.INPUTS_ONLY
64
-
65
-
66
- # DO NOT MODIFY -- This file is generated by type_spec
67
- RecipeLock = typing.Annotated[
68
- typing.Union[RecipeLockAll, RecipeLockInputs],
69
- serial_union_annotation(
70
- discriminator="type",
71
- discriminator_map={
72
- "all": RecipeLockAll,
73
- "inputs_only": RecipeLockInputs,
74
- },
75
- ),
76
- ]
77
-
78
-
79
- # DO NOT MODIFY -- This file is generated by type_spec
80
- @dataclass(kw_only=True)
81
- class Arguments:
82
- locks: list[RecipeLock]
83
-
84
-
85
- # DO NOT MODIFY -- This file is generated by type_spec
86
- @dataclass(kw_only=True)
87
- class Data:
88
- pass
89
- # DO NOT MODIFY -- This file is generated by type_spec