UncountablePythonSDK 0.0.25__tar.gz → 0.0.26__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 (240) hide show
  1. {uncountablepythonsdk-0.0.25/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.26}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/UncountablePythonSDK.egg-info/SOURCES.txt +16 -0
  4. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/examples/create_entity.py +1 -2
  5. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/argument_parser/argument_parser.py +41 -6
  6. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/builder.py +6 -1
  7. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/emit_open_api.py +14 -5
  8. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/emit_open_api_util.py +1 -0
  9. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/list_entities.yaml +2 -2
  10. uncountablepythonsdk-0.0.26/type_spec/external/api/entity/lock_entity.yaml +21 -0
  11. uncountablepythonsdk-0.0.26/type_spec/external/api/entity/unlock_entity.yaml +18 -0
  12. uncountablepythonsdk-0.0.26/type_spec/external/api/field_options/upsert_field_options.yaml +37 -0
  13. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/id_source/list_id_source.yaml +2 -2
  14. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/inputs/get_input_data.yaml +2 -2
  15. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/inputs/get_input_names.yaml +2 -2
  16. uncountablepythonsdk-0.0.26/type_spec/external/api/inputs/set_input_category.yaml +23 -0
  17. uncountablepythonsdk-0.0.26/type_spec/external/api/inputs/set_input_subcategories.yaml +23 -0
  18. uncountablepythonsdk-0.0.26/type_spec/external/api/material_families/update_entity_material_families.yaml +33 -0
  19. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/outputs/get_output_data.yaml +2 -2
  20. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/outputs/get_output_names.yaml +2 -2
  21. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/project/get_projects_data.yaml +2 -2
  22. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +2 -2
  23. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/create_recipe.yaml +3 -0
  24. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/get_recipes_data.yaml +2 -2
  25. uncountablepythonsdk-0.0.26/type_spec/external/api/recipes/unarchive_recipes.yaml +17 -0
  26. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/__init__.py +14 -0
  27. uncountablepythonsdk-0.0.26/uncountable/types/api/entity/lock_entity.py +38 -0
  28. uncountablepythonsdk-0.0.26/uncountable/types/api/entity/unlock_entity.py +37 -0
  29. uncountablepythonsdk-0.0.26/uncountable/types/api/field_options/upsert_field_options.py +45 -0
  30. uncountablepythonsdk-0.0.26/uncountable/types/api/inputs/set_input_category.py +37 -0
  31. uncountablepythonsdk-0.0.26/uncountable/types/api/inputs/set_input_subcategories.py +38 -0
  32. uncountablepythonsdk-0.0.26/uncountable/types/api/material_families/update_entity_material_families.py +41 -0
  33. uncountablepythonsdk-0.0.26/uncountable/types/api/recipes/__init__.py +1 -0
  34. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/create_recipe.py +1 -0
  35. uncountablepythonsdk-0.0.26/uncountable/types/api/recipes/unarchive_recipes.py +34 -0
  36. uncountablepythonsdk-0.0.26/uncountable/types/api/triggers/__init__.py +1 -0
  37. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/async_batch_processor.py +3 -0
  38. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/client_base.py +192 -18
  39. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/.github/workflows/documentation.yml +0 -0
  40. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/.github/workflows/publish.yml +0 -0
  41. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/.gitignore +0 -0
  42. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/README.md +0 -0
  43. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  44. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  45. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  46. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/.gitignore +0 -0
  47. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/conf.py +0 -0
  48. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/index.md +0 -0
  49. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/justfile +0 -0
  50. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/quickstart.md +0 -0
  51. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/requirements.txt +0 -0
  52. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/android-chrome-192x192.png +0 -0
  53. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/android-chrome-512x512.png +0 -0
  54. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/apple-touch-icon.png +0 -0
  55. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/browserconfig.xml +0 -0
  56. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/favicon-16x16.png +0 -0
  57. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/favicon-32x32.png +0 -0
  58. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/manifest.json +0 -0
  59. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/mstile-150x150.png +0 -0
  60. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  61. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/docs/static/logo_blue.png +0 -0
  62. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/examples/async_batch.py +0 -0
  63. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/examples/recipe-import/importer.py +0 -0
  64. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/examples/upload_files.py +0 -0
  65. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/__init__.py +0 -0
  66. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/argument_parser/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/argument_parser/_is_enum.py +0 -0
  68. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  69. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/argument_parser/case_convert.py +0 -0
  70. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization/__init__.py +0 -0
  71. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization/missing_sentry.py +0 -0
  72. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization/opaque_key.py +0 -0
  73. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization/serial_class.py +0 -0
  74. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization_util/__init__.py +0 -0
  75. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  76. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/serialization_util/serialization_helpers.py +0 -0
  77. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/strenum_compat/__init__.py +0 -0
  78. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/strenum_compat/strenum_compat.py +0 -0
  79. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/__main__.py +0 -0
  81. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  82. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  83. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  84. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/config.py +0 -0
  85. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/emit_io_ts.py +0 -0
  86. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/emit_python.py +0 -0
  87. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/emit_typescript.py +0 -0
  88. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/emit_typescript_util.py +0 -0
  89. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/load_types.py +0 -0
  90. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/open_api_util.py +0 -0
  91. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/parts/base.py.prepart +0 -0
  92. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  93. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/test.py +0 -0
  94. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/type_info/__main__.py +0 -0
  95. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  96. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/util.py +0 -0
  97. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/value_spec/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/value_spec/__main__.py +0 -0
  99. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  100. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  101. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pkgs/type_spec/value_spec/types.py +0 -0
  102. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/pyproject.toml +0 -0
  103. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/setup.cfg +0 -0
  104. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/batch/execute_batch.yaml +0 -0
  105. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/batch/execute_batch_load_async.yaml +0 -0
  106. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -0
  107. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/create_entities.yaml +0 -0
  108. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/create_entity.yaml +0 -0
  109. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/get_entities_data.yaml +0 -0
  110. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -0
  111. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/set_values.yaml +0 -0
  112. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/entity/transition_entity_phase.yaml +0 -0
  113. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/id_source/match_id_source.yaml +0 -0
  114. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -0
  115. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/inputs/create_inputs.yaml +0 -0
  116. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/inputs/get_inputs_data.yaml +0 -0
  117. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -0
  118. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -0
  119. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/permissions/set_core_permissions.yaml +0 -0
  120. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/project/get_projects.yaml +0 -0
  121. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -0
  122. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/archive_recipes.yaml +0 -0
  123. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -0
  124. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -0
  125. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/create_recipes.yaml +0 -0
  126. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -0
  127. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -0
  128. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/get_curve.yaml +0 -0
  129. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -0
  130. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/get_recipe_links.yaml +0 -0
  131. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/get_recipe_names.yaml +0 -0
  132. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -0
  133. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -0
  134. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -0
  135. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -0
  136. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/recipes/set_recipe_tags.yaml +0 -0
  137. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/type_spec/external/api/triggers/run_trigger.yaml +0 -0
  138. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/core/__init__.py +0 -0
  140. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/core/async_batch.py +0 -0
  141. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/core/client.py +0 -0
  142. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/core/file_upload.py +0 -0
  143. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/core/types.py +0 -0
  144. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/construct_client.py +0 -0
  146. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/cron.py +0 -0
  147. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/db/__init__.py +0 -0
  148. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/db/connect.py +0 -0
  149. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/entrypoint.py +0 -0
  150. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/executors/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/executors/script_executor.py +0 -0
  152. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/job.py +0 -0
  153. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/server.py +0 -0
  154. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/integration/types.py +0 -0
  155. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/py.typed +0 -0
  156. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/batch/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/batch/execute_batch.py +0 -0
  159. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  160. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/chemical/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  162. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/create_entities.py +0 -0
  164. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/create_entity.py +0 -0
  165. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/get_entities_data.py +0 -0
  166. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/list_entities.py +0 -0
  167. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  168. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/set_values.py +0 -0
  169. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  170. {uncountablepythonsdk-0.0.25/uncountable/types/api/id_source → uncountablepythonsdk-0.0.26/uncountable/types/api/field_options}/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.25/uncountable/types/api/input_groups → uncountablepythonsdk-0.0.26/uncountable/types/api/id_source}/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/id_source/list_id_source.py +0 -0
  173. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/id_source/match_id_source.py +0 -0
  174. {uncountablepythonsdk-0.0.25/uncountable/types/api/inputs → uncountablepythonsdk-0.0.26/uncountable/types/api/input_groups}/__init__.py +0 -0
  175. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  176. {uncountablepythonsdk-0.0.25/uncountable/types/api/outputs → uncountablepythonsdk-0.0.26/uncountable/types/api/inputs}/__init__.py +0 -0
  177. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/inputs/create_inputs.py +0 -0
  178. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/inputs/get_input_data.py +0 -0
  179. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/inputs/get_input_names.py +0 -0
  180. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  181. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  182. {uncountablepythonsdk-0.0.25/uncountable/types/api/permissions → uncountablepythonsdk-0.0.26/uncountable/types/api/material_families}/__init__.py +0 -0
  183. {uncountablepythonsdk-0.0.25/uncountable/types/api/project → uncountablepythonsdk-0.0.26/uncountable/types/api/outputs}/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/outputs/get_output_data.py +0 -0
  185. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/outputs/get_output_names.py +0 -0
  186. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  187. {uncountablepythonsdk-0.0.25/uncountable/types/api/recipe_links → uncountablepythonsdk-0.0.26/uncountable/types/api/permissions}/__init__.py +0 -0
  188. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  189. {uncountablepythonsdk-0.0.25/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.26/uncountable/types/api/project}/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/project/get_projects.py +0 -0
  191. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/project/get_projects_data.py +0 -0
  192. {uncountablepythonsdk-0.0.25/uncountable/types/api/recipes → uncountablepythonsdk-0.0.26/uncountable/types/api/recipe_links}/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  194. {uncountablepythonsdk-0.0.25/uncountable/types/api/triggers → uncountablepythonsdk-0.0.26/uncountable/types/api/recipe_metadata}/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  196. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  197. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  198. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  199. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/create_recipes.py +0 -0
  200. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  201. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  202. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/get_curve.py +0 -0
  203. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  204. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  205. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  206. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  207. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  208. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  209. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  210. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  211. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  212. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/api/triggers/run_trigger.py +0 -0
  213. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/async_batch.py +0 -0
  214. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/base.py +0 -0
  215. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/calculations.py +0 -0
  216. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/chemical_structure.py +0 -0
  217. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/curves.py +0 -0
  218. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/entity.py +0 -0
  219. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/experiment_groups.py +0 -0
  220. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/field_values.py +0 -0
  221. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/fields.py +0 -0
  222. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/id_source.py +0 -0
  223. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/identifier.py +0 -0
  224. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/input_attributes.py +0 -0
  225. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/inputs.py +0 -0
  226. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/outputs.py +0 -0
  227. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/permissions.py +0 -0
  228. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/phases.py +0 -0
  229. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/post_base.py +0 -0
  230. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_identifiers.py +0 -0
  231. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_inputs.py +0 -0
  232. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_links.py +0 -0
  233. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_metadata.py +0 -0
  234. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_output_metadata.py +0 -0
  235. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_tags.py +0 -0
  236. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/recipe_workflow_steps.py +0 -0
  237. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/response.py +0 -0
  238. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/units.py +0 -0
  239. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/users.py +0 -0
  240. {uncountablepythonsdk-0.0.25 → uncountablepythonsdk-0.0.26}/uncountable/types/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.25
