UncountablePythonSDK 0.0.26__tar.gz → 0.0.28__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 (241) hide show
  1. {uncountablepythonsdk-0.0.26/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.28}/PKG-INFO +15 -15
  2. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28/UncountablePythonSDK.egg-info}/PKG-INFO +15 -15
  3. uncountablepythonsdk-0.0.28/UncountablePythonSDK.egg-info/requires.txt +16 -0
  4. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/builder.py +12 -0
  5. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/emit_open_api.py +1 -1
  6. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/emit_python.py +46 -4
  7. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pyproject.toml +14 -14
  8. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/outputs/get_output_data.yaml +1 -1
  9. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/get_recipes_data.yaml +1 -1
  10. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/core/client.py +5 -5
  11. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/core/file_upload.py +7 -4
  12. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/core/types.py +2 -1
  13. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/outputs/get_output_data.py +1 -1
  14. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/get_recipes_data.py +1 -1
  15. uncountablepythonsdk-0.0.26/UncountablePythonSDK.egg-info/requires.txt +0 -16
  16. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/.github/workflows/documentation.yml +0 -0
  17. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/.github/workflows/publish.yml +0 -0
  18. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/.gitignore +0 -0
  19. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/README.md +0 -0
  20. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  21. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  22. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  23. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/.gitignore +0 -0
  24. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/conf.py +0 -0
  25. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/index.md +0 -0
  26. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/justfile +0 -0
  27. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/quickstart.md +0 -0
  28. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/requirements.txt +0 -0
  29. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/android-chrome-192x192.png +0 -0
  30. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/android-chrome-512x512.png +0 -0
  31. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/apple-touch-icon.png +0 -0
  32. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/browserconfig.xml +0 -0
  33. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/favicon-16x16.png +0 -0
  34. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/favicon-32x32.png +0 -0
  35. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/manifest.json +0 -0
  36. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/mstile-150x150.png +0 -0
  37. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  38. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/docs/static/logo_blue.png +0 -0
  39. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/examples/async_batch.py +0 -0
  40. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/examples/create_entity.py +0 -0
  41. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/examples/recipe-import/importer.py +0 -0
  42. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/examples/upload_files.py +0 -0
  43. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/__init__.py +0 -0
  44. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/argument_parser/__init__.py +0 -0
  45. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/argument_parser/_is_enum.py +0 -0
  46. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  47. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/argument_parser/argument_parser.py +0 -0
  48. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/argument_parser/case_convert.py +0 -0
  49. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization/__init__.py +0 -0
  50. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization/missing_sentry.py +0 -0
  51. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization/opaque_key.py +0 -0
  52. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization/serial_class.py +0 -0
  53. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization_util/__init__.py +0 -0
  54. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  55. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/serialization_util/serialization_helpers.py +0 -0
  56. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/strenum_compat/__init__.py +0 -0
  57. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/strenum_compat/strenum_compat.py +0 -0
  58. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/__init__.py +0 -0
  59. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/__main__.py +0 -0
  60. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  61. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  62. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  63. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/config.py +0 -0
  64. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/emit_io_ts.py +0 -0
  65. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/emit_open_api_util.py +0 -0
  66. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/emit_typescript.py +0 -0
  67. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/emit_typescript_util.py +0 -0
  68. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/load_types.py +0 -0
  69. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/open_api_util.py +0 -0
  70. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/parts/base.py.prepart +0 -0
  71. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  72. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/test.py +0 -0
  73. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/type_info/__main__.py +0 -0
  74. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  75. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/util.py +0 -0
  76. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/value_spec/__init__.py +0 -0
  77. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/value_spec/__main__.py +0 -0
  78. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  79. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  80. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/pkgs/type_spec/value_spec/types.py +0 -0
  81. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/setup.cfg +0 -0
  82. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/batch/execute_batch.yaml +0 -0
  83. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/batch/execute_batch_load_async.yaml +0 -0
  84. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -0
  85. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/create_entities.yaml +0 -0
  86. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/create_entity.yaml +0 -0
  87. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/get_entities_data.yaml +0 -0
  88. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/list_entities.yaml +0 -0
  89. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/lock_entity.yaml +0 -0
  90. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -0
  91. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/set_values.yaml +0 -0
  92. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/transition_entity_phase.yaml +0 -0
  93. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/entity/unlock_entity.yaml +0 -0
  94. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/field_options/upsert_field_options.yaml +0 -0
  95. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/id_source/list_id_source.yaml +0 -0
  96. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/id_source/match_id_source.yaml +0 -0
  97. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -0
  98. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/create_inputs.yaml +0 -0
  99. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/get_input_data.yaml +0 -0
  100. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/get_input_names.yaml +0 -0
  101. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/get_inputs_data.yaml +0 -0
  102. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -0
  103. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/set_input_category.yaml +0 -0
  104. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/inputs/set_input_subcategories.yaml +0 -0
  105. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/material_families/update_entity_material_families.yaml +0 -0
  106. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/outputs/get_output_names.yaml +0 -0
  107. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -0
  108. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/permissions/set_core_permissions.yaml +0 -0
  109. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/project/get_projects.yaml +0 -0
  110. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/project/get_projects_data.yaml +0 -0
  111. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -0
  112. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -0
  113. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/archive_recipes.yaml +0 -0
  114. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -0
  115. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -0
  116. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/create_recipe.yaml +0 -0
  117. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/create_recipes.yaml +0 -0
  118. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -0
  119. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -0
  120. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/get_curve.yaml +0 -0
  121. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -0
  122. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/get_recipe_links.yaml +0 -0
  123. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/get_recipe_names.yaml +0 -0
  124. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -0
  125. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -0
  126. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -0
  127. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -0
  128. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/set_recipe_tags.yaml +0 -0
  129. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/recipes/unarchive_recipes.yaml +0 -0
  130. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/type_spec/external/api/triggers/run_trigger.yaml +0 -0
  131. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/__init__.py +0 -0
  132. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/core/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/core/async_batch.py +0 -0
  134. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/construct_client.py +0 -0
  136. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/cron.py +0 -0
  137. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/db/__init__.py +0 -0
  138. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/db/connect.py +0 -0
  139. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/entrypoint.py +0 -0
  140. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/executors/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/executors/script_executor.py +0 -0
  142. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/job.py +0 -0
  143. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/server.py +0 -0
  144. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/integration/types.py +0 -0
  145. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/py.typed +0 -0
  146. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/__init__.py +0 -0
  148. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/batch/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/batch/execute_batch.py +0 -0
  150. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  151. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/chemical/__init__.py +0 -0
  152. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  153. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/__init__.py +0 -0
  154. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/create_entities.py +0 -0
  155. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/create_entity.py +0 -0
  156. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/get_entities_data.py +0 -0
  157. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/list_entities.py +0 -0
  158. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/lock_entity.py +0 -0
  159. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  160. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/set_values.py +0 -0
  161. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  162. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/entity/unlock_entity.py +0 -0
  163. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/field_options/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  165. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/id_source/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/id_source/list_id_source.py +0 -0
  167. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/id_source/match_id_source.py +0 -0
  168. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/input_groups/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  170. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/create_inputs.py +0 -0
  172. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/get_input_data.py +0 -0
  173. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/get_input_names.py +0 -0
  174. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  175. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  176. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/set_input_category.py +0 -0
  177. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  178. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/material_families/__init__.py +0 -0
  179. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  180. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/outputs/__init__.py +0 -0
  181. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/outputs/get_output_names.py +0 -0
  182. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  183. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/permissions/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  185. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/project/__init__.py +0 -0
  186. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/project/get_projects.py +0 -0
  187. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/project/get_projects_data.py +0 -0
  188. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipe_links/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  190. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  192. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  194. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  195. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  196. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/create_recipe.py +0 -0
  197. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/create_recipes.py +0 -0
  198. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  199. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  200. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/get_curve.py +0 -0
  201. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  202. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  203. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  204. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  205. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  206. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  207. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  208. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  209. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  210. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/triggers/__init__.py +0 -0
  211. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/api/triggers/run_trigger.py +0 -0
  212. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/async_batch.py +0 -0
  213. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/async_batch_processor.py +0 -0
  214. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/base.py +0 -0
  215. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/calculations.py +0 -0
  216. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/chemical_structure.py +0 -0
  217. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/client_base.py +0 -0
  218. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/curves.py +0 -0
  219. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/entity.py +0 -0
  220. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/experiment_groups.py +0 -0
  221. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/field_values.py +0 -0
  222. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/fields.py +0 -0
  223. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/id_source.py +0 -0
  224. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/identifier.py +0 -0
  225. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/input_attributes.py +0 -0
  226. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/inputs.py +0 -0
  227. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/outputs.py +0 -0
  228. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/permissions.py +0 -0
  229. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/phases.py +0 -0
  230. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/post_base.py +0 -0
  231. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_identifiers.py +0 -0
  232. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_inputs.py +0 -0
  233. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_links.py +0 -0
  234. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_metadata.py +0 -0
  235. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_output_metadata.py +0 -0
  236. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_tags.py +0 -0
  237. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/recipe_workflow_steps.py +0 -0
  238. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/response.py +0 -0
  239. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/units.py +0 -0
  240. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/users.py +0 -0
  241. {uncountablepythonsdk-0.0.26 → uncountablepythonsdk-0.0.28}/uncountable/types/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.26
