UncountablePythonSDK 0.0.64__tar.gz → 0.0.65__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 (263) hide show
  1. {uncountablepythonsdk-0.0.64/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.65}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. uncountablepythonsdk-0.0.65/uncountable/integration/cron.py +45 -0
  4. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/server.py +2 -1
  5. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/telemetry.py +11 -12
  6. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/webhook_server/entrypoint.py +27 -21
  7. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/edit_recipe_inputs.py +17 -2
  8. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/inputs.py +1 -0
  9. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/inputs_t.py +17 -0
  10. uncountablepythonsdk-0.0.64/uncountable/integration/cron.py +0 -43
  11. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.github/workflows/documentation.yml +0 -0
  12. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.github/workflows/publish.yml +0 -0
  13. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.gitignore +0 -0
  14. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/README.md +0 -0
  15. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  16. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  17. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  18. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  19. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/.gitignore +0 -0
  20. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/conf.py +0 -0
  21. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/index.md +0 -0
  22. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/justfile +0 -0
  23. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/quickstart.md +0 -0
  24. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/requirements.txt +0 -0
  25. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/android-chrome-192x192.png +0 -0
  26. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/android-chrome-512x512.png +0 -0
  27. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/apple-touch-icon.png +0 -0
  28. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/browserconfig.xml +0 -0
  29. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/favicon-16x16.png +0 -0
  30. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/favicon-32x32.png +0 -0
  31. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/manifest.json +0 -0
  32. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/mstile-150x150.png +0 -0
  33. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  34. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/logo_blue.png +0 -0
  35. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/async_batch.py +0 -0
  36. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/create_entity.py +0 -0
  37. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/edit_recipe_inputs.py +0 -0
  38. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/invoke_uploader.py +0 -0
  39. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/upload_files.py +0 -0
  40. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/__init__.py +0 -0
  41. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/__init__.py +0 -0
  42. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/_is_enum.py +0 -0
  43. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  44. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/argument_parser.py +0 -0
  45. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/case_convert.py +0 -0
  46. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/__init__.py +0 -0
  47. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  48. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_local_session.py +0 -0
  49. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_s3_session.py +0 -0
  50. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  51. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  52. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  53. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/py.typed +0 -0
  54. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/__init__.py +0 -0
  55. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/missing_sentry.py +0 -0
  56. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/opaque_key.py +0 -0
  57. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/serial_class.py +0 -0
  58. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/serial_union.py +0 -0
  59. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/yaml.py +0 -0
  60. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/__init__.py +0 -0
  61. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  62. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  63. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/serialization_helpers.py +0 -0
  64. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/strenum_compat/__init__.py +0 -0
  65. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/strenum_compat/strenum_compat.py +0 -0
  66. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/__main__.py +0 -0
  68. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  69. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  70. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  71. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/builder.py +0 -0
  72. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/config.py +0 -0
  73. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_io_ts.py +0 -0
  74. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_open_api.py +0 -0
  75. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_open_api_util.py +0 -0
  76. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_python.py +0 -0
  77. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_typescript.py +0 -0
  78. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_typescript_util.py +0 -0
  79. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/load_types.py +0 -0
  80. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/open_api_util.py +0 -0
  81. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/parts/base.py.prepart +0 -0
  82. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  83. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/test.py +0 -0
  84. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/type_info/__main__.py +0 -0
  85. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  86. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/util.py +0 -0
  87. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/__init__.py +0 -0
  88. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/__main__.py +0 -0
  89. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  90. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  91. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/types.py +0 -0
  92. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pyproject.toml +0 -0
  93. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/setup.cfg +0 -0
  94. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/__init__.py +0 -0
  95. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/async_batch.py +0 -0
  97. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/client.py +0 -0
  98. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/environment.py +0 -0
  99. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/file_upload.py +0 -0
  100. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/types.py +0 -0
  101. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/construct_client.py +0 -0
  103. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/db/__init__.py +0 -0
  104. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/db/connect.py +0 -0
  105. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/entrypoint.py +0 -0
  106. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/__init__.py +0 -0
  107. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/executors.py +0 -0
  108. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  109. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/script_executor.py +0 -0
  110. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/job.py +0 -0
  111. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/scan_profiles.py +0 -0
  112. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  113. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  114. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/py.typed +0 -0
  115. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/__init__.py +0 -0
  117. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/batch/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/batch/execute_batch.py +0 -0
  119. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  120. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/chemical/__init__.py +0 -0
  121. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  122. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/__init__.py +0 -0
  123. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/create_entities.py +0 -0
  124. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/create_entity.py +0 -0
  125. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/get_entities_data.py +0 -0
  126. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/list_entities.py +0 -0
  127. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/lock_entity.py +0 -0
  128. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  129. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/set_values.py +0 -0
  130. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  131. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/unlock_entity.py +0 -0
  132. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/equipment/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  134. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/field_options/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  136. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/id_source/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/id_source/list_id_source.py +0 -0
  138. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/id_source/match_id_source.py +0 -0
  139. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/input_groups/__init__.py +0 -0
  140. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  141. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/__init__.py +0 -0
  142. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/create_inputs.py +0 -0
  143. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/get_input_data.py +0 -0
  144. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/get_input_names.py +0 -0
  145. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  146. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  147. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_input_category.py +0 -0
  148. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  149. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  150. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/material_families/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  152. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/__init__.py +0 -0
  153. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/get_output_data.py +0 -0
  154. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/get_output_names.py +0 -0
  155. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  156. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/permissions/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  158. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/project/__init__.py +0 -0
  159. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/project/get_projects.py +0 -0
  160. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/project/get_projects_data.py +0 -0
  161. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_links/__init__.py +0 -0
  162. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  163. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  164. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  166. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/__init__.py +0 -0
  167. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  168. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  169. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  170. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  171. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  172. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/create_recipe.py +0 -0
  173. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/create_recipes.py +0 -0
  174. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  175. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_curve.py +0 -0
  176. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  177. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  178. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  179. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  180. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  181. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  182. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  183. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  184. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  185. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  186. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  187. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  188. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  189. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  190. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/triggers/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/triggers/run_trigger.py +0 -0
  192. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/uploader/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  194. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/async_batch.py +0 -0
  195. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/async_batch_processor.py +0 -0
  196. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/async_batch_t.py +0 -0
  197. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/base.py +0 -0
  198. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/base_t.py +0 -0
  199. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/calculations.py +0 -0
  200. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/calculations_t.py +0 -0
  201. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/chemical_structure.py +0 -0
  202. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/chemical_structure_t.py +0 -0
  203. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/client_base.py +0 -0
  204. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/client_config.py +0 -0
  205. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/client_config_t.py +0 -0
  206. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/curves.py +0 -0
  207. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/curves_t.py +0 -0
  208. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/entity.py +0 -0
  209. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/entity_t.py +0 -0
  210. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/experiment_groups.py +0 -0
  211. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/experiment_groups_t.py +0 -0
  212. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/field_values.py +0 -0
  213. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/field_values_t.py +0 -0
  214. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/fields.py +0 -0
  215. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/fields_t.py +0 -0
  216. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/generic_upload.py +0 -0
  217. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/generic_upload_t.py +0 -0
  218. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/id_source.py +0 -0
  219. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/id_source_t.py +0 -0
  220. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/identifier.py +0 -0
  221. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/identifier_t.py +0 -0
  222. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/input_attributes.py +0 -0
  223. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/input_attributes_t.py +0 -0
  224. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/job_definition.py +0 -0
  225. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/job_definition_t.py +0 -0
  226. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/outputs.py +0 -0
  227. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/outputs_t.py +0 -0
  228. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/overrides.py +0 -0
  229. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/overrides_t.py +0 -0
  230. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/permissions.py +0 -0
  231. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/permissions_t.py +0 -0
  232. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/phases.py +0 -0
  233. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/phases_t.py +0 -0
  234. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/post_base.py +0 -0
  235. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/post_base_t.py +0 -0
  236. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_identifiers.py +0 -0
  237. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_identifiers_t.py +0 -0
  238. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_inputs.py +0 -0
  239. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_inputs_t.py +0 -0
  240. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_links.py +0 -0
  241. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_links_t.py +0 -0
  242. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_metadata.py +0 -0
  243. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_metadata_t.py +0 -0
  244. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_output_metadata.py +0 -0
  245. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_output_metadata_t.py +0 -0
  246. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_tags.py +0 -0
  247. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_tags_t.py +0 -0
  248. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_workflow_steps.py +0 -0
  249. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  250. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipes.py +0 -0
  251. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipes_t.py +0 -0
  252. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/response.py +0 -0
  253. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/response_t.py +0 -0
  254. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/secret_retrieval.py +0 -0
  255. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/secret_retrieval_t.py +0 -0
  256. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/units.py +0 -0
  257. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/units_t.py +0 -0
  258. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/users.py +0 -0
  259. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/users_t.py +0 -0
  260. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/webhook_job.py +0 -0
  261. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/webhook_job_t.py +0 -0
  262. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/workflows.py +0 -0
  263. {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.64
3
+ Version: 0.0.65
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.64
3
+ Version: 0.0.65
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
@@ -0,0 +1,45 @@
1
+ from dataclasses import dataclass
2
+
3
+ from pkgs.argument_parser import CachedParser
4
+ from uncountable.core.async_batch import AsyncBatchProcessor
5
+ from uncountable.integration.construct_client import construct_uncountable_client
6
+ from uncountable.integration.executors.executors import execute_job
7
+ from uncountable.integration.job import CronJobArguments
8
+ from uncountable.integration.telemetry import JobLogger, get_otel_tracer
9
+ from uncountable.types.job_definition_t import JobDefinition, ProfileMetadata
10
+
11
+
12
+ @dataclass
13
+ class CronJobArgs:
14
+ definition: JobDefinition
15
+ profile_metadata: ProfileMetadata
16
+
17
+
18
+ cron_args_parser = CachedParser(CronJobArgs)
19
+
20
+
21
+ def cron_job_executor(**kwargs: dict) -> None:
22
+ args_passed = cron_args_parser.parse_storage(kwargs)
23
+ with get_otel_tracer().start_as_current_span(name="cron_executor") as span:
24
+ job_logger = JobLogger(
25
+ base_span=span,
26
+ profile_metadata=args_passed.profile_metadata,
27
+ job_definition=args_passed.definition,
28
+ )
29
+ client = construct_uncountable_client(
30
+ profile_meta=args_passed.profile_metadata, job_logger=job_logger
31
+ )
32
+ batch_processor = AsyncBatchProcessor(client=client)
33
+ args = CronJobArguments(
34
+ job_definition=args_passed.definition,
35
+ client=client,
36
+ batch_processor=batch_processor,
37
+ profile_metadata=args_passed.profile_metadata,
38
+ logger=job_logger,
39
+ )
40
+
41
+ execute_job(
42
+ args=args,
43
+ profile_metadata=args_passed.profile_metadata,
44
+ job_definition=args_passed.definition,
45
+ )
@@ -8,6 +8,7 @@ from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
8
8
  from apscheduler.schedulers.background import BackgroundScheduler
9
9
  from apscheduler.schedulers.base import BaseScheduler
10
10
  from apscheduler.triggers.cron import CronTrigger
11
+ from opentelemetry.trace import get_current_span
11
12
  from sqlalchemy.engine.base import Engine
12
13
 
13
14
  from uncountable.integration.cron import CronJobArgs, cron_job_executor
@@ -37,7 +38,7 @@ class IntegrationServer:
37
38
  jobstores={"default": SQLAlchemyJobStore(engine=engine)},
38
39
  executors={"default": ThreadPoolExecutor(_MAX_APSCHEDULER_CONCURRENT_JOBS)},
39
40
  )
