UncountablePythonSDK 0.0.30__tar.gz → 0.0.31__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 (193) hide show
  1. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/.github/workflows/documentation.yml +4 -4
  2. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/.github/workflows/publish.yml +5 -5
  3. {uncountablepythonsdk-0.0.30/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.31}/PKG-INFO +2 -2
  4. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
  5. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/SOURCES.txt +4 -0
  6. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/requires.txt +1 -1
  7. uncountablepythonsdk-0.0.31/docs/requirements.txt +7 -0
  8. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/case_convert.py +4 -3
  9. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization/serial_class.py +31 -37
  10. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/type_info/emit_type_info.py +14 -6
  11. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pyproject.toml +1 -1
  12. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/__init__.py +8 -0
  13. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/list_entities.py +7 -0
  14. uncountablepythonsdk-0.0.31/uncountable/types/api/inputs/set_intermediate_type.py +43 -0
  15. uncountablepythonsdk-0.0.31/uncountable/types/api/recipes/add_recipe_to_project.py +35 -0
  16. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/associate_recipe_as_input.py +1 -0
  17. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/edit_recipe_inputs.py +27 -1
  18. uncountablepythonsdk-0.0.31/uncountable/types/api/recipes/remove_recipe_from_project.py +35 -0
  19. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_outputs.py +2 -0
  20. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/client_base.py +72 -0
  21. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/inputs.py +1 -0
  22. uncountablepythonsdk-0.0.31/uncountable/types/recipes.py +21 -0
  23. uncountablepythonsdk-0.0.30/docs/requirements.txt +0 -7
  24. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/.gitignore +0 -0
  25. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/README.md +0 -0
  26. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  27. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  28. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/.gitignore +0 -0
  29. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/conf.py +0 -0
  30. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/index.md +0 -0
  31. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/justfile +0 -0
  32. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/quickstart.md +0 -0
  33. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/android-chrome-192x192.png +0 -0
  34. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/android-chrome-512x512.png +0 -0
  35. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/apple-touch-icon.png +0 -0
  36. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/browserconfig.xml +0 -0
  37. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/favicon-16x16.png +0 -0
  38. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/favicon-32x32.png +0 -0
  39. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/manifest.json +0 -0
  40. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/mstile-150x150.png +0 -0
  41. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  42. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/docs/static/logo_blue.png +0 -0
  43. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/examples/async_batch.py +0 -0
  44. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/examples/create_entity.py +0 -0
  45. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/examples/upload_files.py +0 -0
  46. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/__init__.py +0 -0
  47. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/__init__.py +0 -0
  48. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/_is_enum.py +0 -0
  49. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  50. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/argument_parser.py +0 -0
  51. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization/__init__.py +0 -0
  52. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization/missing_sentry.py +0 -0
  53. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization/opaque_key.py +0 -0
  54. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization_util/__init__.py +0 -0
  55. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  56. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/serialization_util/serialization_helpers.py +0 -0
  57. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/strenum_compat/__init__.py +0 -0
  58. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/strenum_compat/strenum_compat.py +0 -0
  59. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/__init__.py +0 -0
  60. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/__main__.py +0 -0
  61. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  62. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  63. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  64. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/builder.py +0 -0
  65. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/config.py +0 -0
  66. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_io_ts.py +0 -0
  67. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_open_api.py +0 -0
  68. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_open_api_util.py +0 -0
  69. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_python.py +0 -0
  70. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_typescript.py +0 -0
  71. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_typescript_util.py +0 -0
  72. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/load_types.py +0 -0
  73. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/open_api_util.py +0 -0
  74. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/parts/base.py.prepart +0 -0
  75. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  76. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/test.py +0 -0
  77. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/type_info/__main__.py +0 -0
  78. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/util.py +0 -0
  79. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/__main__.py +0 -0
  81. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  82. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  83. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/types.py +0 -0
  84. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/setup.cfg +0 -0
  85. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/__init__.py +0 -0
  86. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/core/__init__.py +0 -0
  87. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/core/async_batch.py +0 -0
  88. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/core/client.py +0 -0
  89. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/core/file_upload.py +0 -0
  90. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/core/types.py +0 -0
  91. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/construct_client.py +0 -0
  93. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/cron.py +0 -0
  94. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/db/__init__.py +0 -0
  95. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/db/connect.py +0 -0
  96. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/entrypoint.py +0 -0
  97. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/executors/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/executors/script_executor.py +0 -0
  99. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/job.py +0 -0
  100. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/server.py +0 -0
  101. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/integration/types.py +0 -0
  102. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/py.typed +0 -0
  103. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/__init__.py +0 -0
  104. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/batch/__init__.py +0 -0
  105. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/batch/execute_batch.py +0 -0
  106. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  107. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/chemical/__init__.py +0 -0
  108. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  109. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/__init__.py +0 -0
  110. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/create_entities.py +0 -0
  111. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/create_entity.py +0 -0
  112. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/get_entities_data.py +0 -0
  113. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/lock_entity.py +0 -0
  114. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  115. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/set_values.py +0 -0
  116. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  117. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/unlock_entity.py +0 -0
  118. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/field_options/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  120. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/id_source/__init__.py +0 -0
  121. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/id_source/list_id_source.py +0 -0
  122. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/id_source/match_id_source.py +0 -0
  123. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/input_groups/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  125. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/__init__.py +0 -0
  126. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/create_inputs.py +0 -0
  127. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/get_input_data.py +0 -0
  128. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/get_input_names.py +0 -0
  129. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  130. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  131. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/set_input_category.py +0 -0
  132. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  133. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/material_families/__init__.py +0 -0
  134. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  135. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/get_output_data.py +0 -0
  137. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/get_output_names.py +0 -0
  138. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  139. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/permissions/__init__.py +0 -0
  140. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  141. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/project/__init__.py +0 -0
  142. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/project/get_projects.py +0 -0
  143. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/project/get_projects_data.py +0 -0
  144. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_links/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  146. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  148. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  150. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  151. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/create_recipe.py +0 -0
  152. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/create_recipes.py +0 -0
  153. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  154. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_curve.py +0 -0
  155. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  156. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  157. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  158. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  159. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  160. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  161. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  162. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  163. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  164. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/triggers/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/api/triggers/run_trigger.py +0 -0
  166. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/async_batch.py +0 -0
  167. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/async_batch_processor.py +0 -0
  168. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/base.py +0 -0
  169. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/calculations.py +0 -0
  170. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/chemical_structure.py +0 -0
  171. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/curves.py +0 -0
  172. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/entity.py +0 -0
  173. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/experiment_groups.py +0 -0
  174. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/field_values.py +0 -0
  175. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/fields.py +0 -0
  176. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/id_source.py +0 -0
  177. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/identifier.py +0 -0
  178. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/input_attributes.py +0 -0
  179. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/outputs.py +0 -0
  180. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/permissions.py +0 -0
  181. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/phases.py +0 -0
  182. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/post_base.py +0 -0
  183. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_identifiers.py +0 -0
  184. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_inputs.py +0 -0
  185. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_links.py +0 -0
  186. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_metadata.py +0 -0
  187. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_output_metadata.py +0 -0
  188. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_tags.py +0 -0
  189. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_workflow_steps.py +0 -0
  190. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/response.py +0 -0
  191. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/units.py +0 -0
  192. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/users.py +0 -0
  193. {uncountablepythonsdk-0.0.30 → uncountablepythonsdk-0.0.31}/uncountable/types/workflows.py +0 -0
