UncountablePythonSDK 0.0.147__tar.gz → 0.0.149__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 (380) hide show
  1. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/.github/workflows/publish.yml +2 -2
  2. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/PKG-INFO +2 -2
  3. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/UncountablePythonSDK.egg-info/PKG-INFO +2 -2
  4. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/UncountablePythonSDK.egg-info/requires.txt +1 -1
  5. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/requirements.txt +1 -1
  6. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_parse.py +7 -7
  7. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/type_info/emit_type_info.py +8 -2
  8. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pyproject.toml +1 -1
  9. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/executors/executors.py +7 -16
  10. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +8 -3
  11. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/job_scheduler.py +15 -1
  12. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/worker.py +1 -0
  13. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/telemetry.py +20 -7
  14. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/set_input_attribute_values.py +1 -0
  15. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/notebooks/add_notebook_content.py +89 -1
  16. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/entity_t.py +8 -0
  17. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/.github/workflows/documentation.yml +0 -0
  18. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/.gitignore +0 -0
  19. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/.python-version +0 -0
  20. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/README.md +0 -0
  21. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  22. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  23. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  24. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/.gitignore +0 -0
  25. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/conf.py +0 -0
  26. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/index.md +0 -0
  27. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/integration_examples/create_ingredient.md +0 -0
  28. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/integration_examples/create_output.md +0 -0
  29. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/integration_examples/index.md +0 -0
  30. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/integration_examples/upload_file.md +0 -0
  31. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/justfile +0 -0
  32. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/android-chrome-192x192.png +0 -0
  33. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/android-chrome-512x512.png +0 -0
  34. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/apple-touch-icon.png +0 -0
  35. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/browserconfig.xml +0 -0
  36. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/favicon-16x16.png +0 -0
  37. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/favicon-32x32.png +0 -0
  38. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/manifest.json +0 -0
  39. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/mstile-150x150.png +0 -0
  40. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  41. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/docs/static/logo_blue.png +0 -0
  42. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/async_batch.py +0 -0
  43. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/basic_auth.py +0 -0
  44. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/create_entity.py +0 -0
  45. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/create_ingredient_sdk.py +0 -0
  46. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/download_files.py +0 -0
  47. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/edit_recipe_inputs.py +0 -0
  48. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  49. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  50. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  51. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  52. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  53. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  54. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  55. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  56. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/integration-server/pyproject.toml +0 -0
  57. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/invoke_uploader.py +0 -0
  58. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/oauth.py +0 -0
  59. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/set_recipe_metadata_file.py +0 -0
  60. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/set_recipe_output_file_sdk.py +0 -0
  61. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/examples/upload_files.py +0 -0
  62. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/__init__.py +0 -0
  63. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/argument_parser/__init__.py +0 -0
  64. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/argument_parser/_is_enum.py +0 -0
  65. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  66. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/argument_parser/argument_parser.py +0 -0
  67. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/argument_parser/case_convert.py +0 -0
  68. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/__init__.py +0 -0
  69. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/_blob_session.py +0 -0
  70. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  71. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/_local_session.py +0 -0
  72. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/_s3_session.py +0 -0
  73. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  74. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  75. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  76. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/py.typed +0 -0
  77. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/__init__.py +0 -0
  78. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/annotation.py +0 -0
  79. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/missing_sentry.py +0 -0
  80. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/opaque_key.py +0 -0
  81. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/serial_alias.py +0 -0
  82. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/serial_class.py +0 -0
  83. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/serial_generic.py +0 -0
  84. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/serial_union.py +0 -0
  85. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization/yaml.py +0 -0
  86. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization_util/__init__.py +0 -0
  87. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  88. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  89. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization_util/dataclasses.py +0 -0
  90. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/serialization_util/serialization_helpers.py +0 -0
  91. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/strenum_compat/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/strenum_compat/strenum_compat.py +0 -0
  93. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/__init__.py +0 -0
  94. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/__main__.py +0 -0
  95. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  97. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  98. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/builder.py +0 -0
  99. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/builder_types.py +0 -0
  100. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/config.py +0 -0
  101. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/cross_output_links.py +0 -0
  102. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/emit_io_ts.py +0 -0
  103. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/emit_open_api.py +0 -0
  104. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/emit_open_api_util.py +0 -0
  105. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/emit_python.py +0 -0
  106. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/emit_typescript.py +0 -0
  107. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/emit_typescript_util.py +0 -0
  108. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/load_types.py +0 -0
  109. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  110. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/open_api_util.py +0 -0
  111. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/parts/base.py.prepart +0 -0
  112. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  113. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/test.py +0 -0
  114. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/type_info/__main__.py +0 -0
  115. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  117. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/util.py +0 -0
  118. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/value_spec/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/value_spec/__main__.py +0 -0
  120. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  121. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  122. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/pkgs/type_spec/value_spec/types.py +0 -0
  123. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/setup.cfg +0 -0
  124. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/__init__.py +0 -0
  125. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/core/__init__.py +0 -0
  126. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/core/async_batch.py +0 -0
  127. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/core/client.py +0 -0
  128. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/core/environment.py +0 -0
  129. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/core/file_upload.py +0 -0
  130. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/core/types.py +0 -0
  131. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/__init__.py +0 -0
  132. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/cli.py +0 -0
  133. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/construct_client.py +0 -0
  134. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/cron.py +0 -0
  135. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/db/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/db/connect.py +0 -0
  137. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/db/session.py +0 -0
  138. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/entrypoint.py +0 -0
  139. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/executors/__init__.py +0 -0
  140. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  141. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/executors/script_executor.py +0 -0
  142. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/http_server/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/http_server/types.py +0 -0
  144. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/job.py +0 -0
  145. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  148. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  149. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  150. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  152. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  153. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  154. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  155. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  156. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  158. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  159. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  160. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/queue_runner/types.py +0 -0
  161. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/scan_profiles.py +0 -0
  162. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/scheduler.py +0 -0
  163. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  165. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/server.py +0 -0
  166. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  167. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/py.typed +0 -0
  168. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/__init__.py +0 -0
  170. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/batch/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/batch/execute_batch.py +0 -0
  172. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  173. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/chemical/__init__.py +0 -0
  174. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  175. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  176. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  177. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/create_entities.py +0 -0
  179. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/create_entity.py +0 -0
  180. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  181. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/export_entities.py +0 -0
  182. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/get_entities_data.py +0 -0
  183. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  184. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/list_aggregate.py +0 -0
  185. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/list_entities.py +0 -0
  186. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/lock_entity.py +0 -0
  187. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/lookup_entity.py +0 -0
  188. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  189. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/set_barcode.py +0 -0
  190. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  191. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/set_values.py +0 -0
  192. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  193. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/entity/unlock_entity.py +0 -0
  194. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/equipment/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  196. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/field_options/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  198. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/files/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/files/create_file_record.py +0 -0
  200. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/files/download_file.py +0 -0
  201. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/id_source/__init__.py +0 -0
  202. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/id_source/list_id_source.py +0 -0
  203. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/id_source/match_id_source.py +0 -0
  204. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/input_groups/__init__.py +0 -0
  205. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  206. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/__init__.py +0 -0
  207. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/create_inputs.py +0 -0
  208. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/get_input_data.py +0 -0
  209. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/get_input_names.py +0 -0
  210. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  211. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/set_input_category.py +0 -0
  212. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  213. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  214. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/integrations/__init__.py +0 -0
  215. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  216. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/integrations/push_notification.py +0 -0
  217. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  218. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/listing/__init__.py +0 -0
  219. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/listing/fetch_listing.py +0 -0
  220. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/material_families/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  222. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/notebooks/__init__.py +0 -0
  223. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/outputs/__init__.py +0 -0
  224. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/outputs/get_output_data.py +0 -0
  225. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/outputs/get_output_names.py +0 -0
  226. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  227. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  228. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/permissions/__init__.py +0 -0
  229. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  230. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/project/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/project/get_projects.py +0 -0
  232. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/project/get_projects_data.py +0 -0
  233. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipe_links/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  235. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  236. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  237. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  238. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/__init__.py +0 -0
  239. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  240. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  241. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  242. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  243. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  244. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  245. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  246. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/create_recipe.py +0 -0
  247. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/create_recipes.py +0 -0
  248. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  249. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  250. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  251. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_curve.py +0 -0
  252. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  253. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  254. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  255. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  256. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  257. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  258. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  259. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  260. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  261. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  262. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  263. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  264. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  265. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  266. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  267. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  268. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/runsheet/__init__.py +0 -0
  269. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  270. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  271. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/triggers/__init__.py +0 -0
  272. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/triggers/run_trigger.py +0 -0
  273. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/uploader/__init__.py +0 -0
  274. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  275. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  276. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/user/__init__.py +0 -0
  277. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/api/user/get_current_user_info.py +0 -0
  278. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/async_batch.py +0 -0
  279. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/async_batch_processor.py +0 -0
  280. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/async_batch_t.py +0 -0
  281. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/async_jobs.py +0 -0
  282. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/async_jobs_t.py +0 -0
  283. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/auth_retrieval.py +0 -0
  284. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/auth_retrieval_t.py +0 -0
  285. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/base.py +0 -0
  286. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/base_t.py +0 -0
  287. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/calculations.py +0 -0
  288. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/calculations_t.py +0 -0
  289. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/chemical_structure.py +0 -0
  290. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/chemical_structure_t.py +0 -0
  291. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/client_base.py +0 -0
  292. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/client_config.py +0 -0
  293. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/client_config_t.py +0 -0
  294. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/curves.py +0 -0
  295. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/curves_t.py +0 -0
  296. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/data.py +0 -0
  297. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/data_t.py +0 -0
  298. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/entity.py +0 -0
  299. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/experiment_groups.py +0 -0
  300. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/experiment_groups_t.py +0 -0
  301. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/exports.py +0 -0
  302. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/exports_t.py +0 -0
  303. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/field_values.py +0 -0
  304. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/field_values_t.py +0 -0
  305. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/fields.py +0 -0
  306. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/fields_t.py +0 -0
  307. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/generic_upload.py +0 -0
  308. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/generic_upload_t.py +0 -0
  309. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/id_source.py +0 -0
  310. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/id_source_t.py +0 -0
  311. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/identifier.py +0 -0
  312. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/identifier_t.py +0 -0
  313. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/input_attributes.py +0 -0
  314. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/input_attributes_t.py +0 -0
  315. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/inputs.py +0 -0
  316. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/inputs_t.py +0 -0
  317. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/integration_server.py +0 -0
  318. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/integration_server_t.py +0 -0
  319. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/integration_session.py +0 -0
  320. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/integration_session_t.py +0 -0
  321. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/integrations.py +0 -0
  322. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/integrations_t.py +0 -0
  323. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/job_definition.py +0 -0
  324. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/job_definition_t.py +0 -0
  325. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/listing.py +0 -0
  326. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/listing_t.py +0 -0
  327. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/notices.py +0 -0
  328. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/notices_t.py +0 -0
  329. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/notifications.py +0 -0
  330. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/notifications_t.py +0 -0
  331. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/outputs.py +0 -0
  332. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/outputs_t.py +0 -0
  333. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/overrides.py +0 -0
  334. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/overrides_t.py +0 -0
  335. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/permissions.py +0 -0
  336. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/permissions_t.py +0 -0
  337. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/phases.py +0 -0
  338. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/phases_t.py +0 -0
  339. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/post_base.py +0 -0
  340. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/post_base_t.py +0 -0
  341. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/queued_job.py +0 -0
  342. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/queued_job_t.py +0 -0
  343. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_identifiers.py +0 -0
  344. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_identifiers_t.py +0 -0
  345. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_inputs.py +0 -0
  346. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_inputs_t.py +0 -0
  347. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_links.py +0 -0
  348. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_links_t.py +0 -0
  349. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_metadata.py +0 -0
  350. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_metadata_t.py +0 -0
  351. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_output_metadata.py +0 -0
  352. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_output_metadata_t.py +0 -0
  353. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_tags.py +0 -0
  354. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_tags_t.py +0 -0
  355. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_workflow_steps.py +0 -0
  356. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  357. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipes.py +0 -0
  358. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/recipes_t.py +0 -0
  359. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/response.py +0 -0
  360. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/response_t.py +0 -0
  361. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/runsheet.py +0 -0
  362. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/runsheet_format.py +0 -0
  363. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/runsheet_format_t.py +0 -0
  364. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/runsheet_t.py +0 -0
  365. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/secret_retrieval.py +0 -0
  366. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/secret_retrieval_t.py +0 -0
  367. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/sockets.py +0 -0
  368. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/sockets_t.py +0 -0
  369. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/specs.py +0 -0
  370. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/specs_t.py +0 -0
  371. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/units.py +0 -0
  372. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/units_t.py +0 -0
  373. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/uploader.py +0 -0
  374. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/uploader_t.py +0 -0
  375. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/users.py +0 -0
  376. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/users_t.py +0 -0
  377. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/webhook_job.py +0 -0
  378. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/webhook_job_t.py +0 -0
  379. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/uncountable/types/workflows.py +0 -0
  380. {uncountablepythonsdk-0.0.147 → uncountablepythonsdk-0.0.149}/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.147