3
+ Version: 0.0.26
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.25
3
+ Version: 0.0.26
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
@@ -76,9 +76,12 @@ type_spec/external/api/entity/create_entities.yaml
76
76
  type_spec/external/api/entity/create_entity.yaml
77
77
  type_spec/external/api/entity/get_entities_data.yaml
78
78
  type_spec/external/api/entity/list_entities.yaml
79
+ type_spec/external/api/entity/lock_entity.yaml
79
80
  type_spec/external/api/entity/resolve_entity_ids.yaml
80
81
  type_spec/external/api/entity/set_values.yaml
81
82
  type_spec/external/api/entity/transition_entity_phase.yaml
83
+ type_spec/external/api/entity/unlock_entity.yaml
84
+ type_spec/external/api/field_options/upsert_field_options.yaml
82
85
  type_spec/external/api/id_source/list_id_source.yaml
83
86
  type_spec/external/api/id_source/match_id_source.yaml
84
87
  type_spec/external/api/input_groups/get_input_group_names.yaml
@@ -87,6 +90,9 @@ type_spec/external/api/inputs/get_input_data.yaml
87
90
  type_spec/external/api/inputs/get_input_names.yaml
88
91
  type_spec/external/api/inputs/get_inputs_data.yaml
89
92
  type_spec/external/api/inputs/set_input_attribute_values.yaml
