UncountablePythonSDK 0.0.20__tar.gz → 0.0.21__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 (221) hide show
  1. {uncountablepythonsdk-0.0.20/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.21}/PKG-INFO +3 -1
  2. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21/UncountablePythonSDK.egg-info}/PKG-INFO +3 -1
  3. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/SOURCES.txt +19 -0
  4. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/requires.txt +2 -0
  5. uncountablepythonsdk-0.0.21/examples/upload_files.py +19 -0
  6. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/actions_registry/__main__.py +35 -23
  7. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/actions_registry/emit_typescript.py +71 -9
  8. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/builder.py +13 -0
  9. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/config.py +1 -0
  10. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_open_api.py +11 -0
  11. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_open_api_util.py +1 -0
  12. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_python.py +241 -55
  13. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/type_info/emit_type_info.py +129 -8
  14. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pyproject.toml +2 -0
  15. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/create_entities.yaml +12 -1
  16. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/create_entity.yaml +12 -1
  17. uncountablepythonsdk-0.0.21/type_spec/external/api/entity/transition_entity_phase.yaml +44 -0
  18. uncountablepythonsdk-0.0.21/type_spec/external/api/permissions/set_core_permissions.yaml +69 -0
  19. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/associate_recipe_as_input.yaml +4 -4
  20. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/create_recipe.yaml +2 -1
  21. uncountablepythonsdk-0.0.21/type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +16 -0
  22. uncountablepythonsdk-0.0.21/type_spec/external/api/recipes/edit_recipe_inputs.yaml +88 -0
  23. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_curve.yaml +4 -1
  24. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipes_data.yaml +6 -0
  25. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/set_recipe_metadata.yaml +1 -0
  26. uncountablepythonsdk-0.0.21/type_spec/external/api/recipes/set_recipe_tags.yaml +62 -0
  27. uncountablepythonsdk-0.0.21/uncountable/core/__init__.py +4 -0
  28. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/core/client.py +11 -9
  29. uncountablepythonsdk-0.0.21/uncountable/core/file_upload.py +95 -0
  30. uncountablepythonsdk-0.0.21/uncountable/core/types.py +22 -0
  31. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/__init__.py +18 -0
  32. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/create_entities.py +1 -1
  33. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/create_entity.py +1 -1
  34. uncountablepythonsdk-0.0.21/uncountable/types/api/entity/transition_entity_phase.py +66 -0
  35. uncountablepythonsdk-0.0.21/uncountable/types/api/permissions/set_core_permissions.py +89 -0
  36. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/associate_recipe_as_input.py +4 -3
  37. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/create_recipe.py +1 -1
  38. uncountablepythonsdk-0.0.21/uncountable/types/api/recipes/disassociate_recipe_as_input.py +35 -0
  39. uncountablepythonsdk-0.0.21/uncountable/types/api/recipes/edit_recipe_inputs.py +107 -0
  40. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_curve.py +2 -1
  41. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipes_data.py +2 -0
  42. uncountablepythonsdk-0.0.21/uncountable/types/api/recipes/set_recipe_tags.py +91 -0
  43. uncountablepythonsdk-0.0.21/uncountable/types/api/triggers/__init__.py +1 -0
  44. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/async_batch.py +9 -0
  45. uncountablepythonsdk-0.0.21/uncountable/types/async_batch_processor.py +154 -0
  46. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/client_base.py +113 -48
  47. uncountablepythonsdk-0.0.21/uncountable/types/permissions.py +46 -0
  48. uncountablepythonsdk-0.0.21/uncountable/types/post_base.py +30 -0
  49. uncountablepythonsdk-0.0.21/uncountable/types/recipe_inputs.py +30 -0
  50. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_metadata.py +2 -0
  51. uncountablepythonsdk-0.0.21/uncountable/types/recipe_workflow_steps.py +77 -0
  52. uncountablepythonsdk-0.0.20/uncountable/core/__init__.py +0 -3
  53. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/.github/workflows/documentation.yml +0 -0
  54. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/.github/workflows/publish.yml +0 -0
  55. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/.gitignore +0 -0
  56. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/README.md +0 -0
  57. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  58. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  59. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/.gitignore +0 -0
  60. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/conf.py +0 -0
  61. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/index.md +0 -0
  62. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/justfile +0 -0
  63. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/quickstart.md +0 -0
  64. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/requirements.txt +0 -0
  65. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/android-chrome-192x192.png +0 -0
  66. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/android-chrome-512x512.png +0 -0
  67. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/apple-touch-icon.png +0 -0
  68. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/browserconfig.xml +0 -0
  69. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/favicon-16x16.png +0 -0
  70. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/favicon-32x32.png +0 -0
  71. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/manifest.json +0 -0
  72. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/mstile-150x150.png +0 -0
  73. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  74. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/docs/static/logo_blue.png +0 -0
  75. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/examples/create_entity.py +0 -0
  76. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/examples/recipe-import/importer.py +0 -0
  77. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/__init__.py +0 -0
  78. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/__init__.py +0 -0
  79. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/_is_enum.py +0 -0
  80. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  81. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/argument_parser.py +0 -0
  82. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/argument_parser/case_convert.py +0 -0
  83. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization/__init__.py +0 -0
  84. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization/missing_sentry.py +0 -0
  85. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization/opaque_key.py +0 -0
  86. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization/serial_class.py +0 -0
  87. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization_util/__init__.py +0 -0
  88. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  89. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/serialization_util/serialization_helpers.py +0 -0
  90. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/strenum_compat/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/strenum_compat/strenum_compat.py +0 -0
  92. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/__init__.py +0 -0
  93. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/__main__.py +0 -0
  94. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  95. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_io_ts.py +0 -0
  96. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_typescript.py +0 -0
  97. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/emit_typescript_util.py +0 -0
  98. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/load_types.py +0 -0
  99. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/open_api_util.py +0 -0
  100. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/parts/base.py.prepart +0 -0
  101. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  102. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/test.py +0 -0
  103. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/type_info/__main__.py +0 -0
  104. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/util.py +0 -0
  105. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/__init__.py +0 -0
  106. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/__main__.py +0 -0
  107. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  108. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  109. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/pkgs/type_spec/value_spec/types.py +0 -0
  110. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/setup.cfg +0 -0
  111. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/batch/execute_batch.yaml +0 -0
  112. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/batch/execute_batch_load_async.yaml +0 -0
  113. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -0
  114. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/get_entities_data.yaml +0 -0
  115. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/list_entities.yaml +0 -0
  116. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -0
  117. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/entity/set_values.yaml +0 -0
  118. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/id_source/list_id_source.yaml +0 -0
  119. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/id_source/match_id_source.yaml +0 -0
  120. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -0
  121. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/create_inputs.yaml +0 -0
  122. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/get_input_data.yaml +0 -0
  123. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/get_input_names.yaml +0 -0
  124. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/get_inputs_data.yaml +0 -0
  125. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -0
  126. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/outputs/get_output_data.yaml +0 -0
  127. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/outputs/get_output_names.yaml +0 -0
  128. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -0
  129. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/project/get_projects.yaml +0 -0
  130. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/project/get_projects_data.yaml +0 -0
  131. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -0
  132. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -0
  133. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -0
  134. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/create_recipes.yaml +0 -0
  135. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -0
  136. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_links.yaml +0 -0
  137. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_names.yaml +0 -0
  138. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -0
  139. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -0
  140. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -0
  141. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/type_spec/external/api/triggers/run_trigger.yaml +0 -0
  142. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/__init__.py +0 -0
  144. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/construct_client.py +0 -0
  145. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/cron.py +0 -0
  146. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/db/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/db/connect.py +0 -0
  148. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/entrypoint.py +0 -0
  149. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/executors/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/executors/script_executor.py +0 -0
  151. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/job.py +0 -0
  152. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/server.py +0 -0
  153. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/integration/types.py +0 -0
  154. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/py.typed +0 -0
  155. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/__init__.py +0 -0
  156. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/batch/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/batch/execute_batch.py +0 -0
  158. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  159. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/chemical/__init__.py +0 -0
  160. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  161. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/__init__.py +0 -0
  162. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/get_entities_data.py +0 -0
  163. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/list_entities.py +0 -0
  164. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  165. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/entity/set_values.py +0 -0
  166. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/id_source/__init__.py +0 -0
  167. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/id_source/list_id_source.py +0 -0
  168. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/id_source/match_id_source.py +0 -0
  169. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/input_groups/__init__.py +0 -0
  170. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  171. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/create_inputs.py +0 -0
  173. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/get_input_data.py +0 -0
  174. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/get_input_names.py +0 -0
  175. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  176. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  177. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/get_output_data.py +0 -0
  179. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/get_output_names.py +0 -0
  180. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  181. {uncountablepythonsdk-0.0.20/uncountable/types/api/project → uncountablepythonsdk-0.0.21/uncountable/types/api/permissions}/__init__.py +0 -0
  182. {uncountablepythonsdk-0.0.20/uncountable/types/api/recipe_links → uncountablepythonsdk-0.0.21/uncountable/types/api/project}/__init__.py +0 -0
  183. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/project/get_projects.py +0 -0
  184. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/project/get_projects_data.py +0 -0
  185. {uncountablepythonsdk-0.0.20/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.21/uncountable/types/api/recipe_links}/__init__.py +0 -0
  186. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  187. {uncountablepythonsdk-0.0.20/uncountable/types/api/recipes → uncountablepythonsdk-0.0.21/uncountable/types/api/recipe_metadata}/__init__.py +0 -0
  188. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  189. {uncountablepythonsdk-0.0.20/uncountable/types/api/triggers → uncountablepythonsdk-0.0.21/uncountable/types/api/recipes}/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  191. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/create_recipes.py +0 -0
  192. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  193. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  194. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  195. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  196. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  197. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  198. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  199. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/api/triggers/run_trigger.py +0 -0
  200. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/base.py +0 -0
  201. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/calculations.py +0 -0
  202. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/chemical_structure.py +0 -0
  203. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/curves.py +0 -0
  204. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/entity.py +0 -0
  205. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/experiment_groups.py +0 -0
  206. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/field_values.py +0 -0
  207. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/fields.py +0 -0
  208. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/id_source.py +0 -0
  209. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/identifier.py +0 -0
  210. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/input_attributes.py +0 -0
  211. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/inputs.py +0 -0
  212. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/outputs.py +0 -0
  213. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/phases.py +0 -0
  214. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_identifiers.py +0 -0
  215. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_links.py +0 -0
  216. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_output_metadata.py +0 -0
  217. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/recipe_tags.py +0 -0
  218. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/response.py +0 -0
  219. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/units.py +0 -0
  220. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/users.py +0 -0
  221. {uncountablepythonsdk-0.0.20 → uncountablepythonsdk-0.0.21}/uncountable/types/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.20