3
+ Version: 0.0.149
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.147
3
+ Version: 0.0.149
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
  ],
@@ -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:
@@ -106,26 +107,16 @@ def execute_job(
106
107
  job_uuid=args.job_uuid,
107
108
  )
108
109
  result = job.run_outer(args=args)
110
+
111
+ if args.batch_processor.current_queue_size() != 0:
112
+ args.batch_processor.send()
109
113
  except Exception as e:
110
114
  job_logger.log_exception(e)
111
- if run_entity is not None:
112
- args.client.set_values(
113
- entity=run_entity,
114
- values=[
115
- field_values_t.ArgumentValueRefName(
116
- field_ref_name=async_jobs_t.ASYNC_JOB_STATUS_FIELD_REF_NAME,
117
- value=async_jobs_t.AsyncJobStatus.ERROR,
118
- ),
119
- ],
120
- )
121
- return job_definition_t.JobResult(success=False)
122
-
123
- if args.batch_processor.current_queue_size() != 0:
124
- args.batch_processor.send()
115
+ result = job_definition_t.JobResult(success=False)
125
116
 
126
117
  submitted_batch_job_ids = args.batch_processor.get_submitted_job_ids()
127
118
  job_logger.log_info(
128
- "completed job",
119
+ f"Completed job: `{job_location}` (success={result.success})",
129
120
  attributes={
130
121
  "submitted_batch_job_ids": submitted_batch_job_ids,
131
122
  "success": result.success,
@@ -265,10 +265,10 @@ class DatastoreSqlite(Datastore):
265
265
  else None
266
266
  )
267
267
 
268
- def vaccuum_queued_jobs(self) -> None:
268
+ def vaccuum_queued_jobs(self) -> list[str]:
269
269
  with self.session_maker() as session:
270
- delete_stmt = (
271
- delete(QueuedJob)
270
+ select_stmt = (
271
+ select(QueuedJob.id)
272
272
  .filter(QueuedJob.status == queued_job_t.JobStatus.QUEUED)
273
273
  .filter(
274
274
  QueuedJob.submitted_at
@@ -278,4 +278,9 @@ class DatastoreSqlite(Datastore):
278
278
  )
279
279
  )
280
280
  )
281
+ deleted_uuids: list[str] = [row.id for row in session.execute(select_stmt)]
282
+
283
+ delete_stmt = delete(QueuedJob).filter(QueuedJob.id.in_(deleted_uuids))
281
284
  session.execute(delete_stmt)
285
+
286
+ return deleted_uuids
@@ -135,6 +135,10 @@ async def start_scheduler(
135
135
  job_payload=payload,
136
136
  job_ref_name=job_ref_name,
137
137
  )
138
+ logger.log_info(
139
+ "Job submitted successfully.",
140
+ attributes={"job.queued_job_uuid": queued_job.queued_job_uuid},
141
+ )
138
142
  await enqueue_queued_job(queued_job)
139
143
  return queued_job.queued_job_uuid
140
144
 
@@ -163,6 +167,11 @@ async def start_scheduler(
163
167
  )
164
168
  )