93
+ type_spec/external/api/inputs/set_input_category.yaml
94
+ type_spec/external/api/inputs/set_input_subcategories.yaml
95
+ type_spec/external/api/material_families/update_entity_material_families.yaml
90
96
  type_spec/external/api/outputs/get_output_data.yaml
91
97
  type_spec/external/api/outputs/get_output_names.yaml
92
98
  type_spec/external/api/outputs/resolve_output_conditions.yaml
@@ -112,6 +118,7 @@ type_spec/external/api/recipes/set_recipe_inputs.yaml
112
118
  type_spec/external/api/recipes/set_recipe_metadata.yaml
113
119
  type_spec/external/api/recipes/set_recipe_outputs.yaml
114
120
  type_spec/external/api/recipes/set_recipe_tags.yaml
121
+ type_spec/external/api/recipes/unarchive_recipes.yaml
115
122
  type_spec/external/api/triggers/run_trigger.yaml
116
123
  uncountable/__init__.py
117
124
  uncountable/py.typed
@@ -173,9 +180,13 @@ uncountable/types/api/entity/create_entities.py
173
180
  uncountable/types/api/entity/create_entity.py
174
181
  uncountable/types/api/entity/get_entities_data.py
175
182
  uncountable/types/api/entity/list_entities.py
183
+ uncountable/types/api/entity/lock_entity.py
176
184
  uncountable/types/api/entity/resolve_entity_ids.py
