UncountablePythonSDK 0.0.146__tar.gz → 0.0.148__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/.github/workflows/publish.yml +2 -2
  2. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/PKG-INFO +2 -2
  3. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/UncountablePythonSDK.egg-info/PKG-INFO +2 -2
  4. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/UncountablePythonSDK.egg-info/requires.txt +1 -1
  5. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/requirements.txt +1 -1
  6. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_parse.py +7 -7
  7. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/argument_parser/argument_parser.py +3 -1
  8. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/type_info/emit_type_info.py +8 -2
  9. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pyproject.toml +1 -1
  10. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/executors/executors.py +3 -2
  11. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/telemetry.py +35 -18
  12. uncountablepythonsdk-0.0.148/uncountable/types/api/notebooks/add_notebook_content.py +269 -0
  13. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/edit_recipe_inputs.py +18 -1
  14. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_recipes_data.py +1 -0
  15. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/entity_t.py +6 -0
  16. uncountablepythonsdk-0.0.146/uncountable/types/api/notebooks/add_notebook_content.py +0 -119
  17. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/.github/workflows/documentation.yml +0 -0
  18. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/.gitignore +0 -0
  19. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/.python-version +0 -0
  20. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/README.md +0 -0
  21. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  22. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  23. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  24. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/.gitignore +0 -0
  25. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/conf.py +0 -0
  26. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/index.md +0 -0
  27. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/integration_examples/create_ingredient.md +0 -0
  28. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/integration_examples/create_output.md +0 -0
  29. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/integration_examples/index.md +0 -0
  30. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/integration_examples/upload_file.md +0 -0
  31. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/justfile +0 -0
  32. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/android-chrome-192x192.png +0 -0
  33. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/android-chrome-512x512.png +0 -0
  34. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/apple-touch-icon.png +0 -0
  35. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/browserconfig.xml +0 -0
  36. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/favicon-16x16.png +0 -0
  37. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/favicon-32x32.png +0 -0
  38. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/manifest.json +0 -0
  39. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/mstile-150x150.png +0 -0
  40. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  41. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/docs/static/logo_blue.png +0 -0
  42. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/async_batch.py +0 -0
  43. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/basic_auth.py +0 -0
  44. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/create_entity.py +0 -0
  45. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/create_ingredient_sdk.py +0 -0
  46. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/download_files.py +0 -0
  47. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/edit_recipe_inputs.py +0 -0
  48. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  49. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  50. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  51. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  52. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  53. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  54. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  55. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  56. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/integration-server/pyproject.toml +0 -0
  57. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/invoke_uploader.py +0 -0
  58. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/oauth.py +0 -0
  59. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/set_recipe_metadata_file.py +0 -0
  60. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/set_recipe_output_file_sdk.py +0 -0
  61. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/examples/upload_files.py +0 -0
  62. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/__init__.py +0 -0
  63. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/argument_parser/__init__.py +0 -0
  64. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/argument_parser/_is_enum.py +0 -0
  65. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  66. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/argument_parser/case_convert.py +0 -0
  67. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/__init__.py +0 -0
  68. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/_blob_session.py +0 -0
  69. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  70. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/_local_session.py +0 -0
  71. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/_s3_session.py +0 -0
  72. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  73. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  74. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  75. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/py.typed +0 -0
  76. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/__init__.py +0 -0
  77. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/annotation.py +0 -0
  78. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/missing_sentry.py +0 -0
  79. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/opaque_key.py +0 -0
  80. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/serial_alias.py +0 -0
  81. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/serial_class.py +0 -0
  82. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/serial_generic.py +0 -0
  83. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/serial_union.py +0 -0
  84. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization/yaml.py +0 -0
  85. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization_util/__init__.py +0 -0
  86. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  87. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  88. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization_util/dataclasses.py +0 -0
  89. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/serialization_util/serialization_helpers.py +0 -0
  90. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/strenum_compat/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/strenum_compat/strenum_compat.py +0 -0
  92. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/__init__.py +0 -0
  93. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/__main__.py +0 -0
  94. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  95. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  96. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  97. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/builder.py +0 -0
  98. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/builder_types.py +0 -0
  99. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/config.py +0 -0
  100. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/cross_output_links.py +0 -0
  101. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/emit_io_ts.py +0 -0
  102. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/emit_open_api.py +0 -0
  103. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/emit_open_api_util.py +0 -0
  104. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/emit_python.py +0 -0
  105. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/emit_typescript.py +0 -0
  106. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/emit_typescript_util.py +0 -0
  107. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/load_types.py +0 -0
  108. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  109. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/open_api_util.py +0 -0
  110. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/parts/base.py.prepart +0 -0
  111. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  112. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/test.py +0 -0
  113. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/type_info/__main__.py +0 -0
  114. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  115. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  116. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/util.py +0 -0
  117. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/value_spec/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/value_spec/__main__.py +0 -0
  119. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  120. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  121. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/pkgs/type_spec/value_spec/types.py +0 -0
  122. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/setup.cfg +0 -0
  123. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/core/__init__.py +0 -0
  125. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/core/async_batch.py +0 -0
  126. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/core/client.py +0 -0
  127. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/core/environment.py +0 -0
  128. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/core/file_upload.py +0 -0
  129. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/core/types.py +0 -0
  130. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/__init__.py +0 -0
  131. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/cli.py +0 -0
  132. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/construct_client.py +0 -0
  133. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/cron.py +0 -0
  134. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/db/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/db/connect.py +0 -0
  136. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/db/session.py +0 -0
  137. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/entrypoint.py +0 -0
  138. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/executors/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  140. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/executors/script_executor.py +0 -0
  141. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/http_server/__init__.py +0 -0
  142. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/http_server/types.py +0 -0
  143. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/job.py +0 -0
  144. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  147. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  148. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  149. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  151. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  152. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  153. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  154. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  155. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  156. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  157. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  158. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  159. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  160. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  161. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/types.py +0 -0
  162. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/queue_runner/worker.py +0 -0
  163. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/scan_profiles.py +0 -0
  164. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/scheduler.py +0 -0
  165. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  167. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/server.py +0 -0
  168. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  169. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/py.typed +0 -0
  170. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/batch/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/batch/execute_batch.py +0 -0
  174. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  175. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/chemical/__init__.py +0 -0
  176. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  177. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  179. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/create_entities.py +0 -0
  181. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/create_entity.py +0 -0
  182. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  183. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/export_entities.py +0 -0
  184. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/get_entities_data.py +0 -0
  185. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  186. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/list_aggregate.py +0 -0
  187. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/list_entities.py +0 -0
  188. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/lock_entity.py +0 -0
  189. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/lookup_entity.py +0 -0
  190. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  191. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/set_barcode.py +0 -0
  192. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  193. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/set_values.py +0 -0
  194. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  195. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/entity/unlock_entity.py +0 -0
  196. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/equipment/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  198. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/field_options/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  200. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/files/__init__.py +0 -0
  201. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/files/create_file_record.py +0 -0
  202. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/files/download_file.py +0 -0
  203. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/id_source/__init__.py +0 -0
  204. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/id_source/list_id_source.py +0 -0
  205. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/id_source/match_id_source.py +0 -0
  206. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/input_groups/__init__.py +0 -0
  207. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  208. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/__init__.py +0 -0
  209. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/create_inputs.py +0 -0
  210. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/get_input_data.py +0 -0
  211. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/get_input_names.py +0 -0
  212. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  213. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  214. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/set_input_category.py +0 -0
  215. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  216. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  217. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/integrations/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  219. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/integrations/push_notification.py +0 -0
  220. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  221. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/listing/__init__.py +0 -0
  222. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/listing/fetch_listing.py +0 -0
  223. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/material_families/__init__.py +0 -0
  224. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  225. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/notebooks/__init__.py +0 -0
  226. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/outputs/__init__.py +0 -0
  227. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/outputs/get_output_data.py +0 -0
  228. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/outputs/get_output_names.py +0 -0
  229. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  230. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  231. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/permissions/__init__.py +0 -0
  232. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  233. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/project/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/project/get_projects.py +0 -0
  235. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/project/get_projects_data.py +0 -0
  236. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipe_links/__init__.py +0 -0
  237. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  238. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  239. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  240. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  241. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/__init__.py +0 -0
  242. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  243. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  244. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  245. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  246. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  247. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  248. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  249. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/create_recipe.py +0 -0
  250. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/create_recipes.py +0 -0
  251. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  252. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  253. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_curve.py +0 -0
  254. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  255. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  256. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  257. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  258. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  259. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  260. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  261. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  262. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  263. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  264. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  265. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  266. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  267. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  268. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  269. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/runsheet/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  271. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  272. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/triggers/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/triggers/run_trigger.py +0 -0
  274. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/uploader/__init__.py +0 -0
  275. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  276. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  277. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/user/__init__.py +0 -0
  278. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/api/user/get_current_user_info.py +0 -0
  279. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/async_batch.py +0 -0
  280. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/async_batch_processor.py +0 -0
  281. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/async_batch_t.py +0 -0
  282. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/async_jobs.py +0 -0
  283. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/async_jobs_t.py +0 -0
  284. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/auth_retrieval.py +0 -0
  285. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/auth_retrieval_t.py +0 -0
  286. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/base.py +0 -0
  287. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/base_t.py +0 -0
  288. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/calculations.py +0 -0
  289. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/calculations_t.py +0 -0
  290. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/chemical_structure.py +0 -0
  291. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/chemical_structure_t.py +0 -0
  292. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/client_base.py +0 -0
  293. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/client_config.py +0 -0
  294. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/client_config_t.py +0 -0
  295. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/curves.py +0 -0
  296. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/curves_t.py +0 -0
  297. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/data.py +0 -0
  298. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/data_t.py +0 -0
  299. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/entity.py +0 -0
  300. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/experiment_groups.py +0 -0
  301. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/experiment_groups_t.py +0 -0
  302. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/exports.py +0 -0
  303. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/exports_t.py +0 -0
  304. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/field_values.py +0 -0
  305. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/field_values_t.py +0 -0
  306. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/fields.py +0 -0
  307. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/fields_t.py +0 -0
  308. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/generic_upload.py +0 -0
  309. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/generic_upload_t.py +0 -0
  310. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/id_source.py +0 -0
  311. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/id_source_t.py +0 -0
  312. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/identifier.py +0 -0
  313. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/identifier_t.py +0 -0
  314. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/input_attributes.py +0 -0
  315. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/input_attributes_t.py +0 -0
  316. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/inputs.py +0 -0
  317. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/inputs_t.py +0 -0
  318. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/integration_server.py +0 -0
  319. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/integration_server_t.py +0 -0
  320. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/integration_session.py +0 -0
  321. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/integration_session_t.py +0 -0
  322. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/integrations.py +0 -0
  323. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/integrations_t.py +0 -0
  324. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/job_definition.py +0 -0
  325. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/job_definition_t.py +0 -0
  326. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/listing.py +0 -0
  327. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/listing_t.py +0 -0
  328. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/notices.py +0 -0
  329. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/notices_t.py +0 -0
  330. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/notifications.py +0 -0
  331. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/notifications_t.py +0 -0
  332. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/outputs.py +0 -0
  333. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/outputs_t.py +0 -0
  334. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/overrides.py +0 -0
  335. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/overrides_t.py +0 -0
  336. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/permissions.py +0 -0
  337. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/permissions_t.py +0 -0
  338. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/phases.py +0 -0
  339. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/phases_t.py +0 -0
  340. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/post_base.py +0 -0
  341. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/post_base_t.py +0 -0
  342. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/queued_job.py +0 -0
  343. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/queued_job_t.py +0 -0
  344. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_identifiers.py +0 -0
  345. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_identifiers_t.py +0 -0
  346. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_inputs.py +0 -0
  347. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_inputs_t.py +0 -0
  348. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_links.py +0 -0
  349. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_links_t.py +0 -0
  350. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_metadata.py +0 -0
  351. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_metadata_t.py +0 -0
  352. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_output_metadata.py +0 -0
  353. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_output_metadata_t.py +0 -0
  354. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_tags.py +0 -0
  355. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_tags_t.py +0 -0
  356. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_workflow_steps.py +0 -0
  357. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  358. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipes.py +0 -0
  359. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/recipes_t.py +0 -0
  360. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/response.py +0 -0
  361. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/response_t.py +0 -0
  362. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/runsheet.py +0 -0
  363. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/runsheet_format.py +0 -0
  364. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/runsheet_format_t.py +0 -0
  365. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/runsheet_t.py +0 -0
  366. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/secret_retrieval.py +0 -0
  367. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/secret_retrieval_t.py +0 -0
  368. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/sockets.py +0 -0
  369. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/sockets_t.py +0 -0
  370. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/specs.py +0 -0
  371. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/specs_t.py +0 -0
  372. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/units.py +0 -0
  373. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/units_t.py +0 -0
  374. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/uploader.py +0 -0
  375. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/uploader_t.py +0 -0
  376. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/users.py +0 -0
  377. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/users_t.py +0 -0
  378. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/webhook_job.py +0 -0
  379. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/webhook_job_t.py +0 -0
  380. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/workflows.py +0 -0
  381. {uncountablepythonsdk-0.0.146 → uncountablepythonsdk-0.0.148}/uncountable/types/workflows_t.py +0 -0