3
+ Version: 0.0.21
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,6 +16,8 @@ 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
19
21
  Requires-Dist: requests==2.31.0
20
22
  Requires-Dist: SQLAlchemy==1.4.52
21
23
  Requires-Dist: APScheduler==3.10.4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.20
3
+ Version: 0.0.21
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,6 +16,8 @@ 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
19
21
  Requires-Dist: requests==2.31.0
20
22
  Requires-Dist: SQLAlchemy==1.4.52
21
23
  Requires-Dist: APScheduler==3.10.4
@@ -25,6 +25,7 @@ docs/static/favicons/manifest.json
25
25
  docs/static/favicons/mstile-150x150.png
26
26
  docs/static/favicons/safari-pinned-tab.svg
27
27
  examples/create_entity.py
28
+ examples/upload_files.py
28
29
  examples/recipe-import/importer.py
29
30
  pkgs/__init__.py
30
31
  pkgs/argument_parser/__init__.py
@@ -76,6 +77,7 @@ type_spec/external/api/entity/get_entities_data.yaml
76
77
  type_spec/external/api/entity/list_entities.yaml
77
78
  type_spec/external/api/entity/resolve_entity_ids.yaml
78
79
  type_spec/external/api/entity/set_values.yaml
80
+ type_spec/external/api/entity/transition_entity_phase.yaml
79
81
  type_spec/external/api/id_source/list_id_source.yaml
