UncountablePythonSDK 0.0.15__tar.gz → 0.0.17__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 (192) hide show
  1. uncountablepythonsdk-0.0.17/.github/workflows/documentation.yml +34 -0
  2. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/PKG-INFO +15 -1
  3. uncountablepythonsdk-0.0.17/README.md +13 -0
  4. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/UncountablePythonSDK.egg-info/PKG-INFO +15 -1
  5. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/UncountablePythonSDK.egg-info/SOURCES.txt +39 -0
  6. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/UncountablePythonSDK.egg-info/top_level.txt +1 -0
  7. uncountablepythonsdk-0.0.17/docs/.gitignore +1 -0
  8. uncountablepythonsdk-0.0.17/docs/conf.py +52 -0
  9. uncountablepythonsdk-0.0.17/docs/index.md +13 -0
  10. uncountablepythonsdk-0.0.17/docs/justfile +12 -0
  11. uncountablepythonsdk-0.0.17/docs/quickstart.md +19 -0
  12. uncountablepythonsdk-0.0.17/docs/requirements.txt +7 -0
  13. uncountablepythonsdk-0.0.17/docs/static/favicons/android-chrome-192x192.png +0 -0
  14. uncountablepythonsdk-0.0.17/docs/static/favicons/android-chrome-512x512.png +0 -0
  15. uncountablepythonsdk-0.0.17/docs/static/favicons/apple-touch-icon.png +0 -0
  16. uncountablepythonsdk-0.0.17/docs/static/favicons/browserconfig.xml +9 -0
  17. uncountablepythonsdk-0.0.17/docs/static/favicons/favicon-16x16.png +0 -0
  18. uncountablepythonsdk-0.0.17/docs/static/favicons/favicon-32x32.png +0 -0
  19. uncountablepythonsdk-0.0.17/docs/static/favicons/manifest.json +18 -0
  20. uncountablepythonsdk-0.0.17/docs/static/favicons/mstile-150x150.png +0 -0
  21. uncountablepythonsdk-0.0.17/docs/static/favicons/safari-pinned-tab.svg +32 -0
  22. uncountablepythonsdk-0.0.17/docs/static/logo_blue.png +0 -0
  23. uncountablepythonsdk-0.0.17/examples/create_entity.py +25 -0
  24. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/argument_parser/argument_parser.py +13 -6
  25. uncountablepythonsdk-0.0.17/pkgs/type_spec/actions_registry/__main__.py +108 -0
  26. uncountablepythonsdk-0.0.17/pkgs/type_spec/actions_registry/emit_typescript.py +106 -0
  27. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/builder.py +4 -0
  28. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/emit_python.py +35 -1
  29. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/emit_typescript.py +6 -7
  30. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/value_spec/emit_python.py +1 -0
  31. uncountablepythonsdk-0.0.17/type_spec/external/api/chemical/convert_chemical_formats.yaml +33 -0
  32. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/entity/create_entities.yaml +1 -1
  33. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/entity/create_entity.yaml +1 -1
  34. uncountablepythonsdk-0.0.17/type_spec/external/api/recipe_links/create_recipe_link.yaml +25 -0
  35. uncountablepythonsdk-0.0.17/type_spec/external/api/recipes/associate_recipe_as_input.yaml +19 -0
  36. uncountablepythonsdk-0.0.17/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +19 -0
  37. uncountablepythonsdk-0.0.17/type_spec/external/api/recipes/create_recipe.yaml +35 -0
  38. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/set_recipe_inputs.yaml +3 -0
  39. uncountablepythonsdk-0.0.17/type_spec/external/api/recipes/set_recipe_metadata.yaml +19 -0
  40. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/core/client.py +13 -14
  41. uncountablepythonsdk-0.0.17/uncountable/integration/executors/script_executor.py +19 -0
  42. uncountablepythonsdk-0.0.17/uncountable/py.typed +0 -0
  43. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/__init__.py +20 -0
  44. uncountablepythonsdk-0.0.17/uncountable/types/api/chemical/convert_chemical_formats.py +50 -0
  45. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/entity/create_entities.py +1 -1
  46. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/entity/create_entity.py +1 -1
  47. uncountablepythonsdk-0.0.17/uncountable/types/api/recipe_links/create_recipe_link.py +39 -0
  48. uncountablepythonsdk-0.0.17/uncountable/types/api/recipe_metadata/__init__.py +1 -0
  49. uncountablepythonsdk-0.0.17/uncountable/types/api/recipes/__init__.py +1 -0
  50. uncountablepythonsdk-0.0.17/uncountable/types/api/recipes/associate_recipe_as_input.py +35 -0
  51. uncountablepythonsdk-0.0.17/uncountable/types/api/recipes/associate_recipe_as_lot.py +36 -0
  52. uncountablepythonsdk-0.0.17/uncountable/types/api/recipes/create_recipe.py +41 -0
  53. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/set_recipe_inputs.py +1 -0
  54. uncountablepythonsdk-0.0.17/uncountable/types/api/recipes/set_recipe_metadata.py +36 -0
  55. uncountablepythonsdk-0.0.17/uncountable/types/async_batch.py +23 -0
  56. uncountablepythonsdk-0.0.17/uncountable/types/chemical_structure.py +27 -0
  57. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/client_base.py +303 -2
  58. uncountablepythonsdk-0.0.17/uncountable/types/identifier.py +54 -0
  59. uncountablepythonsdk-0.0.17/uncountable/types/recipe_identifiers.py +62 -0
  60. UncountablePythonSDK-0.0.15/examples/create_entity.py +0 -18
  61. UncountablePythonSDK-0.0.15/uncountable/integration/executors/script_executor.py +0 -18
  62. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/.github/workflows/publish.yml +0 -0
  63. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/.gitignore +0 -0
  64. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  65. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  66. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/examples/recipe-import/importer.py +0 -0
  67. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/__init__.py +0 -0
  68. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/argument_parser/__init__.py +0 -0
  69. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/argument_parser/_is_enum.py +0 -0
  70. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  71. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/argument_parser/case_convert.py +0 -0
  72. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization/__init__.py +0 -0
  73. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization/missing_sentry.py +0 -0
  74. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization/opaque_key.py +0 -0
  75. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization/serial_class.py +0 -0
  76. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization_util/__init__.py +0 -0
  77. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  78. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/serialization_util/serialization_helpers.py +0 -0
  79. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/strenum_compat/__init__.py +0 -0
  80. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/strenum_compat/strenum_compat.py +0 -0
  81. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/__init__.py +0 -0
  82. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/__main__.py +0 -0
  83. {UncountablePythonSDK-0.0.15/uncountable/integration → uncountablepythonsdk-0.0.17/pkgs/type_spec/actions_registry}/__init__.py +0 -0
  84. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/config.py +0 -0
  85. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/emit_io_ts.py +0 -0
  86. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/emit_open_api.py +0 -0
  87. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/emit_open_api_util.py +0 -0
  88. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/emit_typescript_util.py +0 -0
  89. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/load_types.py +0 -0
  90. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/open_api_util.py +0 -0
  91. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/parts/base.py.prepart +0 -0
  92. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  93. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/test.py +0 -0
  94. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/type_info/__main__.py +0 -0
  95. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  96. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/util.py +0 -0
  97. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/value_spec/__init__.py +0 -0
  98. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/value_spec/__main__.py +0 -0
  99. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  100. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pkgs/type_spec/value_spec/types.py +0 -0
  101. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/pyproject.toml +0 -0
  102. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/setup.cfg +0 -0
  103. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/batch/execute_batch.yaml +0 -0
  104. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/entity/get_entities_data.yaml +0 -0
  105. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/entity/list_entities.yaml +0 -0
  106. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -0
  107. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/entity/set_values.yaml +0 -0
  108. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -0
  109. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/inputs/create_inputs.yaml +0 -0
  110. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/inputs/get_input_data.yaml +0 -0
  111. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/inputs/get_input_names.yaml +0 -0
  112. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/inputs/get_inputs_data.yaml +0 -0
  113. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -0
  114. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/outputs/get_output_data.yaml +0 -0
  115. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/outputs/get_output_names.yaml +0 -0
  116. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -0
  117. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/project/get_projects.yaml +0 -0
  118. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/project/get_projects_data.yaml +0 -0
  119. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -0
  120. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/create_recipes.yaml +0 -0
  121. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/get_curve.yaml +0 -0
  122. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -0
  123. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/get_recipe_links.yaml +0 -0
  124. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/get_recipe_names.yaml +0 -0
  125. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -0
  126. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/get_recipes_data.yaml +0 -0
  127. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -0
  128. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/__init__.py +0 -0
  129. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/core/__init__.py +0 -0
  130. {UncountablePythonSDK-0.0.15/uncountable/integration/db → uncountablepythonsdk-0.0.17/uncountable/integration}/__init__.py +0 -0
  131. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/construct_client.py +0 -0
  132. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/cron.py +0 -0
  133. {UncountablePythonSDK-0.0.15/uncountable/integration/executors → uncountablepythonsdk-0.0.17/uncountable/integration/db}/__init__.py +0 -0
  134. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/db/connect.py +0 -0
  135. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/entrypoint.py +0 -0
  136. /UncountablePythonSDK-0.0.15/uncountable/py.typed → /uncountablepythonsdk-0.0.17/uncountable/integration/executors/__init__.py +0 -0
  137. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/job.py +0 -0
  138. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/server.py +0 -0
  139. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/integration/types.py +0 -0
  140. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/__init__.py +0 -0
  141. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/batch/__init__.py +0 -0
  142. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/batch/execute_batch.py +0 -0
  143. {UncountablePythonSDK-0.0.15/uncountable/types/api/entity → uncountablepythonsdk-0.0.17/uncountable/types/api/chemical}/__init__.py +0 -0
  144. {UncountablePythonSDK-0.0.15/uncountable/types/api/input_groups → uncountablepythonsdk-0.0.17/uncountable/types/api/entity}/__init__.py +0 -0
  145. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/entity/get_entities_data.py +0 -0
  146. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/entity/list_entities.py +0 -0
  147. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  148. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/entity/set_values.py +0 -0
  149. {UncountablePythonSDK-0.0.15/uncountable/types/api/inputs → uncountablepythonsdk-0.0.17/uncountable/types/api/input_groups}/__init__.py +0 -0
  150. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  151. {UncountablePythonSDK-0.0.15/uncountable/types/api/outputs → uncountablepythonsdk-0.0.17/uncountable/types/api/inputs}/__init__.py +0 -0
  152. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/inputs/create_inputs.py +0 -0
  153. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/inputs/get_input_data.py +0 -0
  154. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/inputs/get_input_names.py +0 -0
  155. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  156. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  157. {UncountablePythonSDK-0.0.15/uncountable/types/api/project → uncountablepythonsdk-0.0.17/uncountable/types/api/outputs}/__init__.py +0 -0
  158. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/outputs/get_output_data.py +0 -0
  159. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/outputs/get_output_names.py +0 -0
  160. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  161. {UncountablePythonSDK-0.0.15/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.17/uncountable/types/api/project}/__init__.py +0 -0
  162. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/project/get_projects.py +0 -0
  163. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/project/get_projects_data.py +0 -0
  164. {UncountablePythonSDK-0.0.15/uncountable/types/api/recipes → uncountablepythonsdk-0.0.17/uncountable/types/api/recipe_links}/__init__.py +0 -0
  165. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  166. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/create_recipes.py +0 -0
  167. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/get_curve.py +0 -0
  168. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  169. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  170. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  171. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  172. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  173. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  174. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/base.py +0 -0
  175. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/calculations.py +0 -0
  176. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/curves.py +0 -0
  177. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/entity.py +0 -0
  178. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/experiment_groups.py +0 -0
  179. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/field_values.py +0 -0
  180. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/fields.py +0 -0
  181. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/input_attributes.py +0 -0
  182. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/inputs.py +0 -0
  183. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/outputs.py +0 -0
  184. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/phases.py +0 -0
  185. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/recipe_links.py +0 -0
  186. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/recipe_metadata.py +0 -0
  187. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/recipe_output_metadata.py +0 -0
  188. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/recipe_tags.py +0 -0
  189. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/response.py +0 -0
  190. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/units.py +0 -0
  191. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/users.py +0 -0
  192. {UncountablePythonSDK-0.0.15 → uncountablepythonsdk-0.0.17}/uncountable/types/workflows.py +0 -0