3
+ Version: 0.0.28
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
@@ -16,21 +16,21 @@ Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
- Requires-Dist: aiotus==0.1.15
20
- Requires-Dist: aiohttp==3.9.5
21
- Requires-Dist: requests==2.31.0
22
- Requires-Dist: SQLAlchemy==1.4.52
23
- Requires-Dist: APScheduler==3.10.4
24
- Requires-Dist: python-dateutil==2.9.0.post0
25
- Requires-Dist: shelljob==0.6.3
26
- Requires-Dist: PyYAML==6.0.1
19
+ Requires-Dist: aiotus==0.*
20
+ Requires-Dist: aiohttp==3.*
21
+ Requires-Dist: requests==2.*
22
+ Requires-Dist: SQLAlchemy==1.4.*
23
+ Requires-Dist: APScheduler==3.*
24
+ Requires-Dist: python-dateutil==2.*
25
+ Requires-Dist: shelljob==0.*
26
+ Requires-Dist: PyYAML==6.*
27
27
  Provides-Extra: test
28
- Requires-Dist: mypy>=1.8.1; extra == "test"
29
- Requires-Dist: ruff>=0.2.1; extra == "test"
30
- Requires-Dist: pytest>=7.4.3; extra == "test"
31
- Requires-Dist: coverage[toml]>=6.5.0; extra == "test"
32
- Requires-Dist: pytest-cov>=4.1.0; extra == "test"
33
- Requires-Dist: pytest-xdist>=3.5.0; extra == "test"
28
+ Requires-Dist: mypy==1.*; extra == "test"
29
+ Requires-Dist: ruff==0.*; extra == "test"
30
+ Requires-Dist: pytest==7.*; extra == "test"
31
+ Requires-Dist: coverage[toml]==6.*; extra == "test"
32
+ Requires-Dist: pytest-cov==4.*; extra == "test"
33
+ Requires-Dist: pytest-xdist==3.*; extra == "test"
34
34
 