@@ -9,9 +9,9 @@ jobs:
9
9
  docs:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
- - uses: actions/checkout@v3
13
- - uses: actions/setup-python@v3
14
- - uses: extractions/setup-just@v1
12
+ - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
13
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
14
+ - uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
15
15
  with:
16
16
  just-version: '1.8.0'
17
17
  github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -25,7 +25,7 @@ jobs:
25
25
  run: |
26
26
  just -f docs/justfile docs-build
27
27
  - name: Deploy to GitHub Pages
28
- uses: peaceiris/actions-gh-pages@v3
28
+ uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
29
29
  if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
30
30
  with:
31
31
  publish_branch: gh-pages
@@ -19,10 +19,10 @@ jobs:
19
19
  name: Build distribution packages
20
20
  runs-on: ubuntu-latest
21
21
  steps:
22
- - uses: actions/checkout@v4
22
+ - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
23
23
  with:
24
24
  fetch-depth: 0
25
- - uses: actions/setup-python@v5
25
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
26
26
  with:
27
27
  python-version: '3.11'
28
28
  - name: Install build dependencies
@@ -31,7 +31,7 @@ jobs:
31
31
  - name: Build distributions and wheels
32
32
  run: |
33
33
  python3 -m build
34
- - uses: actions/upload-artifact@v4
34
+ - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4
35
35
  with:
36
36
  name: package-distributions
37
37
  path: dist/
@@ -45,9 +45,9 @@ jobs:
45
45
  permissions:
46
46
  id-token: write
47
47
  steps:
48
- - uses: actions/download-artifact@v4
48
+ - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4
49
49
  with:
50
50
  name: package-distributions
51
51
  path: dist/
52
52
  - name: Publish package distributions to PyPI
53
- uses: pypa/gh-action-pypi-publish@e53eb8b103ffcb59469888563dc324e3c8ba6f06
53
+ uses: pypa/gh-action-pypi-publish@ec4db0b4ddc65acdf4bff5fa45ac92d78b56bdf0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.30
3
+ Version: 0.0.31
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
@@ -28,7 +28,7 @@ Provides-Extra: test
28
28
  Requires-Dist: mypy==1.*; extra == "test"
29
29
  Requires-Dist: ruff==0.*; extra == "test"
30
30
  Requires-Dist: pytest==8.*; extra == "test"
31
- Requires-Dist: coverage[toml]==6.*; extra == "test"
31
+ Requires-Dist: coverage[toml]==7.*; extra == "test"
32
32
  Requires-Dist: pytest-cov==5.*; extra == "test"
33
33
  Requires-Dist: pytest-xdist==3.*; extra == "test"
34
34
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.30
3
+ Version: 0.0.31
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
@@ -28,7 +28,7 @@ Provides-Extra: test
28
28
  Requires-Dist: mypy==1.*; extra == "test"
29
29
  Requires-Dist: ruff==0.*; extra == "test"
30
30
  Requires-Dist: pytest==8.*; extra == "test"
31
- Requires-Dist: coverage[toml]==6.*; extra == "test"
31
+ Requires-Dist: coverage[toml]==7.*; extra == "test"
32
32
  Requires-Dist: pytest-cov==5.*; extra == "test"
33
33
  Requires-Dist: pytest-xdist==3.*; extra == "test"
34
34
 
@@ -113,6 +113,7 @@ uncountable/types/recipe_metadata.py
113
113
  uncountable/types/recipe_output_metadata.py
114
114
  uncountable/types/recipe_tags.py
115
115
  uncountable/types/recipe_workflow_steps.py
116
+ uncountable/types/recipes.py
116
117
  uncountable/types/response.py
117
118
  uncountable/types/units.py
118
119
  uncountable/types/users.py
@@ -148,6 +149,7 @@ uncountable/types/api/inputs/get_inputs_data.py
148
149
  uncountable/types/api/inputs/set_input_attribute_values.py
149
150
  uncountable/types/api/inputs/set_input_category.py
150
151
  uncountable/types/api/inputs/set_input_subcategories.py
152
+ uncountable/types/api/inputs/set_intermediate_type.py
151
153
  uncountable/types/api/material_families/__init__.py
152
154
  uncountable/types/api/material_families/update_entity_material_families.py
153
155
  uncountable/types/api/outputs/__init__.py
@@ -164,6 +166,7 @@ uncountable/types/api/recipe_links/create_recipe_link.py
164
166
  uncountable/types/api/recipe_metadata/__init__.py
165
167
  uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py
166
168
  uncountable/types/api/recipes/__init__.py
169
+ uncountable/types/api/recipes/add_recipe_to_project.py
167
170
  uncountable/types/api/recipes/archive_recipes.py
168
171
  uncountable/types/api/recipes/associate_recipe_as_input.py
169
172
  uncountable/types/api/recipes/associate_recipe_as_lot.py
@@ -177,6 +180,7 @@ uncountable/types/api/recipes/get_recipe_links.py
177
180
  uncountable/types/api/recipes/get_recipe_names.py
178
181
  uncountable/types/api/recipes/get_recipe_output_metadata.py
179
182
  uncountable/types/api/recipes/get_recipes_data.py
183
+ uncountable/types/api/recipes/remove_recipe_from_project.py
180
184
  uncountable/types/api/recipes/set_recipe_inputs.py