165
169
 
170
+ logger.log_info(
171
+ "Job cancelled successfully.",
172
+ attributes={"job.queued_job_uuid": command.queued_job_uuid},
173
+ )
174
+
166
175
  def delayed_exit() -> None:
167
176
  os._exit(RESTART_EXIT_CODE)
168
177
 
@@ -192,7 +201,12 @@ async def start_scheduler(
192
201
  command: CommandVaccuumQueuedJobs,
193
202
  ) -> None:
194
203
  logger.log_info("Vaccuuming queued jobs...")
195
- datastore.vaccuum_queued_jobs()
204
+ deleted_uuids = datastore.vaccuum_queued_jobs()
205
+
206
+ logger.log_info(
207
+ "Queued jobs vacuumed successfully.",
208
+ attributes={"job.queued_job_uuids": deleted_uuids},
209
+ )
196
210
 
197
211
  for queued_job in queued_jobs:
198
212
  await enqueue_queued_job(queued_job)
@@ -94,6 +94,7 @@ def run_queued_job(
94
94
  profile_metadata=job_details.profile_metadata,
95
95
  job_definition=job_details.job_definition,
96
96
  queued_job_uuid=queued_job.queued_job_uuid,
97
+ submitted_at=queued_job.submitted_at,
97
98
  )