177
185
  uncountable/types/api/entity/set_values.py
178
186
  uncountable/types/api/entity/transition_entity_phase.py
187
+ uncountable/types/api/entity/unlock_entity.py
188
+ uncountable/types/api/field_options/__init__.py
189
+ uncountable/types/api/field_options/upsert_field_options.py
179
190
  uncountable/types/api/id_source/__init__.py
180
191
  uncountable/types/api/id_source/list_id_source.py
181
192
  uncountable/types/api/id_source/match_id_source.py
@@ -187,6 +198,10 @@ uncountable/types/api/inputs/get_input_data.py
187
198
  uncountable/types/api/inputs/get_input_names.py
188
199
  uncountable/types/api/inputs/get_inputs_data.py
189
200
  uncountable/types/api/inputs/set_input_attribute_values.py
201
+ uncountable/types/api/inputs/set_input_category.py
202
+ uncountable/types/api/inputs/set_input_subcategories.py
203
+ uncountable/types/api/material_families/__init__.py
204
+ uncountable/types/api/material_families/update_entity_material_families.py
190
205
  uncountable/types/api/outputs/__init__.py
191
206
  uncountable/types/api/outputs/get_output_data.py
192
207
  uncountable/types/api/outputs/get_output_names.py
@@ -218,5 +233,6 @@ uncountable/types/api/recipes/set_recipe_inputs.py
218
233
  uncountable/types/api/recipes/set_recipe_metadata.py
219
234
  uncountable/types/api/recipes/set_recipe_outputs.py
220
235
  uncountable/types/api/recipes/set_recipe_tags.py
236
+ uncountable/types/api/recipes/unarchive_recipes.py
221
237
  uncountable/types/api/triggers/__init__.py
222
238
  uncountable/types/api/triggers/run_trigger.py