80
82
  type_spec/external/api/id_source/match_id_source.yaml
81
83
  type_spec/external/api/input_groups/get_input_group_names.yaml
@@ -87,6 +89,7 @@ type_spec/external/api/inputs/set_input_attribute_values.yaml
87
89
  type_spec/external/api/outputs/get_output_data.yaml
88
90
  type_spec/external/api/outputs/get_output_names.yaml
89
91
  type_spec/external/api/outputs/resolve_output_conditions.yaml
92
+ type_spec/external/api/permissions/set_core_permissions.yaml
90
93
  type_spec/external/api/project/get_projects.yaml
91
94
  type_spec/external/api/project/get_projects_data.yaml
92
95
  type_spec/external/api/recipe_links/create_recipe_link.yaml
@@ -95,6 +98,8 @@ type_spec/external/api/recipes/associate_recipe_as_input.yaml
95
98
  type_spec/external/api/recipes/associate_recipe_as_lot.yaml
96
99
  type_spec/external/api/recipes/create_recipe.yaml
97
100
  type_spec/external/api/recipes/create_recipes.yaml
101
+ type_spec/external/api/recipes/disassociate_recipe_as_input.yaml
102
+ type_spec/external/api/recipes/edit_recipe_inputs.yaml
98
103
  type_spec/external/api/recipes/get_curve.yaml
