UncountablePythonSDK 0.0.162__tar.gz → 0.0.163__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 (406) hide show
  1. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
  4. uncountablepythonsdk-0.0.163/docs/integration_examples/add_file_to_folder.md +57 -0
  5. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/integration_examples/index.md +1 -0
  6. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/__init__.py +3 -3
  7. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/argument_parser.py +50 -36
  8. uncountablepythonsdk-0.0.163/pkgs/argument_parser/parser_error.py +60 -0
  9. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/query/column.py +1 -1
  10. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/command_server.py +11 -7
  11. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +10 -0
  12. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/model.py +5 -1
  13. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/.github/workflows/documentation.yml +0 -0
  14. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/.github/workflows/publish.yml +0 -0
  15. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/.gitignore +0 -0
  16. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/.python-version +0 -0
  17. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/README.md +0 -0
  18. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  19. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  20. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  21. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/.gitignore +0 -0
  22. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/conf.py +0 -0
  23. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/index.md +0 -0
  24. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/integration_examples/create_ingredient.md +0 -0
  25. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/integration_examples/create_output.md +0 -0
  26. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/integration_examples/upload_file.md +0 -0
  27. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/justfile +0 -0
  28. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/requirements.txt +0 -0
  29. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/android-chrome-192x192.png +0 -0
  30. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/android-chrome-512x512.png +0 -0
  31. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/apple-touch-icon.png +0 -0
  32. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/browserconfig.xml +0 -0
  33. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/favicon-16x16.png +0 -0
  34. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/favicon-32x32.png +0 -0
  35. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/manifest.json +0 -0
  36. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/mstile-150x150.png +0 -0
  37. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  38. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/docs/static/logo_blue.png +0 -0
  39. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/async_batch.py +0 -0
  40. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/async_batch_large_parse.py +0 -0
  41. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/basic_auth.py +0 -0
  42. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/create_entity.py +0 -0
  43. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/create_ingredient_sdk.py +0 -0
  44. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/download_files.py +0 -0
  45. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/edit_recipe_inputs.py +0 -0
  46. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  47. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  48. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  49. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  50. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  51. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  52. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  53. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  54. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  55. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/integration-server/pyproject.toml +0 -0
  56. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/invoke_uploader.py +0 -0
  57. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/oauth.py +0 -0
  58. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/set_input_pdf_attribute.py +0 -0
  59. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/set_recipe_metadata_file.py +0 -0
  60. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/set_recipe_output_file_sdk.py +0 -0
  61. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/examples/upload_files.py +0 -0
  62. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/__init__.py +0 -0
  63. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/_is_enum.py +0 -0
  64. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  65. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/argument_parser/case_convert.py +0 -0
  66. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_blob_session.py +0 -0
  68. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  69. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  70. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_local_session.py +0 -0
  71. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_s3_session.py +0 -0
  72. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  73. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  74. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  75. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/py.typed +0 -0
  76. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/__init__.py +0 -0
  77. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/annotation.py +0 -0
  78. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/missing_sentry.py +0 -0
  79. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/opaque_key.py +0 -0
  80. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_alias.py +0 -0
  81. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_class.py +0 -0
  82. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_generic.py +0 -0
  83. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/serial_union.py +0 -0
  84. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/unknown.py +0 -0
  85. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization/yaml.py +0 -0
  86. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/__init__.py +0 -0
  87. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  88. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  89. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/dataclasses.py +0 -0
  90. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/serialization_util/serialization_helpers.py +0 -0
  91. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/strenum_compat/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/strenum_compat/strenum_compat.py +0 -0
  93. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/__init__.py +0 -0
  94. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/__main__.py +0 -0
  95. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  97. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  98. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/builder.py +0 -0
  99. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/builder_types.py +0 -0
  100. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/config.py +0 -0
  101. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/cross_output_links.py +0 -0
  102. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_io_ts.py +0 -0
  103. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_open_api.py +0 -0
  104. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_open_api_util.py +0 -0
  105. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_python.py +0 -0
  106. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_typescript.py +0 -0
  107. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/emit_typescript_util.py +0 -0
  108. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/load_types.py +0 -0
  109. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  110. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/open_api_util.py +0 -0
  111. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/parts/base.py.prepart +0 -0
  112. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  113. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/test.py +0 -0
  114. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/type_info/__main__.py +0 -0
  115. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  116. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  117. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  118. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/util.py +0 -0
  119. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/__init__.py +0 -0
  120. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/__main__.py +0 -0
  121. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  122. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  123. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pkgs/type_spec/value_spec/types.py +0 -0
  124. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/pyproject.toml +0 -0
  125. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/setup.cfg +0 -0
  126. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/__init__.py +0 -0
  127. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/__init__.py +0 -0
  128. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/async_batch.py +0 -0
  129. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/client.py +0 -0
  130. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/environment.py +0 -0
  131. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/file_upload.py +0 -0
  132. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/query/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/query/builder.py +0 -0
  134. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/query/row.py +0 -0
  135. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/query/types.py +0 -0
  136. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/core/types.py +0 -0
  137. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/__init__.py +0 -0
  138. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/cli.py +0 -0
  139. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/construct_client.py +0 -0
  140. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/cron.py +0 -0
  141. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/db/__init__.py +0 -0
  142. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/db/connect.py +0 -0
  143. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/db/session.py +0 -0
  144. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/entrypoint.py +0 -0
  145. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/executors.py +0 -0
  147. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  148. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/executors/script_executor.py +0 -0
  149. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/http_server/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/http_server/types.py +0 -0
  151. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/job.py +0 -0
  152. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/__init__.py +0 -0
  153. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  154. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  155. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  156. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  158. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  159. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  160. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  161. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  162. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  164. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  165. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  166. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/types.py +0 -0
  167. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/queue_runner/worker.py +0 -0
  168. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/request_context.py +0 -0
  169. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/scan_profiles.py +0 -0
  170. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/scheduler.py +0 -0
  171. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  173. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/server.py +0 -0
  174. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/telemetry.py +0 -0
  175. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  176. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/py.typed +0 -0
  177. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/__init__.py +0 -0
  179. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/batch/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/batch/execute_batch.py +0 -0
  181. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  182. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/chemical/__init__.py +0 -0
  183. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  184. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  185. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  186. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/__init__.py +0 -0
  187. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/create_entities.py +0 -0
  188. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/create_entity.py +0 -0
  189. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  190. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/export_entities.py +0 -0
  191. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/get_entities_data.py +0 -0
  192. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  193. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/list_aggregate.py +0 -0
  194. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/list_entities.py +0 -0
  195. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/lock_entity.py +0 -0
  196. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/lookup_entity.py +0 -0
  197. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  198. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/set_barcode.py +0 -0
  199. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  200. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/set_values.py +0 -0
  201. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  202. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/entity/unlock_entity.py +0 -0
  203. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/equipment/__init__.py +0 -0
  204. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  205. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/field_options/__init__.py +0 -0
  206. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  207. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/file_folders/__init__.py +0 -0
  208. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  209. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  210. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/files/__init__.py +0 -0
  211. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/files/download_file.py +0 -0
  212. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/id_source/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/id_source/list_id_source.py +0 -0
  214. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/id_source/match_id_source.py +0 -0
  215. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/input_groups/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  217. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/create_inputs.py +0 -0
  219. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/get_input_data.py +0 -0
  220. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/get_input_names.py +0 -0
  221. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  222. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  223. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_input_category.py +0 -0
  224. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  225. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  226. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/__init__.py +0 -0
  227. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  228. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/push_notification.py +0 -0
  229. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  230. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/listing/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/listing/export_listing.py +0 -0
  232. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/listing/fetch_listing.py +0 -0
  233. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/material_families/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  235. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/notebooks/__init__.py +0 -0
  236. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  237. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
  238. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/__init__.py +0 -0
  239. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/get_output_data.py +0 -0
  240. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/get_output_names.py +0 -0
  241. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  242. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  243. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  244. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/permissions/__init__.py +0 -0
  245. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  246. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  247. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/project/__init__.py +0 -0
  248. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/project/get_projects.py +0 -0
  249. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/project/get_projects_data.py +0 -0
  250. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_links/__init__.py +0 -0
  251. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  252. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  253. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  254. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  255. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/__init__.py +0 -0
  256. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  257. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  258. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  259. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  260. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  261. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  262. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  263. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/create_recipe.py +0 -0
  264. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/create_recipes.py +0 -0
  265. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  266. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  267. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  268. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_curve.py +0 -0
  269. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  270. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  271. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  272. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  273. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  274. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  275. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  276. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  277. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  278. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  279. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  280. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  281. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  282. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  283. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  284. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  285. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  286. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  287. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/runsheet/__init__.py +0 -0
  288. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  289. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  290. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/triggers/__init__.py +0 -0
  291. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/triggers/run_trigger.py +0 -0
  292. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/uploader/__init__.py +0 -0
  293. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  294. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  295. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/user/__init__.py +0 -0
  296. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/api/user/get_current_user_info.py +0 -0
  297. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/async_batch.py +0 -0
  298. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/async_batch_processor.py +0 -0
  299. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/async_batch_t.py +0 -0
  300. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/async_jobs.py +0 -0
  301. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/async_jobs_t.py +0 -0
  302. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/auth_retrieval.py +0 -0
  303. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/auth_retrieval_t.py +0 -0
  304. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/base.py +0 -0
  305. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/base_t.py +0 -0
  306. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/calculations.py +0 -0
  307. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/calculations_t.py +0 -0
  308. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/chemical_structure.py +0 -0
  309. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/chemical_structure_t.py +0 -0
  310. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/client_base.py +0 -0
  311. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/client_config.py +0 -0
  312. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/client_config_t.py +0 -0
  313. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/curves.py +0 -0
  314. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/curves_t.py +0 -0
  315. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/data.py +0 -0
  316. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/data_t.py +0 -0
  317. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/entity.py +0 -0
  318. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/entity_t.py +0 -0
  319. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/experiment_groups.py +0 -0
  320. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/experiment_groups_t.py +0 -0
  321. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/exports.py +0 -0
  322. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/exports_t.py +0 -0
  323. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/field_values.py +0 -0
  324. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/field_values_t.py +0 -0
  325. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/fields.py +0 -0
  326. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/fields_t.py +0 -0
  327. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/generic_upload.py +0 -0
  328. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/generic_upload_t.py +0 -0
  329. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/id_source.py +0 -0
  330. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/id_source_t.py +0 -0
  331. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/identifier.py +0 -0
  332. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/identifier_t.py +0 -0
  333. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/input_attributes.py +0 -0
  334. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/input_attributes_t.py +0 -0
  335. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/inputs.py +0 -0
  336. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/inputs_t.py +0 -0
  337. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_server.py +0 -0
  338. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_server_t.py +0 -0
  339. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_session.py +0 -0
  340. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/integration_session_t.py +0 -0
  341. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/integrations.py +0 -0
  342. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/integrations_t.py +0 -0
  343. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/job_definition.py +0 -0
  344. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/job_definition_t.py +0 -0
  345. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/listing.py +0 -0
  346. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/listing_t.py +0 -0
  347. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/notices.py +0 -0
  348. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/notices_t.py +0 -0
  349. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/notifications.py +0 -0
  350. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/notifications_t.py +0 -0
  351. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/outputs.py +0 -0
  352. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/outputs_t.py +0 -0
  353. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/overrides.py +0 -0
  354. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/overrides_t.py +0 -0
  355. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/permissions.py +0 -0
  356. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/permissions_t.py +0 -0
  357. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/phases.py +0 -0
  358. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/phases_t.py +0 -0
  359. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/post_base.py +0 -0
  360. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/post_base_t.py +0 -0
  361. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/queued_job.py +0 -0
  362. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/queued_job_t.py +0 -0
  363. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_identifiers.py +0 -0
  364. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_identifiers_t.py +0 -0
  365. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_inputs.py +0 -0
  366. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_inputs_t.py +0 -0
  367. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_links.py +0 -0
  368. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_links_t.py +0 -0
  369. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_metadata.py +0 -0
  370. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_metadata_t.py +0 -0
  371. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_output_metadata.py +0 -0
  372. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_output_metadata_t.py +0 -0
  373. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_step_relationships.py +0 -0
  374. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_step_relationships_t.py +0 -0
  375. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_tags.py +0 -0
  376. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_tags_t.py +0 -0
  377. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_workflow_step_types.py +0 -0
  378. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  379. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_workflow_steps.py +0 -0
  380. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  381. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipes.py +0 -0
  382. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/recipes_t.py +0 -0
  383. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/response.py +0 -0
  384. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/response_t.py +0 -0
  385. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet.py +0 -0
  386. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet_format.py +0 -0
  387. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet_format_t.py +0 -0
  388. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/runsheet_t.py +0 -0
  389. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/secret_retrieval.py +0 -0
  390. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/secret_retrieval_t.py +0 -0
  391. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/sockets.py +0 -0
  392. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/sockets_t.py +0 -0
  393. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/specs.py +0 -0
  394. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/specs_t.py +0 -0
  395. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/step_relationships.py +0 -0
  396. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/step_relationships_t.py +0 -0
  397. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/units.py +0 -0
  398. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/units_t.py +0 -0
  399. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/uploader.py +0 -0
  400. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/uploader_t.py +0 -0
  401. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/users.py +0 -0
  402. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/users_t.py +0 -0
  403. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/webhook_job.py +0 -0
  404. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/webhook_job_t.py +0 -0
  405. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/workflows.py +0 -0
  406. {uncountablepythonsdk-0.0.162 → uncountablepythonsdk-0.0.163}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.162