35
35
  # Uncountable Python SDK
36
36
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.26
3
+ Version: 0.0.28
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
@@ -16,21 +16,21 @@ Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
- Requires-Dist: aiotus==0.1.15
20
- Requires-Dist: aiohttp==3.9.5
21
- Requires-Dist: requests==2.31.0
22
- Requires-Dist: SQLAlchemy==1.4.52
23
- Requires-Dist: APScheduler==3.10.4
24
- Requires-Dist: python-dateutil==2.9.0.post0
25
- Requires-Dist: shelljob==0.6.3
26
- Requires-Dist: PyYAML==6.0.1
19
+ Requires-Dist: aiotus==0.*
20
+ Requires-Dist: aiohttp==3.*
21
+ Requires-Dist: requests==2.*
22
+ Requires-Dist: SQLAlchemy==1.4.*
23
+ Requires-Dist: APScheduler==3.*
24
+ Requires-Dist: python-dateutil==2.*
25
+ Requires-Dist: shelljob==0.*
26
+ Requires-Dist: PyYAML==6.*
27
27
  Provides-Extra: test
28
- Requires-Dist: mypy>=1.8.1; extra == "test"
29
- Requires-Dist: ruff>=0.2.1; extra == "test"
30
- Requires-Dist: pytest>=7.4.3; extra == "test"
31
- Requires-Dist: coverage[toml]>=6.5.0; extra == "test"
32
- Requires-Dist: pytest-cov>=4.1.0; extra == "test"
33
- Requires-Dist: pytest-xdist>=3.5.0; extra == "test"
28
+ Requires-Dist: mypy==1.*; extra == "test"
29
+ Requires-Dist: ruff==0.*; extra == "test"
30
+ Requires-Dist: pytest==7.*; extra == "test"
31
+ Requires-Dist: coverage[toml]==6.*; extra == "test"
32
+ Requires-Dist: pytest-cov==4.*; extra == "test"
33
+ Requires-Dist: pytest-xdist==3.*; extra == "test"
34
34
 