99
104
  type_spec/external/api/recipes/get_recipe_calculations.yaml
100
105
  type_spec/external/api/recipes/get_recipe_links.yaml
@@ -104,11 +109,14 @@ type_spec/external/api/recipes/get_recipes_data.yaml
104
109
  type_spec/external/api/recipes/set_recipe_inputs.yaml
105
110
  type_spec/external/api/recipes/set_recipe_metadata.yaml
106
111
  type_spec/external/api/recipes/set_recipe_outputs.yaml
112
+ type_spec/external/api/recipes/set_recipe_tags.yaml
107
113
  type_spec/external/api/triggers/run_trigger.yaml
108
114
  uncountable/__init__.py
109
115
  uncountable/py.typed
110
116
  uncountable/core/__init__.py
111
117
  uncountable/core/client.py
118
+ uncountable/core/file_upload.py
119
+ uncountable/core/types.py
112
120
  uncountable/integration/__init__.py
113
121
  uncountable/integration/construct_client.py
114
122
  uncountable/integration/cron.py
@@ -122,6 +130,7 @@ uncountable/integration/executors/__init__.py
122
130
  uncountable/integration/executors/script_executor.py
123
131
  uncountable/types/__init__.py
124
132
  uncountable/types/async_batch.py
133
+ uncountable/types/async_batch_processor.py
125
134
  uncountable/types/base.py
126
135
  uncountable/types/calculations.py
127
136
  uncountable/types/chemical_structure.py
@@ -136,12 +145,16 @@ uncountable/types/identifier.py
136
145
  uncountable/types/input_attributes.py
137
146
  uncountable/types/inputs.py
138
147
  uncountable/types/outputs.py
148
+ uncountable/types/permissions.py
139
149
  uncountable/types/phases.py
150
+ uncountable/types/post_base.py
140
151
  uncountable/types/recipe_identifiers.py
152
+ uncountable/types/recipe_inputs.py
141
153
  uncountable/types/recipe_links.py
142
154
  uncountable/types/recipe_metadata.py
143
155
  uncountable/types/recipe_output_metadata.py
144
156
  uncountable/types/recipe_tags.py
157
+ uncountable/types/recipe_workflow_steps.py
145
158
  uncountable/types/response.py
146
159
  uncountable/types/units.py
147
160
  uncountable/types/users.py
@@ -159,6 +172,7 @@ uncountable/types/api/entity/get_entities_data.py
159
172
  uncountable/types/api/entity/list_entities.py
160
173
  uncountable/types/api/entity/resolve_entity_ids.py
161
174
  uncountable/types/api/entity/set_values.py
175
+ uncountable/types/api/entity/transition_entity_phase.py
162
176
  uncountable/types/api/id_source/__init__.py