98
99
  with job_logger.resource_tracking():
99
100
  try:
@@ -1,3 +1,4 @@
1
+ import datetime
1
2
  import functools
2
3
  import json
3
4
  import os
@@ -12,13 +13,14 @@ from typing import Generator, assert_never, cast
12
13
 
13
14
  import psutil
14
15
  from opentelemetry import _logs, trace
16
+ from opentelemetry._logs import Logger as OTELLogger
17
+ from opentelemetry._logs import LogRecord
15
18
  from opentelemetry.context import get_current
16
19
  from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
17
20
  from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
18
- from opentelemetry.sdk._logs import Logger as OTELLogger
19
21
  from opentelemetry.sdk._logs import (
20
22
  LoggerProvider,
21
- LogRecord,
23
+ ReadableLogRecord,
22
24
  )
23
25
  from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, ConsoleLogExporter
24
26
  from opentelemetry.sdk.resources import Attributes, Resource
@@ -49,7 +51,7 @@ def _cast_attributes(attributes: dict[str, base_t.JsonValue]) -> Attributes:
49
51
  return cast(Attributes, attributes)
50
52
 
51
53
 
52
- def one_line_formatter(record: LogRecord) -> str:
54
+ def one_line_formatter(record: ReadableLogRecord) -> str:
53
55
  json_data = record.to_json()
