UncountablePythonSDK 0.0.16__tar.gz → 0.0.18__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.
Files changed (203) hide show
  1. uncountablepythonsdk-0.0.18/.github/workflows/documentation.yml +34 -0
  2. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/PKG-INFO +15 -1
  3. uncountablepythonsdk-0.0.18/README.md +13 -0
  4. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/UncountablePythonSDK.egg-info/PKG-INFO +15 -1
  5. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/UncountablePythonSDK.egg-info/SOURCES.txt +51 -1
  6. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/UncountablePythonSDK.egg-info/top_level.txt +1 -0
  7. uncountablepythonsdk-0.0.18/docs/.gitignore +1 -0
  8. uncountablepythonsdk-0.0.18/docs/conf.py +52 -0
  9. uncountablepythonsdk-0.0.18/docs/index.md +13 -0
  10. uncountablepythonsdk-0.0.18/docs/justfile +12 -0
  11. uncountablepythonsdk-0.0.18/docs/quickstart.md +19 -0
  12. uncountablepythonsdk-0.0.18/docs/requirements.txt +7 -0
  13. uncountablepythonsdk-0.0.18/docs/static/favicons/android-chrome-192x192.png +0 -0
  14. uncountablepythonsdk-0.0.18/docs/static/favicons/android-chrome-512x512.png +0 -0
  15. uncountablepythonsdk-0.0.18/docs/static/favicons/apple-touch-icon.png +0 -0
  16. uncountablepythonsdk-0.0.18/docs/static/favicons/browserconfig.xml +9 -0
  17. uncountablepythonsdk-0.0.18/docs/static/favicons/favicon-16x16.png +0 -0
  18. uncountablepythonsdk-0.0.18/docs/static/favicons/favicon-32x32.png +0 -0
  19. uncountablepythonsdk-0.0.18/docs/static/favicons/manifest.json +18 -0
  20. uncountablepythonsdk-0.0.18/docs/static/favicons/mstile-150x150.png +0 -0
  21. uncountablepythonsdk-0.0.18/docs/static/favicons/safari-pinned-tab.svg +32 -0
  22. uncountablepythonsdk-0.0.18/docs/static/logo_blue.png +0 -0
  23. uncountablepythonsdk-0.0.18/examples/create_entity.py +25 -0
  24. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/argument_parser/_is_enum.py +1 -1
  25. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/argument_parser/argument_parser.py +26 -19
  26. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization/serial_class.py +3 -3
  27. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization_util/_get_type_for_serialization.py +1 -3
  28. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization_util/serialization_helpers.py +1 -3
  29. uncountablepythonsdk-0.0.18/pkgs/strenum_compat/strenum_compat.py +1 -0
  30. uncountablepythonsdk-0.0.18/pkgs/type_spec/actions_registry/__main__.py +114 -0
  31. uncountablepythonsdk-0.0.18/pkgs/type_spec/actions_registry/emit_typescript.py +120 -0
  32. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/builder.py +14 -10
  33. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/config.py +3 -2
  34. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/emit_python.py +54 -17
  35. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/emit_typescript.py +8 -9
  36. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/emit_typescript_util.py +1 -2
  37. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/load_types.py +2 -1
  38. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/open_api_util.py +2 -2
  39. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/parts/base.py.prepart +2 -1
  40. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/util.py +9 -9
  41. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/value_spec/__main__.py +2 -2
  42. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/value_spec/emit_python.py +1 -0
  43. uncountablepythonsdk-0.0.18/type_spec/external/api/batch/execute_batch_load_async.yaml +18 -0
  44. uncountablepythonsdk-0.0.18/type_spec/external/api/chemical/convert_chemical_formats.yaml +33 -0
  45. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/entity/create_entities.yaml +1 -1
  46. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/entity/create_entity.yaml +1 -1
  47. uncountablepythonsdk-0.0.18/type_spec/external/api/id_source/list_id_source.yaml +35 -0
  48. uncountablepythonsdk-0.0.18/type_spec/external/api/id_source/match_id_source.yaml +32 -0
  49. uncountablepythonsdk-0.0.18/type_spec/external/api/recipe_links/create_recipe_link.yaml +25 -0
  50. uncountablepythonsdk-0.0.18/type_spec/external/api/recipes/associate_recipe_as_input.yaml +19 -0
  51. uncountablepythonsdk-0.0.18/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +19 -0
  52. uncountablepythonsdk-0.0.18/type_spec/external/api/recipes/create_recipe.yaml +38 -0
  53. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/get_recipes_data.yaml +21 -21
  54. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/set_recipe_inputs.yaml +6 -0
  55. uncountablepythonsdk-0.0.18/type_spec/external/api/recipes/set_recipe_metadata.yaml +19 -0
  56. uncountablepythonsdk-0.0.18/type_spec/external/api/triggers/run_trigger.yaml +18 -0
  57. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/core/client.py +13 -14
  58. uncountablepythonsdk-0.0.18/uncountable/py.typed +0 -0
  59. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/__init__.py +30 -0
  60. uncountablepythonsdk-0.0.18/uncountable/types/api/batch/execute_batch_load_async.py +35 -0
  61. uncountablepythonsdk-0.0.18/uncountable/types/api/chemical/convert_chemical_formats.py +50 -0
  62. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/entity/create_entities.py +1 -1
  63. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/entity/create_entity.py +1 -1
  64. uncountablepythonsdk-0.0.18/uncountable/types/api/id_source/list_id_source.py +46 -0
  65. uncountablepythonsdk-0.0.18/uncountable/types/api/id_source/match_id_source.py +48 -0
  66. uncountablepythonsdk-0.0.18/uncountable/types/api/recipe_links/__init__.py +1 -0
  67. uncountablepythonsdk-0.0.18/uncountable/types/api/recipe_links/create_recipe_link.py +39 -0
  68. uncountablepythonsdk-0.0.18/uncountable/types/api/recipe_metadata/__init__.py +1 -0
  69. uncountablepythonsdk-0.0.18/uncountable/types/api/recipes/__init__.py +1 -0
  70. uncountablepythonsdk-0.0.18/uncountable/types/api/recipes/associate_recipe_as_input.py +35 -0
  71. uncountablepythonsdk-0.0.18/uncountable/types/api/recipes/associate_recipe_as_lot.py +36 -0
  72. uncountablepythonsdk-0.0.18/uncountable/types/api/recipes/create_recipe.py +43 -0
  73. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/set_recipe_inputs.py +2 -0
  74. uncountablepythonsdk-0.0.18/uncountable/types/api/recipes/set_recipe_metadata.py +36 -0
  75. uncountablepythonsdk-0.0.18/uncountable/types/api/triggers/__init__.py +1 -0
  76. uncountablepythonsdk-0.0.18/uncountable/types/api/triggers/run_trigger.py +36 -0
  77. uncountablepythonsdk-0.0.18/uncountable/types/async_batch.py +45 -0
  78. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/base.py +2 -1
  79. uncountablepythonsdk-0.0.18/uncountable/types/chemical_structure.py +27 -0
  80. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/client_base.py +404 -2
  81. uncountablepythonsdk-0.0.18/uncountable/types/id_source.py +49 -0
  82. uncountablepythonsdk-0.0.18/uncountable/types/identifier.py +54 -0
  83. uncountablepythonsdk-0.0.18/uncountable/types/recipe_identifiers.py +62 -0
  84. UncountablePythonSDK-0.0.16/examples/create_entity.py +0 -18
  85. UncountablePythonSDK-0.0.16/pkgs/strenum_compat/strenum_compat.py +0 -9
  86. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/.github/workflows/publish.yml +0 -0
  87. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/.gitignore +0 -0
  88. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  89. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  90. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/examples/recipe-import/importer.py +0 -0
  91. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/__init__.py +0 -0
  92. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/argument_parser/__init__.py +0 -0
  93. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  94. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/argument_parser/case_convert.py +0 -0
  95. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization/__init__.py +0 -0
  96. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization/missing_sentry.py +0 -0
  97. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization/opaque_key.py +0 -0
  98. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/serialization_util/__init__.py +0 -0
  99. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/strenum_compat/__init__.py +0 -0
  100. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/__init__.py +0 -0
  101. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/__main__.py +0 -0
  102. {UncountablePythonSDK-0.0.16/uncountable/integration → uncountablepythonsdk-0.0.18/pkgs/type_spec/actions_registry}/__init__.py +0 -0
  103. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/emit_io_ts.py +0 -0
  104. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/emit_open_api.py +0 -0
  105. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/emit_open_api_util.py +0 -0
  106. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  107. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/test.py +0 -0
  108. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/type_info/__main__.py +0 -0
  109. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  110. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/value_spec/__init__.py +0 -0
  111. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  112. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pkgs/type_spec/value_spec/types.py +0 -0
  113. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/pyproject.toml +0 -0
  114. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/setup.cfg +0 -0
  115. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/batch/execute_batch.yaml +0 -0
  116. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/entity/get_entities_data.yaml +0 -0
  117. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/entity/list_entities.yaml +0 -0
  118. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -0
  119. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/entity/set_values.yaml +0 -0
  120. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -0
  121. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/inputs/create_inputs.yaml +0 -0
  122. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/inputs/get_input_data.yaml +0 -0
  123. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/inputs/get_input_names.yaml +0 -0
  124. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/inputs/get_inputs_data.yaml +0 -0
  125. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -0
  126. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/outputs/get_output_data.yaml +0 -0
  127. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/outputs/get_output_names.yaml +0 -0
  128. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -0
  129. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/project/get_projects.yaml +0 -0
  130. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/project/get_projects_data.yaml +0 -0
  131. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -0
  132. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/create_recipes.yaml +0 -0
  133. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/get_curve.yaml +0 -0
  134. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -0
  135. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/get_recipe_links.yaml +0 -0
  136. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/get_recipe_names.yaml +0 -0
  137. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -0
  138. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -0
  139. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/__init__.py +0 -0
  140. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/core/__init__.py +0 -0
  141. {UncountablePythonSDK-0.0.16/uncountable/integration/db → uncountablepythonsdk-0.0.18/uncountable/integration}/__init__.py +0 -0
  142. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/construct_client.py +0 -0
  143. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/cron.py +0 -0
  144. {UncountablePythonSDK-0.0.16/uncountable/integration/executors → uncountablepythonsdk-0.0.18/uncountable/integration/db}/__init__.py +0 -0
  145. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/db/connect.py +0 -0
  146. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/entrypoint.py +0 -0
  147. /UncountablePythonSDK-0.0.16/uncountable/py.typed → /uncountablepythonsdk-0.0.18/uncountable/integration/executors/__init__.py +0 -0
  148. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/executors/script_executor.py +0 -0
  149. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/job.py +0 -0
  150. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/server.py +0 -0
  151. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/integration/types.py +0 -0
  152. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/__init__.py +0 -0
  153. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/batch/__init__.py +0 -0
  154. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/batch/execute_batch.py +0 -0
  155. {UncountablePythonSDK-0.0.16/uncountable/types/api/entity → uncountablepythonsdk-0.0.18/uncountable/types/api/chemical}/__init__.py +0 -0
  156. {UncountablePythonSDK-0.0.16/uncountable/types/api/input_groups → uncountablepythonsdk-0.0.18/uncountable/types/api/entity}/__init__.py +0 -0
  157. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/entity/get_entities_data.py +0 -0
  158. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/entity/list_entities.py +0 -0
  159. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  160. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/entity/set_values.py +0 -0
  161. {UncountablePythonSDK-0.0.16/uncountable/types/api/inputs → uncountablepythonsdk-0.0.18/uncountable/types/api/id_source}/__init__.py +0 -0
  162. {UncountablePythonSDK-0.0.16/uncountable/types/api/outputs → uncountablepythonsdk-0.0.18/uncountable/types/api/input_groups}/__init__.py +0 -0
  163. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  164. {UncountablePythonSDK-0.0.16/uncountable/types/api/project → uncountablepythonsdk-0.0.18/uncountable/types/api/inputs}/__init__.py +0 -0
  165. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/inputs/create_inputs.py +0 -0
  166. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/inputs/get_input_data.py +0 -0
  167. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/inputs/get_input_names.py +0 -0
  168. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  169. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  170. {UncountablePythonSDK-0.0.16/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.18/uncountable/types/api/outputs}/__init__.py +0 -0
  171. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/outputs/get_output_data.py +0 -0
  172. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/outputs/get_output_names.py +0 -0
  173. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  174. {UncountablePythonSDK-0.0.16/uncountable/types/api/recipes → uncountablepythonsdk-0.0.18/uncountable/types/api/project}/__init__.py +0 -0
  175. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/project/get_projects.py +0 -0
  176. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/project/get_projects_data.py +0 -0
  177. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  178. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/create_recipes.py +0 -0
  179. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/get_curve.py +0 -0
  180. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  181. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  182. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  183. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  184. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  185. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  186. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/calculations.py +0 -0
  187. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/curves.py +0 -0
  188. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/entity.py +0 -0
  189. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/experiment_groups.py +0 -0
  190. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/field_values.py +0 -0
  191. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/fields.py +0 -0
  192. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/input_attributes.py +0 -0
  193. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/inputs.py +0 -0
  194. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/outputs.py +0 -0
  195. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/phases.py +0 -0
  196. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/recipe_links.py +0 -0
  197. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/recipe_metadata.py +0 -0
  198. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/recipe_output_metadata.py +0 -0
  199. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/recipe_tags.py +0 -0
  200. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/response.py +0 -0
  201. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/units.py +0 -0
  202. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/uncountable/types/users.py +0 -0
  203. {UncountablePythonSDK-0.0.16 → uncountablepythonsdk-0.0.18}/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.16