@@ -1,5 +1,4 @@
1
- from uncountable.core import Client
2
- from uncountable.core.client import AuthDetailsOAuth
1
+ from uncountable.core import AuthDetailsOAuth, Client
3
2
  from uncountable.types import (
4
3
  entity_t,
5
4
  field_values_t,
@@ -24,6 +24,7 @@ ParserCache = dict[type[typing.Any], ParserFunction[typing.Any]]
24
24
  @dataclass(frozen=True, eq=True)
25
25
  class ParserOptions:
26
26
  convert_to_snake_case: bool
27
+ strict_property_parsing: bool = False
27
28
 
28
29
 
29
30
  @dataclass(frozen=True)
@@ -32,6 +33,19 @@ class ParserContext:
32
33
  cache: ParserCache
33
34
 
34
35
 
36
+ class ParserError(BaseException): ...
37
+
38
+
39
+ class ParserExtraFieldsError(ParserError):
40
+ extra_fields: set[str]
41
+
42
+ def __init__(self, extra_fields: set[str]) -> None:
43
+ self.extra_fields = extra_fields
44
+
45
+ def __str__(self) -> str:
46
+ return f"extra fields were provided: {', '.join(self.extra_fields)}"
47
+
48
+
35
49
  def is_optional(field_type: typing.Any) -> bool:
36
50
  return typing.get_origin(field_type) is typing.Union and type(
37
51
  None
@@ -280,18 +294,23 @@ def _build_parser_dataclass(
280
294
 
281
295
  serial_class_data = get_serial_class_data(parsed_type)
282
296
 
297
+ def resolve_serialized_field_name(*, field_name: str) -> str:
298
+ return (
299
+ snake_to_camel_case(field_name)
300
+ if (
301
+ context.options.convert_to_snake_case
302
+ and not serial_class_data.has_unconverted_key(field_name)
303
+ )
304
+ else field_name
305
+ )
306
+
283
307
  def parse(value: typing.Any) -> typing.Any:
284
308
  data: dict[typing.Any, typing.Any] = {}
285
309
  for field, field_type, field_parser in dc_field_parsers:
286
310
  field_raw_value = None
287
311
  try:
288
312
  field_raw_value = value.get(
289
- snake_to_camel_case(field.name)
290
- if (
291
- context.options.convert_to_snake_case
292
- and not serial_class_data.has_unconverted_key(field.name)
293
- )
294
- else field.name,
313
+ resolve_serialized_field_name(field_name=field.name),
295
314
  MISSING,
296
315
  )
297
316
  field_value: typing.Any
@@ -325,6 +344,18 @@ def _build_parser_dataclass(
325
344
  f"unable to parse field:{field.name}", field_raw_value
326
345
  ) from e
327
346
 
347
+ if context.options.strict_property_parsing:
348
+ all_allowed_field_names = set(
349
+ resolve_serialized_field_name(field_name=field.name)
350
+ for (field, _, _) in dc_field_parsers
351
+ )
352
+ passed_field_names = set(value.keys())
353
+ disallowed_field_names = passed_field_names.difference(
354
+ all_allowed_field_names
355
+ )
356
+ if len(disallowed_field_names) > 0:
357
+ raise ParserExtraFieldsError(disallowed_field_names)
358
+
328
359
  return parsed_type(**data)
329
360
 
330
361
  # Add to cache before building inner types, to support recursion
@@ -372,10 +403,12 @@ class CachedParser(typing.Generic[T]):
372
403
  def __init__(
373
404
  self,
374
405
  args: type[T],
406
+ strict_property_parsing: bool = False,
375
407
  ):
376
408
  self.arguments = args
377
409
  self.parser_api: typing.Optional[ParserFunction[T]] = None
378
410
  self.parser_storage: typing.Optional[ParserFunction[T]] = None
411
+ self.strict_property_parsing = strict_property_parsing
379
412
 
380
413
  def parse_api(self, args: typing.Any) -> T:
381
414
  """
@@ -390,6 +423,7 @@ class CachedParser(typing.Generic[T]):
390
423
  self.arguments,
391
424
  ParserOptions(
392
425
  convert_to_snake_case=True,
426
+ strict_property_parsing=self.strict_property_parsing,
393
427
  ),
394
428
  )
395
429
  assert self.parser_api is not None
@@ -404,6 +438,7 @@ class CachedParser(typing.Generic[T]):
404
438
  self.arguments,
405
439
  ParserOptions(
406
440
  convert_to_snake_case=False,
441
+ strict_property_parsing=self.strict_property_parsing,
407
442
  ),
408
443
  )
409
444
  assert self.parser_storage is not None
@@ -195,6 +195,7 @@ class SpecEndpointExample:
195
195
 
196
196
  @dataclass(kw_only=True)
197
197
  class SpecGuide:
198
+ ref_name: str
198
199
  title: str
199
200
  markdown_content: str
200
201
  html_content: str
@@ -1287,7 +1288,10 @@ class SpecBuilder:
1287
1288
  meta: dict[str, list[str]] = md.Meta # type: ignore[attr-defined]
1288
1289
  title_meta: list[str] | None = meta.get("title")
1289
1290
  if title_meta is None:
1290
- raise Exception("guides requier a title in the meta section")
1291
+ raise Exception("guides require a title in the meta section")
1292
+ id_meta: list[str] | None = meta.get("id")
1293
+ if id_meta is None:
1294
+ raise Exception("guides require an id in the meta section")
1291
1295
 
1292
1296
  path_meta: list[str] | None = meta.get("path")
1293
1297
  guide_key: SpecGuideKey = RootGuideKey()
@@ -1297,6 +1301,7 @@ class SpecBuilder:
1297
1301
 
1298
1302
  self.guides[guide_key].append(
1299
1303
  SpecGuide(
1304
+ ref_name="".join(id_meta),
1300
1305
  title="".join(title_meta),
1301
1306
  html_content=html,
1302
1307
  markdown_content=file_content,
@@ -78,9 +78,9 @@ def _rewrite_with_notice(
78
78
  return util.rewrite_file(file_path, f"{notice}\n{modified_file_content}")
79
79
 
80
80
 
81
- def _write_guide_as_html(guide: EmitOpenAPIGuide) -> str:
81
+ def _write_guide_as_html(guide: EmitOpenAPIGuide, *, is_open: bool) -> str:
82
82
  return f"""
83
- <details>
83
+ <details id="{guide.ref_name}" {"open" if is_open else ""}>
84
84
  <summary>{guide.title}</summary>
85
85
  {guide.html_content}
86
86
  </details>"""
@@ -89,7 +89,10 @@ def _write_guide_as_html(guide: EmitOpenAPIGuide) -> str:
89
89
  def _open_api_info(
90
90
  config: OpenAPIConfig, guides: list[EmitOpenAPIGuide]
91
91
  ) -> GlobalContextInfo:
92
- full_guides = "<br/>".join([_write_guide_as_html(guide) for guide in guides])
92
+ full_guides = "<br/>".join([
93
+ _write_guide_as_html(guide, is_open=True)
94
+ for guide in sorted(guides, key=lambda g: g.ref_name)
95
+ ])
93
96
  full_description = f"{config.description}<br/>{full_guides}"
94
97
  info: GlobalContextInfo = dict()
95
98
  info["version"] = "1.0.0"
@@ -107,7 +110,9 @@ def _open_api_servers(config: OpenAPIConfig) -> list[EmitOpenAPIServer]:
107
110
  def emit_open_api(builder: builder.SpecBuilder, *, config: OpenAPIConfig) -> None:
108
111
  root_guides = builder.guides.get(RootGuideKey(), [])
109
112
  openapi_guides = [
110
- EmitOpenAPIGuide(title=guide.title, html_content=guide.html_content)
113
+ EmitOpenAPIGuide(
114
+ ref_name=guide.ref_name, title=guide.title, html_content=guide.html_content
115
+ )
111
116
  for guide in root_guides
112
117
  ]
113
118
  gctx = EmitOpenAPIGlobalContext(
@@ -299,7 +304,10 @@ def _emit_endpoint_response_examples(
299
304
  def _emit_endpoint_description(
300
305
  description: str, guides: list[EmitOpenAPIGuide]
301
306
  ) -> dict[str, str]:
302
- full_guides = "<br/>".join([_write_guide_as_html(guide) for guide in guides])
307
+ full_guides = "<br/>".join([
308
+ _write_guide_as_html(guide, is_open=False)
309
+ for guide in sorted(guides, key=lambda g: g.ref_name)
310
+ ])
303
311
  return {
304
312
  "description": description
305
313
  if len(guides) == 0
@@ -562,6 +570,7 @@ def _emit_endpoint(
562
570
  ],
563
571
  guides=[
564
572
  EmitOpenAPIGuide(
573
+ ref_name=guide.ref_name,
565
574
  title=guide.title,
566
575
  html_content=guide.html_content,
567
576
  )
@@ -45,6 +45,7 @@ class EmitOpenAPIServer:
45
45
 
46
46
  @dataclass(kw_only=True)
47
47
  class EmitOpenAPIGuide:
48
+ ref_name: str
48
49
  title: str
49
50
  html_content: str
50
51
 
@@ -18,10 +18,10 @@ Arguments:
18
18
  desc: "Attributes to pass to the configuration for parameterizing filters"
19
19
  offset?:
20
20
  type: Optional<Integer>
21
- desc: "Used for pagination. Pagination is done based on the sorting of the config"
21
+ desc: Used for pagination. Pagination is done based on the sorting of the config. [Pagination More Info](#pagination)
22
22
  limit?:
23
23
  type: Optional<Integer>
24
- desc: "The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100"
24
+ desc: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
25
25
 
26
26
  EntityResult:
27
27
  type: Object
@@ -0,0 +1,21 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/entity/external_lock_entity
5
+ function: main.site.app.external.entity.external_lock_entity.external_lock_entity
6
+ desc: Lock an entity
7
+
8
+ Arguments:
9
+ type: Object
10
+ properties:
11
+ entity_key:
12
+ type: identifier.IdentifierKey
13
+ desc: "Identifier for the entity"
14
+ entity_type:
15
+ type: entity.EntityType
16
+ globally_removable?:
17
+ type: Boolean
18
+ desc: "Should the lock be removable by any user or just admins"
19
+
20
+ Data:
21
+ type: async_batch.AsyncBatchActionReturn
@@ -0,0 +1,18 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/entity/external_unlock_entity
5
+ function: main.site.app.external.entity.external_unlock_entity.external_unlock_entity
6
+ desc: Unlock an entity
7
+
8
+ Arguments:
9
+ type: Object
10
+ properties:
11
+ entity_key:
12
+ type: identifier.IdentifierKey
13
+ desc: "Identifier for the entity"
14
+ entity_type:
15
+ type: entity.EntityType
16
+
17
+ Data:
18
+ type: async_batch.AsyncBatchActionReturn
@@ -0,0 +1,37 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/field_options/upsert_field_options
5
+ function: main.site.app.external.field_options.upsert_field_options.upsert_field_options
6
+ desc: "Creates or updates field options for an option set"
7
+ is_sdk: true
8
+
9
+ FieldOption:
10
+ type: Object
11
+ properties:
12
+ option_id:
13
+ type: String
14
+ desc: "A unique identifer for the option. This is required to be a string with no symbols"
15
+ option_value?:
16
+ type: String
17
+ desc: "The label for the option. If none is set, then the existing value will be used. If there is no existing value, then the option id will be used."
18
+ archived?:
19
+ type: Boolean
20
+ desc: "If included, whether to set the option to be archived or unarchived"
21
+ subsets?:
22
+ type: List<String>
23
+ desc: "If included, what subsets to include the option in"
24
+
25
+ Arguments:
26
+ type: Object
27
+ properties:
28
+ option_set_key:
29
+ type: identifier.IdentifierKey
30
+ desc: "Identifier for the field option set"
31
+ field_options:
32
+ type: List<FieldOption>
33
+ desc: Field options to upsert
34
+
35
+ Data:
36
+ type: Object
37
+ properties:
@@ -15,10 +15,10 @@ Arguments:
15
15
  desc: Text to search within the labels to search matches
16
16
  offset?:
17
17
  type: Optional<Integer>
18
- desc: "Used for pagination. Pagination is done based on the sorting of the config"
18
+ desc: Used for pagination. Pagination is done based on the sorting of the config. [Pagination More Info](#pagination)
19
19
  limit?:
20
20
  type: Optional<Integer>
21
- desc: "The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100"
21
+ desc: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
22
22
 
23
23
  IdName:
24
24
  type: Object
@@ -16,13 +16,13 @@ Arguments:
16
16
  desc: "The input IDs to get the data from. If this is not filled in, all inputs from a material family will be returned (in paginated form)."
17
17
  offset?:
18
18
  type: Optional<Integer>
19
- desc: "Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the input ID"
19
+ desc: Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the input ID. [Pagination More Info](#pagination)
20
20
  is_parameter:
21
21
  type: Optional<Boolean>
22
22
  desc: "Whether to get parameters or ingredients. By default both are returned. When set to true, only parameters are returned, and when set to false, only ingredients are returned"
23
23
  limit?:
24
24
  type: Optional<Integer>
25
- desc: "The maximum number of results to return. By default this is set to 1,000 and it cannot be set higher than 1,000"
25
+ desc: The maximum number of results to return. By default this is set to 1,000 and it cannot be set higher than 1,000. [Pagination More Info](#pagination)
26
26
 
27
27
  SimpleInputAttr:
28
28
  type: Object
@@ -13,13 +13,13 @@ Arguments:
13
13
  desc: "The material family ID to get the input values from"
14
14
  offset?:
15
15
  type: Optional<Integer>
16
- desc: "Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the input ID"
16
+ desc: Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the input ID. [Pagination More Info](#pagination)
17
17
  is_parameter:
18
18
  type: Optional<Boolean>
19
19
  desc: "Whether to get parameters or ingredients. By default both are returned. When set to true, only parameters are returned, and when set to false, only ingredients are returned"
20
20
  limit?:
21
21
  type: Optional<Integer>
22
- desc: "The maximum number of results to return. By default this is set to 20,000 and it cannot be set higher than 20,000"
22
+ desc: The maximum number of results to return. By default this is set to 20,000 and it cannot be set higher than 20,000. [Pagination More Info](#pagination)
23
23
 
24
24
  InputWithName:
25
25
  type: Object
@@ -0,0 +1,23 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/inputs/external_set_input_category
5
+ function: main.site.app.external.inputs.external_set_input_category.external_set_input_category
6
+ desc: "Sets subcategories for an input"
7
+
8
+ Arguments:
9
+ type: Object
10
+ properties:
11
+ input_key:
12
+ type: identifier.IdentifierKey
13
+ desc: "Identifier for the input"
14
+ category_id:
15
+ type: Integer
16
+ desc: The subcategory identifiers to set
17
+ material_family_ids?:
18
+ type: List<Integer>
19
+ desc: The material families to perform the update in
20
+
21
+ Data:
22
+ type: response.Response
23
+ properties:
@@ -0,0 +1,23 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/inputs/external_set_input_subcategories
5
+ function: main.site.app.external.inputs.external_set_input_subcategories.external_set_input_subcategories
6
+ desc: "Sets subcategories for an input"
7
+
8
+ Arguments:
9
+ type: Object
10
+ properties:
11
+ input_key:
12
+ type: identifier.IdentifierKey
13
+ desc: "Identifier for the input"
14
+ subcategory_ids:
15
+ type: List<Integer>
16
+ desc: The subcategory identifiers to set
17
+ update_type:
18
+ type: post_base.UpdateType
19
+ desc: The type of update to perform
20
+
21
+ Data:
22
+ type: response.Response
23
+ properties:
@@ -0,0 +1,33 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/material_families/external_update_entity_material_families
5
+ function: main.site.app.external.material_families.update_entity_material_families.update_entity_material_families
6
+ desc: "Updates the material families that the entity is available in"
7
+
8
+ Arguments:
9
+ type: Object
10
+ properties:
11
+ entity_key:
12
+ type: identifier.IdentifierKey
13
+ desc: "The identifier for the entity to update across material families"
14
+ entity_type:
15
+ type: |
16
+ Union<
17
+ Literal<entity.EntityType.recipe_metadata>,
18
+ Literal<entity.EntityType.ingredient>,
19
+ Literal<entity.EntityType.output>,
20
+ Literal<entity.EntityType.condition_parameter>,
21
+ Literal<entity.EntityType.ingredient_attribute>
22
+ >
23
+ desc: "The type of the entities requested"
24
+ material_family_ids:
25
+ type: List<ObjectId>
26
+ desc: "The material families to update"
27
+ update_type:
28
+ type: post_base.UpdateType
29
+ desc: "The type of update to make"
30
+
31
+ Data:
32
+ type: response.Response
33
+ properties:
@@ -16,10 +16,10 @@ Arguments:
16
16
  desc: "The output IDs to get the data from. If this is not filled in, all outputs from a material family will be returned (in paginated form)."
17
17
  offset?:
18
18
  type: Integer
19
- desc: "Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the output ID"
19
+ desc: Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the output ID. [Pagination More Info](#pagination)
20
20
  limit?:
21
21
  type: Integer
22
- desc: "The maximum number of results to return. By default this is set to 1,000 and it cannot be set higher than 1,000"
22
+ desc: The maximum number of results to return. By default this is set to 1,000 and it cannot be set higher than 1,000. [Pagination More Info](#pagination)
23
23
 
24
24
  OutputAttrVal:
25
25
  type: Object
@@ -13,10 +13,10 @@ Arguments:
13
13
  desc: "The material family ID to get the output values from"
14
14
  offset?:
15
15
  type: Integer
16
- desc: "Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the output ID"
16
+ desc: Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the output ID. [Pagination More Info](#pagination)
17
17
  limit?:
18
18
  type: Integer
19
- desc: "The maximum number of results to return. By default this is set to 20,000 and it cannot be set higher than 20,000"
19
+ desc: The maximum number of results to return. By default this is set to 20,000 and it cannot be set higher than 20,000. [Pagination More Info](#pagination)
20
20
 
21
21
  OutputWithName:
22
22
  type: Object
@@ -12,10 +12,10 @@ Arguments:
12
12
  desc: "The projects to get the data from"
13
13
  offset?:
14
14
  type: Optional<Integer>
15
- desc: "Used for pagination. All pagination is done in order of Project ID"
15
+ desc: Used for pagination. All pagination is done in order of Project ID. [Pagination More Info](#pagination)
16
16
  limit?:
17
17
  type: Optional<Integer>
18
- desc: "The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100"
18
+ desc: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
19
19
 
20
20
  ProjectDetailed:
21
21
  type: Object
@@ -16,10 +16,10 @@ Arguments:
16
16
  desc: "The recipe metadata IDs to get the data from. If this is not filled in, all metadata from a material family will be returned (in paginated form)."
17
17
  offset?:
18
18
  type: Optional<Integer>
19
- desc: "Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the metadata ID"
19
+ desc: Used for pagination, where the number of results returned exceeds the limit. Results are always ordered by the metadata ID. [Pagination More Info](#pagination)
20
20
  limit?:
21
21
  type: Optional<Integer>
22
- desc: "The maximum number of results to return. By default this is set to 1,000 and it cannot be set higher than 1,000"
22
+ desc: The maximum number of results to return. By default this is set to 1,000 and it cannot be set higher than 1,000. [Pagination More Info](#pagination)
23
23
 
24
24
  FullRecipeMetadataField:
25
25
  type: Object
@@ -16,6 +16,9 @@ Arguments:
16
16
  material_family_id:
17
17
  type: ObjectId
18
18
  desc: The material family for the recipe
19
+ project_id?:
20
+ type: ObjectId
21
+ desc: The identifier of the project to create the recipe in
19
22
  workflow_id:
20
23
  type: ObjectId
21
24
  desc: The identifier of the workflow to create the recipe with
@@ -15,10 +15,10 @@ Arguments:
15
15
  desc: "The projects to get the data from. Either these or recipe_ids must be filled in"
16
16
  offset?:
17
17
  type: Optional<Integer>
18
- desc: "Used for pagination. All pagination is done in order of Recipe ID"
18
+ desc: Used for pagination. All pagination is done in order of Recipe ID. [Pagination More Info](#pagination)
19
19
  limit?:
20
20
  type: Optional<Integer>
21
- desc: "The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100"
21
+ desc: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
22
22
 
23
23
  RecipeOutput:
24
24
  type: Object
@@ -0,0 +1,17 @@
1
+ $endpoint:
2
+ is_sdk: true
3
+ method: post
4
+ path: ${external}/recipes/unarchive
5
+ function: main.site.app.external.recipes.unarchive_recipes.unarchive_recipes
6
+ desc: Unarchive/restore the provided recipes
7
+
8
+ Arguments:
9
+ type: Object
10
+ properties:
11
+ recipes:
12
+ type: List<identifier.IdentifierKey>
13
+ desc: Identifier for the recipe
14
+
15
+
16
+ Data:
17
+ type: Object