54
56
  return json.dumps(json.loads(json_data), separators=(",", ":")) + "\n"
55
57
 
@@ -112,9 +114,11 @@ def _get_severity_number(severity: LogSeverity) -> _logs.SeverityNumber:
112
114
 
113
115
  class Logger:
114
116
  current_span: Span
117
+ _bound_attributes: dict[str, base_t.JsonValue]
115
118
 
116
119
  def __init__(self, base_span: Span) -> None:
117
120
  self.current_span = base_span
121
+ self._bound_attributes = {}
118
122
 
119
123
  @property
120
124
  def current_span_id(self) -> int:
@@ -131,7 +135,10 @@ class Logger:
131
135
  message: str | None = None,
132
136
  severity: LogSeverity | None = None,
133
137
  ) -> Attributes:
134
- patched_attributes = {**(attributes if attributes is not None else {})}
138
+ patched_attributes = {
139
+ **self._bound_attributes,
140
+ **(attributes if attributes is not None else {}),
141
+ }
135
142
  if message is not None:
136
143
  patched_attributes["message"] = message
137
144
  elif "body" in patched_attributes:
@@ -144,7 +151,7 @@ class Logger:
144
151
  ):
145
152
  patched_attributes["status"] = patched_attributes["severity_text"].lower()
146
153
 
147
- return patched_attributes
154
+ return _cast_attributes(patched_attributes)
148
155
 
149
156
  def _emit_log(
150
157
  self, message: str, *, severity: LogSeverity, attributes: Attributes | None
@@ -159,10 +166,12 @@ class Logger:
159
166
  ),