163
177
  uncountable/types/api/id_source/list_id_source.py
164
178
  uncountable/types/api/id_source/match_id_source.py
@@ -174,6 +188,8 @@ uncountable/types/api/outputs/__init__.py
174
188
  uncountable/types/api/outputs/get_output_data.py
175
189
  uncountable/types/api/outputs/get_output_names.py
176
190
  uncountable/types/api/outputs/resolve_output_conditions.py
191
+ uncountable/types/api/permissions/__init__.py
192
+ uncountable/types/api/permissions/set_core_permissions.py
177
193
  uncountable/types/api/project/__init__.py
178
194
  uncountable/types/api/project/get_projects.py
179
195
  uncountable/types/api/project/get_projects_data.py
@@ -186,6 +202,8 @@ uncountable/types/api/recipes/associate_recipe_as_input.py
186
202
  uncountable/types/api/recipes/associate_recipe_as_lot.py
187
203
  uncountable/types/api/recipes/create_recipe.py
188
204
  uncountable/types/api/recipes/create_recipes.py
205
+ uncountable/types/api/recipes/disassociate_recipe_as_input.py
206
+ uncountable/types/api/recipes/edit_recipe_inputs.py
189
207
  uncountable/types/api/recipes/get_curve.py
190
208
  uncountable/types/api/recipes/get_recipe_calculations.py
191
209
  uncountable/types/api/recipes/get_recipe_links.py
@@ -195,5 +213,6 @@ uncountable/types/api/recipes/get_recipes_data.py
195
213
  uncountable/types/api/recipes/set_recipe_inputs.py
196
214
  uncountable/types/api/recipes/set_recipe_metadata.py
197
215
  uncountable/types/api/recipes/set_recipe_outputs.py
216
+ uncountable/types/api/recipes/set_recipe_tags.py
198
217
  uncountable/types/api/triggers/__init__.py
199
218
  uncountable/types/api/triggers/run_trigger.py
@@ -1,3 +1,5 @@
1
+ aiotus==0.1.15
2
+ aiohttp==3.9.5
1
3
  requests==2.31.0
2
4
  SQLAlchemy==1.4.52
3
5
  APScheduler==3.10.4
@@ -0,0 +1,19 @@
1
+ import os
2
+ from pprint import pprint
3
+
4
+ from uncountable import AuthDetailsApiKey, Client, MediaFileUpload
5
+
6
+ client = Client(
7
+ base_url="http://localhost:5000",
8
+ auth_details=AuthDetailsApiKey(
9
+ api_id=os.environ["UNC_API_ID"],
10
+ api_secret_key=os.environ["UNC_API_SECRET_KEY"],
11
+ ),
12
+ )
13
+ uploaded = client.upload_files(
14
+ file_uploads=[
15
+ MediaFileUpload(path="/my/file/path.doc"),
16
+ MediaFileUpload(path="/my/file/path2.doc"),
17
+ ]
18
+ )
19
+ pprint(uploaded)
@@ -14,7 +14,7 @@ from pkgs.type_spec import builder
14
14
  from ...argument_parser import CachedParser
15
15
  from ..emit_typescript_util import ts_name
16
16
  from ..util import rewrite_file
17
- from .emit_typescript import emit_action_definitions
17
+ from .emit_typescript import ActionDefinitionWithArgument, emit_action_definitions
18
18
 
19
19
  key_name = "name"
20
20
  key_icon = "icon"
@@ -61,11 +61,11 @@ def get_action_registry_files_info() -> list[ActionRegistryFileInfo]:
61
61
 
62
62
  def main() -> None:
63
63
  files_info = get_action_registry_files_info()