181
185
  uncountable/types/api/recipes/set_recipe_metadata.py
182
186
  uncountable/types/api/recipes/set_recipe_outputs.py
@@ -11,6 +11,6 @@ PyYAML==6.*
11
11
  mypy==1.*
12
12
  ruff==0.*
13
13
  pytest==8.*
14
- coverage[toml]==6.*
14
+ coverage[toml]==7.*
15
15
  pytest-cov==5.*
16
16
  pytest-xdist==3.*
@@ -0,0 +1,7 @@
1
+ furo==2024.5.6
2
+ myst-parser==3.0.1
3
+ sphinx-autoapi==3.1.0
4
+ sphinx-copybutton==0.5.2
5
+ Sphinx==7.3.7
6
+ sphinx_design==0.6.0
7
+ sphinx-favicon==1.0.1
@@ -4,9 +4,10 @@ import re
4
4
 
5
5
  @functools.lru_cache(maxsize=500000)
6
6
  def snake_to_camel_case(o: str) -> str:
7
- return "".join([
8
- part.title() if i > 0 else part for i, part in enumerate(o.split("_"))
9
- ])
7
+ tokens = o.split("_")
8
+ if len(tokens) < 2:
9
+ return o
10
+ return "".join([part.title() if i > 0 else part for i, part in enumerate(tokens)])
10
11
 
11
12
 
12
13
  def kebab_to_pascal_case(o: str) -> str:
@@ -16,6 +16,9 @@ class _SerialClassData:
16
16
  parse_require: set[str] = dataclasses.field(default_factory=set)
17
17
 
18
18
 