@@ -36,7 +36,7 @@ jobs:
36
36
  run: |
37
37
  export SETUPTOOLS_SCM_PRETEND_VERSION_FOR_uncountablepythonsdk=$(git describe --tags --exact-match)
38
38
  python3 -m build
39
- - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
39
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
40
40
  with:
41
41
  name: package-distributions
42
42
  path: dist/
@@ -50,7 +50,7 @@ jobs:
50
50
  permissions:
51
51
  id-token: write
52
52
  steps:
53
- - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
53
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
54
54
  with:
55
55
  name: package-distributions
56
56
  path: dist/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.146
3
+ Version: 0.0.148
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
@@ -30,7 +30,7 @@ Requires-Dist: pysftp==0.*
30
30
  Requires-Dist: opentelemetry-api==1.*
31
31
  Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.*
32
32
  Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.*
33
- Requires-Dist: opentelemetry-sdk<1.39.0
33
+ Requires-Dist: opentelemetry-sdk>=1.39.1
34
34
  Requires-Dist: paramiko==3.*
35
35
  Requires-Dist: boto3==1.*
36
36
  Requires-Dist: flask==3.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.146
3
+ Version: 0.0.148
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
@@ -30,7 +30,7 @@ Requires-Dist: pysftp==0.*
30
30
  Requires-Dist: opentelemetry-api==1.*
