UncountablePythonSDK 0.0.177__tar.gz → 0.0.179__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 (433) hide show
  1. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/.github/workflows/documentation.yml +1 -1
  2. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/.github/workflows/publish.yml +1 -1
  3. {uncountablepythonsdk-0.0.177/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.179}/PKG-INFO +2 -1
  4. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179/UncountablePythonSDK.egg-info}/PKG-INFO +2 -1
  5. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/UncountablePythonSDK.egg-info/SOURCES.txt +3 -0
  6. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/UncountablePythonSDK.egg-info/requires.txt +1 -0
  7. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/pyproject.toml +1 -1
  8. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/__init__.py +31 -0
  9. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_file_share_session.py +1 -0
  10. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/opaque_key.py +2 -0
  11. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/strenum_compat/__init__.py +2 -0
  12. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pyproject.toml +1 -0
  13. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/client.py +5 -1
  14. uncountablepythonsdk-0.0.179/uncountable/integration/db/connect.py +48 -0
  15. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/command_server.py +2 -2
  16. uncountablepythonsdk-0.0.179/uncountable/integration/queue_runner/datastore/__init__.py +11 -0
  17. uncountablepythonsdk-0.0.179/uncountable/integration/queue_runner/datastore/datastore_postgres.py +12 -0
  18. uncountablepythonsdk-0.0.177/uncountable/integration/queue_runner/datastore/datastore_sqlite.py → uncountablepythonsdk-0.0.179/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +3 -29
  19. uncountablepythonsdk-0.0.179/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +34 -0
  20. uncountablepythonsdk-0.0.179/uncountable/integration/queue_runner/datastore/factory.py +24 -0
  21. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/datastore/interface.py +17 -0
  22. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/datastore/model.py +1 -1
  23. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/job_scheduler.py +2 -5
  24. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/queue_runner.py +2 -6
  25. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/worker.py +1 -1
  26. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/telemetry.py +4 -0
  27. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/integrations/publish_realtime_data.py +1 -1
  28. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/client_base.py +1 -1
  29. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/entity_t.py +12 -0
  30. uncountablepythonsdk-0.0.177/uncountable/integration/db/connect.py +0 -18
  31. uncountablepythonsdk-0.0.177/uncountable/integration/queue_runner/datastore/__init__.py +0 -3
  32. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/.gitignore +0 -0
  33. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/README.md +0 -0
  34. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  35. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  36. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/.flowmarkignore +0 -0
  37. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/.gitignore +0 -0
  38. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/conf.py +0 -0
  39. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/index.md +0 -0
  40. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/integration_examples/add_file_to_folder.md +0 -0
  41. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/integration_examples/create_ingredient.md +0 -0
  42. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/integration_examples/create_output.md +0 -0
  43. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/integration_examples/index.md +0 -0
  44. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/integration_examples/upload_file.md +0 -0
  45. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/justfile +0 -0
  46. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/requirements.txt +0 -0
  47. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/android-chrome-192x192.png +0 -0
  48. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/android-chrome-512x512.png +0 -0
  49. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/apple-touch-icon.png +0 -0
  50. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/browserconfig.xml +0 -0
  51. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/favicon-16x16.png +0 -0
  52. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/favicon-32x32.png +0 -0
  53. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/manifest.json +0 -0
  54. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/mstile-150x150.png +0 -0
  55. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  56. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/docs/static/logo_blue.png +0 -0
  57. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/async_batch.py +0 -0
  58. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/async_batch_large_parse.py +0 -0
  59. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/basic_auth.py +0 -0
  60. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/create_entity.py +0 -0
  61. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/create_ingredient_sdk.py +0 -0
  62. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/download_files.py +0 -0
  63. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/edit_recipe_inputs.py +0 -0
  64. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  65. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  66. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  67. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  68. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  69. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  70. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  71. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  72. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  73. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/invoke_uploader.py +0 -0
  74. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/oauth.py +0 -0
  75. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/set_input_pdf_attribute.py +0 -0
  76. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/set_recipe_metadata_file.py +0 -0
  77. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/set_recipe_output_file_sdk.py +0 -0
  78. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/examples/upload_files.py +0 -0
  79. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/__init__.py +0 -0
  81. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/cached_parser.py +0 -0
  82. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/case_convert.py +0 -0
  83. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_base.py +0 -0
  84. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_builder.py +0 -0
  85. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_cache.py +0 -0
  86. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_error.py +0 -0
  87. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_function_type.py +0 -0
  88. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_inner.py +0 -0
  89. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/parser_options.py +0 -0
  90. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/argument_parser/type_predicates.py +0 -0
  91. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_blob_session.py +0 -0
  92. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  93. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_local_session.py +0 -0
  94. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_s3_session.py +0 -0
  95. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
  96. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  97. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  98. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  99. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/py.typed +0 -0
  100. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/__init__.py +0 -0
  101. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/annotation.py +0 -0
  102. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/missing_sentry.py +0 -0
  103. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/serial_alias.py +0 -0
  104. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/serial_class.py +0 -0
  105. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/serial_generic.py +0 -0
  106. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/serial_union.py +0 -0
  107. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/unknown.py +0 -0
  108. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization/yaml.py +0 -0
  109. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization_util/__init__.py +0 -0
  110. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  111. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  112. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization_util/dataclasses.py +0 -0
  113. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/serialization_util/serialization_helpers.py +0 -0
  114. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/strenum_compat/strenum_compat.py +0 -0
  115. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/__main__.py +0 -0
  117. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  119. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
  120. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  121. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/builder.py +0 -0
  122. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/builder_types.py +0 -0
  123. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/config.py +0 -0
  124. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/cross_output_links.py +0 -0
  125. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/emit_io_ts.py +0 -0
  126. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/emit_open_api.py +0 -0
  127. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/emit_open_api_util.py +0 -0
  128. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/emit_python.py +0 -0
  129. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/emit_typescript.py +0 -0
  130. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/emit_typescript_util.py +0 -0
  131. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/load_types.py +0 -0
  132. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  133. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/open_api_util.py +0 -0
  134. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/parts/base.py.prepart +0 -0
  135. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  136. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/test.py +0 -0
  137. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/type_info/__main__.py +0 -0
  138. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  139. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  140. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  141. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/util.py +0 -0
  142. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/value_spec/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/value_spec/__main__.py +0 -0
  144. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  145. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  146. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/pkgs/type_spec/value_spec/types.py +0 -0
  147. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/setup.cfg +0 -0
  148. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/async_batch.py +0 -0
  151. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/environment.py +0 -0
  152. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/file_upload.py +0 -0
  153. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/query/__init__.py +0 -0
  154. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/query/builder.py +0 -0
  155. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/query/column.py +0 -0
  156. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/query/row.py +0 -0
  157. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/query/types.py +0 -0
  158. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/core/types.py +0 -0
  159. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/__init__.py +0 -0
  160. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/cli.py +0 -0
  161. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/construct_client.py +0 -0
  162. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/cron.py +0 -0
  163. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/db/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/db/session.py +0 -0
  165. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/entrypoint.py +0 -0
  166. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/executors/__init__.py +0 -0
  167. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/executors/executors.py +0 -0
  168. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  169. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/executors/script_executor.py +0 -0
  170. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/http_server/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/http_server/types.py +0 -0
  172. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/job.py +0 -0
  173. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/__init__.py +0 -0
  174. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  175. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  176. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  177. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  179. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  180. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  181. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  182. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
  183. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  184. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/queue_runner/types.py +0 -0
  185. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/request_context.py +0 -0
  186. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/scan_profiles.py +0 -0
  187. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/scheduler.py +0 -0
  188. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
  190. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  191. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/server.py +0 -0
  192. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  193. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/integration/webhook_signature_key.py +0 -0
  194. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/py.typed +0 -0
  195. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/__init__.py +0 -0
  196. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/batch/__init__.py +0 -0
  198. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/batch/execute_batch.py +0 -0
  199. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  200. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/chemical/__init__.py +0 -0
  201. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  202. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  204. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
  205. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/__init__.py +0 -0
  206. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/create_entities.py +0 -0
  207. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/create_entity.py +0 -0
  208. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
  209. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  210. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/export_entities.py +0 -0
  211. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/get_entities_data.py +0 -0
  212. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  213. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/list_aggregate.py +0 -0
  214. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/list_entities.py +0 -0
  215. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/lock_entity.py +0 -0
  216. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/lookup_entity.py +0 -0
  217. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  218. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/set_barcode.py +0 -0
  219. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
  220. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  221. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/set_values.py +0 -0
  222. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  223. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/entity/unlock_entity.py +0 -0
  224. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/equipment/__init__.py +0 -0
  225. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  226. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/field_options/__init__.py +0 -0
  227. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  228. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/file_folders/__init__.py +0 -0
  229. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  230. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  231. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/files/__init__.py +0 -0
  232. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/files/download_file.py +0 -0
  233. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/id_source/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/id_source/list_id_source.py +0 -0
  235. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/id_source/match_id_source.py +0 -0
  236. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/input_groups/__init__.py +0 -0
  237. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  238. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/__init__.py +0 -0
  239. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/create_inputs.py +0 -0
  240. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/get_input_data.py +0 -0
  241. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/get_input_names.py +0 -0
  242. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  243. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  244. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/set_input_category.py +0 -0
  245. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  246. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  247. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/integrations/__init__.py +0 -0
  248. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/integrations/push_notification.py +0 -0
  249. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  250. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/listing/__init__.py +0 -0
  251. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/listing/export_listing.py +0 -0
  252. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/listing/fetch_listing.py +0 -0
  253. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/material_families/__init__.py +0 -0
  254. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  255. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/notebooks/__init__.py +0 -0
  256. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  257. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
  258. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/output_parameters/__init__.py +0 -0
  259. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  260. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/outputs/__init__.py +0 -0
  261. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/outputs/get_output_data.py +0 -0
  262. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/outputs/get_output_names.py +0 -0
  263. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  264. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  265. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  266. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/permissions/__init__.py +0 -0
  267. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  268. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  269. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/project/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/project/get_projects.py +0 -0
  271. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/project/get_projects_data.py +0 -0
  272. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipe_links/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  274. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
  275. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  276. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  277. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  278. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/__init__.py +0 -0
  279. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  280. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  281. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  282. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  283. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  284. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  285. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  286. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/create_recipe.py +0 -0
  287. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/create_recipes.py +0 -0
  288. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  289. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  290. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  291. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_curve.py +0 -0
  292. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  293. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  294. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  295. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  296. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  297. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  298. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  299. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  300. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  301. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  302. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  303. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  304. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  305. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  306. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  307. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  308. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  309. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  310. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/runsheet/__init__.py +0 -0
  311. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  312. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  313. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/triggers/__init__.py +0 -0
  314. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/triggers/run_trigger.py +0 -0
  315. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/uploader/__init__.py +0 -0
  316. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  317. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  318. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/user/__init__.py +0 -0
  319. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/api/user/get_current_user_info.py +0 -0
  320. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/async_batch.py +0 -0
  321. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/async_batch_processor.py +0 -0
  322. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/async_batch_t.py +0 -0
  323. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/async_jobs.py +0 -0
  324. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/async_jobs_t.py +0 -0
  325. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/auth_retrieval.py +0 -0
  326. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/auth_retrieval_t.py +0 -0
  327. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/base.py +0 -0
  328. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/base_t.py +0 -0
  329. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/calculations.py +0 -0
  330. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/calculations_t.py +0 -0
  331. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/chemical_structure.py +0 -0
  332. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/chemical_structure_t.py +0 -0
  333. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/client_config.py +0 -0
  334. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/client_config_t.py +0 -0
  335. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/condition_match.py +0 -0
  336. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/condition_match_t.py +0 -0
  337. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/curves.py +0 -0
  338. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/curves_t.py +0 -0
  339. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/data.py +0 -0
  340. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/data_t.py +0 -0
  341. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/entity.py +0 -0
  342. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/experiment_groups.py +0 -0
  343. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/experiment_groups_t.py +0 -0
  344. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/exports.py +0 -0
  345. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/exports_t.py +0 -0
  346. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/field_values.py +0 -0
  347. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/field_values_t.py +0 -0
  348. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/fields.py +0 -0
  349. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/fields_t.py +0 -0
  350. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/generic_upload.py +0 -0
  351. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/generic_upload_t.py +0 -0
  352. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/id_source.py +0 -0
  353. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/id_source_t.py +0 -0
  354. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/identifier.py +0 -0
  355. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/identifier_t.py +0 -0
  356. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/input_attributes.py +0 -0
  357. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/input_attributes_t.py +0 -0
  358. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/inputs.py +0 -0
  359. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/inputs_t.py +0 -0
  360. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/integration_server.py +0 -0
  361. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/integration_server_t.py +0 -0
  362. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/integration_session.py +0 -0
  363. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/integration_session_t.py +0 -0
  364. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/integrations.py +0 -0
  365. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/integrations_t.py +0 -0
  366. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/job_definition.py +0 -0
  367. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/job_definition_t.py +0 -0
  368. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/listing.py +0 -0
  369. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/listing_t.py +0 -0
  370. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/notices.py +0 -0
  371. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/notices_t.py +0 -0
  372. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/notifications.py +0 -0
  373. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/notifications_t.py +0 -0
  374. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/outputs.py +0 -0
  375. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/outputs_t.py +0 -0
  376. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/overrides.py +0 -0
  377. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/overrides_t.py +0 -0
  378. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/permissions.py +0 -0
  379. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/permissions_t.py +0 -0
  380. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/phases.py +0 -0
  381. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/phases_t.py +0 -0
  382. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/post_base.py +0 -0
  383. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/post_base_t.py +0 -0
  384. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/queued_job.py +0 -0
  385. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/queued_job_t.py +0 -0
  386. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_identifiers.py +0 -0
  387. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_identifiers_t.py +0 -0
  388. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_inputs.py +0 -0
  389. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_inputs_t.py +0 -0
  390. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_links.py +0 -0
  391. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_links_t.py +0 -0
  392. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_metadata.py +0 -0
  393. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_metadata_t.py +0 -0
  394. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_output_metadata.py +0 -0
  395. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_output_metadata_t.py +0 -0
  396. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_step_relationships.py +0 -0
  397. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_step_relationships_t.py +0 -0
  398. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_tags.py +0 -0
  399. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_tags_t.py +0 -0
  400. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_workflow_step_types.py +0 -0
  401. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  402. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_workflow_steps.py +0 -0
  403. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  404. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipes.py +0 -0
  405. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/recipes_t.py +0 -0
  406. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/request_headers.py +0 -0
  407. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/request_headers_t.py +0 -0
  408. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/response.py +0 -0
  409. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/response_t.py +0 -0
  410. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/runsheet.py +0 -0
  411. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/runsheet_format.py +0 -0
  412. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/runsheet_format_t.py +0 -0
  413. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/runsheet_t.py +0 -0
  414. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/secret_retrieval.py +0 -0
  415. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/secret_retrieval_t.py +0 -0
  416. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/sockets.py +0 -0
  417. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/sockets_t.py +0 -0
  418. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/specs.py +0 -0
  419. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/specs_t.py +0 -0
  420. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/step_relationships.py +0 -0
  421. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/step_relationships_t.py +0 -0
  422. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/units.py +0 -0
  423. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/units_t.py +0 -0
  424. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/uploader.py +0 -0
  425. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/uploader_t.py +0 -0
  426. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/users.py +0 -0
  427. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/users_t.py +0 -0
  428. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/webhook.py +0 -0
  429. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/webhook_job.py +0 -0
  430. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/webhook_job_t.py +0 -0
  431. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/webhook_t.py +0 -0
  432. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/workflows.py +0 -0
  433. {uncountablepythonsdk-0.0.177 → uncountablepythonsdk-0.0.179}/uncountable/types/workflows_t.py +0 -0