160
167
  context=get_current(),
161
168
  severity_number=_get_severity_number(severity),
162
- resource=get_otel_resource(),
163
169
  )
164
170
  otel_logger.emit(log_record)
165
171
 
172
+ def bind(self, *, attributes: Attributes) -> None:
173
+ self._bound_attributes.update(attributes)
174
+
166
175
  def log_info(self, message: str, *, attributes: Attributes | None = None) -> None:
167
176
  self._emit_log(
168
177
  message=message, severity=LogSeverity.INFO, attributes=attributes
@@ -195,7 +204,7 @@ class Logger:
195
204
  self.current_span.record_exception(
196
205
  exception=exception, attributes=patched_attributes
197
206
  )
198
- log_message = f"error: {message}\nexception: {exception}{traceback_str}"
207
+ log_message = f"{message}\nexception: {exception}{traceback_str}"
199
208
  self._emit_log(
200
209
  message=log_message, severity=severity, attributes=patched_attributes
201
210
  )
@@ -300,10 +309,12 @@ class JobLogger(Logger):
300
309
  profile_metadata: job_definition_t.ProfileMetadata,
301
310
  job_definition: job_definition_t.JobDefinition,
302
311
  queued_job_uuid: str,
312
+ submitted_at: datetime.datetime,
303
313
  ) -> None:
304
314
  self.profile_metadata = profile_metadata
305
315
  self.job_definition = job_definition
306
316
  self.queued_job_uuid = queued_job_uuid
317
+ self.submitted_at = submitted_at
307
318
  super().__init__(base_span)
308
319
 