31
31
  Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.*
32
32
  Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.*
33
- Requires-Dist: opentelemetry-sdk<1.39.0
33
+ Requires-Dist: opentelemetry-sdk>=1.39.1
34
34
  Requires-Dist: paramiko==3.*
35
35
  Requires-Dist: boto3==1.*
36
36
  Requires-Dist: flask==3.*
@@ -12,7 +12,7 @@ pysftp==0.*
12
12
  opentelemetry-api==1.*
13
13
  opentelemetry-exporter-otlp-proto-common==1.*
14
14
  opentelemetry-exporter-otlp-proto-http==1.*
15
- opentelemetry-sdk<1.39.0
15
+ opentelemetry-sdk>=1.39.1
16
16
  paramiko==3.*
17
17
  boto3==1.*
18
18
  flask==3.*
@@ -1,4 +1,4 @@
1
- furo==2025.9.25
1
+ furo==2025.12.19
2
2
  myst-parser==4.0.1
3
3
  sphinx-autoapi==3.6.0
4
4
  sphinx-copybutton==0.5.2
@@ -96,17 +96,17 @@ class ParseExample(WebhookJob[ParsePayload]):
96
96
  ),
97
97
  uploader_t.HeaderEntry(
98
98
  type=uploader_t.StructureElementType.HEADER,
99
- value=uploader_t.TextHeaderData(
100
- name="file_source",
101
- type=uploader_t.HeaderType.TEXT_HEADER,
102
- data=uploader_t.StringValue(value="my_file_to_upload.xlsx"),
99
+ value=uploader_t.NumericHeaderData(
100
+ name="file structure number",
101
+ data=uploader_t.DecimalValue(value=Decimal(99)),
103
102
  ),
104
103
  ),
105
104
  uploader_t.HeaderEntry(
106
105
  type=uploader_t.StructureElementType.HEADER,
107
- value=uploader_t.NumericHeaderData(
108
- name="file structure number",
109
- data=uploader_t.DecimalValue(value=Decimal(99)),
106
+ value=uploader_t.TextHeaderData(
107
+ name="uploaded file name",
108
+ type=uploader_t.HeaderType.TEXT_HEADER,
109
+ data=uploader_t.StringValue(value=file_name),
110
110
  ),
111
111
  ),
112
112
  ],
@@ -296,7 +296,9 @@ def _build_parser_inner(
296
296
  )
297
297
 
298
298
  if dataclasses.is_dataclass(parsed_type):
299
- return _build_parser_dataclass(parsed_type, context, type_var_map)
299
+ dc_merged_map: dict[typing.TypeVar, type] = {}
300
+ _resolve_base_type_vars(cls=parsed_type, type_var_map=dc_merged_map)
301
+ return _build_parser_dataclass(parsed_type, context, dc_merged_map)
300
302
 
301
303
  origin = typing.get_origin(parsed_type)
302
304
  type_args = typing.get_args(parsed_type)
@@ -15,6 +15,7 @@ from pkgs.serialization import OpaqueKey
15
15
  from pkgs.serialization_util import serialize_for_api, serialize_for_storage
16
16
 
17
17
  from .. import builder, util
18
+ from ..emit_python import python_field_name
18
19
  from ..emit_typescript_util import MODIFY_NOTICE, ts_name
19
20
  from ..value_spec import convert_to_value_spec_type
20
21
 
@@ -162,6 +163,7 @@ class MapProperty:
162
163
  # We don't have typing on defaults yet, relying on emitters to check it. Limit
163
164
  # use of this field, as it'll necessarily change when adding type info
164
165
  default: PureJsonValue
166
+ storage_name: str | None = None
165
167
 
166
168
 
167
169
  @dataclasses.dataclass
@@ -223,7 +225,7 @@ def _build_map_all(build: builder.SpecBuilder, *, python: bool = False) -> MapAl
223
225
  map_all.namespaces[OpaqueKey(key=namespace.name)] = map_namespace
224
226
 
225
227
  for type_ in namespace.types.values():
226
- map_type = _build_map_type(build, type_)
228
+ map_type = _build_map_type(build, type_, python=python)
227
229
  if map_type is not None:
228
230
  map_namespace.types[OpaqueKey(key=type_.name)] = map_type
229
231
 
@@ -384,7 +386,7 @@ def _validate_type_ext_info(
384
386
 
385
387
 
386
388
  def _build_map_type(
387
- build: builder.SpecBuilder, stype: builder.SpecTypeDefn
389
+ build: builder.SpecBuilder, stype: builder.SpecTypeDefn, python: bool = False
388
390
  ) -> MapType | None:
389
391
  # limited support for now
390
392
  if (
@@ -420,6 +422,10 @@ def _build_map_type(
420
422
  desc=parts.desc,
421
423
  default=prop.default,
422
424
  )
425
+ if python:
426
+ map_property.storage_name = python_field_name(
427
+ prop.name, prop.name_case
428
+ )
423
429
  map_type.properties[OpaqueKey(key=prop.name)] = map_property
424
430
 
425
431
  return map_type
@@ -65,7 +65,7 @@ dependencies = [
65
65
  "opentelemetry-api==1.*",
66
66
  "opentelemetry-exporter-otlp-proto-common==1.*",
67
67
  "opentelemetry-exporter-otlp-proto-http==1.*",
68
- "opentelemetry-sdk < 1.39.0",
68
+ "opentelemetry-sdk >= 1.39.1",
69
69
  "paramiko ==3.*",
70
70
  "boto3 == 1.*",
71
71
  "flask == 3.*",
@@ -91,8 +91,9 @@ def execute_job(
91
91
  ) -> job_definition_t.JobResult:
92
92
  with args.logger.push_scope(job_definition.name) as job_logger:
93
93
  job = resolve_executor(job_definition.executor, profile_metadata)
94
+ job_location = f"{job.__class__.__module__}.{job.__class__.__name__}"
94
95
 
95
- job_logger.log_info(f"Started running job at `{job.__class__}`..")
96
+ job_logger.log_info(f"Starting job: `{job_location}`")
96
97
 
97
98
  run_entity: entity_t.Entity | None = None
98
99
  try:
@@ -125,7 +126,7 @@ def execute_job(
125
126
 
126
127
  submitted_batch_job_ids = args.batch_processor.get_submitted_job_ids()
127
128
  job_logger.log_info(
128
- "completed job",
129
+ f"Completed job: `{job_location}` (success={result.success})",
129
130
  attributes={
130
131
  "submitted_batch_job_ids": submitted_batch_job_ids,
131
132
  "success": result.success,
@@ -1,7 +1,6 @@
1
1
  import functools
2
2
  import json
3
3
  import os
4
- import resource
5
4
  import threading
6
5
  import time
7
6
  import traceback
@@ -13,13 +12,14 @@ from typing import Generator, assert_never, cast
13
12
 
14
13
  import psutil
15
14
  from opentelemetry import _logs, trace
15
+ from opentelemetry._logs import Logger as OTELLogger
16
+ from opentelemetry._logs import LogRecord
16
17
  from opentelemetry.context import get_current
17
18
  from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
18
19
  from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
19
- from opentelemetry.sdk._logs import Logger as OTELLogger
20
20
  from opentelemetry.sdk._logs import (
21
21
  LoggerProvider,
22
- LogRecord,
22
+ ReadableLogRecord,
23
23
  )
24
24
  from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, ConsoleLogExporter
25
25
  from opentelemetry.sdk.resources import Attributes, Resource
@@ -36,12 +36,21 @@ from uncountable.core.environment import (
36
36
  )
37
37
  from uncountable.types import base_t, job_definition_t
38
38
 
39
+ # Conditionally import resource module - not available on Windows
40
+ if typing.TYPE_CHECKING:
41
+ import resource as resource
42
+ else:
43
+ try: # type: ignore[unreachable]
44
+ import resource as resource
45
+ except ImportError:
46
+ resource = None
47
+
39
48
 
40
49
  def _cast_attributes(attributes: dict[str, base_t.JsonValue]) -> Attributes:
41
50
  return cast(Attributes, attributes)
42
51
 
43
52
 
44
- def one_line_formatter(record: LogRecord) -> str:
53
+ def one_line_formatter(record: ReadableLogRecord) -> str:
45
54
  json_data = record.to_json()
46
55
  return json.dumps(json.loads(json_data), separators=(",", ":")) + "\n"
47
56
 
@@ -58,8 +67,8 @@ def get_otel_resource() -> Resource:
58
67
  unc_env = get_server_env()
59
68
  if unc_env is not None:
60
69
  attributes["deployment.environment"] = unc_env
61
- resource = Resource.create(attributes=_cast_attributes(attributes))
62
- return resource
70
+ otel_resource = Resource.create(attributes=_cast_attributes(attributes))
71
+ return otel_resource
63
72
 
64
73
 
65
74
  @functools.cache
@@ -104,9 +113,11 @@ def _get_severity_number(severity: LogSeverity) -> _logs.SeverityNumber:
104
113
 
105
114
  class Logger:
106
115
  current_span: Span
116
+ _bound_attributes: dict[str, base_t.JsonValue]
107
117
 
108
118
  def __init__(self, base_span: Span) -> None:
109
119
  self.current_span = base_span
120
+ self._bound_attributes = {}
110
121
 
111
122
  @property
112
123
  def current_span_id(self) -> int:
@@ -123,7 +134,10 @@ class Logger:
123
134
  message: str | None = None,
124
135
  severity: LogSeverity | None = None,
125
136
  ) -> Attributes:
126
- patched_attributes = {**(attributes if attributes is not None else {})}
137
+ patched_attributes = {
138
+ **self._bound_attributes,
139
+ **(attributes if attributes is not None else {}),
140
+ }
127
141
  if message is not None:
128
142
  patched_attributes["message"] = message
129
143
  elif "body" in patched_attributes:
@@ -136,7 +150,7 @@ class Logger:
136
150
  ):
137
151
  patched_attributes["status"] = patched_attributes["severity_text"].lower()
138
152
 
139
- return patched_attributes
153
+ return _cast_attributes(patched_attributes)
140
154
 
141
155
  def _emit_log(
142
156
  self, message: str, *, severity: LogSeverity, attributes: Attributes | None
@@ -151,10 +165,12 @@ class Logger:
151
165
  ),
152
166
  context=get_current(),
153
167
  severity_number=_get_severity_number(severity),
154
- resource=get_otel_resource(),
155
168
  )
156
169
  otel_logger.emit(log_record)
157
170
 
171
+ def bind(self, *, attributes: Attributes) -> None:
172
+ self._bound_attributes.update(attributes)
173
+
158
174
  def log_info(self, message: str, *, attributes: Attributes | None = None) -> None:
159
175
  self._emit_log(
160
176
  message=message, severity=LogSeverity.INFO, attributes=attributes
@@ -187,7 +203,7 @@ class Logger:
187
203
  self.current_span.record_exception(
188
204
  exception=exception, attributes=patched_attributes
189
205
  )
190
- log_message = f"error: {message}\nexception: {exception}{traceback_str}"
206
+ log_message = f"{message}\nexception: {exception}{traceback_str}"
191
207
  self._emit_log(
192
208
  message=log_message, severity=severity, attributes=patched_attributes
193
209
  )
@@ -252,14 +268,15 @@ class PerJobResourceTracker:
252
268
  self.stop()
253
269
  stats = dict(self.summary())
254
270
  if isinstance(exc_value, MemoryError):
255
- limit, _ = resource.getrlimit(resource.RLIMIT_AS)
256
- self.logger.log_exception(
257
- exc_value,
258
- message=(
259
- f"Job '{self.logger.job_definition.name}' (ID={self.logger.job_definition.id}) "
260
- f"exceeded memory limit ({limit / (1024**3):.2f} GB)."
261
- ),
262
- )
271
+ if resource is not None:
272
+ limit, _ = resource.getrlimit(resource.RLIMIT_AS)
273
+ self.logger.log_exception(
274
+ exc_value,
275
+ message=(
276
+ f"Job '{self.logger.job_definition.name}' (ID={self.logger.job_definition.id}) "
277
+ f"exceeded memory limit ({limit / (1024**3):.2f} GB)."
278
+ ),
279
+ )
263
280
  return
264
281
  self.logger.log_info("Job resource usage summary", attributes=stats)
265
282
  return
@@ -0,0 +1,269 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_union_annotation
13
+ from pkgs.serialization import serial_string_enum
14
+ from ... import base_t
15
+ from ... import identifier_t
16
+
17
+ __all__: list[str] = [
18
+ "Arguments",
19
+ "ChemicalStructureSourceType",
20
+ "Data",
21
+ "ENDPOINT_METHOD",
22
+ "ENDPOINT_PATH",
23
+ "InputContent",
24
+ "InputContentChemicalStructure",
25
+ "InputContentEquation",
26
+ "InputContentFiles",
27
+ "InputContentTable",
28
+ "InputContentTextHtml",
29
+ "InputContentTextMarkdown",
30
+ "InputContentType",
31
+ "Location",
32
+ "LocationAppendToFirstPage",
33
+ "LocationType",
34
+ "TableCell",
35
+ "TableCellContent",
36
+ "TableCellContentText",
37
+ "TableCellContentType",
38
+ "TableCellStyle",
39
+ ]
40
+
41
+ ENDPOINT_METHOD = "POST"
42
+ ENDPOINT_PATH = "api/external/notebooks/add_notebook_content"
43
+
44
+
45
+ # DO NOT MODIFY -- This file is generated by type_spec
46
+ @serial_string_enum(
47
+ labels={
48
+ "append_to_first_page": "Append To First Page",
49
+ },
50
+ )
51
+ class LocationType(StrEnum):
52
+ APPEND_TO_FIRST_PAGE = "append_to_first_page"
53
+
54
+
55
+ # DO NOT MODIFY -- This file is generated by type_spec
56
+ @serial_class(
57
+ named_type_path="sdk.api.notebooks.add_notebook_content.LocationAppendToFirstPage",
58
+ parse_require={"type"},
59
+ )
60
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
61
+ class LocationAppendToFirstPage:
62
+ type: typing.Literal[LocationType.APPEND_TO_FIRST_PAGE] = LocationType.APPEND_TO_FIRST_PAGE
63
+
64
+
65
+ # DO NOT MODIFY -- This file is generated by type_spec
66
+ Location = typing.Annotated[
67
+ typing.Union[LocationAppendToFirstPage],
68
+ serial_union_annotation(
69
+ named_type_path="sdk.api.notebooks.add_notebook_content.Location",
70
+ discriminator="type",
71
+ discriminator_map={
72
+ "append_to_first_page": LocationAppendToFirstPage,
73
+ },
74
+ ),
75
+ ]
76
+
77
+
78
+ # DO NOT MODIFY -- This file is generated by type_spec
79
+ @serial_string_enum(
80
+ labels={
81
+ "text_markdown": "Text Markdown",
82
+ "text_html": "Text HTML",
83
+ "table": "Table",
84
+ "chemical_structure": "Chemical Structure",
85
+ "files": "Files",
86
+ "equation": "Equation",
87
+ },
88
+ )
89
+ class InputContentType(StrEnum):
90
+ TEXT_MARKDOWN = "text_markdown"
91
+ TEXT_HTML = "text_html"
92
+ TABLE = "table"
93
+ CHEMICAL_STRUCTURE = "chemical_structure"
94
+ FILES = "files"
95
+ EQUATION = "equation"
96
+
97
+
98
+ # DO NOT MODIFY -- This file is generated by type_spec
99
+ @serial_class(
100
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContentTextHtml",
101
+ parse_require={"type"},
102
+ )
103
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
104
+ class InputContentTextHtml:
105
+ type: typing.Literal[InputContentType.TEXT_HTML] = InputContentType.TEXT_HTML
106
+ text_html: str
107
+
108
+
109
+ # DO NOT MODIFY -- This file is generated by type_spec
110
+ @serial_class(
111
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContentEquation",
112
+ parse_require={"type"},
113
+ )
114
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
115
+ class InputContentEquation:
116
+ type: typing.Literal[InputContentType.EQUATION] = InputContentType.EQUATION
117
+ equation: str
118
+
119
+
120
+ # DO NOT MODIFY -- This file is generated by type_spec
121
+ @serial_class(
122
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContentFiles",
123
+ parse_require={"type"},
124
+ )
125
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
126
+ class InputContentFiles:
127
+ type: typing.Literal[InputContentType.FILES] = InputContentType.FILES
128
+ file_ids: list[base_t.ObjectId]
129
+
130
+
131
+ # DO NOT MODIFY -- This file is generated by type_spec
132
+ @serial_string_enum(
133
+ labels={
134
+ "smiles": "SMILES",
135
+ "ketcher": "Ketcher",
136
+ },
137
+ )
138
+ class ChemicalStructureSourceType(StrEnum):
139
+ SMILES = "smiles"
140
+ KETCHER = "ketcher"
141
+
142
+
143
+ # DO NOT MODIFY -- This file is generated by type_spec
144
+ @serial_class(
145
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContentChemicalStructure",
146
+ parse_require={"type"},
147
+ )
148
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
149
+ class InputContentChemicalStructure:
150
+ type: typing.Literal[InputContentType.CHEMICAL_STRUCTURE] = InputContentType.CHEMICAL_STRUCTURE
151
+ structure_format: ChemicalStructureSourceType
152
+ structure_data: str
153
+
154
+
155
+ # DO NOT MODIFY -- This file is generated by type_spec
156
+ @serial_class(
157
+ named_type_path="sdk.api.notebooks.add_notebook_content.TableCellStyle",
158
+ )
159
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
160
+ class TableCellStyle:
161
+ background_color: str | None = None
162
+ bold: bool | None = None
163
+ italic: bool | None = None
164
+ underline: bool | None = None
165
+
166
+
167
+ # DO NOT MODIFY -- This file is generated by type_spec
168
+ @serial_string_enum(
169
+ labels={
170
+ "text": "Text",
171
+ },
172
+ )
173
+ class TableCellContentType(StrEnum):
174
+ TEXT = "text"
175
+
176
+
177
+ # DO NOT MODIFY -- This file is generated by type_spec
178
+ @serial_class(
179
+ named_type_path="sdk.api.notebooks.add_notebook_content.TableCellContentText",
180
+ parse_require={"type"},
181
+ )
182
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
183
+ class TableCellContentText:
184
+ type: typing.Literal[TableCellContentType.TEXT] = TableCellContentType.TEXT
185
+ text: str
186
+
187
+
188
+ # DO NOT MODIFY -- This file is generated by type_spec
189
+ TableCellContent = typing.Annotated[
190
+ typing.Union[TableCellContentText],
191
+ serial_union_annotation(
192
+ named_type_path="sdk.api.notebooks.add_notebook_content.TableCellContent",
193
+ discriminator="type",
194
+ discriminator_map={
195
+ "text": TableCellContentText,
196
+ },
197
+ ),
198
+ ]
199
+
200
+
201
+ # DO NOT MODIFY -- This file is generated by type_spec
202
+ @serial_class(
203
+ named_type_path="sdk.api.notebooks.add_notebook_content.TableCell",
204
+ )
205
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
206
+ class TableCell:
207
+ content: TableCellContent
208
+ style: TableCellStyle | None = None
209
+
210
+
211
+ # DO NOT MODIFY -- This file is generated by type_spec
212
+ @serial_class(
213
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContentTable",
214
+ parse_require={"type"},
215
+ )
216
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
217
+ class InputContentTable:
218
+ type: typing.Literal[InputContentType.TABLE] = InputContentType.TABLE
219
+ rows: list[list[TableCell]]
220
+
221
+
222
+ # DO NOT MODIFY -- This file is generated by type_spec
223
+ @serial_class(
224
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContentTextMarkdown",
225
+ parse_require={"type"},
226
+ )
227
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
228
+ class InputContentTextMarkdown:
229
+ type: typing.Literal[InputContentType.TEXT_MARKDOWN] = InputContentType.TEXT_MARKDOWN
230
+ text_markdown: str
231
+
232
+
233
+ # DO NOT MODIFY -- This file is generated by type_spec
234
+ InputContent = typing.Annotated[
235
+ InputContentTextMarkdown | InputContentTextHtml | InputContentTable | InputContentChemicalStructure | InputContentFiles | InputContentEquation,
236
+ serial_union_annotation(
237
+ named_type_path="sdk.api.notebooks.add_notebook_content.InputContent",
238
+ discriminator="type",
239
+ discriminator_map={
240
+ "text_markdown": InputContentTextMarkdown,
241
+ "text_html": InputContentTextHtml,
242
+ "table": InputContentTable,
243
+ "chemical_structure": InputContentChemicalStructure,
244
+ "files": InputContentFiles,
245
+ "equation": InputContentEquation,
246
+ },
247
+ ),
248
+ ]
249
+
250
+
251
+ # DO NOT MODIFY -- This file is generated by type_spec
252
+ @serial_class(
253
+ named_type_path="sdk.api.notebooks.add_notebook_content.Arguments",
254
+ )
255
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
256
+ class Arguments:
257
+ notebook_key: identifier_t.IdentifierKey
258
+ location: Location
259
+ contents: list[InputContent]
260
+
261
+
262
+ # DO NOT MODIFY -- This file is generated by type_spec
263
+ @serial_class(
264
+ named_type_path="sdk.api.notebooks.add_notebook_content.Data",
265
+ )
266
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
267
+ class Data:
268
+ pass
269
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -35,6 +35,7 @@ __all__: list[str] = [
35
35
  "RecipeInputEditInputBase",
36
36
  "RecipeInputEditPlaceholder",
37
37
  "RecipeInputEditSetLot",
38
+ "RecipeInputEditSetPropagatedPercentage",
38
39
  "RecipeInputEditSetRole",
39
40
  "RecipeInputEditType",
40
41
  "RecipeInputEditUpdateAnnotations",
@@ -54,6 +55,7 @@ class RecipeInputEditType(StrEnum):
54
55
  ADD_INPUT = "add_input"
55
56
  UPDATE_ANNOTATIONS = "update_annotations"
56
57
  SET_LOT = "set_lot"
58
+ SET_PROPAGATED_PERCENTAGE = "set_propagated_percentage"
57
59
  CHANGE_BASIS = "change_basis"
58
60
  ADD_INSTRUCTIONS = "add_instructions"
59
61
  SET_ROLE = "set_role"
@@ -147,6 +149,20 @@ class RecipeInputEditSetLot(RecipeInputEditBase):
147
149
  mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
148
150
 
149
151
 
152
+ # DO NOT MODIFY -- This file is generated by type_spec
153
+ @serial_class(
154
+ named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditSetPropagatedPercentage",
155
+ to_string_values={"propagated_percentage"},
156
+ parse_require={"type"},
157
+ )
158
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
159
+ class RecipeInputEditSetPropagatedPercentage(RecipeInputEditBase):
160
+ type: typing.Literal[RecipeInputEditType.SET_PROPAGATED_PERCENTAGE] = RecipeInputEditType.SET_PROPAGATED_PERCENTAGE
161
+ ingredient_key: identifier_t.IdentifierKey
162
+ propagated_percentage: Decimal
163
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
164
+
165
+
150
166
  # DO NOT MODIFY -- This file is generated by type_spec
151
167
  @serial_class(
152
168
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAddInstructions",
@@ -255,7 +271,7 @@ class RecipeInputEditPlaceholder(RecipeInputEditBase):
255
271
 
256
272
  # DO NOT MODIFY -- This file is generated by type_spec
257
273
  RecipeInputEdit = typing.Annotated[
258
- RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder,
274
+ RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditSetPropagatedPercentage | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder,
259
275
  serial_union_annotation(
260
276
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEdit",
261
277
  discriminator="type",
@@ -265,6 +281,7 @@ RecipeInputEdit = typing.Annotated[
265
281
  "add_input": RecipeInputEditAddInput,
266
282
  "update_annotations": RecipeInputEditUpdateAnnotations,
267
283
  "set_lot": RecipeInputEditSetLot,
284
+ "set_propagated_percentage": RecipeInputEditSetPropagatedPercentage,
268
285
  "change_basis": RecipeInputEditChangeBasisViewed,
269
286
  "add_instructions": RecipeInputEditAddInstructions,
270
287
  "set_role": RecipeInputEditSetRole,
@@ -208,6 +208,7 @@ class Recipe:
208
208
  recipe_lock_status: RecipeLockStatus
209
209
  creating_user_id: base_t.ObjectId | None = None
210
210
  barcode_value: str | None = None
211
+ assigned_spec_id: base_t.ObjectId | None = None
211
212
 
212
213
 
213
214
  # DO NOT MODIFY -- This file is generated by type_spec