35
35
  # Uncountable Python SDK
36
36
 
@@ -0,0 +1,16 @@
1
+ aiotus==0.*
2
+ aiohttp==3.*
3
+ requests==2.*
4
+ SQLAlchemy==1.4.*
5
+ APScheduler==3.*
6
+ python-dateutil==2.*
7
+ shelljob==0.*
8
+ PyYAML==6.*
9
+
10
+ [test]
11
+ mypy==1.*
12
+ ruff==0.*
13
+ pytest==7.*
14
+ coverage[toml]==6.*
15
+ pytest-cov==4.*
16
+ pytest-xdist==3.*
@@ -744,6 +744,8 @@ class SpecEndpoint:
744
744
  result_type: ResultType = ResultType.json
745
745
  has_attachment: bool = False
746
746
  desc: str | None = None
747
+ account_type: str | None
748
+ route_group: str | None
747
749
 
748
750
  is_external: bool = False
749
751
 
@@ -767,6 +769,8 @@ class SpecEndpoint:
767
769
  "deprecated",
768
770
  "result_type",
769
771
  "has_attachment",
772
+ "account_type",
773
+ "route_group",
770
774
  ],
771
775
  )
772
776
  self.method = RouteMethod(data["method"])
@@ -787,6 +791,14 @@ class SpecEndpoint:
787
791
  assert isinstance(is_sdk, bool)
788
792
  self.is_sdk = is_sdk
789
793
 
794
+ route_group = data.get("route_group")
795
+ assert route_group is None or isinstance(route_group, str)
796
+ self.route_group = route_group
797
+
798
+ account_type = data.get("account_type")
799
+ assert account_type is None or isinstance(account_type, str)
800
+ self.account_type = account_type
801
+
790
802
  is_beta = data.get("is_beta", False)
791
803
  assert isinstance(is_beta, bool)
792
804
  self.is_beta = is_beta