3
+ Version: 0.0.18
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.16
3
+ Version: 0.0.18
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,12 +68,16 @@ 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/batch/execute_batch_load_async.yaml
72
+ type_spec/external/api/chemical/convert_chemical_formats.yaml
50
73
  type_spec/external/api/entity/create_entities.yaml
51
74
  type_spec/external/api/entity/create_entity.yaml
52
75
  type_spec/external/api/entity/get_entities_data.yaml
53
76
  type_spec/external/api/entity/list_entities.yaml
54
77
  type_spec/external/api/entity/resolve_entity_ids.yaml
55
78
  type_spec/external/api/entity/set_values.yaml
79
+ type_spec/external/api/id_source/list_id_source.yaml
80
+ type_spec/external/api/id_source/match_id_source.yaml
56
81
  type_spec/external/api/input_groups/get_input_group_names.yaml
57
82
  type_spec/external/api/inputs/create_inputs.yaml
58
83
  type_spec/external/api/inputs/get_input_data.yaml
@@ -64,7 +89,11 @@ type_spec/external/api/outputs/get_output_names.yaml
64
89
  type_spec/external/api/outputs/resolve_output_conditions.yaml
65
90
  type_spec/external/api/project/get_projects.yaml
66
91
  type_spec/external/api/project/get_projects_data.yaml