@@ -9,7 +9,7 @@ jobs:
9
9
  docs:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
12
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
13
13
  - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
14
14
  - uses: extractions/setup-crate@0551596312d4008a6dfbc4d3c38fa20eaef46d2d # v2
15
15
  with:
@@ -19,7 +19,7 @@ jobs:
19
19
  name: Build distribution packages
20
20
  runs-on: ubuntu-latest
21
21
  steps:
22
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
22
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
23
23
  with:
24
24
  fetch-depth: 0
25
25
  tags: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.177
3
+ Version: 0.0.179
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
@@ -20,6 +20,7 @@ Requires-Dist: aiotus==1.*
20
20
  Requires-Dist: aiohttp>=3.14.1
21
21
  Requires-Dist: requests==2.*
22
22
  Requires-Dist: SQLAlchemy>=1.4.0
23
+ Requires-Dist: psycopg[binary]==3.*
23
24
  Requires-Dist: APScheduler==3.*
24
25
  Requires-Dist: python-dateutil==2.*
25
26
  Requires-Dist: PyYAML==6.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.177
3
+ Version: 0.0.179
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
@@ -20,6 +20,7 @@ Requires-Dist: aiotus==1.*
20
20
  Requires-Dist: aiohttp>=3.14.1
21
21
  Requires-Dist: requests==2.*