3
+ Version: 0.0.163
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.162
3
+ Version: 0.0.163
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
@@ -14,6 +14,7 @@ docs/conf.py
14
14
  docs/index.md
15
15
  docs/justfile
16
16
  docs/requirements.txt
17
+ docs/integration_examples/add_file_to_folder.md
17
18
  docs/integration_examples/create_ingredient.md
18
19
  docs/integration_examples/create_output.md
19
20
  docs/integration_examples/index.md
@@ -58,6 +59,7 @@ pkgs/argument_parser/_is_enum.py
58
59
  pkgs/argument_parser/_is_namedtuple.py
59
60
  pkgs/argument_parser/argument_parser.py
60
61
  pkgs/argument_parser/case_convert.py
62
+ pkgs/argument_parser/parser_error.py
61
63
  pkgs/filesystem_utils/__init__.py
62
64
  pkgs/filesystem_utils/_blob_session.py
63
65
  pkgs/filesystem_utils/_file_share_session.py
@@ -0,0 +1,57 @@
1
+ # Add a File to a Folder
2
+
3
+ This is a two-step workflow: first upload the file using `upload_files`, then place it in a target folder using `add_file_to_folder`.
4
+
5
+ ## Step 1: Upload the file
6
+
7
+ ```{code-block} python
8
+ from io import BytesIO
9
+ from pathlib import Path
10
+
11
+ from uncountable.core import AuthDetailsApiKey, Client
12
+ from uncountable.core.client import ClientConfig
13
+ from uncountable.core.file_upload import DataFileUpload, UploadedFile
14
+
15
+ client: Client = Client(
16
+ base_url="<BASE_URL>",
17
+ auth_details=AuthDetailsApiKey(
18
+ api_id="<API_ID>", api_secret_key="<API_SECRET_KEY>"
19
+ ),
20
+ config=ClientConfig(allow_insecure_tls=False),
21
+ )
22
+
23
+ filepath = Path("<YOUR_FILE_PATH>")
24
+ file_io: BytesIO = BytesIO(filepath.read_bytes())
25
+
26
+ upload_file_response: list[UploadedFile] = client.upload_files(
27
+ file_uploads=[DataFileUpload(data=file_io, name=filepath.name)]
28
+ )
29
+
30
+ file_id = upload_file_response[0].file_id
31
+ ```
32
+
33
+ ## Step 2: Add the file to a folder
34
+
35
+ ```{code-block} python
36
+ from uncountable.types import identifier_t
37
+
38
+ response = client.add_file_to_folder(
39
+ file_id=file_id,
40
+ folder_key=identifier_t.IdentifierKeyId(id=<FOLDER_ID>),
41
+ )
42
+ ```
43
+
44
+ Example Response:
45
+ ```{code}
46
+ Data(modification_made=True, result_id=4521, entity=Entity(id=892, type=<EntityType.FILE_FOLDER_MEMBERSHIP: 'file_folder_membership'>), result_values=None)
47
+ ```
48
+
49
+ To add the file to the root folder instead of a specific folder:
50
+
51
+ ```{code-block} python
52
+ response = client.add_file_to_folder(
53
+ file_id=file_id,
54
+ folder_key=identifier_t.IdentifierKeyRefName(ref_name="root"),
55
+ )
56
+ ```
57
+
@@ -1,6 +1,7 @@
1
1
  # Integration Examples