19
+ EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
20
+
21
+
19
22
  def serial_class(
20
23
  *,
21
24
  unconverted_keys: Optional[set[str]] = None,
@@ -57,58 +60,49 @@ def serial_class(
57
60
 
58
61
 
59
62
  class SerialClassDataInspector:
60
- bases: list[SerialClassDataInspector]
61
-
62
63
  def __init__(
63
- self, bases: list[SerialClassDataInspector], current: _SerialClassData
64
+ self,
65
+ current: _SerialClassData,
64
66
  ) -> None:
65
- self.bases = bases
66
67
  self.current = current
67
68
 
68
69
  def has_unconverted_key(self, key: str) -> bool:
69
- if key in self.current.unconverted_keys:
70
- return True
71
- for base in self.bases:
72
- if base.has_unconverted_key(key):
73
- return True
74
- return False
70
+ return key in self.current.unconverted_keys
75
71
 
76
72
  def has_unconverted_value(self, key: str) -> bool:
77
- if key in self.current.unconverted_values:
78
- return True
79
- for base in self.bases:
80
- if base.has_unconverted_value(key):
81
- return True
82
- return False
73
+ return key in self.current.unconverted_values
83
74
 
84
75
  def has_to_string_value(self, key: str) -> bool:
85
- if key in self.current.to_string_values:
86
- return True
87
- for base in self.bases:
88
- if base.has_to_string_value(key):
89
- return True
90
- return False
76
+ return key in self.current.to_string_values
91
77
 
92
78
  def has_parse_require(self, key: str) -> bool:
93
- if key in self.current.parse_require:
94
- return True
95
- for base in self.bases:
96
- if base.has_parse_require(key):
97
- return True
98
- return False
79
+ return key in self.current.parse_require
99
80
 
100
81
 
101
- def get_serial_class_data(type_class: type[Any]) -> SerialClassDataInspector:
102
- bases = (
103
- [get_serial_class_data(base) for base in type_class.__bases__]
104
- if type_class.__bases__ is not None
105
- else []
106
- )
107
- return SerialClassDataInspector(
108
- bases,
82
+ def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | None:
83
+ base_class_data = (
109
84
  cast(_SerialClassData, type_class.__unc_serial_data)
110
85
  if hasattr(type_class, "__unc_serial_data")
111
- else _SerialClassData(),
86
+ else None
87
+ )
88
+ if type_class.__bases__ is not None:
89
+ for base in type_class.__bases__:
90
+ curr_base_class_data = _get_merged_serial_class_data(base)
91
+ if curr_base_class_data is not None:
92
+ if base_class_data is None:
93
+ base_class_data = _SerialClassData()
94
+ base_class_data.unconverted_keys |= curr_base_class_data.unconverted_keys
95
+ base_class_data.unconverted_values |= (
96
+ curr_base_class_data.unconverted_values
97
+ )
98
+ base_class_data.to_string_values |= curr_base_class_data.to_string_values
99
+ base_class_data.parse_require |= curr_base_class_data.parse_require
100
+ return base_class_data
101
+
102
+
103
+ def get_serial_class_data(type_class: type[Any]) -> SerialClassDataInspector:
104
+ return SerialClassDataInspector(
105
+ _get_merged_serial_class_data(type_class) or EMPTY_SERIAL_CLASS_DATA
112
106
  )
113
107
 
114
108
 
@@ -247,17 +247,25 @@ def _extract_and_validate_layout(
247
247
  return layout
248
248
 
249
249
 
250
- def _validate_type_ext_info(stype: builder.SpecTypeDefnObject) -> ExtInfoLayout | None:
250
+ def _validate_type_ext_info(
251
+ stype: builder.SpecTypeDefnObject,
252
+ ) -> tuple[ExtInfoLayout | None, Optional[data_t.ExtInfo]]:
251
253
  ext_info = _parse_ext_info(stype.ext_info)
252
254
  if ext_info is None:
253
- return None
255
+ return None, None
256
+
257
+ if ext_info.label_fields is not None:
258
+ assert stype.properties is not None
259
+ for name in ext_info.label_fields:
260
+ prop = stype.properties.get(name)
261
+ assert prop is not None, f"missing-label-field:{name}"
254
262
 
255
263
  if not stype.is_base and isinstance(stype.base, builder.SpecTypeDefnObject):
256
- base_layout = _validate_type_ext_info(stype.base)
264
+ base_layout, _ = _validate_type_ext_info(stype.base)
257
265
  else:
258
266
  base_layout = None
259
267
 
260
- return _extract_and_validate_layout(stype, ext_info, base_layout)
268
+ return _extract_and_validate_layout(stype, ext_info, base_layout), ext_info
261
269
 
262
270
 
263
271
  def _build_map_type(
@@ -270,7 +278,7 @@ def _build_map_type(
270
278
  and not stype.is_base
271
279
  and stype.base is not None
272
280
  ):
273
- _validate_type_ext_info(stype)
281
+ _, ext_info = _validate_type_ext_info(stype)
274
282
 
275
283
  properties: dict[str, MapProperty] = {}
276
284
  map_type = MapTypeObject(
@@ -279,7 +287,7 @@ def _build_map_type(
279
287
  properties=properties,
280
288
  desc=stype.desc,
281
289
  base_type_path=type_path_of(stype.base),
282
- ext_info=_convert_ext_info(stype.ext_info),
290
+ ext_info=serialize_for_api(ext_info),
283
291
  )
284
292
 
285
293
  if stype.properties is not None:
@@ -68,7 +68,7 @@ test = [
68
68
  "ruff == 0.*",
69
69
  # Testing
70
70
  "pytest ==8.*",
71
- "coverage[toml] == 6.*",
71
+ "coverage[toml] ==7.*",
72
72
  "pytest-cov ==5.*",
73
73
  "pytest-xdist == 3.*",
74
74
  ]
@@ -3,6 +3,7 @@
3
3
  # ruff: noqa: E402
4
4
  # fmt: off
5
5
  # isort: skip_file
6
+ from .api.recipes import add_recipe_to_project as add_recipe_to_project_t
6
7
  from .api.recipes import archive_recipes as archive_recipes_t
7
8
  from .api.recipes import associate_recipe_as_input as associate_recipe_as_input_t
8
9
  from .api.recipes import associate_recipe_as_lot as associate_recipe_as_lot_t
@@ -61,6 +62,8 @@ from . import recipe_metadata as recipe_metadata_t
61
62
  from . import recipe_output_metadata as recipe_output_metadata_t
62
63
  from . import recipe_tags as recipe_tags_t
63
64
  from . import recipe_workflow_steps as recipe_workflow_steps_t
65
+ from . import recipes as recipes_t
66
+ from .api.recipes import remove_recipe_from_project as remove_recipe_from_project_t
64
67
  from .api.entity import resolve_entity_ids as resolve_entity_ids_t
65
68
  from .api.outputs import resolve_output_conditions as resolve_output_conditions_t
66
69
  from . import response as response_t
@@ -69,6 +72,7 @@ from .api.permissions import set_core_permissions as set_core_permissions_t
69
72
  from .api.inputs import set_input_attribute_values as set_input_attribute_values_t
70
73
  from .api.inputs import set_input_category as set_input_category_t
71
74
  from .api.inputs import set_input_subcategories as set_input_subcategories_t
75
+ from .api.inputs import set_intermediate_type as set_intermediate_type_t
72
76
  from .api.recipes import set_recipe_inputs as set_recipe_inputs_t
73
77
  from .api.recipes import set_recipe_metadata as set_recipe_metadata_t
74
78
  from .api.recipes import set_recipe_outputs as set_recipe_outputs_t
@@ -85,6 +89,7 @@ from . import workflows as workflows_t
85
89
 
86
90
 
87
91
  __all__: list[str] = [
92
+ "add_recipe_to_project_t",
88
93
  "archive_recipes_t",
89
94
  "associate_recipe_as_input_t",
90
95
  "associate_recipe_as_lot_t",
@@ -143,6 +148,8 @@ __all__: list[str] = [
143
148
  "recipe_output_metadata_t",
144
149
  "recipe_tags_t",
145
150
  "recipe_workflow_steps_t",
151
+ "recipes_t",
152
+ "remove_recipe_from_project_t",
146
153
  "resolve_entity_ids_t",
147
154
  "resolve_output_conditions_t",
148
155
  "response_t",
@@ -151,6 +158,7 @@ __all__: list[str] = [
151
158
  "set_input_attribute_values_t",
152
159
  "set_input_category_t",
153
160
  "set_input_subcategories_t",
161
+ "set_intermediate_type_t",
154
162
  "set_recipe_inputs_t",
155
163
  "set_recipe_metadata_t",
156
164
  "set_recipe_outputs_t",
@@ -8,6 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from dataclasses import dataclass
11
+ from pkgs.serialization import serial_class
11
12
  from pkgs.serialization import OpaqueKey
12
13
  from ... import base as base_t
13
14
  from ... import entity as entity_t
@@ -26,6 +27,9 @@ ENDPOINT_PATH = "api/external/entity/external_list_entities"
26
27
 
27
28
 
28
29
  # DO NOT MODIFY -- This file is generated by type_spec
30
+ @serial_class(
31
+ unconverted_values={"attributes"},
32
+ )
29
33
  @dataclass(kw_only=True)
30
34
  class Arguments:
31
35
  entity_type: entity_t.EntityType
@@ -36,6 +40,9 @@ class Arguments:
36
40
 
37
41
 
38
42
  # DO NOT MODIFY -- This file is generated by type_spec
43
+ @serial_class(
44
+ unconverted_values={"column_values"},
45
+ )
39
46
  @dataclass(kw_only=True)
40
47
  class EntityResult:
41
48
  entity: entity_t.Entity
@@ -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
+ "IntermediateType",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "POST"
23
+ ENDPOINT_PATH = "api/external/inputs/set_intermediate_type"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ class IntermediateType(StrEnum):
28
+ FINAL_PRODUCT = "final_product"
29
+ COMPOUND_AS_INTERMEDIATE = "compound_as_intermediate"
30
+
31
+
32
+ # DO NOT MODIFY -- This file is generated by type_spec
33
+ @dataclass(kw_only=True)
34
+ class Arguments:
35
+ input_key: identifier_t.IdentifierKey
36
+ intermediate_type: IntermediateType
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
@@ -0,0 +1,35 @@
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 dataclasses import dataclass
11
+ from ... import identifier as identifier_t
12
+
13
+ __all__: list[str] = [
14
+ "Arguments",
15
+ "Data",
16
+ "ENDPOINT_METHOD",
17
+ "ENDPOINT_PATH",
18
+ ]
19
+
20
+ ENDPOINT_METHOD = "POST"
21
+ ENDPOINT_PATH = "api/external/recipes/add_recipe_to_project"
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ @dataclass(kw_only=True)
26
+ class Arguments:
27
+ recipe_key: identifier_t.IdentifierKey
28
+ project_key: identifier_t.IdentifierKey
29
+
30
+
31
+ # DO NOT MODIFY -- This file is generated by type_spec
32
+ @dataclass(kw_only=True)
33
+ class Data:
34
+ pass
35
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,6 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_input"
27
27
  class Arguments:
28
28
  recipe_key: identifier_t.IdentifierKey
29
29
  input_key: typing.Optional[identifier_t.IdentifierKey] = None
30
+ show_in_listings: typing.Optional[bool] = None
30
31
 
31
32
 
32
33
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -15,6 +15,7 @@ from ... import recipe_inputs as recipe_inputs_t
15
15
  from ... import recipe_workflow_steps as recipe_workflow_steps_t
16
16
 
17
17
  __all__: list[str] = [
18
+ "AnnotationEdit",
18
19
  "Arguments",
19
20
  "Data",
20
21
  "ENDPOINT_METHOD",
@@ -25,6 +26,7 @@ __all__: list[str] = [
25
26
  "RecipeInputEditClearInputs",
26
27
  "RecipeInputEditInputBase",
27
28
  "RecipeInputEditType",
29
+ "RecipeInputEditUpdateAnnotations",
28
30
  "RecipeInputEditUpsertInput",
29
31
  ]
30
32
 
@@ -37,6 +39,7 @@ class RecipeInputEditType(StrEnum):
37
39
  CLEAR_INPUTS = "clear_inputs"
38
40
  UPSERT_INPUT = "upsert_input"
39
41
  ADD_INPUT = "add_input"
42
+ UPDATE_ANNOTATIONS = "update_annotations"
40
43
 
41
44
 
42
45
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -88,7 +91,30 @@ class RecipeInputEditAddInput(RecipeInputEditInputBase):
88
91
 
89
92
 
90
93
  # DO NOT MODIFY -- This file is generated by type_spec
91
- RecipeInputEdit = typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput]
94
+ @serial_class(
95
+ to_string_values={"lower_value", "upper_value"},
96
+ )
97
+ @dataclass(kw_only=True)
98
+ class AnnotationEdit:
99
+ annotation_type_key: identifier_t.IdentifierKey
100
+ lower_value: typing.Optional[Decimal] = None
101
+ upper_value: typing.Optional[Decimal] = None
102
+
103
+
104
+ # DO NOT MODIFY -- This file is generated by type_spec
105
+ @serial_class(
106
+ parse_require={"type"},
107
+ )
108
+ @dataclass(kw_only=True)
109
+ class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
110
+ type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
111
+ ingredient_key: identifier_t.IdentifierKey
112
+ clear_first: bool
113
+ annotations: list[AnnotationEdit]
114
+
115
+
116
+ # DO NOT MODIFY -- This file is generated by type_spec
117
+ RecipeInputEdit = typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations]
92
118
 
93
119
 
94
120
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,35 @@
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 dataclasses import dataclass
11
+ from ... import identifier as identifier_t
12
+
13
+ __all__: list[str] = [
14
+ "Arguments",
15
+ "Data",
16
+ "ENDPOINT_METHOD",
17
+ "ENDPOINT_PATH",
18
+ ]
19
+
20
+ ENDPOINT_METHOD = "POST"
21
+ ENDPOINT_PATH = "api/external/recipes/remove_recipe_from_project"
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ @dataclass(kw_only=True)
26
+ class Arguments:
27
+ recipe_key: identifier_t.IdentifierKey
28
+ project_key: identifier_t.IdentifierKey
29
+
30
+
31
+ # DO NOT MODIFY -- This file is generated by type_spec
32
+ @dataclass(kw_only=True)
33
+ class Data:
34
+ pass
35
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,6 +10,7 @@ from decimal import Decimal # noqa: F401
10
10
  from dataclasses import dataclass
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base as base_t
13
+ from ... import recipes as recipes_t
13
14
  from ... import response as response_t
14
15
 
15
16
  __all__: list[str] = [
@@ -45,6 +46,7 @@ class RecipeOutputValue:
45
46
  value_numeric: typing.Optional[Decimal] = None
46
47
  value_str: typing.Optional[str] = None
47
48
  value_curve: typing.Optional[CurveValues] = None
49
+ formatting: typing.Optional[recipes_t.RecipeAttributeFormatting] = None
48
50
 
49
51
 
50
52
  # DO NOT MODIFY -- This file is generated by type_spec