22
22
  Requires-Dist: SQLAlchemy>=1.4.0
23
+ Requires-Dist: psycopg[binary]==3.*
23
24
  Requires-Dist: APScheduler==3.*
24
25
  Requires-Dist: python-dateutil==2.*
25
26
  Requires-Dist: PyYAML==6.*
@@ -175,7 +175,10 @@ uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.
175
175
  uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi
176
176
  uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py
177
177
  uncountable/integration/queue_runner/datastore/__init__.py
178
+ uncountable/integration/queue_runner/datastore/datastore_postgres.py
179
+ uncountable/integration/queue_runner/datastore/datastore_sql_base.py
178
180
  uncountable/integration/queue_runner/datastore/datastore_sqlite.py
181
+ uncountable/integration/queue_runner/datastore/factory.py
179
182
  uncountable/integration/queue_runner/datastore/interface.py
180
183
  uncountable/integration/queue_runner/datastore/model.py
181
184
  uncountable/integration/secret_retrieval/__init__.py
@@ -2,6 +2,7 @@ aiotus==1.*
2
2
  aiohttp>=3.14.1
3
3
  requests==2.*
4
4
  SQLAlchemy>=1.4.0
5
+ psycopg[binary]==3.*
5
6
  APScheduler==3.*
6
7
  python-dateutil==2.*