92
+ type_spec/external/api/recipe_links/create_recipe_link.yaml
67
93
  type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml
94
+ type_spec/external/api/recipes/associate_recipe_as_input.yaml
95
+ type_spec/external/api/recipes/associate_recipe_as_lot.yaml
96
+ type_spec/external/api/recipes/create_recipe.yaml
68
97
  type_spec/external/api/recipes/create_recipes.yaml
69
98
  type_spec/external/api/recipes/get_curve.yaml
70
99
  type_spec/external/api/recipes/get_recipe_calculations.yaml
@@ -73,7 +102,9 @@ type_spec/external/api/recipes/get_recipe_names.yaml
73
102
  type_spec/external/api/recipes/get_recipe_output_metadata.yaml
74
103
  type_spec/external/api/recipes/get_recipes_data.yaml
75
104
  type_spec/external/api/recipes/set_recipe_inputs.yaml
105
+ type_spec/external/api/recipes/set_recipe_metadata.yaml
76
106
  type_spec/external/api/recipes/set_recipe_outputs.yaml
107
+ type_spec/external/api/triggers/run_trigger.yaml
77
108
  uncountable/__init__.py
78
109
  uncountable/py.typed
79
110
  uncountable/core/__init__.py
@@ -90,18 +121,23 @@ uncountable/integration/db/connect.py
90
121
  uncountable/integration/executors/__init__.py