@@ -0,0 +1,34 @@
1
+ name: documentation
2
+
3
+ on: [push]
4
+
5
+ permissions:
6
+ contents: write
7
+
8
+ jobs:
9
+ docs:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v3
13
+ - uses: actions/setup-python@v3
14
+ - uses: extractions/setup-just@v1
15
+ with:
16
+ just-version: '1.8.0'
17
+ github-token: ${{ secrets.GITHUB_TOKEN }}
18
+ - name: Install dependencies
19
+ run: |
20
+ # install the dependencies for the package
21
+ pip install .
22
+ # install the dependencies for building the sphinx documentation
23
+ just -f docs/justfile docs-setup-python
24
+ - name: Sphinx build
25
+ run: |
26
+ just -f docs/justfile docs-build
27
+ - name: Deploy to GitHub Pages
28
+ uses: peaceiris/actions-gh-pages@v3
29
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
30
+ with:
31
+ publish_branch: gh-pages
32
+ github_token: ${{ secrets.GITHUB_TOKEN }}
33
+ publish_dir: docs/_build/dirhtml
34
+ force_orphan: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.15
3
+ Version: 0.0.17
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
@@ -29,3 +29,17 @@ Requires-Dist: pytest>=7.4.3; extra == "test"
29
29
  Requires-Dist: coverage[toml]>=6.5.0; extra == "test"