40
- self._server_logger = Logger()
41
+ self._server_logger = Logger(get_current_span())
41
42
 
42
43
  def register_profile(
43
44
  self,
@@ -74,18 +74,17 @@ class LogSeverity(StrEnum):
74
74
 
75
75
 
76
76
  class Logger:
77
- current_span: Span | None = None
77
+ current_span: Span
78
+
79
+ def __init__(self, base_span: Span) -> None:
80
+ self.current_span = base_span
78
81
 
79
82
  @property
80
- def current_span_id(self) -> int | None:
81
- if self.current_span is None:
82
- return None
83
+ def current_span_id(self) -> int:
83
84
  return self.current_span.get_span_context().span_id
84
85
 
85
86
  @property
86
87
  def current_trace_id(self) -> int | None:
87
- if self.current_span is None:
88
- return None
89
88
  return self.current_span.get_span_context().trace_id
90
89
 
91
90
  def _patch_attributes(self, attributes: Attributes | None) -> Attributes:
@@ -134,10 +133,9 @@ class Logger:
134
133
  ) -> None:
135
134
  traceback_str = "".join(traceback.format_tb(exception.__traceback__))
136
135
  patched_attributes = self._patch_attributes(attributes)
137
- if self.current_span is not None:
138
- self.current_span.record_exception(
139
- exception=exception, attributes=patched_attributes
140
- )
136
+ self.current_span.record_exception(
137
+ exception=exception, attributes=patched_attributes
138
+ )
141
139
  self.log_error(
142
140
  message=f"error: {message}\nexception: {exception}{traceback_str}",
143
141
  attributes=patched_attributes,
@@ -149,8 +147,7 @@ class Logger:
149
147
  ) -> Generator[typing.Self, None, None]:
150
148
  with get_otel_tracer().start_as_current_span(
151
149
  scope_name, attributes=self._patch_attributes(attributes)
152
- ) as span:
153
- self.current_span = span
150
+ ):
154
151
  yield self
155
152
 
156
153
 
@@ -158,11 +155,13 @@ class JobLogger(Logger):
158
155
  def __init__(
159
156
  self,
160
157
  *,
158
+ base_span: Span,
161
159
  profile_metadata: job_definition_t.ProfileMetadata,
162
160
  job_definition: job_definition_t.JobDefinition,
163
161
  ) -> None:
164
162
  self.profile_metadata = profile_metadata
165
163
  self.job_definition = job_definition
164
+ super().__init__(base_span)
166
165
 
167
166
  def _patch_attributes(self, attributes: Attributes | None) -> Attributes:
168
167
  patched_attributes: dict[str, base_t.JsonValue] = {
@@ -5,6 +5,7 @@ import flask
5
5
  import simplejson
6
6
  from flask.typing import ResponseReturnValue
7
7
  from flask.wrappers import Response
8
+ from opentelemetry.trace import get_current_span
8
9
  from uncountable.core.async_batch import AsyncBatchProcessor
9
10
  from uncountable.core.environment import get_integration_env, get_webhook_server_port
10
11
  from uncountable.integration.construct_client import construct_uncountable_client
@@ -12,7 +13,7 @@ from uncountable.integration.executors.executors import execute_job
12
13
  from uncountable.integration.job import WebhookJobArguments
13
14
  from uncountable.integration.scan_profiles import load_profiles
14
15
  from uncountable.integration.secret_retrieval.retrieve_secret import retrieve_secret
15
- from uncountable.integration.telemetry import JobLogger, Logger
16
+ from uncountable.integration.telemetry import JobLogger, Logger, get_otel_tracer
16
17
  from uncountable.types import job_definition_t, webhook_job_t
17
18
 
18
19
  from pkgs.argument_parser import CachedParser
@@ -109,26 +110,31 @@ def register_route(
109
110
  passed_signature=passed_signature,
110
111
  )
111
112
 
112
- job_logger = JobLogger(
113
- profile_metadata=profile_metadata, job_definition=job
114
- )
115
- client = construct_uncountable_client(
116
- profile_meta=profile_meta, job_logger=job_logger
117
- )
118
- execute_job(
119
- job_definition=job,
120
- profile_metadata=profile_meta,
121
- args=WebhookJobArguments(
122
- job_definition=job,
113
+ with get_otel_tracer().start_as_current_span(
114
+ "webhook_executor"
115
+ ) as span:
116
+ job_logger = JobLogger(
123
117
  profile_metadata=profile_metadata,
124
- client=client,
125
- batch_processor=AsyncBatchProcessor(client=client),
126
- logger=job_logger,
127
- payload=webhook_payload,
128
- ),
129
- )
130
-
131
- return flask.jsonify(WebhookResponse())
118
+ job_definition=job,
119
+ base_span=span,
120
+ )
121
+ client = construct_uncountable_client(
122
+ profile_meta=profile_meta, job_logger=job_logger
123
+ )
124
+ execute_job(
125
+ job_definition=job,
126
+ profile_metadata=profile_meta,
127
+ args=WebhookJobArguments(
128
+ job_definition=job,
129
+ profile_metadata=profile_metadata,
130
+ client=client,
131
+ batch_processor=AsyncBatchProcessor(client=client),
132
+ logger=job_logger,
133
+ payload=webhook_payload,
134
+ ),
135
+ )
136
+
137
+ return flask.jsonify(WebhookResponse())
132
138
  except WebhookException as e:
133
139
  server_logger.log_exception(e)
134
140
  return e.make_error_response()
@@ -141,7 +147,7 @@ def register_route(
141
147
 
142
148
  profiles = load_profiles()
143
149
  for profile in profiles:
144
- server_logger = Logger()
150
+ server_logger = Logger(get_current_span())
145
151
  profile_metadata = job_definition_t.ProfileMetadata(
146
152
  name=profile.name,
147
153
  auth_retrieval=profile.definition.auth_retrieval,
@@ -12,6 +12,7 @@ import dataclasses
12
12
  from pkgs.serialization import serial_class
13
13
  from pkgs.serialization import serial_union_annotation
14
14
  from ... import identifier_t
15
+ from ... import inputs_t
15
16
  from ... import recipe_inputs_t
16
17
  from ... import recipe_workflow_steps_t
17
18
 
@@ -29,6 +30,7 @@ __all__: list[str] = [
29
30
  "RecipeInputEditClearInputs",
30
31
  "RecipeInputEditInputBase",
31
32
  "RecipeInputEditSetLot",
33
+ "RecipeInputEditSetRole",
32
34
  "RecipeInputEditType",
33
35
  "RecipeInputEditUpdateAnnotations",
34
36
  "RecipeInputEditUpsertInput",
@@ -47,6 +49,7 @@ class RecipeInputEditType(StrEnum):
47
49
  SET_LOT = "set_lot"
48
50
  CHANGE_BASIS = "change_basis"
49
51
  ADD_INSTRUCTIONS = "add_instructions"
52
+ SET_ROLE = "set_role"
50
53
 
51
54
 
52
55
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -75,6 +78,7 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
75
78
  input_value_type: recipe_inputs_t.InputValueType = recipe_inputs_t.InputValueType.VALUE
76
79
  value_numeric: typing.Optional[Decimal] = None
77
80
  value_str: typing.Optional[str] = None
81
+ behavior: typing.Optional[inputs_t.IngredientBehavior] = None
78
82
  calculation_key: typing.Optional[identifier_t.IdentifierKey] = None
79
83
 
80
84
 
@@ -145,14 +149,24 @@ class AnnotationEdit:
145
149
  @dataclasses.dataclass(kw_only=True)
146
150
  class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
147
151
  type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
148
- ingredient_key: identifier_t.IdentifierKey
149
152
  clear_first: bool
150
153
  annotations: list[AnnotationEdit]
151
154
 
152
155
 
156
+ # DO NOT MODIFY -- This file is generated by type_spec
157
+ @serial_class(
158
+ parse_require={"type"},
159
+ )
160
+ @dataclasses.dataclass(kw_only=True)
161
+ class RecipeInputEditSetRole(RecipeInputEditBase):
162
+ type: typing.Literal[RecipeInputEditType.SET_ROLE] = RecipeInputEditType.SET_ROLE
163
+ ingredient_key: identifier_t.IdentifierKey
164
+ ingredient_role_key: typing.Optional[identifier_t.IdentifierKey]
165
+
166
+
153
167
  # DO NOT MODIFY -- This file is generated by type_spec
154
168
  RecipeInputEdit = typing.Annotated[
155
- typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations, RecipeInputEditSetLot, RecipeInputEditChangeBasisViewed, RecipeInputEditAddInstructions],
169
+ typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations, RecipeInputEditSetLot, RecipeInputEditChangeBasisViewed, RecipeInputEditAddInstructions, RecipeInputEditSetRole],
156
170
  serial_union_annotation(
157
171
  discriminator="type",
158
172
  discriminator_map={
@@ -163,6 +177,7 @@ RecipeInputEdit = typing.Annotated[
163
177
  "set_lot": RecipeInputEditSetLot,
164
178
  "change_basis": RecipeInputEditChangeBasisViewed,
165
179
  "add_instructions": RecipeInputEditAddInstructions,
180
+ "set_role": RecipeInputEditSetRole,
166
181
  },
167
182
  ),
168
183
  ]
@@ -6,5 +6,6 @@
6
6
  # Kept only for SDK backwards compatibility
7
7
  from .inputs_t import IngredientQuantityType as IngredientQuantityType
8
8
  from .inputs_t import IngredientType as IngredientType
9
+ from .inputs_t import IngredientBehavior as IngredientBehavior
9
10
  from .inputs_t import SimpleInput as SimpleInput
10
11
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -13,6 +13,7 @@ from pkgs.serialization import serial_string_enum
13
13
  from . import base_t
14
14
 
15
15
  __all__: list[str] = [
16
+ "IngredientBehavior",
16
17
  "IngredientQuantityType",
17
18
  "IngredientType",
18
19
  "SimpleInput",
@@ -50,6 +51,22 @@ class IngredientType(StrEnum):
50
51
  EQUIPMENT = "equipment"
51
52
 
52
53
 
54
+ # DO NOT MODIFY -- This file is generated by type_spec
55
+ @serial_string_enum(
56
+ labels={
57
+ "included": "Included",
58
+ "use_quantity": "Use Quantity",
59
+ "not_included": "Not Included",
60
+ "autofill": "Autofill",
61
+ },
62
+ )
63
+ class IngredientBehavior(StrEnum):
64
+ INCLUDED = "included"
65
+ USE_QUANTITY = "use_quantity"
66
+ NOT_INCLUDED = "not_included"
67
+ AUTOFILL = "autofill"
68
+
69
+
53
70
  # DO NOT MODIFY -- This file is generated by type_spec
54
71
  @dataclasses.dataclass(kw_only=True)
55
72
  class SimpleInput:
@@ -1,43 +0,0 @@
1
- from dataclasses import dataclass
2
-
3
- from pkgs.argument_parser import CachedParser
4
- from uncountable.core.async_batch import AsyncBatchProcessor
5
- from uncountable.integration.construct_client import construct_uncountable_client
6
- from uncountable.integration.executors.executors import execute_job
7
- from uncountable.integration.job import CronJobArguments
8
- from uncountable.integration.telemetry import JobLogger
9
- from uncountable.types.job_definition_t import JobDefinition, ProfileMetadata
10
-
11
-
12
- @dataclass
13
- class CronJobArgs:
14
- definition: JobDefinition
15
- profile_metadata: ProfileMetadata
16
-
17
-
18
- cron_args_parser = CachedParser(CronJobArgs)
19
-
20
-
21
- def cron_job_executor(**kwargs: dict) -> None:
22
- args_passed = cron_args_parser.parse_storage(kwargs)
23
- job_logger = JobLogger(
24
- profile_metadata=args_passed.profile_metadata,
25
- job_definition=args_passed.definition,
26
- )
27
- client = construct_uncountable_client(
28
- profile_meta=args_passed.profile_metadata, job_logger=job_logger
29
- )
30
- batch_processor = AsyncBatchProcessor(client=client)
31
- args = CronJobArguments(
32
- job_definition=args_passed.definition,
33
- client=client,
34
- batch_processor=batch_processor,
35
- profile_metadata=args_passed.profile_metadata,
36
- logger=job_logger,
37
- )
38
-
39
- execute_job(
40
- args=args,
41
- profile_metadata=args_passed.profile_metadata,
42
- job_definition=args_passed.definition,
43
- )