91
122
  uncountable/integration/executors/script_executor.py
92
123
  uncountable/types/__init__.py
124
+ uncountable/types/async_batch.py
93
125
  uncountable/types/base.py
94
126
  uncountable/types/calculations.py
127
+ uncountable/types/chemical_structure.py
95
128
  uncountable/types/client_base.py
96
129
  uncountable/types/curves.py
97
130
  uncountable/types/entity.py
98
131
  uncountable/types/experiment_groups.py
99
132
  uncountable/types/field_values.py
100
133
  uncountable/types/fields.py
134
+ uncountable/types/id_source.py
135
+ uncountable/types/identifier.py
101
136
  uncountable/types/input_attributes.py
102
137
  uncountable/types/inputs.py
103
138
  uncountable/types/outputs.py
104
139
  uncountable/types/phases.py
140
+ uncountable/types/recipe_identifiers.py
105
141
  uncountable/types/recipe_links.py
106
142
  uncountable/types/recipe_metadata.py
107
143
  uncountable/types/recipe_output_metadata.py
@@ -113,6 +149,9 @@ uncountable/types/workflows.py
113
149
  uncountable/types/api/__init__.py
114
150
  uncountable/types/api/batch/__init__.py
115
151
  uncountable/types/api/batch/execute_batch.py