30
30
  Requires-Dist: pytest-cov>=4.1.0; extra == "test"
31
31
  Requires-Dist: pytest-xdist>=3.5.0; extra == "test"
32
+
33
+ # Uncountable Python SDK
34
+
35
+ ## Documentation
36
+ [https://uncountableinc.github.io/uncountable-python-sdk/](https://uncountableinc.github.io/uncountable-python-sdk/)
37
+
38
+ ## Installation
39
+
40
+ Install from PyPI:
41
+
42
+ ```console
43
+ pip install UncountablePythonSDK
44
+ ```
45
+
@@ -0,0 +1,13 @@
1
+ # Uncountable Python SDK
2
+
3
+ ## Documentation
4
+ [https://uncountableinc.github.io/uncountable-python-sdk/](https://uncountableinc.github.io/uncountable-python-sdk/)
5
+
6
+ ## Installation
7
+
8
+ Install from PyPI:
9
+
10
+ ```console
11
+ pip install UncountablePythonSDK
12
+ ```
13
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.15
3
+ Version: 0.0.17
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
@@ -29,3 +29,17 @@ Requires-Dist: pytest>=7.4.3; extra == "test"
29
29
  Requires-Dist: coverage[toml]>=6.5.0; extra == "test"
30
30
  Requires-Dist: pytest-cov>=4.1.0; extra == "test"
31
31
  Requires-Dist: pytest-xdist>=3.5.0; extra == "test"
32
+
33
+ # Uncountable Python SDK
34
+
35
+ ## Documentation
36
+ [https://uncountableinc.github.io/uncountable-python-sdk/](https://uncountableinc.github.io/uncountable-python-sdk/)
37
+
38
+ ## Installation
39
+
40
+ Install from PyPI:
41
+
42
+ ```console
43
+ pip install UncountablePythonSDK
44
+ ```
45
+
@@ -1,11 +1,29 @@
1
1
  .gitignore
2
+ README.md
2
3
  pyproject.toml
4
+ .github/workflows/documentation.yml
3
5
  .github/workflows/publish.yml
4
6
  UncountablePythonSDK.egg-info/PKG-INFO
5
7
  UncountablePythonSDK.egg-info/SOURCES.txt
6
8
  UncountablePythonSDK.egg-info/dependency_links.txt
7
9
  UncountablePythonSDK.egg-info/requires.txt
8
10
  UncountablePythonSDK.egg-info/top_level.txt
11
+ docs/.gitignore
12
+ docs/conf.py
13
+ docs/index.md
14
+ docs/justfile
15
+ docs/quickstart.md
16
+ docs/requirements.txt
17
+ docs/static/logo_blue.png
18
+ docs/static/favicons/android-chrome-192x192.png
19
+ docs/static/favicons/android-chrome-512x512.png
20
+ docs/static/favicons/apple-touch-icon.png
21
+ docs/static/favicons/browserconfig.xml
22
+ docs/static/favicons/favicon-16x16.png
23
+ docs/static/favicons/favicon-32x32.png
24
+ docs/static/favicons/manifest.json
25
+ docs/static/favicons/mstile-150x150.png
26
+ docs/static/favicons/safari-pinned-tab.svg
9
27
  examples/create_entity.py
10
28
  examples/recipe-import/importer.py
11
29
  pkgs/__init__.py
@@ -37,6 +55,9 @@ pkgs/type_spec/load_types.py
37
55
  pkgs/type_spec/open_api_util.py
38
56
  pkgs/type_spec/test.py
39
57
  pkgs/type_spec/util.py
58
+ pkgs/type_spec/actions_registry/__init__.py
59
+ pkgs/type_spec/actions_registry/__main__.py
60
+ pkgs/type_spec/actions_registry/emit_typescript.py
40
61
  pkgs/type_spec/parts/base.py.prepart
41
62
  pkgs/type_spec/parts/base.ts.prepart
42
63
  pkgs/type_spec/type_info/__main__.py
@@ -47,6 +68,7 @@ pkgs/type_spec/value_spec/convert_type.py
47
68
  pkgs/type_spec/value_spec/emit_python.py
48
69
  pkgs/type_spec/value_spec/types.py
49
70
  type_spec/external/api/batch/execute_batch.yaml
71
+ type_spec/external/api/chemical/convert_chemical_formats.yaml
50
72
  type_spec/external/api/entity/create_entities.yaml
51
73
  type_spec/external/api/entity/create_entity.yaml
52
74
  type_spec/external/api/entity/get_entities_data.yaml
@@ -64,7 +86,11 @@ type_spec/external/api/outputs/get_output_names.yaml
64
86
  type_spec/external/api/outputs/resolve_output_conditions.yaml
65
87
  type_spec/external/api/project/get_projects.yaml
66
88
  type_spec/external/api/project/get_projects_data.yaml
89
+ type_spec/external/api/recipe_links/create_recipe_link.yaml
67
90
  type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml
91
+ type_spec/external/api/recipes/associate_recipe_as_input.yaml
92
+ type_spec/external/api/recipes/associate_recipe_as_lot.yaml
93
+ type_spec/external/api/recipes/create_recipe.yaml
68
94
  type_spec/external/api/recipes/create_recipes.yaml
69
95
  type_spec/external/api/recipes/get_curve.yaml
70
96
  type_spec/external/api/recipes/get_recipe_calculations.yaml
@@ -73,6 +99,7 @@ type_spec/external/api/recipes/get_recipe_names.yaml
73
99
  type_spec/external/api/recipes/get_recipe_output_metadata.yaml
74
100
  type_spec/external/api/recipes/get_recipes_data.yaml
75
101
  type_spec/external/api/recipes/set_recipe_inputs.yaml
102
+ type_spec/external/api/recipes/set_recipe_metadata.yaml
76
103
  type_spec/external/api/recipes/set_recipe_outputs.yaml
77
104
  uncountable/__init__.py
78
105
  uncountable/py.typed
@@ -90,18 +117,22 @@ uncountable/integration/db/connect.py
90
117
  uncountable/integration/executors/__init__.py
91
118
  uncountable/integration/executors/script_executor.py
92
119
  uncountable/types/__init__.py
120
+ uncountable/types/async_batch.py
93
121
  uncountable/types/base.py
94
122
  uncountable/types/calculations.py
123
+ uncountable/types/chemical_structure.py
95
124
  uncountable/types/client_base.py
96
125
  uncountable/types/curves.py
97
126
  uncountable/types/entity.py
98
127
  uncountable/types/experiment_groups.py
99
128
  uncountable/types/field_values.py
100
129
  uncountable/types/fields.py
130
+ uncountable/types/identifier.py
101
131
  uncountable/types/input_attributes.py
102
132
  uncountable/types/inputs.py
103
133
  uncountable/types/outputs.py
104
134
  uncountable/types/phases.py
135
+ uncountable/types/recipe_identifiers.py
105
136
  uncountable/types/recipe_links.py
106
137
  uncountable/types/recipe_metadata.py
107
138
  uncountable/types/recipe_output_metadata.py
@@ -113,6 +144,8 @@ uncountable/types/workflows.py
113
144
  uncountable/types/api/__init__.py
114
145
  uncountable/types/api/batch/__init__.py
115
146
  uncountable/types/api/batch/execute_batch.py
147
+ uncountable/types/api/chemical/__init__.py
148
+ uncountable/types/api/chemical/convert_chemical_formats.py
116
149
  uncountable/types/api/entity/__init__.py
117
150
  uncountable/types/api/entity/create_entities.py
118
151
  uncountable/types/api/entity/create_entity.py
@@ -135,9 +168,14 @@ uncountable/types/api/outputs/resolve_output_conditions.py
135
168
  uncountable/types/api/project/__init__.py
136
169
  uncountable/types/api/project/get_projects.py
137
170
  uncountable/types/api/project/get_projects_data.py
171
+ uncountable/types/api/recipe_links/__init__.py
172
+ uncountable/types/api/recipe_links/create_recipe_link.py
138
173
  uncountable/types/api/recipe_metadata/__init__.py
139
174
  uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py
140
175
  uncountable/types/api/recipes/__init__.py
176
+ uncountable/types/api/recipes/associate_recipe_as_input.py
177
+ uncountable/types/api/recipes/associate_recipe_as_lot.py
178
+ uncountable/types/api/recipes/create_recipe.py
141
179
  uncountable/types/api/recipes/create_recipes.py
142
180
  uncountable/types/api/recipes/get_curve.py
143
181
  uncountable/types/api/recipes/get_recipe_calculations.py
@@ -146,4 +184,5 @@ uncountable/types/api/recipes/get_recipe_names.py
146
184
  uncountable/types/api/recipes/get_recipe_output_metadata.py
147
185
  uncountable/types/api/recipes/get_recipes_data.py
148
186
  uncountable/types/api/recipes/set_recipe_inputs.py
187
+ uncountable/types/api/recipes/set_recipe_metadata.py
149
188
  uncountable/types/api/recipes/set_recipe_outputs.py
@@ -0,0 +1 @@
1
+ _build
@@ -0,0 +1,52 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+ #
3
+ # For the full list of built-in configuration values, see the documentation:
4
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html
5
+
6
+ # -- Project information -----------------------------------------------------
7
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
8
+
9
+ from datetime import date
10
+ import uncountable
11
+
12
+ project = "Uncountable SDK"
13
+ copyright = f"{date.today().year}, Uncountable Inc"
14
+ author = "Uncountable Inc"
15
+
16
+ # -- General configuration ---------------------------------------------------
17
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
18
+
19
+ extensions = [
20
+ "autoapi.extension",
21
+ "myst_parser",
22
+ "sphinx_design",
23
+ "sphinx_copybutton",
24
+ "sphinx_favicon",
25
+ ]
26
+ myst_enable_extensions = ["fieldlist", "deflist"]
27
+
28
+ autoapi_dirs = ["../uncountable"]
29
+ autoapi_options = [ 'members', 'undoc-members', 'show-inheritance', 'show-module-summary', 'imported-members' ]
30
+ autoapi_ignore = ['*integration*']
31
+ autodoc_typehints = 'description'
32
+
33
+ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
34
+
35
+
36
+ # -- Options for HTML output -------------------------------------------------
37
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
38
+
39
+ html_theme = "furo"
40
+ html_title = "Python SDK"
41
+ html_static_path = ["static"]
42
+ html_logo = "static/logo_blue.png"
43
+
44
+ favicons = [
45
+ "favicons/android-chrome-192x192.png",
46
+ "favicons/android-chrome-512x512.png",
47
+ "favicons/apple-touch-icon.png",
48
+ "favicons/favicon-16x16.png",
49
+ "favicons/favicon-32x32.png",
50
+ "favicons/mstile-150x150.png",
51
+ "favicons/safari-pinned-tab.svg",
52
+ ]
@@ -0,0 +1,13 @@
1
+ # Uncountable Python SDK
2
+
3
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/UncountablePythonSDK)
4
+
5
+
6
+ `Uncountable Python SDK` is a python package that allows interacting with the uncountable platform
7
+
8
+ ```{toctree}
9
+ :maxdepth: 2
10
+
11
+ quickstart
12
+ ```
13
+
@@ -0,0 +1,12 @@
1
+ docs-setup-python:
2
+ pip install -r requirements.txt
3
+
4
+ docs-clean:
5
+ rm -rf _build/
6
+
7
+ docs-build: docs-clean
8
+ PYTHONPATH="$PWD/.." sphinx-build -M dirhtml . _build
9
+
10
+ docs-serve: docs-build
11
+ npx serve _build/dirhtml
12
+
@@ -0,0 +1,19 @@
1
+ # Quickstart
2
+
3
+ ## Installation
4
+
5
+ Install from PyPI:
6
+
7
+ ```{code-block} bash
8
+ pip install UncountablePythonSDK
9
+ ```
10
+
11
+ ## Available SDK methods
12
+ See the following class for a reference for the available python sdk methods. Then see the example in the next section on how to setup and call these methods.
13
+ [](uncountable.types.client_base.ClientMethods)
14
+
15
+ ## Run a simple example
16
+
17
+ ```{literalinclude} ../examples/create_entity.py
18
+ ```
19
+
@@ -0,0 +1,7 @@
1
+ furo==2024.1.29
2
+ myst-parser==2.0.0
3
+ sphinx-autoapi==3.0.0
4
+ sphinx-copybutton==0.5.2
5
+ Sphinx==7.2.6
6
+ sphinx_design==0.5.0
7
+ sphinx-favicon==1.0.1
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <browserconfig>
3
+ <msapplication>
4
+ <tile>
5
+ <square150x150logo src="/static/img/icons/mstile-150x150.png"/>
6
+ <TileColor>#da532c</TileColor>
7
+ </tile>
8
+ </msapplication>
9
+ </browserconfig>
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "",
3
+ "icons": [
4
+ {
5
+ "src": "/static/img/icons/android-chrome-192x192.png",
6
+ "sizes": "192x192",
7
+ "type": "image/png"
8
+ },
9
+ {
10
+ "src": "/static/img/icons/android-chrome-512x512.png",
11
+ "sizes": "512x512",
12
+ "type": "image/png"
13
+ }
14
+ ],
15
+ "theme_color": "#ffffff",
16
+ "background_color": "#ffffff",
17
+ "display": "standalone"
18
+ }
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
+ <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
+ width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
6
+ preserveAspectRatio="xMidYMid meet">
7
+ <metadata>
8
+ Created by potrace 1.11, written by Peter Selinger 2001-2013
9
+ </metadata>
10
+ <g transform="translate(0.000000,16.000000) scale(0.002312,-0.002312)"
11
+ fill="#000000" stroke="none">
12
+ <path d="M3425 6902 c-16 -10 -50 -30 -75 -44 -25 -14 -85 -49 -135 -78 -49
13
+ -29 -110 -64 -135 -78 -25 -13 -70 -39 -100 -57 -119 -71 -800 -463 -875 -505
14
+ -22 -12 -80 -46 -130 -75 -74 -43 -876 -506 -980 -565 -27 -15 -194 -112 -445
15
+ -257 l-85 -49 0 -1733 c0 -1723 0 -1734 20 -1745 11 -6 23 -15 26 -19 3 -5 8
16
+ -7 10 -6 2 2 15 -4 29 -13 14 -9 117 -69 230 -133 113 -65 219 -126 235 -135
17
+ 17 -10 59 -34 95 -55 36 -21 77 -45 92 -54 16 -9 187 -107 380 -219 194 -112
18
+ 360 -208 368 -213 8 -5 60 -35 115 -66 55 -31 143 -81 195 -111 93 -54 165
19
+ -96 239 -138 20 -11 52 -30 71 -41 19 -11 170 -98 335 -193 165 -95 317 -184
20
+ 337 -197 21 -12 40 -23 42 -23 3 0 29 -14 58 -31 29 -18 68 -40 85 -50 l33
21
+ -18 57 31 c32 17 65 37 74 44 8 8 18 14 22 14 4 0 51 26 104 58 54 32 105 61
22
+ 113 65 8 4 33 18 55 31 22 14 56 33 75 44 19 11 123 70 230 132 227 132 219
23
+ 127 378 219 68 39 128 71 132 71 5 0 10 4 12 8 2 4 30 23 63 41 71 40 113 64
24
+ 158 90 88 51 426 246 457 263 68 39 176 101 230 133 30 18 163 94 295 170 132
25
+ 76 308 178 390 225 l150 87 0 1733 0 1733 -80 48 c-44 27 -86 48 -92 49 -7 0
26
+ -13 5 -13 10 0 6 -4 10 -9 10 -5 0 -67 34 -136 75 -70 41 -128 75 -130 75 -2
27
+ 0 -95 53 -207 118 -111 65 -223 130 -248 144 -48 27 -60 34 -369 212 -112 65
28
+ -218 126 -235 136 -160 91 -474 272 -486 280 -8 5 -42 24 -75 43 -33 19 -76
29
+ 43 -95 55 -180 104 -472 271 -502 287 -21 11 -38 23 -38 27 0 5 -4 8 -8 8 -5
30
+ 0 -68 34 -140 75 -72 41 -133 75 -134 75 -2 0 -16 -8 -33 -18z"/>
31
+ </g>
32
+ </svg>
@@ -0,0 +1,25 @@
1
+ from uncountable.core import AuthDetailsApiKey, Client
2
+ from uncountable.types import (
3
+ entity_t,
4
+ field_values_t,
5
+ )
6
+
7
+
8
+ client = Client(
9
+ base_url="https://app.uncountable.com",
10
+ auth_details=AuthDetailsApiKey(
11
+ api_id="X",
12
+ api_secret_key="X",
13
+ ),
14
+ )
15
+ entities = client.create_entity(
16
+ definition_id=24,
17
+ entity_type=entity_t.EntityType.LAB_REQUEST,
18
+ field_values=[
19
+ field_values_t.FieldRefNameValue(
20
+ field_ref_name="name", value="SDK Lab Request"
21
+ ),
22
+ field_values_t.FieldRefNameValue(field_ref_name="materialFamilyId", value=1),
23
+ ],
24
+ )
25
+ print(entities)
@@ -43,9 +43,7 @@ def is_missing(field_type: typing.Any) -> bool:
43
43
  if origin is not typing.Union:
44
44
  return False
45
45
  args = typing.get_args(field_type)
46
- if len(args) == 0 or args[0] is not MissingSentryType:
47
- return False
48
- return True
46
+ return not (len(args) == 0 or args[0] is not MissingSentryType)
49
47
 
50
48
 
51
49
  def _invoke_tuple_parsers(
@@ -72,14 +70,17 @@ def _invoke_fallback_parsers(
72
70
  arg_parsers: typing.Sequence[typing.Callable[[typing.Any], T]],
73
71
  value: typing.Any,
74
72
  ) -> T:
73
+ exceptions = []
74
+
75
75
  for parser in arg_parsers:
76
76
  try:
77
77
  return parser(value)
78
- except Exception:
78
+ except Exception as e:
79
+ exceptions.append(e)
79
80
  continue
80
81
  raise ValueError(
81
82
  f"Unhandled value {value} cannot be cast to a member of {original_type}"
82
- )
83
+ ) from ExceptionGroup("Fallback Parser Exception", exceptions)
83
84
 
84
85
 
85
86
  def _invoke_membership_parser(
@@ -173,10 +174,16 @@ def _build_parser_inner(
173
174
  raise ValueError("List types only support one argument")
174
175
  arg_parser = _build_parser_inner(args[0], context)
175
176
 
177
+ def parse_element(value: typing.Any) -> typing.Any:
178
+ try:
179
+ return arg_parser(value)
180
+ except Exception as e:
181
+ raise ValueError("Failed to parse element", value) from e
182
+
176
183
  def parse(value: typing.Any) -> typing.Any:
177
184
  if not isinstance(value, list):
178
185
  raise ValueError("value is not a list", parsed_type)
179
- return origin(arg_parser(x) for x in value)
186
+ return origin(parse_element(x) for x in value)
180
187
 
181
188
  return parse
182
189
 
@@ -0,0 +1,108 @@
1
+ """
2
+ This processes the directory main/unc/materials/shared/actions_registry and emits actions_registry/action_definitions.tsx
3
+ """
4
+
5
+ import os
6
+ import sys
7
+ from collections import defaultdict
8
+ from dataclasses import dataclass
9
+ from typing import TypeVar
10
+
11
+ from main.base.types import actions_registry_t
12
+ from pkgs.type_spec import builder
13
+
14
+ from ...argument_parser import CachedParser
15
+ from ..emit_typescript_util import ts_name
16
+ from ..util import rewrite_file
17
+ from .emit_typescript import emit_action_definitions
18
+
19
+ key_name = "name"
20
+ key_icon = "icon"
21
+ key_short_description = "short_description"
22
+ key_description = "description"
23
+
24
+
25
+ TypeT = TypeVar("TypeT")
26
+
27
+
28
+ class InvalidSpecException(Exception):
29
+ pass
30
+
31
+
32
+ @dataclass(kw_only=True)
33
+ class ActionRegistryFileInfo:
34
+ directories: list[str]
35
+ filename: str
36
+ filepath: str
37
+
38
+
39
+ ACTIONS_REGISTRY_ROOT = "main/unc/materials/shared/actions_registry/"
40
+ action_definition_parser = CachedParser(
41
+ dict[str, actions_registry_t.ActionDefinitionYaml]
42
+ )
43
+
44
+
45
+ def get_action_registry_files_info() -> list[ActionRegistryFileInfo]:
46
+ files_info = []
47
+ for dirname, _, files in os.walk(ACTIONS_REGISTRY_ROOT):
48
+ directories = dirname.replace(ACTIONS_REGISTRY_ROOT, "").split("/")
49
+ for filename in files:
50
+ filepath = os.path.join(dirname, filename)
51
+ if os.path.isfile(filepath) and filepath.endswith(".yaml"):
52
+ files_info.append(
53
+ ActionRegistryFileInfo(
54
+ directories=directories,
55
+ filename=filename.replace(".yaml", ""),
56
+ filepath=filepath,
57
+ )
58
+ )
59
+ return files_info
60
+
61
+
62
+ def main() -> None:
63
+ files_info = get_action_registry_files_info()
64
+ action_definitions: defaultdict[str, list[actions_registry_t.ActionDefinition]] = (
65
+ defaultdict(list)
66
+ )
67
+ for file_info in files_info:
68
+ in_action_definitions = action_definition_parser.parse_yaml_file(
69
+ file_info.filepath
70
+ )
71
+ if len(in_action_definitions) == 0:
72
+ continue
73
+
74
+ for ref_name, definition in in_action_definitions.items():
75
+ modules = [*file_info.directories]
76
+ # if the actions are stored in index.yaml, parent dir should be treated as module
77
+ if file_info.filename != "index":
78
+ modules.append(file_info.filename)
79
+
80
+ module_str = "_".join(modules)
81
+ action_definitions[module_str].append(
82
+ actions_registry_t.ActionDefinition(
83
+ name=definition.name,
84
+ short_description=definition.short_description,
85
+ description=definition.description,
86
+ icon=definition.icon,
87
+ ref_name=ref_name,
88
+ module=actions_registry_t.ActionsRegistryModule(
89
+ ts_name(module_str, name_case=builder.NameCase.convert)
90
+ ),
91
+ visibility_scope=[
92
+ actions_registry_t.ActionDefinitionVisibilityScope(item)
93
+ for item in definition.visibility_scope
94
+ ]
95
+ if definition.visibility_scope is not None
96
+ else None,
97
+ )
98
+ )
99
+
100
+ ts_content = emit_action_definitions(action_definitions)
101
+ rewrite_file(
102
+ "main/site/js/materials/base/actions_registry/action_definitions.tsx",
103
+ ts_content,
104
+ )
105
+ sys.exit(0)
106
+
107
+
108
+ main()