2
2
 
3
3
  ```{toctree}
4
+ add_file_to_folder
4
5
  create_ingredient
5
6
  create_output
6
7
  upload_file
@@ -1,11 +1,8 @@
1
1
  from ._is_enum import is_string_enum_class as is_string_enum_class
2
2
  from .argument_parser import CachedParser as CachedParser
3
3
  from .argument_parser import ParserBase as ParserBase
4
- from .argument_parser import ParserError as ParserError
5
- from .argument_parser import ParserExtraFieldsError as ParserExtraFieldsError
6
4
  from .argument_parser import ParserFunction as ParserFunction
7
5
  from .argument_parser import ParserOptions as ParserOptions
8
- from .argument_parser import ParserTypeError as ParserTypeError
9
6
  from .argument_parser import SourceEncoding as SourceEncoding
10
7
  from .argument_parser import build_parser as build_parser
11
8
  from .argument_parser import is_missing as is_missing
@@ -14,3 +11,6 @@ from .argument_parser import is_union as is_union
14
11
  from .case_convert import camel_to_snake_case as camel_to_snake_case
15
12
  from .case_convert import kebab_to_pascal_case as kebab_to_pascal_case
16
13
  from .case_convert import snake_to_camel_case as snake_to_camel_case
14
+ from .parser_error import ParserError as ParserError
15
+ from .parser_error import ParserExtraFieldsError as ParserExtraFieldsError
16
+ from .parser_error import ParserTypeError as ParserTypeError
@@ -26,6 +26,7 @@ from pkgs.serialization import (
26
26
  from ._is_enum import is_string_enum_class
27
27
  from ._is_namedtuple import is_namedtuple_type
28
28
  from .case_convert import camel_to_snake_case, snake_to_camel_case
29
+ from .parser_error import ParserError, ParserExtraFieldsError, ParserTypeError
29
30
 
30
31
  T = typing.TypeVar("T")
31
32
  ParserFunction = typing.Callable[[typing.Any], T]
@@ -72,22 +73,6 @@ class ParserContext:
72
73
  cache: ParserCache
73
74
 
74
75
 
75
- class ParserError(BaseException): ...
76
-
77
-
78
- class ParserExtraFieldsError(ParserError):
79
- extra_fields: set[str]
80
-
81
- def __init__(self, extra_fields: set[str]) -> None:
82
- self.extra_fields = extra_fields
83
-
84
- def __str__(self) -> str:
85
- return f"extra fields were provided: {', '.join(self.extra_fields)}"
86
-
87
-
88
- class ParserTypeError(ParserError): ...
89
-
90
-
91
76
  def is_union(field_type: typing.Any) -> bool:
92
77
  origin = typing.get_origin(field_type)
93
78
  return origin is typing.Union or origin is types.UnionType
@@ -152,8 +137,10 @@ def _invoke_fallback_parsers(
152
137
  except Exception as e:
153
138
  exceptions.append(e)
154
139
  continue
155
- raise ValueError(
156
- f"Unhandled value {value} cannot be cast to a member of {original_type}"
140
+ raise ParserError(
141
+ f"Unhandled value {value} cannot be cast to a member of {original_type}",
142
+ value=value,
143
+ expected_type=original_type,
157
144
  ) from ExceptionGroup("Fallback Parser Exception", exceptions)
158
145
 
159
146
 
@@ -169,7 +156,9 @@ def _invoke_membership_parser(
169
156
  if value == test_value:
170
157
  return test_value
171
158
 
172
- raise ValueError(f"Expected value from {expected_values} but got value {value}")
159
+ raise ParserError(
160
+ f"Expected value from {expected_values} but got value {value}", value=value
161
+ )
173
162
 
174
163
 
175
164
  # Uses `is` to compare
@@ -179,8 +168,10 @@ def _build_identity_parser(
179
168
  def parse(value: typing.Any) -> T:
180
169
  if value is identity_value:
181
170
  return identity_value
182
- raise ValueError(
183
- f"Expected value {identity_value} (type: {type(identity_value)}) but got value {value} (type: {type(value)})"
171
+ raise ParserError(
172
+ f"Expected value {identity_value} (type: {type(identity_value)}) but got value {value} (type: {type(value)})",
173
+ value=value,
174
+ expected_type=type(identity_value),
184
175
  )
185
176
 
186
177
  return parse
@@ -206,12 +197,12 @@ def _build_parser_discriminated_union(
206
197
  else:
207
198
  discriminant = value.get(discriminator)
208
199
  if discriminant is None:
209
- raise ValueError("missing-union-discriminant")
200
+ raise ParserError("missing-union-discriminant")
210
201
  if not isinstance(discriminant, str):
211
- raise ValueError("union-discriminant-is-not-string")
202
+ raise ParserError("union-discriminant-is-not-string", value=discriminant)
212
203
  parser = discriminator_map.get(discriminant)
213
204
  if parser is None:
214
- raise ValueError("missing-type-for-union-discriminant", discriminant)
205
+ raise ParserError("missing-type-for-union-discriminant", value=discriminant)
215
206
  return parser(value)
216
207
 
217
208
  return parse
@@ -384,18 +375,22 @@ def _build_parser_inner(
384
375
  if origin in (list, set):
385
376
  args = typing.get_args(parsed_type)
386
377
  if len(args) != 1:
387
- raise ValueError("List types only support one argument")
378
+ raise ParserError(
379
+ "List types only support one argument", expected_type=parsed_type
380
+ )
388
381
  arg_parser = _build_parser_inner(args[0], context, type_var_map)
389
382
 
390
383
  def parse_element(value: typing.Any) -> typing.Any:
391
384
  try:
392
385
  return arg_parser(value)
393
386
  except Exception as e:
394
- raise ValueError("Failed to parse element", value) from e
387
+ raise ParserError("Failed to parse element", value=value) from e
395
388
 
396
389
  def parse(value: typing.Any) -> typing.Any:
397
390
  if not isinstance(value, list):
398
- raise ValueError("value is not a list", parsed_type)
391
+ raise ParserError(
392
+ "value is not a list", value=value, expected_type=parsed_type
393
+ )
399
394
  return origin(parse_element(x) for x in value)
400
395
 
401
396
  return parse
@@ -403,7 +398,10 @@ def _build_parser_inner(
403
398
  if origin is dict:
404
399
  args = typing.get_args(parsed_type)
405
400
  if len(args) != 2:
406
- raise ValueError("Dict types only support two arguments for now")
401
+ raise ParserError(
402
+ "Dict types only support two arguments for now",
403
+ expected_type=parsed_type,
404
+ )
407
405
  k_inner_parser = _build_parser_inner(
408
406
  args[0],
409
407
  context,
@@ -479,7 +477,11 @@ def _build_parser_inner(
479
477
  return value # type: ignore
480
478
  if isinstance(value, (float, int)):
481
479
  return str(value) # type: ignore
482
- raise ValueError(f"Invalid string value: {type(value)}: {value}")
480
+ raise ParserError(
481
+ f"Invalid string value: {type(value)}: {value}",
482
+ value=value,
483
+ expected_type=str,
484
+ )
483
485
 
484
486
  return parse_str
485
487
 
@@ -488,7 +490,11 @@ def _build_parser_inner(
488
490
  def parse_as_numeric_type(value: typing.Any) -> T:
489
491
  numeric_value: Decimal | float = parsed_type(value) # type: ignore
490
492
  if math.isnan(numeric_value):
491
- raise ValueError(f"Invalid numeric value: {numeric_value}")
493
+ raise ParserError(
494
+ f"Invalid numeric value: {numeric_value}",
495
+ value=numeric_value,
496
+ expected_type=parsed_type,
497
+ )
492
498
 
493
499
  return numeric_value # type: ignore
494
500
 
@@ -500,7 +506,7 @@ def _build_parser_inner(
500
506
  if parsed_type is MissingSentryType:
501
507
 
502
508
  def error(value: typing.Any) -> T:
503
- raise ValueError("Missing type cannot be parsed directly")
509
+ raise ParserError("Missing type cannot be parsed directly")
504
510
 
505
511
  return error
506
512
 
@@ -519,7 +525,9 @@ def _build_parser_inner(
519
525
  type_var_map,
520
526
  )
521
527
 
522
- raise ValueError(f"Unhandled type {parsed_type}/{origin}")
528
+ raise ParserError(
529
+ f"Unhandled type {parsed_type}/{origin}", expected_type=parsed_type
530
+ )
523
531
 
524
532
 
525
533
  # Take in map of parameter name to materialized type
@@ -583,7 +591,9 @@ def _build_parser_dataclass(
583
591
  field_value: typing.Any
584
592
  if field_raw_value == dataclasses.MISSING:
585
593
  if serial_class_data.has_parse_require(field.name):
586
- raise ValueError("missing-required-field", field.name)
594
+ raise ParserError(
595
+ "missing-required-field", field_name=field.name
596
+ )
587
597
  if _has_field_default(field):
588
598
  field_value = _get_field_default(field)
589
599
  elif is_missing(field_type):
@@ -596,7 +606,9 @@ def _build_parser_dataclass(
596
606
  # Backwards compatibilty to dataclasses that didn't set a default value
597
607
  field_value = False
598
608
  else:
599
- raise ValueError("missing-value-for-field", field.name)
609
+ raise ParserError(
610
+ "missing-value-for-field", field_name=field.name
611
+ )
600
612
  elif (
601
613
  field_raw_value is None
602
614
  and not is_optional(field_type)
@@ -612,8 +624,10 @@ def _build_parser_dataclass(
612
624
  data[field.name] = field_value
613
625
 
614
626
  except Exception as e:
615
- raise ValueError(
616
- f"unable-to-parse-field:{field.name}", field_raw_value
627
+ raise ParserError(
628
+ f"unable-to-parse-field:{field.name}",
629
+ field_name=field.name,
630
+ value=field_raw_value,
617
631
  ) from e
618
632
 
619
633
  if context.options.strict_property_parsing:
@@ -0,0 +1,60 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ _UNSET = object()
6
+
7
+
8
+ class ParserError(ValueError):
9
+ """Raised when argument parsing fails. Carries structured context about the failure."""
10
+
11
+ def __init__(
12
+ self,
13
+ message: str,
14
+ *,
15
+ value: typing.Any = _UNSET,
16
+ expected_type: typing.Any = None,
17
+ field_name: str | None = None,
18
+ ) -> None:
19
+ self.error_message = message
20
+ self.value = value
21
+ self.expected_type = expected_type
22
+ self.field_name = field_name
23
+ super().__init__(message)
24
+
25
+ def error_chain(self) -> list[ParserError]:
26
+ errors: list[ParserError] = []
27
+ current: BaseException | None = self
28
+ while isinstance(current, ParserError):
29
+ errors.append(current)
30
+ current = current.__cause__
31
+ return errors
32
+
33
+ def format_error_chain(self) -> str:
34
+ messages: list[str] = []
35
+ current: BaseException | None = self
36
+ while current is not None:
37
+ if isinstance(current, ParserError):
38
+ messages.append(current.error_message)
39
+ current = current.__cause__
40
+ else:
41
+ messages.append(str(current))
42
+ break
43
+
44
+ if len(messages) <= 1:
45
+ return self.error_message
46
+
47
+ return " → ".join(messages)
48
+
49
+
50
+ class ParserExtraFieldsError(ParserError):
51
+ extra_fields: set[str]
52
+
53
+ def __init__(self, extra_fields: set[str]) -> None:
54
+ self.extra_fields = extra_fields
55
+ super().__init__(
56
+ f"extra fields were provided: {', '.join(extra_fields)}",
57
+ )
58
+
59
+
60
+ class ParserTypeError(ParserError): ...
@@ -294,7 +294,7 @@ class BooleanColumn[
294
294
  ) -> ColumnFilter:
295
295
  return ColumnFilter(
296
296
  identifier=self.identifier,
297
- filter=lambda x: listing_t.FilterSpecEquals(column=x, value=other),
297
+ filter=lambda x: listing_t.FilterSpecEqualsBoolean(column=x, value=other),
298
298
  )
299
299
 
300
300
 
@@ -159,13 +159,17 @@ async def serve(command_queue: CommandQueue, datastore: DatastoreSqlite) -> None
159
159
  else None
160
160
  )
161
161
 
162
- queued_job_metadata = datastore.list_queued_job_metadata(
163
- status=job_status,
164
- limit=request.limit,
165
- offset=request.offset,
166
- job_ref_name=request.job_ref_name or None,
167
- submitted_from=submitted_from,
168
- submitted_to=submitted_to,
162
+ loop = asyncio.get_running_loop()
163
+ queued_job_metadata = await loop.run_in_executor(
164
+ None,
165
+ lambda: datastore.list_queued_job_metadata(
166
+ status=job_status,
167
+ limit=request.limit,
168
+ offset=request.offset,
169
+ job_ref_name=request.job_ref_name or None,
170
+ submitted_from=submitted_from,
171
+ submitted_to=submitted_to,
172
+ ),
169
173
  )
170
174
 
171
175
  response_list: list[ListQueuedJobsResult.ListQueuedJobsResultItem] = []
@@ -36,6 +36,16 @@ class DatastoreSqlite(Datastore):
36
36
  connection.execute(
37
37
  text("alter table queued_jobs add column status VARCHAR")
38
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
+ )
39
49
 
40
50
  def add_job_to_queue(
41
51
  self, job_payload: queued_job_t.QueuedJobPayload, job_ref_name: str
@@ -13,7 +13,10 @@ class QueuedJob(Base):
13
13
  id = Column(Text, primary_key=True)
14
14
  job_ref_name = Column(Text, nullable=False, index=True)
15
15
  submitted_at = Column(
16
- DateTime(timezone=True), server_default=func.current_timestamp(), nullable=False
16
+ DateTime(timezone=True),
17
+ server_default=func.current_timestamp(),
18
+ nullable=False,
19
+ index=True,
17
20
  )
18
21
  payload = Column(JSON, nullable=False)
19
22
  num_attempts = Column(BigInteger, nullable=False, default=0, server_default="0")
@@ -21,4 +24,5 @@ class QueuedJob(Base):
21
24
  Enum(queued_job_t.JobStatus, length=None),
22
25
  default=queued_job_t.JobStatus.QUEUED,
23
26
  nullable=True,
27
+ index=True,
24
28
  )