152
+ uncountable/types/api/batch/execute_batch_load_async.py
153
+ uncountable/types/api/chemical/__init__.py
154
+ uncountable/types/api/chemical/convert_chemical_formats.py
116
155
  uncountable/types/api/entity/__init__.py
117
156
  uncountable/types/api/entity/create_entities.py
118
157
  uncountable/types/api/entity/create_entity.py
@@ -120,6 +159,9 @@ uncountable/types/api/entity/get_entities_data.py
120
159
  uncountable/types/api/entity/list_entities.py
121
160
  uncountable/types/api/entity/resolve_entity_ids.py
122
161
  uncountable/types/api/entity/set_values.py
162
+ uncountable/types/api/id_source/__init__.py
163
+ uncountable/types/api/id_source/list_id_source.py
164
+ uncountable/types/api/id_source/match_id_source.py
123
165
  uncountable/types/api/input_groups/__init__.py
124
166
  uncountable/types/api/input_groups/get_input_group_names.py
125
167
  uncountable/types/api/inputs/__init__.py
@@ -135,9 +177,14 @@ uncountable/types/api/outputs/resolve_output_conditions.py
135
177
  uncountable/types/api/project/__init__.py
136
178
  uncountable/types/api/project/get_projects.py
137
179
  uncountable/types/api/project/get_projects_data.py
180
+ uncountable/types/api/recipe_links/__init__.py
181
+ uncountable/types/api/recipe_links/create_recipe_link.py
138
182
  uncountable/types/api/recipe_metadata/__init__.py
139
183
  uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py
140
184
  uncountable/types/api/recipes/__init__.py
185
+ uncountable/types/api/recipes/associate_recipe_as_input.py
186
+ uncountable/types/api/recipes/associate_recipe_as_lot.py
187
+ uncountable/types/api/recipes/create_recipe.py
141
188
  uncountable/types/api/recipes/create_recipes.py
142
189
  uncountable/types/api/recipes/get_curve.py
143
190
  uncountable/types/api/recipes/get_recipe_calculations.py
@@ -146,4 +193,7 @@ uncountable/types/api/recipes/get_recipe_names.py
146
193
  uncountable/types/api/recipes/get_recipe_output_metadata.py
147
194
  uncountable/types/api/recipes/get_recipes_data.py
148
195
  uncountable/types/api/recipes/set_recipe_inputs.py
149
- uncountable/types/api/recipes/set_recipe_outputs.py
196
+ uncountable/types/api/recipes/set_recipe_metadata.py
197
+ uncountable/types/api/recipes/set_recipe_outputs.py
198
+ uncountable/types/api/triggers/__init__.py
199
+ uncountable/types/api/triggers/run_trigger.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)
@@ -3,7 +3,7 @@ import typing
3
3
  from enum import Enum
4
4
 
5
5
 