@@ -63,7 +63,7 @@ base_name_map = {
63
63
  def _rewrite_with_notice(
64
64
  file_path: str, file_content: str, *, notice: str = MODIFY_NOTICE
65
65
  ) -> bool:
66
- pattern = re.compile("^\S", re.MULTILINE)
66
+ pattern = re.compile(r"^\S", re.MULTILINE)
67
67
 
68
68
  file_lines = file_content.split("\n")
69
69
  comment_lines = []
@@ -1101,7 +1101,7 @@ def _emit_api_argument_lookup(
1101
1101
  for endpoint_root in builder.api_endpoints:
1102
1102
  routes_output = config.routes_output[endpoint_root]
1103
1103
 
1104
- imports = []
1104
+ imports = ["import typing", "from dataclasses import dataclass"]
1105
1105
  mappings = []
1106
1106
  for namespace in sorted(
1107
1107
  builder.namespaces.values(),
@@ -1121,7 +1121,28 @@ def _emit_api_argument_lookup(
1121
1121
  import_alias = "_".join(namespace.path[1:])
1122
1122
  api_import = f"{config.types_package}.{'.'.join(namespace.path)}"
1123
1123
  imports.append(f"import {api_import} as {import_alias}")
1124
- mappings.append(f"{import_alias}.ENDPOINT_PATH: {import_alias}.Arguments")
1124
+
1125
+ route_group = (
1126
+ f'"{endpoint.route_group}"'
1127
+ if endpoint.route_group is not None
1128
+ else "None"
1129
+ )
1130
+ account_type = (
1131
+ f'"{endpoint.account_type}"'
1132
+ if endpoint.account_type is not None
1133
+ else "None"
1134
+ )
1135
+
1136
+ mapping = f"{INDENT}ApiEndpointKey(route={import_alias}.ENDPOINT_PATH, method={import_alias}.ENDPOINT_METHOD): ApiEndpointSpec(\n"
1137
+ mapping += f"{INDENT}{INDENT}arguments_type={import_alias}.Arguments,\n"
1138
+ mapping += f"{INDENT}{INDENT}data_type={import_alias}.Data,\n"
1139
+ mapping += f"{INDENT}{INDENT}route_group={route_group},\n"
1140
+ mapping += f"{INDENT}{INDENT}account_type={account_type},\n"
1141
+ mapping += f"{INDENT}{INDENT}route={import_alias}.ENDPOINT_PATH,\n"
1142
+ mapping += f'{INDENT}{INDENT}handler="{endpoint.function}",\n'
1143
+ mapping += f"{INDENT}{INDENT}method={import_alias}.ENDPOINT_METHOD,\n"
1144
+ mapping += f"{INDENT})"
1145
+ mappings.append(mapping)
1125
1146
 
1126
1147
  argument_lookup_out = io.StringIO()
1127
1148
  argument_lookup_out.write(MODIFY_NOTICE)
@@ -1129,8 +1150,29 @@ def _emit_api_argument_lookup(
1129
1150
  argument_lookup_out.write(
1130
1151
  f"""{LINE_BREAK.join(imports)}
1131
1152
 
1132
- {API_ARGUMENTS_NAME} = {{
1133
- {f",{LINE_BREAK}{INDENT}".join(mappings)},
1153
+ AT = typing.TypeVar("AT")
1154
+ DT = typing.TypeVar("DT")
1155
+
1156
+
1157
+ @dataclass(kw_only=True, frozen=True)
1158
+ class ApiEndpointKey:
1159
+ method: str
1160
+ route: str
1161
+
1162
+
1163
+ @dataclass(kw_only=True)
1164
+ class ApiEndpointSpec(typing.Generic[AT, DT]):
1165
+ route: str
1166
+ arguments_type: type[AT]
1167
+ data_type: type[DT]
1168
+ route_group: str | None
1169
+ account_type: str | None
1170
+ handler: str
1171
+ method: str
1172
+
1173
+
1174
+ {API_ARGUMENTS_NAME}: dict[ApiEndpointKey, ApiEndpointSpec] = {{
1175
+ {f",{LINE_BREAK}".join(mappings)},
1134
1176
  }}
1135
1177
 
1136
1178
  __all__ = ["{API_ARGUMENTS_NAME}"]
@@ -48,14 +48,14 @@ keywords = [ "uncountable", "sdk", "api", "uncountable-sdk" ]
48
48
  requires-python = ">=3.11"
49
49
  # May be compatible with older versions
50
50
  dependencies = [
51
- "aiotus == 0.1.15",
52
- "aiohttp==3.9.5",
53
- "requests == 2.31.0",
54
- "SQLAlchemy == 1.4.52",
55
- "APScheduler == 3.10.4",
56
- "python-dateutil == 2.9.0.post0",
57
- "shelljob == 0.6.3",
58
- "PyYAML== 6.0.1"
51
+ "aiotus == 0.*",
52
+ "aiohttp == 3.*",
53
+ "requests == 2.*",
54
+ "SQLAlchemy == 1.4.*",
55
+ "APScheduler == 3.*",
56
+ "python-dateutil == 2.*",
57
+ "shelljob == 0.*",
58
+ "PyYAML == 6.*"
59
59
  ]
60
60
  dynamic = ["version"]
61
61
 
@@ -64,13 +64,13 @@ dynamic = ["version"]
64
64
  # latest ones that support Python 3.7.
65
65
  test = [
66
66
  # Linting
67
- "mypy >= 1.8.1",
68
- "ruff >= 0.2.1",
67
+ "mypy == 1.*",
68
+ "ruff == 0.*",
69
69
  # Testing
70
- "pytest >= 7.4.3",
71
- "coverage[toml] >= 6.5.0",
72
- "pytest-cov >= 4.1.0",
73
- "pytest-xdist >= 3.5.0",
70
+ "pytest == 7.*",
71
+ "coverage[toml] == 6.*",
72
+ "pytest-cov == 4.*",
73
+ "pytest-xdist == 3.*",
74
74
  ]
75
75
 
76
76
  [project.urls]
@@ -27,7 +27,7 @@ OutputAttrVal:
27
27
  attribute_id:
28
28
  type: ObjectId
29
29
  desc: "The unique integer ID for the output attribute value. Used for joining and identification elsewhere."
30
- quantity_dec:
30
+ quantity_dec?:
31
31
  type: Decimal
32
32
  desc: "The value for the attribute, if it is of numeric type"
33
33
  quantity_json:
@@ -98,7 +98,7 @@ RecipeInput:
98
98
  curve_id:
99
99
  type: Optional<ObjectId>
100
100
  desc: "The id of the curve associated with the input if the input is of curve type."
101
- actual_quantity_dec:
101
+ actual_quantity_dec?:
102
102
  type: Decimal
103
103
  desc: "The actual quantity of the input if it is numeric or recipe type. If this is filled in, actual_quantity_json will not be filled in"
104
104
  actual_quantity_json:
@@ -15,7 +15,7 @@ from pkgs.serialization_util.serialization_helpers import JsonValue
15
15
  from uncountable.types.client_base import APIRequest, ClientMethods
16
16
 
17
17
  from .file_upload import FileUpload, FileUploader, UploadedFile
18
- from .types import AuthDetails, AuthDetailsApiKey, AuthDetailsOAuth
18
+ from .types import AuthDetailsAll, AuthDetailsApiKey, AuthDetailsOAuth
19
19
 
20
20
  DT = typing.TypeVar("DT")
21
21
 
@@ -129,7 +129,7 @@ oauth_bearer_token_data_parser = CachedParser(GetOauthBearerTokenData)
129
129
 
130
130
  class Client(ClientMethods):
131
131
  _parser_map: dict[type, CachedParser] = {}
132
- _auth_details: AuthDetails
132
+ _auth_details: AuthDetailsAll
133
133
  _base_url: str
134
134
  _file_uploader: FileUploader
135
135
  _cfg: ClientConfig
@@ -139,7 +139,7 @@ class Client(ClientMethods):
139
139
  self,
140
140
  *,
141
141
  base_url: str,
142
- auth_details: AuthDetails,
142
+ auth_details: AuthDetailsAll,
143
143
  config: ClientConfig | None = None,
144
144
  ):
145
145
  self._auth_details = auth_details
@@ -189,8 +189,8 @@ class Client(ClientMethods):
189
189
  try:
190
190
  data = response_data["data"]
191
191
  return cached_parser.parse_api(data)
192
- except ValueError | JSONDecodeError | KeyError:
193
- raise SDKError("unable to process response")
192
+ except (ValueError, JSONDecodeError, KeyError) as e:
193
+ raise SDKError("unable to process response") from e
194
194
 
195
195
  def _get_cached_parser(self, data_type: type[DT]) -> CachedParser[DT]:
196
196
  if data_type not in self._parser_map:
@@ -4,12 +4,12 @@ from dataclasses import dataclass
4
4
  from enum import StrEnum
5
5
  from io import BytesIO
6
6
  from pathlib import Path
7
- from typing import Generator, Literal, Self
7
+ from typing import Generator, Self
8
8
 
9
9
  import aiohttp
10
10
  import aiotus
11
11
 
12
- from .types import AuthDetails
12
+ from .types import AuthDetailsAll, AuthDetailsApiKey
13
13
 
14
14
  _CHUNK_SIZE = 5 * 1024 * 1024 # s3 requires 5MiB minimum
15
15
 
@@ -56,15 +56,18 @@ class UploadFailed(Exception):
56
56
 
57
57
 
58
58
  class FileUploader:
59
- _auth_details: AuthDetails
59
+ _auth_details: AuthDetailsAll
60
60
  _base_url: str
61
61
 
62
- def __init__(self: Self, base_url: str, auth_details: AuthDetails) -> None:
62
+ def __init__(self: Self, base_url: str, auth_details: AuthDetailsAll) -> None:
63
63
  self._base_url = base_url
64
64
  self._auth_details = auth_details
65
65
 
66
66
  async def _upload_file(self: Self, file_upload: FileUpload) -> UploadedFile:
67
67
  creation_url = f"{self._base_url}/api/external/file_upload/files"
68
+ if not isinstance(self._auth_details, AuthDetailsApiKey):
69
+ raise NotImplementedError("Unsupported authentication method.")
70
+
68
71
  auth = aiohttp.BasicAuth(
69
72
  self._auth_details.api_id, self._auth_details.api_secret_key
70
73
  )
@@ -13,4 +13,5 @@ class AuthDetailsOAuth:
13
13
  scope: str = "unc.rnd"
14
14
 
15
15
 
16
- AuthDetails = AuthDetailsApiKey | AuthDetailsOAuth
16
+ AuthDetails = AuthDetailsApiKey # Legacy Mapping
17
+ AuthDetailsAll = AuthDetailsApiKey | AuthDetailsOAuth
@@ -44,8 +44,8 @@ class Arguments:
44
44
  @dataclass(kw_only=True)
45
45
  class OutputAttrVal:
46
46
  attribute_id: base_t.ObjectId
47
- quantity_dec: Decimal
48
47
  quantity_json: base_t.JsonValue
48
+ quantity_dec: typing.Optional[Decimal] = None
49
49
 
50
50
 
51
51
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -97,10 +97,10 @@ class RecipeInput:
97
97
  quantity_dec: Decimal
98
98
  quantity_json: base_t.JsonValue
99
99
  curve_id: typing.Optional[base_t.ObjectId]
100
- actual_quantity_dec: Decimal
101
100
  actual_quantity_json: base_t.JsonValue
102
101
  input_type: str
103
102
  behavior: str
103
+ actual_quantity_dec: typing.Optional[Decimal] = None
104
104
 
105
105
 
106
106
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,16 +0,0 @@
1
- aiotus==0.1.15
2
- aiohttp==3.9.5
3
- requests==2.31.0
4
- SQLAlchemy==1.4.52
5
- APScheduler==3.10.4
6
- python-dateutil==2.9.0.post0
7
- shelljob==0.6.3
8
- PyYAML==6.0.1
9
-
10
- [test]
11
- mypy>=1.8.1
12
- ruff>=0.2.1
13
- pytest>=7.4.3
14
- coverage[toml]>=6.5.0
15
- pytest-cov>=4.1.0
16
- pytest-xdist>=3.5.0