309
320
  def _patch_attributes(
@@ -324,6 +335,8 @@ class JobLogger(Logger):
324
335
  patched_attributes["job.id"] = self.job_definition.id
325
336
  patched_attributes["job.definition_type"] = self.job_definition.type
326
337
  patched_attributes["job.queued_job_uuid"] = self.queued_job_uuid
338
+ patched_attributes["job.submitted_at"] = self.submitted_at.isoformat()
339
+
327
340
  match self.job_definition:
328
341
  case job_definition_t.CronJobDefinition():
329
342
  patched_attributes["job.definition.cron_spec"] = (
@@ -44,6 +44,7 @@ class InputAttributeValue:
44
44
  attribute_id: base_t.ObjectId
45
45
  quantity_dec: Decimal | None = None
46
46
  quantity_json: base_t.JsonValue | None = None
47
+ file_ids: list[base_t.ObjectId] | None = None
47
48
 
48
49
 
49
50
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -16,11 +16,16 @@ from ... import identifier_t
16
16
 
17
17
  __all__: list[str] = [
18
18
  "Arguments",
19
+ "ChemicalStructureSourceType",
19
20
  "Data",
20
21
  "ENDPOINT_METHOD",
21
22
  "ENDPOINT_PATH",
22
23
  "InputContent",
24
+ "InputContentChemicalStructure",
25
+ "InputContentEquation",
26
+ "InputContentFiles",
23
27
  "InputContentTable",
28
+ "InputContentTextHtml",
24
29
  "InputContentTextMarkdown",
25
30
  "InputContentType",
26
31
  "Location",
@@ -30,6 +35,7 @@ __all__: list[str] = [
30
35
  "TableCellContent",
31
36
  "TableCellContentText",
32
37
  "TableCellContentType",
38
+ "TableCellStyle",
33
39
  ]
34
40
 
35
41
  ENDPOINT_METHOD = "POST"
@@ -73,12 +79,89 @@ Location = typing.Annotated[
73
79
  @serial_string_enum(
74
80
  labels={
75
81
  "text_markdown": "Text Markdown",
82
+ "text_html": "Text HTML",
76
83
  "table": "Table",
84
+ "chemical_structure": "Chemical Structure",
85
+ "files": "Files",
86
+ "equation": "Equation",
77
87
  },
78
88
  )
79
89
  class InputContentType(StrEnum):
80
90
  TEXT_MARKDOWN = "text_markdown"
91
+ TEXT_HTML = "text_html"
81
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
82
165
 
83
166
 
84
167
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -122,6 +205,7 @@ TableCellContent = typing.Annotated[
122
205
  @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
123
206
  class TableCell:
124
207
  content: TableCellContent
208
+ style: TableCellStyle | None = None
125
209
 
126
210
 
127
211
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -148,13 +232,17 @@ class InputContentTextMarkdown:
148
232
 
149
233
  # DO NOT MODIFY -- This file is generated by type_spec
150
234
  InputContent = typing.Annotated[
151
- InputContentTextMarkdown | InputContentTable,
235
+ InputContentTextMarkdown | InputContentTextHtml | InputContentTable | InputContentChemicalStructure | InputContentFiles | InputContentEquation,
152
236
  serial_union_annotation(
153
237
  named_type_path="sdk.api.notebooks.add_notebook_content.InputContent",
154
238
  discriminator="type",
155
239
  discriminator_map={
156
240
  "text_markdown": InputContentTextMarkdown,
241
+ "text_html": InputContentTextHtml,
157
242
  "table": InputContentTable,
243
+ "chemical_structure": InputContentChemicalStructure,
244
+ "files": InputContentFiles,
245
+ "equation": InputContentEquation,
158
246
  },
159
247
  ),
160
248
  ]
@@ -72,6 +72,8 @@ __all__: list[str] = [
72
72
  "equipment": "Equipment",
73
73
  "equipment_maintenance": "Equipment Maintenance",
74
74
  "equipment_type": "Equipment Type",
75
+ "external_ai_model": "External AI Model",
76
+ "external_ai_session": "External AI Session",
75
77
  "experiment_group": "Experiment Group",
76
78
  "experiment_group_member": "Experiment Group Member",
77
79
  "experiment_group_type": "Experiment Group Type",
@@ -183,6 +185,7 @@ __all__: list[str] = [
183
185
  "safety_data_sheet": "Safety Data Sheet",
184
186
  "scheduled_notification": "Scheduled Notification",
185
187
  "scratch_pad": "Scratch Pad",
188
+ "signing_config": "Signing Config",
186
189
  "specs": "Spec",
187
190
  "save": "Save",
188
191
  "split_template": "Test Method",
@@ -239,6 +242,7 @@ __all__: list[str] = [
239
242
  "uploader": "Uploader",
240
243
  "uploader_event": "Uploader Event",
241
244
  "calculation_material_family": "Calculation Material Family",
245
+ "recipe_total_units": "Recipe Total Units",
242
246
  },
243
247
  )
244
248
  class EntityType(StrEnum):
@@ -287,6 +291,8 @@ class EntityType(StrEnum):
287
291
  EQUIPMENT = "equipment"
288
292
  EQUIPMENT_MAINTENANCE = "equipment_maintenance"
289
293
  EQUIPMENT_TYPE = "equipment_type"
294
+ EXTERNAL_AI_MODEL = "external_ai_model"
295
+ EXTERNAL_AI_SESSION = "external_ai_session"
290
296
  EXPERIMENT_GROUP = "experiment_group"
291
297
  EXPERIMENT_GROUP_MEMBER = "experiment_group_member"
292
298
  EXPERIMENT_GROUP_TYPE = "experiment_group_type"
@@ -398,6 +404,7 @@ class EntityType(StrEnum):
398
404
  SAFETY_DATA_SHEET = "safety_data_sheet"
399
405
  SCHEDULED_NOTIFICATION = "scheduled_notification"
400
406
  SCRATCH_PAD = "scratch_pad"
407
+ SIGNING_CONFIG = "signing_config"
401
408
  SPECS = "specs"
402
409
  SAVE = "save"
403
410
  SPLIT_TEMPLATE = "split_template"
@@ -454,6 +461,7 @@ class EntityType(StrEnum):
454
461
  UPLOADER = "uploader"
455
462
  UPLOADER_EVENT = "uploader_event"
456
463
  CALCULATION_MATERIAL_FAMILY = "calculation_material_family"
464
+ RECIPE_TOTAL_UNITS = "recipe_total_units"
457
465
 
458
466
 
459
467
  # DO NOT MODIFY -- This file is generated by type_spec