6
- def is_string_enum_class(object_type: typing.Type[typing.Any]) -> bool:
6
+ def is_string_enum_class(object_type: type[typing.Any]) -> bool:
7
7
  return (
8
8
  inspect.isclass(object_type)
9
9
  and issubclass(object_type, Enum)
@@ -18,7 +18,7 @@ from .case_convert import camel_to_snake_case, snake_to_camel_case
18
18
 
19
19
  T = typing.TypeVar("T")
20
20
  ParserFunction = typing.Callable[[typing.Any], T]
21
- ParserCache = dict[typing.Type[typing.Any], ParserFunction[typing.Any]]
21
+ ParserCache = dict[type[typing.Any], ParserFunction[typing.Any]]
22
22
 
23
23
 
24
24
  @dataclass(frozen=True, eq=True)
@@ -43,13 +43,11 @@ 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(
52
- tuple_type: typing.Type[T],
50
+ tuple_type: type[T],
53
51
  arg_parsers: typing.Sequence[typing.Callable[[typing.Any], object]],
54
52
  has_ellipsis: bool,
55
53
  value: typing.Any,
@@ -68,22 +66,25 @@ def _invoke_tuple_parsers(
68
66
 
69
67
 
70
68
  def _invoke_fallback_parsers(
71
- original_type: typing.Type[T],
69
+ original_type: type[T],
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(
86
- expected_values: typing.Set[T],
87
+ expected_values: set[T],
87
88
  value: typing.Any,
88
89
  ) -> T:
89
90
  """
@@ -98,7 +99,7 @@ def _invoke_membership_parser(
98
99
 
99
100
 
100
101
  def _build_parser_inner(
101
- parsed_type: typing.Type[T],
102
+ parsed_type: type[T],
102
103
  context: ParserContext,
103
104
  *,
104
105
  convert_string_to_snake_case: bool = False,
@@ -142,7 +143,7 @@ def _build_parser_inner(
142
143
  origin = typing.get_origin(parsed_type)
143
144
  if origin is tuple:
144
145
  args = typing.get_args(parsed_type)
145
- element_parsers: typing.List[typing.Callable[[typing.Any], object]] = []
146
+ element_parsers: list[typing.Callable[[typing.Any], object]] = []
146
147
  has_ellipsis = False
147
148
  for arg in args:
148
149
  assert not has_ellipsis
@@ -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
 
@@ -193,7 +200,7 @@ def _build_parser_inner(
193
200
  return lambda value: origin((k_parser(k), v_parser(v)) for k, v in value.items())
194
201
 
195
202
  if origin == typing.Literal:
196
- valid_values: typing.Set[T] = set(typing.get_args(parsed_type))
203
+ valid_values: set[T] = set(typing.get_args(parsed_type))
197
204
  return lambda value: _invoke_membership_parser(valid_values, value)
198
205
 
199
206
  if parsed_type is str and convert_string_to_snake_case:
@@ -250,7 +257,7 @@ def _build_parser_inner(
250
257
 
251
258
 
252
259
  def _build_parser_dataclass(
253
- parsed_type: typing.Type[T],
260
+ parsed_type: type[T],
254
261
  context: ParserContext,
255
262
  ) -> ParserFunction[T]:
256
263
  """
@@ -264,9 +271,9 @@ def _build_parser_dataclass(
264
271
 
265
272
  type_hints = typing.get_type_hints(parsed_type)
266
273
  dc_field_parsers: list[
267
- typing.Tuple[
274
+ tuple[
268
275
  dataclasses.Field[typing.Any],
269
- typing.Type[typing.Any],
276
+ type[typing.Any],
270
277
  ParserFunction[typing.Any],
271
278
  ]
272
279
  ] = []
@@ -274,7 +281,7 @@ def _build_parser_dataclass(
274
281
  serial_class_data = get_serial_class_data(parsed_type)
275
282
 
276
283
  def parse(value: typing.Any) -> typing.Any:
277
- data: typing.Dict[typing.Any, typing.Any] = {}
284
+ data: dict[typing.Any, typing.Any] = {}
278
285
  for field, field_type, field_parser in dc_field_parsers:
279
286
  field_raw_value = None
280
287
  try:
@@ -340,7 +347,7 @@ _CACHE_MAP: dict[ParserOptions, ParserCache] = defaultdict(ParserCache)
340
347
 
341
348
 
342
349
  def build_parser(
343
- parsed_type: typing.Type[T],
350
+ parsed_type: type[T],
344
351
  options: ParserOptions,
345
352
  ) -> ParserFunction[T]:
346
353
  """
@@ -364,7 +371,7 @@ def build_parser(
364
371
  class CachedParser(typing.Generic[T]):
365
372
  def __init__(
366
373
  self,
367
- args: typing.Type[T],
374
+ args: type[T],
368
375
  ):
369
376
  self.arguments = args
370
377
  self.parser_api: typing.Optional[ParserFunction[T]] = None
@@ -1,9 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Any, Callable, Optional, TypeVar, cast
5
-
6
- from pkgs.strenum_compat import StrEnum
4
+ from collections.abc import Callable
5
+ from enum import StrEnum
6
+ from typing import Any, Optional, TypeVar, cast
7
7
 
8
8
  _ClassT = TypeVar("_ClassT")
9
9
 
@@ -1,11 +1,9 @@
1
1
  import dataclasses
2
2
  import datetime
3
3
  import functools
4
- from enum import Enum
4
+ from enum import Enum, StrEnum
5
5
  from typing import Any
6
6
 
7
- from pkgs.strenum_compat import StrEnum
8
-
9
7
 
10
8
  class SerializationType(StrEnum):
11
9
  NAMED_TUPLE = "NAMED_TUPLE"