7
8
  PyYAML==6.*
@@ -9,7 +9,7 @@ dependencies = [
9
9
  "ruff == 0.*",
10
10
  "openpyxl == 3.*",
11
11
  "more_itertools ==11.*",
12
- "types-paramiko ==4.0.0.20260518",
12
+ "types-paramiko ==5.0.0.20260617",
13
13
  "types-openpyxl == 3.*",
14
14
  "types-pytz ==2026.*",
15
15
  "types-requests == 2.*",
@@ -1,3 +1,5 @@
1
+ # CLOSED MODULE
2
+
1
3
  from ._blob_session import BlobSession as BlobSession
2
4
  from ._file_share_session import FileShareSession as FileShareSession
3
5
  from ._gdrive_session import (
@@ -32,3 +34,32 @@ from .file_type_utils import (
32
34
  RemoteObjectReference as RemoteObjectReference,
33
35
  )
34
36
  from .filesystem_session import FileSystemSession as FileSystemSession
37
+
38
+ __all__ = [
39
+ "BlobSession",
40
+ "FileObjectData",
41
+ "FileShareSession",
42
+ "FileSystemBlobConfig",
43
+ "FileSystemFileReference",
44
+ "FileSystemFileShareConfig",
45
+ "FileSystemObject",
46
+ "FileSystemS3Config",
47
+ "FileSystemSFTPConfig",
48
+ "FileSystemSession",
49
+ "FileTransfer",
50
+ "GDriveSession",
51
+ "IncompatibleFileReference",
52
+ "LocalSession",
53
+ "RemoteObjectReference",
54
+ "S3Session",
55
+ "SFTPConnection",
56
+ "SFTPCredentialError",
57
+ "SFTPSession",
58
+ "delete_gdrive_file",
59
+ "download_gdrive_file",
60
+ "list_gdrive_files",
61
+ "list_sftp_files",
62
+ "move_gdrive_file",
63
+ "move_sftp_files",
64
+ "upload_file_gdrive",
65
+ ]
@@ -26,6 +26,7 @@ class FileShareSession(FileSystemSession):
26
26
  account_url=self.config.account_url,
27
27
  share_name=self.config.share_name,
28
28
  credential=self.config.credential,
29
+ token_intent="backup",
29
30
  )
30
31
 
31
32
  def __enter__(self) -> Self:
@@ -3,5 +3,7 @@ from typing import Self
3
3
 
4
4
  # Blocks a string key value from being interpreted for case conversion
5
5
  class OpaqueKey(str): # noqa: FURB189
6
+ __slots__ = ()
7
+
6
8
  def __new__(cls, key: str) -> Self:
7
9
  return str.__new__(cls, key)
@@ -1,3 +1,5 @@
1
+ # CLOSED MODULE
2
+
1
3
  from .strenum_compat import StrEnum
2
4
 
3
5
  __all__ = ["StrEnum"]
@@ -55,6 +55,7 @@ dependencies = [
55
55
  "aiohttp >= 3.14.1",
56
56
  "requests == 2.*",
57
57
  "SQLAlchemy >= 1.4.0",
58
+ "psycopg[binary] == 3.*",
58
59
  "APScheduler == 3.*",
59
60
  "python-dateutil == 2.*",
60
61
  "PyYAML == 6.*",
@@ -201,7 +201,7 @@ DownloadedFiles = list[DownloadedFile]
201
201
 
202
202
 
203
203
  class Client(ClientMethods):
204
- _parser_map: dict[type, CachedParser] = {}
204
+ _parser_map: typing.ClassVar[dict[type, CachedParser]] = {}
205
205
  _auth_details: AuthDetailsAll
206
206
  _base_url: str
207
207
  _file_uploader: FileUploader
@@ -298,6 +298,10 @@ class Client(ClientMethods):
298
298
  else None
299
299
  )
300
300
  response = self._send_request(request, timeout=timeout)
301
+ if self._cfg.logger is not None:
302
+ self._cfg.logger.set_span_attribute(
303
+ "http.status_code", response.status_code
304
+ )
301
305
  response_data = self._get_response_json(response, request_id=request_id)
302
306
  cached_parser = self._get_cached_parser(return_type)
303
307
  try:
@@ -0,0 +1,48 @@
1
+ import os
2
+ from enum import StrEnum
3
+
4
+ from opentelemetry.trace import get_current_span
5
+ from sqlalchemy import create_engine
6
+ from sqlalchemy.engine.base import Engine
7
+
8
+ from uncountable.integration.telemetry import Logger
9
+
10
+
11
+ class IntegrationDBService(StrEnum):
12
+ CRON = "cron"
13
+ RUNNER = "runner"
14
+
15
+
16
+ _DB_URI_ENV_VARS: dict[IntegrationDBService, str] = {
17
+ IntegrationDBService.CRON: "UNC_CRON_DB_URI",
18
+ IntegrationDBService.RUNNER: "UNC_RUNNER_DB_URI",
19
+ }
20
+
21
+ _DEPRECATED_DB_URI_ENV_VARS: dict[IntegrationDBService, str] = {
22
+ IntegrationDBService.CRON: "UNC_CRON_SQLITE_URI",
23
+ IntegrationDBService.RUNNER: "UNC_RUNNER_SQLITE_URI",
24
+ }
25
+
26
+
27
+ def _resolve_db_uri(service: IntegrationDBService) -> str:
28
+ logger = Logger(get_current_span())
29
+ env_var = _DB_URI_ENV_VARS[service]
30
+ uri = os.environ.get(env_var)
31
+ if uri is not None:
32
+ return uri
33
+
34
+ deprecated_env_var = _DEPRECATED_DB_URI_ENV_VARS[service]
35
+ deprecated_uri = os.environ.get(deprecated_env_var)
36
+ if deprecated_uri is not None:
37
+ logger.log_warning(
38
+ f"{deprecated_env_var} is deprecated and will be removed; set {env_var} instead.",
39
+ )
40
+ return deprecated_uri
41
+
42
+ raise KeyError(
43
+ f"no database URI configured for the {service} service: set {env_var}"
44
+ )
45
+
46
+
47
+ def create_db_engine(service: IntegrationDBService) -> Engine:
48
+ return create_engine(_resolve_db_uri(service))
@@ -41,7 +41,7 @@ from uncountable.integration.queue_runner.command_server.types import (
41
41
  CommandVaccuumQueuedJobs,
42
42
  CommandVaccuumQueuedJobsResponse,
43
43
  )
44
- from uncountable.integration.queue_runner.datastore import DatastoreSqlite
44
+ from uncountable.integration.queue_runner.datastore import Datastore
45
45
  from uncountable.types import queued_job_t
46
46
 
47
47
  from .constants import ListQueuedJobsConstants
@@ -53,7 +53,7 @@ from .protocol.command_server_pb2_grpc import (
53
53
  queued_job_payload_parser = CachedParser(queued_job_t.QueuedJobPayload)
54
54
 
55
55
 
56
- async def serve(command_queue: CommandQueue, datastore: DatastoreSqlite) -> None:
56
+ async def serve(command_queue: CommandQueue, datastore: Datastore) -> None:
57
57
  server = grpc_aio.server()
58
58
 
59
59
  class CommandServerHandler(CommandServerServicer):
@@ -0,0 +1,11 @@
1
+ from .datastore_postgres import DatastorePostgres
2
+ from .datastore_sqlite import DatastoreSqlite
3
+ from .factory import create_datastore
4
+ from .interface import Datastore
5
+
6
+ __all__: list[str] = [
7
+ "Datastore",
8
+ "DatastorePostgres",
9
+ "DatastoreSqlite",
10
+ "create_datastore",
11
+ ]
@@ -0,0 +1,12 @@
1
+ from sqlalchemy.engine import Engine
2
+
3
+ from uncountable.integration.queue_runner.datastore.datastore_sql_base import (
4
+ DatastoreSqlBase,
5
+ )
6
+ from uncountable.integration.queue_runner.datastore.model import Base
7
+
8
+
9
+ class DatastorePostgres(DatastoreSqlBase):
10
+ @classmethod
11
+ def setup(cls, engine: Engine) -> None:
12
+ Base.metadata.create_all(engine)
@@ -2,14 +2,13 @@ import datetime
2
2
  import uuid
3
3
  from datetime import UTC
4
4
 
5
- from sqlalchemy import delete, insert, or_, select, text, update
6
- from sqlalchemy.engine import Engine
5
+ from sqlalchemy import delete, insert, or_, select, update
7
6
 
8
7
  from pkgs.argument_parser import CachedParser
9
8
  from pkgs.serialization_util import serialize_for_storage
10
9
  from uncountable.integration.db.session import DBSessionMaker
11
10
  from uncountable.integration.queue_runner.datastore.interface import Datastore
12
- from uncountable.integration.queue_runner.datastore.model import Base, QueuedJob
11
+ from uncountable.integration.queue_runner.datastore.model import QueuedJob
13
12
  from uncountable.types import queued_job_t
14
13
 
15
14
  queued_job_payload_parser = CachedParser(queued_job_t.QueuedJobPayload)
@@ -17,36 +16,11 @@ queued_job_payload_parser = CachedParser(queued_job_t.QueuedJobPayload)
17
16
  MAX_QUEUE_WINDOW_DAYS = 30
18
17
 
19
18
 
20
- class DatastoreSqlite(Datastore):
19
+ class DatastoreSqlBase(Datastore):
21
20
  def __init__(self, session_maker: DBSessionMaker) -> None:
22
21
  self.session_maker = session_maker
23
22
  super().__init__()
24
23
 
25
- @classmethod
26
- def setup(cls, engine: Engine) -> None:
27
- Base.metadata.create_all(engine)
28
- with engine.connect() as connection:
29
- if not bool(
30
- connection.execute(
31
- text(
32
- "select exists (select 1 from pragma_table_info('queued_jobs') where name='status');"
33
- )
34
- ).scalar()
35
- ):
36
- connection.execute(
37
- text("alter table queued_jobs add column status VARCHAR")
38
- )
39
- connection.execute(
40
- text(
41
- "create index if not exists ix_queued_jobs_status on queued_jobs (status)"
42
- )
43
- )
44
- connection.execute(
45
- text(
46
- "create index if not exists ix_queued_jobs_submitted_at on queued_jobs (submitted_at)"
47
- )
48
- )
49
-
50
24
  def add_job_to_queue(
51
25
  self, job_payload: queued_job_t.QueuedJobPayload, job_ref_name: str
52
26
  ) -> queued_job_t.QueuedJob:
@@ -0,0 +1,34 @@
1
+ from sqlalchemy import text
2
+ from sqlalchemy.engine import Engine
3
+
4
+ from uncountable.integration.queue_runner.datastore.datastore_sql_base import (
5
+ DatastoreSqlBase,
6
+ )
7
+ from uncountable.integration.queue_runner.datastore.model import Base
8
+
9
+
10
+ class DatastoreSqlite(DatastoreSqlBase):
11
+ @classmethod
12
+ def setup(cls, engine: Engine) -> None:
13
+ Base.metadata.create_all(engine)
14
+ with engine.connect() as connection:
15
+ if not bool(
16
+ connection.execute(
17
+ text(
18
+ "select exists (select 1 from pragma_table_info('queued_jobs') where name='status');"
19
+ )
20
+ ).scalar()
21
+ ):
22
+ connection.execute(
23
+ text("alter table queued_jobs add column status VARCHAR")
24
+ )
25
+ connection.execute(
26
+ text(
27
+ "create index if not exists ix_queued_jobs_status on queued_jobs (status)"
28
+ )
29
+ )
30
+ connection.execute(
31
+ text(
32
+ "create index if not exists ix_queued_jobs_submitted_at on queued_jobs (submitted_at)"
33
+ )
34
+ )
@@ -0,0 +1,24 @@
1
+ from sqlalchemy.engine import Engine
2
+
3
+ from uncountable.integration.db.session import get_session_maker
4
+ from uncountable.integration.queue_runner.datastore.datastore_postgres import (
5
+ DatastorePostgres,
6
+ )
7
+ from uncountable.integration.queue_runner.datastore.datastore_sqlite import (
8
+ DatastoreSqlite,
9
+ )
10
+ from uncountable.integration.queue_runner.datastore.interface import Datastore
11
+
12
+
13
+ def create_datastore(engine: Engine) -> Datastore:
14
+ session_maker = get_session_maker(engine)
15
+ dialect_name = engine.dialect.name
16
+ match dialect_name:
17
+ case "sqlite":
18
+ datastore: Datastore = DatastoreSqlite(session_maker)
19
+ case "postgresql":
20
+ datastore = DatastorePostgres(session_maker)
21
+ case _:
22
+ raise ValueError(f"unsupported database dialect: {dialect_name!r}")
23
+ datastore.setup(engine)
24
+ return datastore
@@ -1,10 +1,16 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from datetime import datetime
3
3
 
4
+ from sqlalchemy.engine import Engine
5
+
4
6
  from uncountable.types import queued_job_t
5
7
 
6
8
 
7
9
  class Datastore(ABC):
10
+ @classmethod
11
+ @abstractmethod
12
+ def setup(cls, engine: Engine) -> None: ...
13
+
8
14
  @abstractmethod
9
15
  def add_job_to_queue(
10
16
  self, job_payload: queued_job_t.QueuedJobPayload, job_ref_name: str
@@ -13,6 +19,14 @@ class Datastore(ABC):
13
19
  @abstractmethod
14
20
  def remove_job_from_queue(self, queued_job_uuid: str) -> None: ...
15
21
 
22
+ @abstractmethod
23
+ def update_job_status(
24
+ self, queued_job_uuid: str, status: queued_job_t.JobStatus
25
+ ) -> None: ...
26
+
27
+ @abstractmethod
28
+ def retry_job(self, queued_job_uuid: str) -> queued_job_t.QueuedJob | None: ...
29
+
16
30
  @abstractmethod
17
31
  def increment_num_attempts(self, queued_job_uuid: str) -> int: ...
18
32
 
@@ -38,3 +52,6 @@ class Datastore(ABC):
38
52
 
39
53
  @abstractmethod
40
54
  def get_queued_job(self, *, uuid: str) -> queued_job_t.QueuedJob | None: ...
55
+
56
+ @abstractmethod
57
+ def vaccuum_queued_jobs(self) -> list[str]: ...
@@ -21,7 +21,7 @@ class QueuedJob(Base):
21
21
  payload = Column(JSON, nullable=False)
22
22
  num_attempts = Column(BigInteger, nullable=False, default=0, server_default="0")
23
23
  status = Column(
24
- Enum(queued_job_t.JobStatus, length=None),
24
+ Enum(queued_job_t.JobStatus, length=None, native_enum=False),
25
25
  default=queued_job_t.JobStatus.QUEUED,
26
26
  nullable=True,
27
27
  index=True,
@@ -23,8 +23,7 @@ from uncountable.integration.queue_runner.command_server.types import (
23
23
  CommandCancelJobStatus,
24
24
  CommandVaccuumQueuedJobs,
25
25
  )
26
- from uncountable.integration.queue_runner.datastore import DatastoreSqlite
27
- from uncountable.integration.queue_runner.datastore.interface import Datastore
26
+ from uncountable.integration.queue_runner.datastore import Datastore
28
27
  from uncountable.integration.queue_runner.worker import Worker
29
28
  from uncountable.integration.scan_profiles import load_profiles
30
29
  from uncountable.integration.telemetry import Logger
@@ -90,9 +89,7 @@ def _start_workers(
90
89
  return job_worker_lookup
91
90
 
92
91
 
93
- async def start_scheduler(
94
- command_queue: CommandQueue, datastore: DatastoreSqlite
95
- ) -> None:
92
+ async def start_scheduler(command_queue: CommandQueue, datastore: Datastore) -> None:
96
93
  logger = Logger(get_current_span())
97
94
  result_queue: ResultQueue = asyncio.Queue()
98
95
 
@@ -1,20 +1,16 @@
1
1
  import asyncio
2
2
 
3
3
  from uncountable.integration.db.connect import IntegrationDBService, create_db_engine
4
- from uncountable.integration.db.session import get_session_maker
5
4
  from uncountable.integration.queue_runner.command_server import serve
6
5
  from uncountable.integration.queue_runner.command_server.types import CommandQueue
7
- from uncountable.integration.queue_runner.datastore import DatastoreSqlite
6
+ from uncountable.integration.queue_runner.datastore import create_datastore
8
7
  from uncountable.integration.queue_runner.job_scheduler import start_scheduler
9
8
 
10
9
 
11
10
  async def queue_runner_loop() -> None:
12
11
  command_queue: CommandQueue = asyncio.Queue()
13
12
  engine = create_db_engine(IntegrationDBService.RUNNER)
14
- session_maker = get_session_maker(engine)
15
-
16
- datastore = DatastoreSqlite(session_maker)
17
- datastore.setup(engine)
13
+ datastore = create_datastore(engine)
18
14
 
19
15
  command_server = asyncio.create_task(serve(command_queue, datastore))
20
16
 
@@ -21,7 +21,7 @@ from uncountable.core.async_batch import AsyncBatchProcessor
21
21
  from uncountable.integration.construct_client import construct_uncountable_client
22
22
  from uncountable.integration.executors.executors import execute_job
23
23
  from uncountable.integration.job import JobArguments
24
- from uncountable.integration.queue_runner.datastore.interface import Datastore
24
+ from uncountable.integration.queue_runner.datastore import Datastore
25
25
  from uncountable.integration.queue_runner.types import ListenQueue, ResultQueue
26
26
  from uncountable.integration.scan_profiles import load_profiles
27
27
  from uncountable.integration.telemetry import JobLogger, Logger, get_otel_tracer
@@ -27,6 +27,7 @@ from opentelemetry.sdk.trace.export import (
27
27
  SimpleSpanProcessor,
28
28
  )
29
29
  from opentelemetry.trace import Span, Tracer
30
+ from opentelemetry.util.types import AttributeValue
30
31
 
31
32
  from pkgs.serialization_util import dict_fields
32
33
  from uncountable.core.environment import (
@@ -188,6 +189,9 @@ class Logger:
188
189
  )
189
190
  otel_logger.emit(log_record)
190
191
 
192
+ def set_span_attribute(self, key: str, value: AttributeValue) -> None:
193
+ self._current_span_with_fallback().set_attribute(key, value)
194
+
191
195
  def bind(self, *, attributes: Attributes) -> None:
192
196
  # Bound attributes flow into log records and the X-UNC-METADATA request
193
197
  # header on outbound API calls. The header is capped at 2048 bytes; if
@@ -22,7 +22,7 @@ __all__: list[str] = [
22
22
 
23
23
  ENDPOINT_METHOD = "POST"
24
24
  ENDPOINT_PATH = "api/external/integrations/publish_realtime_data"
25
- ENDPOINT_DESCRIPTION = "Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status. API is in beta \u2014 contact Uncountable for realtime integration guidance."
25
+ ENDPOINT_DESCRIPTION = "Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status. Contact Uncountable for realtime integration guidance."
26
26
 
27
27
 
28
28
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1713,7 +1713,7 @@ class ClientMethods(ABC):
1713
1713
  data_package: integrations_t.DataPackage,
1714
1714
  _request_options: client_config_t.RequestOptions | None = None,
1715
1715
  ) -> publish_realtime_data_t.Data:
1716
- """Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status. API is in beta — contact Uncountable for realtime integration guidance.
1716
+ """Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status. Contact Uncountable for realtime integration guidance.
1717
1717
 
1718
1718
  """
1719
1719
  args = publish_realtime_data_t.Arguments(
@@ -43,6 +43,7 @@ __all__: list[str] = [
43
43
  "comment": "Comment",
44
44
  "comment_thread": "Comment Thread",
45
45
  "condition_match": "Condition Match",
46
+ "condition_nickname": "Condition Nickname",
46
47
  "condition_parameter": "Condition Parameter",
47
48
  "condition_parameter_mat_family": "Condition Parameter Material Family",
48
49
  "condition_parameter_matches": "Condition Parameter Matches",
@@ -52,6 +53,7 @@ __all__: list[str] = [
52
53
  "constraint": "Constraint",
53
54
  "constraint_set": "Constraint Set",
54
55
  "control_type": "Control Type",
56
+ "credit_balance": "Credit Balance",
55
57
  "curve_settings": "Curve Settings",
56
58
  "custom_entity": "Custom Entity",
57
59
  "default_permissions_new_project": "Default Permissions New Project",
@@ -83,6 +85,7 @@ __all__: list[str] = [
83
85
  "external_ai_connector": "External AI Connector",
84
86
  "external_ai_model": "External AI Model",
85
87
  "external_ai_session": "External AI Session",
88
+ "external_ai_usage": "External AI Usage",
86
89
  "experiment_group": "Experiment Group",
87
90
  "experiment_group_member": "Experiment Group Member",
88
91
  "experiment_group_type": "Experiment Group Type",
@@ -116,6 +119,7 @@ __all__: list[str] = [
116
119
  "inventory_history": "Inventory History",
117
120
  "inventory_reconciliation_action": "Inventory Reconciliation Action",
118
121
  "inventory_reconciliation_session": "Inventory Reconciliation Session",
122
+ "it_admin_permission": "IT Admin Permission",
119
123
  "lab_location": "Lab Location",
120
124
  "lab_request": "Lab Request",
121
125
  "license": "License",
@@ -128,6 +132,7 @@ __all__: list[str] = [
128
132
  "measurement_timeline_type": "Measurement Timeline Type",
129
133
  "milestone": "Milestone",
130
134
  "ml_job": "Batch Processing Job",
135
+ "monitor": "Monitor",
131
136
  "monitor_dataset": "Monitor Dataset",
132
137
  "naming_scheme": "Naming Scheme",
133
138
  "naming_counter": "Naming Counter",
@@ -228,6 +233,7 @@ __all__: list[str] = [
228
233
  "timesheet_entry": "Timesheet Entry",
229
234
  "training_module": "Training Module",
230
235
  "training_module_answer": "Training Module Answer",
236
+ "training_module_attempt": "Training Module Attempt",
231
237
  "training_module_block": "Training Module Block",
232
238
  "training_module_page": "Training Module Page",
233
239
  "training_module_question": "Training Module Question",
@@ -295,6 +301,7 @@ class EntityType(StrEnum):
295
301
  COMMENT = "comment"
296
302
  COMMENT_THREAD = "comment_thread"
297
303
  CONDITION_MATCH = "condition_match"
304
+ CONDITION_NICKNAME = "condition_nickname"
298
305
  CONDITION_PARAMETER = "condition_parameter"
299
306
  CONDITION_PARAMETER_MAT_FAMILY = "condition_parameter_mat_family"
300
307
  CONDITION_PARAMETER_MATCHES = "condition_parameter_matches"
@@ -304,6 +311,7 @@ class EntityType(StrEnum):
304
311
  CONSTRAINT = "constraint"
305
312
  CONSTRAINT_SET = "constraint_set"
306
313
  CONTROL_TYPE = "control_type"
314
+ CREDIT_BALANCE = "credit_balance"
307
315
  CURVE_SETTINGS = "curve_settings"
308
316
  CUSTOM_ENTITY = "custom_entity"
309
317
  DEFAULT_PERMISSIONS_NEW_PROJECT = "default_permissions_new_project"
@@ -335,6 +343,7 @@ class EntityType(StrEnum):
335
343
  EXTERNAL_AI_CONNECTOR = "external_ai_connector"
336
344
  EXTERNAL_AI_MODEL = "external_ai_model"
337
345
  EXTERNAL_AI_SESSION = "external_ai_session"
346
+ EXTERNAL_AI_USAGE = "external_ai_usage"
338
347
  EXPERIMENT_GROUP = "experiment_group"
339
348
  EXPERIMENT_GROUP_MEMBER = "experiment_group_member"
340
349
  EXPERIMENT_GROUP_TYPE = "experiment_group_type"
@@ -368,6 +377,7 @@ class EntityType(StrEnum):
368
377
  INVENTORY_HISTORY = "inventory_history"
369
378
  INVENTORY_RECONCILIATION_ACTION = "inventory_reconciliation_action"
370
379
  INVENTORY_RECONCILIATION_SESSION = "inventory_reconciliation_session"
380
+ IT_ADMIN_PERMISSION = "it_admin_permission"
371
381
  LAB_LOCATION = "lab_location"
372
382
  LAB_REQUEST = "lab_request"
373
383
  LICENSE = "license"
@@ -380,6 +390,7 @@ class EntityType(StrEnum):
380
390
  MEASUREMENT_TIMELINE_TYPE = "measurement_timeline_type"
381
391
  MILESTONE = "milestone"
382
392
  ML_JOB = "ml_job"
393
+ MONITOR = "monitor"
383
394
  MONITOR_DATASET = "monitor_dataset"
384
395
  NAMING_SCHEME = "naming_scheme"
385
396
  NAMING_COUNTER = "naming_counter"
@@ -480,6 +491,7 @@ class EntityType(StrEnum):
480
491
  TIMESHEET_ENTRY = "timesheet_entry"
481
492
  TRAINING_MODULE = "training_module"
482
493
  TRAINING_MODULE_ANSWER = "training_module_answer"
494
+ TRAINING_MODULE_ATTEMPT = "training_module_attempt"
483
495
  TRAINING_MODULE_BLOCK = "training_module_block"
484
496
  TRAINING_MODULE_PAGE = "training_module_page"
485
497
  TRAINING_MODULE_QUESTION = "training_module_question"
@@ -1,18 +0,0 @@
1
- import os
2
- from enum import StrEnum
3
-
4
- from sqlalchemy import create_engine
5
- from sqlalchemy.engine.base import Engine
6
-
7
-
8
- class IntegrationDBService(StrEnum):
9
- CRON = "cron"
10
- RUNNER = "runner"
11
-
12
-
13
- def create_db_engine(service: IntegrationDBService) -> Engine:
14
- match service:
15
- case IntegrationDBService.CRON:
16
- return create_engine(os.environ["UNC_CRON_SQLITE_URI"])
17
- case IntegrationDBService.RUNNER:
18
- return create_engine(os.environ["UNC_RUNNER_SQLITE_URI"])
@@ -1,3 +0,0 @@
1
- from .datastore_sqlite import DatastoreSqlite
2
-
3
- __all__: list[str] = ["DatastoreSqlite"]