64
- action_definitions: defaultdict[str, list[actions_registry_t.ActionDefinition]] = (
64
+ action_definitions: defaultdict[str, list[ActionDefinitionWithArgument]] = (
65
65
  defaultdict(list)
66
66
  )
67
- all_action_definitions: list[actions_registry_t.ActionDefinition] = []
68
-
67
+ all_action_definitions: list[actions_registry_t.ActionDefinitionInternal] = []
68
+ action_definitions_with_arguments_list: list[ActionDefinitionWithArgument] = []
69
69
  for file_info in files_info:
70
70
  in_action_definitions = action_definition_parser.parse_yaml_file(
71
71
  file_info.filepath
@@ -79,29 +79,41 @@ def main() -> None:
79
79
  modules.append(file_info.filename)
80
80
 
81
81
  module_str = "_".join(modules)
82
- all_action_definitions.append(
83
- actions_registry_t.ActionDefinition(
84
- name=definition.name,
85
- short_description=definition.short_description,
86
- description=definition.description,
87
- icon=definition.icon,
82
+ action_definition = actions_registry_t.ActionDefinitionInternal(
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
+ action_definitions_with_arguments_list.append(
99
+ ActionDefinitionWithArgument(
100
+ module=module_str,
88
101
  ref_name=ref_name,
89
- module=actions_registry_t.ActionsRegistryModule(
90
- ts_name(module_str, name_case=builder.NameCase.convert)
91
- ),
92
- visibility_scope=[
93
- actions_registry_t.ActionDefinitionVisibilityScope(item)
94
- for item in definition.visibility_scope
95
- ]
96
- if definition.visibility_scope is not None
97
- else None,
102
+ arguments=definition.arguments,
103
+ definition=action_definition,
98
104
  )
99
105
  )
100
- all_action_definitions = sorted(
101
- all_action_definitions, key=lambda item: (item.module, item.ref_name)
106
+ all_action_definitions.append(action_definition)
107
+ action_definitions_with_arguments_list = sorted(
108
+ action_definitions_with_arguments_list,
109
+ key=lambda item: (item.module, item.ref_name),
102
110
  )
103
- for action_definition in all_action_definitions:
104
- action_definitions[action_definition.module].append(action_definition)
111
+
112
+ for action_definition_with_argument in action_definitions_with_arguments_list:
113
+ action_definitions[action_definition_with_argument.module].append(
114
+ action_definition_with_argument
115
+ )
116
+
105
117
  ts_content = emit_action_definitions(action_definitions)
106
118
  rewrite_file(
107
119
  "main/site/js/materials/base/actions_registry/action_definitions.tsx",
@@ -1,17 +1,34 @@
1
1
  import io
2
2
  from collections import defaultdict
3
+ from dataclasses import dataclass
3
4
 
4
5
  from main.base.types import actions_registry_t
5
6
 
6
7
  from ...type_spec import builder
7
- from ..emit_typescript_util import INDENT, MODIFY_NOTICE, ts_name
8
+ from ..emit_typescript_util import (
9
+ INDENT,
10
+ MODIFY_NOTICE,
11
+ resolve_namespace_ref,
12
+ ts_name,
13
+ ts_type_name,
14
+ )
8
15
  from ..util import encode_common_string
9
16
 
10
17
 
11
- def _action_symbol_name(action_definition: actions_registry_t.ActionDefinition) -> str:
18
+ def _action_symbol_name(
19
+ action_definition: actions_registry_t.ActionDefinitionInternal,
20
+ ) -> str:
12
21
  return f"{ts_name(action_definition.ref_name, name_case=builder.NameCase.convert)}"
13
22
 
14
23
 
24
+ def _action_type_name(ref_name: str) -> str:
25
+ return f"{ts_type_name(ref_name)}"
26
+
27
+
28
+ def _action_namespace_name(name: str) -> str:
29
+ return f"{resolve_namespace_ref(builder.SpecNamespace(name=name))}"
30
+
31
+
15
32
  def _action_module_name_base(module: str) -> str:
16
33
  return f"{ts_name(module, name_case=builder.NameCase.convert)}"
17
34
 
@@ -24,24 +41,54 @@ def _action_module_name(module: str) -> str:
24
41
  return f"ActionsRegistryT.ActionsRegistryModule.{_action_module_name_base(module)}"
25
42
 
26
43
 
44
+ @dataclass(kw_only=True)
45
+ class ActionDefinitionWithArgument:
46
+ module: str
47
+ ref_name: str
48
+ arguments: str | None
49
+ definition: actions_registry_t.ActionDefinitionInternal
50
+
51
+
52
+ def _emit_imports(
53
+ action_definitions: defaultdict[str, list[ActionDefinitionWithArgument]],
54
+ ) -> str:
55
+ out = io.StringIO()
56
+ namespaces = set()
57
+ for definitions in action_definitions.values():
58
+ for definition in definitions:
59
+ if definition.arguments is not None:
60
+ argument_parts = definition.arguments.split(".")
61
+ namespace = argument_parts[0]
62
+ namespaces.add(namespace)
63
+ namespaces_to_import = ", ".join(
64
+ sorted([f"type {_action_namespace_name(item)}" for item in list(namespaces)])
65
+ )
66
+ out.write(
67
+ f'import {{ ActionsRegistryT, {namespaces_to_import} }} from "unc_mat/types"\n\n'
68
+ )
69
+ out.write(MODIFY_NOTICE)
70
+ return out.getvalue()
71
+
72
+
27
73
  def emit_action_definitions(
28
- action_definitions: defaultdict[str, list[actions_registry_t.ActionDefinition]],
74
+ action_definitions: defaultdict[str, list[ActionDefinitionWithArgument]],
29
75
  ) -> str:
30
76
  out = io.StringIO()
31
77
  out.write(MODIFY_NOTICE)
32
78
  out.write("\n")
33
- out.write('import { ActionsRegistryT } from "unc_mat/types"\n\n')
34
- out.write(MODIFY_NOTICE)
79
+ out.write(_emit_imports(action_definitions))
35
80
  modules = []
36
81
  for key, values in action_definitions.items():
37
82
  out.write(MODIFY_NOTICE)
38
83
  modules.append(key)
39
84
  out.write(f"export const {_action_module_name_obj(key)} = {{\n")
40
- for action_definition in values:
85
+ for item in values:
41
86
  out.write(MODIFY_NOTICE)
42
- out.write(_emit_action_definition(action_definition, INDENT))
87
+ out.write(_emit_action_definition(item.definition, item.arguments, INDENT))
43
88
  out.write("}\n")
44
89
 
90
+ out.write(MODIFY_NOTICE)
91
+ out.write("\n")
45
92
  out.write(MODIFY_NOTICE)
46
93
  out.write("\n")
47
94
  out.write("export const actionDefinitions = {\n")
@@ -58,12 +105,27 @@ def emit_action_definitions(
58
105
  return out.getvalue()
59
106
 
60
107
 
108
+ def _get_argument_type(arguments: str | None) -> str | None:
109
+ if arguments is None:
110
+ return None
111
+ argument_parts = arguments.split(".")
112
+ namespace = argument_parts[0]
113
+ type_name = argument_parts[1]
114
+ if namespace is not None and type_name is not None:
115
+ return f"{_action_namespace_name(namespace)}.{type_name}"
116
+ return None
117
+
118
+
61
119
  def _emit_action_definition(
62
- action_definition: actions_registry_t.ActionDefinition, indent: str
120
+ action_definition: actions_registry_t.ActionDefinitionInternal,
121
+ arguments: str | None,
122
+ indent: str,
63
123
  ) -> str:
64
124
  out = io.StringIO()
65
125
 
66
126
  sub_indent = indent + INDENT
127
+ argument_type = _get_argument_type(arguments)
128
+ argument_type = f"<{argument_type}>" if argument_type is not None else ""
67
129
  out.write(f"{indent}{_action_symbol_name(action_definition)}: {{\n")
68
130
  out.write(f"{sub_indent}name: {encode_common_string(action_definition.name)},\n")
69
131
  if action_definition.icon is not None:
@@ -85,7 +147,7 @@ def _emit_action_definition(
85
147
  out.write(
86
148
  f"{sub_indent}visibilityScope: {_emit_visibility_scope(action_definition.visibility_scope)},\n"
87
149
  )
88
- out.write(f"{indent}}},\n")
150
+ out.write(f"{indent}}} as ActionsRegistryT.ActionDefinition{argument_type},\n")
89
151
  return out.getvalue()
90
152
 
91
153
 
@@ -680,9 +680,11 @@ class SpecEndpoint:
680
680
  path_basename: str
681
681
  data_loader: bool
682
682
  is_sdk: bool
683
+ is_beta: bool
683
684
  # Don't emit TypeScript endpoint code
684
685
  suppress_ts: bool
685
686
  function: Optional[str]
687
+ async_batch_path: str | None = None
686
688
  result_type: ResultType = ResultType.json
687
689
  has_attachment: bool = False
688
690
  desc: str | None = None
@@ -701,6 +703,8 @@ class SpecEndpoint:
701
703
  "path",
702
704
  "data_loader",
703
705
  "is_sdk",
706
+ "is_beta",
707
+ "async_batch_path",
704
708
  "function",
705
709
  "suppress_ts",
706
710
  "desc",
@@ -727,6 +731,15 @@ class SpecEndpoint:
727
731
  assert isinstance(is_sdk, bool)
728
732
  self.is_sdk = is_sdk
729
733
 
734
+ is_beta = data.get("is_beta", False)
735
+ assert isinstance(is_beta, bool)
736
+ self.is_beta = is_beta
737
+
738
+ async_batch_path = data.get("async_batch_path")
739
+ if async_batch_path is not None:
740
+ assert isinstance(async_batch_path, str)
741
+ self.async_batch_path = async_batch_path
742
+
730
743
  self.function = data.get("function")
731
744
 
732
745
  suppress_ts = data.get("suppress_ts", False)
@@ -56,6 +56,7 @@ class PythonConfig(BaseLanguageConfig):
56
56
  emit_api_argument_lookup: bool = (
57
57
  False # emit a lookup for api endpoint path to argument type.
58
58
  )
59
+ emit_async_batch_processor: bool = False # emit the async batch wrapping functions
59
60
  emit_client_class: bool = False # emit the base class for the api client
60
61
  all_named_type_exports: bool = False # emit __all__ for all named type exports
61
62
  sdk_endpoints_only: bool = False # only emit is_sdk endpoints
@@ -99,6 +99,9 @@ def emit_open_api(builder: builder.SpecBuilder, *, config: OpenAPIConfig) -> Non
99
99
  for namespace in sorted(builder.namespaces.values(), key=lambda ns: ns.name):
100
100
  ctx = EmitOpenAPIContext(namespace=namespace)
101
101
 
102
+ if ctx.namespace.endpoint is not None and ctx.namespace.endpoint.is_beta:
103
+ continue
104
+
102
105
  if ctx.namespace.name == "base":
103
106
  # TODO: add additional base defintions here
104
107
  ctx.types["ObjectId"] = OpenAPIIntegerT()
@@ -153,6 +156,12 @@ def _emit_endpoint_parameters(typ: OpenAPIType | None) -> dict[str, list[dict[st
153
156
  }
154
157
 
155
158
 
159
+ def _emit_is_beta(is_beta: bool) -> dict[str, bool]:
160
+ if is_beta:
161
+ return {"x-beta": True}
162
+ return {}
163
+
164
+
156
165
  def _emit_namespace(
157
166
  gctx: EmitOpenAPIGlobalContext,
158
167
  ctx: EmitOpenAPIContext,
@@ -179,6 +188,7 @@ def _emit_namespace(
179
188
  "summary": endpoint.summary,
180
189
  "description": endpoint.description,
181
190
  }
191
+ | _emit_is_beta(endpoint.is_beta)
182
192
  | _emit_endpoint_parameters(argument_type)
183
193
  | {
184
194
  "responses": {
@@ -386,6 +396,7 @@ def _emit_endpoint(
386
396
  tags=[tag_name],
387
397
  summary=f"{'/'.join(namespace.path[path_cutoff:])}",
388
398
  description=description,
399
+ is_beta=namespace.endpoint.is_beta,
389
400
  )
390
401
 
391
402
 
@@ -62,6 +62,7 @@ class EmitOpenAPIEndpoint:
62
62
  tags: list[str]
63
63
  summary: str
64
64
  description: str
65
+ is_beta: bool
65
66
 
66
67
 
67
68
  @dataclass