UncountablePythonSDK 0.0.117__tar.gz → 0.0.118__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of UncountablePythonSDK might be problematic. Click here for more details.

Files changed (342) hide show
  1. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/.github/workflows/documentation.yml +1 -1
  2. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/.github/workflows/publish.yml +1 -1
  3. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/PKG-INFO +1 -1
  4. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
  5. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/UncountablePythonSDK.egg-info/SOURCES.txt +1 -0
  6. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/justfile +1 -1
  7. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/example_instrument.py +33 -1
  8. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/pyproject.toml +1 -1
  9. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/argument_parser/__init__.py +1 -0
  10. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/argument_parser/argument_parser.py +3 -3
  11. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/builder.py +2 -0
  12. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/emit_open_api.py +54 -8
  13. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/value_spec/emit_python.py +6 -1
  14. uncountablepythonsdk-0.0.118/uncountable/integration/cli.py +106 -0
  15. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/command_client.py +26 -0
  16. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/command_server.py +42 -2
  17. uncountablepythonsdk-0.0.118/uncountable/integration/queue_runner/command_server/constants.py +4 -0
  18. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +18 -0
  19. uncountablepythonsdk-0.0.118/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +49 -0
  20. uncountablepythonsdk-0.0.118/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +87 -0
  21. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +45 -0
  22. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +28 -0
  23. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/datastore/interface.py +5 -0
  24. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/job_scheduler.py +3 -8
  25. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/queue_runner.py +10 -2
  26. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/entity_t.py +1 -1
  27. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/queued_job.py +1 -0
  28. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/queued_job_t.py +11 -2
  29. uncountablepythonsdk-0.0.117/uncountable/integration/cli.py +0 -49
  30. uncountablepythonsdk-0.0.117/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -40
  31. uncountablepythonsdk-0.0.117/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -38
  32. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/.gitignore +0 -0
  33. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/.python-version +0 -0
  34. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/README.md +0 -0
  35. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  36. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  37. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  38. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/.gitignore +0 -0
  39. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/conf.py +0 -0
  40. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/index.md +0 -0
  41. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/quickstart.md +0 -0
  42. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/requirements.txt +0 -0
  43. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/android-chrome-192x192.png +0 -0
  44. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/android-chrome-512x512.png +0 -0
  45. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/apple-touch-icon.png +0 -0
  46. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/browserconfig.xml +0 -0
  47. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/favicon-16x16.png +0 -0
  48. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/favicon-32x32.png +0 -0
  49. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/manifest.json +0 -0
  50. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/mstile-150x150.png +0 -0
  51. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  52. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/docs/static/logo_blue.png +0 -0
  53. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/async_batch.py +0 -0
  54. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/create_entity.py +0 -0
  55. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/create_ingredient_sdk.py +0 -0
  56. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/download_files.py +0 -0
  57. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/edit_recipe_inputs.py +0 -0
  58. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  59. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  60. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  61. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  62. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  63. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  64. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/invoke_uploader.py +0 -0
  65. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/set_recipe_metadata_file.py +0 -0
  66. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/set_recipe_output_file_sdk.py +0 -0
  67. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/examples/upload_files.py +0 -0
  68. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/__init__.py +0 -0
  69. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/argument_parser/_is_enum.py +0 -0
  70. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  71. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/argument_parser/case_convert.py +0 -0
  72. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/__init__.py +0 -0
  73. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/_blob_session.py +0 -0
  74. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  75. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/_local_session.py +0 -0
  76. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/_s3_session.py +0 -0
  77. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  78. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  79. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  80. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/py.typed +0 -0
  81. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/__init__.py +0 -0
  82. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/annotation.py +0 -0
  83. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/missing_sentry.py +0 -0
  84. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/opaque_key.py +0 -0
  85. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/serial_alias.py +0 -0
  86. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/serial_class.py +0 -0
  87. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/serial_generic.py +0 -0
  88. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/serial_union.py +0 -0
  89. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization/yaml.py +0 -0
  90. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization_util/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  92. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  93. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization_util/dataclasses.py +0 -0
  94. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/serialization_util/serialization_helpers.py +0 -0
  95. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/strenum_compat/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/strenum_compat/strenum_compat.py +0 -0
  97. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/__main__.py +0 -0
  99. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  100. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  101. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  102. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/config.py +0 -0
  103. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/cross_output_links.py +0 -0
  104. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/emit_io_ts.py +0 -0
  105. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/emit_open_api_util.py +0 -0
  106. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/emit_python.py +0 -0
  107. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/emit_typescript.py +0 -0
  108. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/emit_typescript_util.py +0 -0
  109. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/load_types.py +0 -0
  110. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  111. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/open_api_util.py +0 -0
  112. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/parts/base.py.prepart +0 -0
  113. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  114. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/test.py +0 -0
  115. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/type_info/__main__.py +0 -0
  116. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  117. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  119. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/util.py +0 -0
  120. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/value_spec/__init__.py +0 -0
  121. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/value_spec/__main__.py +0 -0
  122. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  123. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pkgs/type_spec/value_spec/types.py +0 -0
  124. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/pyproject.toml +0 -0
  125. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/setup.cfg +0 -0
  126. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/__init__.py +0 -0
  127. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/core/__init__.py +0 -0
  128. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/core/async_batch.py +0 -0
  129. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/core/client.py +0 -0
  130. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/core/environment.py +0 -0
  131. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/core/file_upload.py +0 -0
  132. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/core/types.py +0 -0
  133. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/__init__.py +0 -0
  134. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/construct_client.py +0 -0
  135. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/cron.py +0 -0
  136. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/db/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/db/connect.py +0 -0
  138. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/db/session.py +0 -0
  139. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/entrypoint.py +0 -0
  140. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/executors/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/executors/executors.py +0 -0
  142. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  143. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/executors/script_executor.py +0 -0
  144. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/http_server/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/http_server/types.py +0 -0
  146. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/job.py +0 -0
  147. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/__init__.py +0 -0
  148. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  151. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  152. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  153. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/types.py +0 -0
  154. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/queue_runner/worker.py +0 -0
  155. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/scan_profiles.py +0 -0
  156. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/scheduler.py +0 -0
  157. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  159. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/server.py +0 -0
  160. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/telemetry.py +0 -0
  161. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  162. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/py.typed +0 -0
  163. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/batch/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/batch/execute_batch.py +0 -0
  167. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  168. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/chemical/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  170. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  172. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/create_entities.py +0 -0
  174. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/create_entity.py +0 -0
  175. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  176. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/export_entities.py +0 -0
  177. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/get_entities_data.py +0 -0
  178. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  179. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/list_entities.py +0 -0
  180. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/lock_entity.py +0 -0
  181. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/lookup_entity.py +0 -0
  182. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  183. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  184. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/set_values.py +0 -0
  185. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  186. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/entity/unlock_entity.py +0 -0
  187. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/equipment/__init__.py +0 -0
  188. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  189. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/field_options/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  191. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/files/__init__.py +0 -0
  192. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/files/download_file.py +0 -0
  193. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/id_source/__init__.py +0 -0
  194. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/id_source/list_id_source.py +0 -0
  195. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/id_source/match_id_source.py +0 -0
  196. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/input_groups/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  198. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/create_inputs.py +0 -0
  200. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/get_input_data.py +0 -0
  201. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/get_input_names.py +0 -0
  202. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  203. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  204. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/set_input_category.py +0 -0
  205. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  206. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  207. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/integrations/__init__.py +0 -0
  208. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  209. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/material_families/__init__.py +0 -0
  210. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  211. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/outputs/__init__.py +0 -0
  212. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/outputs/get_output_data.py +0 -0
  213. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/outputs/get_output_names.py +0 -0
  214. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  215. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/permissions/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  217. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/project/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/project/get_projects.py +0 -0
  219. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/project/get_projects_data.py +0 -0
  220. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipe_links/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  222. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  223. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  224. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  225. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/__init__.py +0 -0
  226. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  227. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  228. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  229. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  230. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  231. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  232. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  233. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/create_recipe.py +0 -0
  234. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/create_recipes.py +0 -0
  235. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  236. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  237. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  238. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_curve.py +0 -0
  239. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  240. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  241. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  242. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  243. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  244. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  245. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  246. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  247. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  248. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  249. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  250. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  251. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  252. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  253. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  254. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/runsheet/__init__.py +0 -0
  255. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  256. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/triggers/__init__.py +0 -0
  257. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/triggers/run_trigger.py +0 -0
  258. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/uploader/__init__.py +0 -0
  259. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  260. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/async_batch.py +0 -0
  261. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/async_batch_processor.py +0 -0
  262. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/async_batch_t.py +0 -0
  263. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/async_jobs.py +0 -0
  264. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/async_jobs_t.py +0 -0
  265. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/auth_retrieval.py +0 -0
  266. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/auth_retrieval_t.py +0 -0
  267. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/base.py +0 -0
  268. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/base_t.py +0 -0
  269. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/calculations.py +0 -0
  270. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/calculations_t.py +0 -0
  271. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/chemical_structure.py +0 -0
  272. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/chemical_structure_t.py +0 -0
  273. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/client_base.py +0 -0
  274. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/client_config.py +0 -0
  275. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/client_config_t.py +0 -0
  276. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/curves.py +0 -0
  277. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/curves_t.py +0 -0
  278. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/data.py +0 -0
  279. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/data_t.py +0 -0
  280. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/entity.py +0 -0
  281. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/experiment_groups.py +0 -0
  282. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/experiment_groups_t.py +0 -0
  283. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/exports.py +0 -0
  284. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/exports_t.py +0 -0
  285. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/field_values.py +0 -0
  286. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/field_values_t.py +0 -0
  287. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/fields.py +0 -0
  288. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/fields_t.py +0 -0
  289. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/generic_upload.py +0 -0
  290. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/generic_upload_t.py +0 -0
  291. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/id_source.py +0 -0
  292. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/id_source_t.py +0 -0
  293. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/identifier.py +0 -0
  294. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/identifier_t.py +0 -0
  295. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/input_attributes.py +0 -0
  296. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/input_attributes_t.py +0 -0
  297. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/inputs.py +0 -0
  298. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/inputs_t.py +0 -0
  299. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/integration_server.py +0 -0
  300. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/integration_server_t.py +0 -0
  301. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/integrations.py +0 -0
  302. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/integrations_t.py +0 -0
  303. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/job_definition.py +0 -0
  304. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/job_definition_t.py +0 -0
  305. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/outputs.py +0 -0
  306. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/outputs_t.py +0 -0
  307. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/overrides.py +0 -0
  308. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/overrides_t.py +0 -0
  309. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/permissions.py +0 -0
  310. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/permissions_t.py +0 -0
  311. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/phases.py +0 -0
  312. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/phases_t.py +0 -0
  313. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/post_base.py +0 -0
  314. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/post_base_t.py +0 -0
  315. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_identifiers.py +0 -0
  316. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_identifiers_t.py +0 -0
  317. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_inputs.py +0 -0
  318. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_inputs_t.py +0 -0
  319. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_links.py +0 -0
  320. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_links_t.py +0 -0
  321. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_metadata.py +0 -0
  322. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_metadata_t.py +0 -0
  323. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_output_metadata.py +0 -0
  324. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_output_metadata_t.py +0 -0
  325. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_tags.py +0 -0
  326. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_tags_t.py +0 -0
  327. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_workflow_steps.py +0 -0
  328. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  329. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipes.py +0 -0
  330. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/recipes_t.py +0 -0
  331. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/response.py +0 -0
  332. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/response_t.py +0 -0
  333. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/secret_retrieval.py +0 -0
  334. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/secret_retrieval_t.py +0 -0
  335. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/units.py +0 -0
  336. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/units_t.py +0 -0
  337. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/users.py +0 -0
  338. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/users_t.py +0 -0
  339. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/webhook_job.py +0 -0
  340. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/webhook_job_t.py +0 -0
  341. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/workflows.py +0 -0
  342. {uncountablepythonsdk-0.0.117 → uncountablepythonsdk-0.0.118}/uncountable/types/workflows_t.py +0 -0
@@ -17,7 +17,7 @@ jobs:
17
17
  - name: Set up UV
18
18
  uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb
19
19
  with:
20
- version: "0.7.1"
20
+ version: "0.8.4"
21
21
  activate-environment: true
22
22
  enable-cache: true
23
23
  - name: Install dependencies
@@ -25,7 +25,7 @@ jobs:
25
25
  - name: Set up UV
26
26
  uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb
27
27
  with:
28
- version: "0.7.1"
28
+ version: "0.8.4"
29
29
  activate-environment: true
30
30
  enable-cache: true
31
31
  - name: Install build dependencies
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.117
3
+ Version: 0.0.118
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.117
3
+ Version: 0.0.118
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
@@ -138,6 +138,7 @@ uncountable/integration/queue_runner/worker.py
138
138
  uncountable/integration/queue_runner/command_server/__init__.py
139
139
  uncountable/integration/queue_runner/command_server/command_client.py
140
140
  uncountable/integration/queue_runner/command_server/command_server.py
141
+ uncountable/integration/queue_runner/command_server/constants.py
141
142
  uncountable/integration/queue_runner/command_server/types.py
142
143
  uncountable/integration/queue_runner/command_server/protocol/__init__.py
143
144
  uncountable/integration/queue_runner/command_server/protocol/command_server.proto
@@ -1,5 +1,5 @@
1
1
  docs-setup-python:
2
- curl -LsSf https://astral.sh/uv/0.7.1/install.sh | sh
2
+ curl -LsSf https://astral.sh/uv/0.8.4/install.sh | sh
3
3
  uv pip install -r requirements.txt
4
4
 
5
5
  docs-clean:
@@ -1,7 +1,17 @@
1
+ import time
1
2
  from dataclasses import dataclass
3
+ from decimal import Decimal
2
4
 
3
5
  from uncountable.integration.job import JobArguments, WebhookJob, register_job
4
- from uncountable.types import base_t, entity_t, job_definition_t
6
+ from uncountable.types import (
7
+ base_t,
8
+ entity_t,
9
+ identifier_t,
10
+ integrations_t,
11
+ job_definition_t,
12
+ publish_realtime_data_t,
13
+ )
14
+ from uncountable.types.client_base import APIRequest
5
15
 
6
16
 
7
17
  @dataclass(kw_only=True)
@@ -31,6 +41,28 @@ class InstrumentExample(WebhookJob[InstrumentPayload]):
31
41
 
32
42
  args.logger.log_info(f"Instrument ID: {instrument_id}")
33
43
 
44
+ for i in range(10):
45
+ req_args = publish_realtime_data_t.Arguments(
46
+ data_package=integrations_t.DataPackageNumericReading(
47
+ value=Decimal(i * 15),
48
+ target_entity=entity_t.EntityIdentifier(
49
+ identifier_key=identifier_t.IdentifierKeyId(
50
+ id=payload.equipment_id
51
+ ),
52
+ type=entity_t.EntityType.EQUIPMENT,
53
+ ),
54
+ ),
55
+ )
56
+ api_request = APIRequest(
57
+ method=publish_realtime_data_t.ENDPOINT_METHOD,
58
+ endpoint=publish_realtime_data_t.ENDPOINT_PATH,
59
+ args=req_args,
60
+ )
61
+ args.client.do_request(
62
+ api_request=api_request, return_type=publish_realtime_data_t.Data
63
+ )
64
+ time.sleep(0.75)
65
+
34
66
  return job_definition_t.JobResult(success=True)
35
67
 
36
68
  @property
@@ -9,7 +9,7 @@ dependencies = [
9
9
  "ruff == 0.*",
10
10
  "openpyxl == 3.*",
11
11
  "more_itertools == 10.*",
12
- "types-paramiko ==3.5.0.20240918",
12
+ "types-paramiko ==3.5.0.20250708",
13
13
  "types-openpyxl == 3.*",
14
14
  "types-pysftp == 0.*",
15
15
  "types-pytz ==2025.*",
@@ -7,6 +7,7 @@ from .argument_parser import ParserFunction as ParserFunction
7
7
  from .argument_parser import ParserOptions as ParserOptions
8
8
  from .argument_parser import SourceEncoding as SourceEncoding
9
9
  from .argument_parser import build_parser as build_parser
10
+ from .argument_parser import is_missing as is_missing
10
11
  from .argument_parser import is_optional as is_optional
11
12
  from .argument_parser import is_union as is_union
12
13
  from .case_convert import camel_to_snake_case as camel_to_snake_case
@@ -223,7 +223,7 @@ def _build_parser_inner(
223
223
  )
224
224
 
225
225
  if dataclasses.is_dataclass(parsed_type):
226
- return _build_parser_dataclass(parsed_type, context) # type: ignore[arg-type]
226
+ return _build_parser_dataclass(parsed_type, context)
227
227
 
228
228
  # namedtuple support
229
229
  if is_namedtuple_type(parsed_type):
@@ -244,7 +244,7 @@ def _build_parser_inner(
244
244
  })
245
245
 
246
246
  if parsed_type == type(None): # noqa: E721
247
- return lambda value: _invoke_membership_parser({None}, value) # type: ignore
247
+ return lambda value: _invoke_membership_parser({None}, value)
248
248
 
249
249
  origin = typing.get_origin(parsed_type)
250
250
  if origin is tuple:
@@ -271,7 +271,7 @@ def _build_parser_inner(
271
271
  arg_parsers = [_build_parser_inner(arg, context) for arg in sorted_args]
272
272
  return lambda value: _invoke_fallback_parsers(parsed_type, arg_parsers, value)
273
273
 
274
- if parsed_type is typing.Any: # type: ignore[comparison-overlap]
274
+ if parsed_type is typing.Any:
275
275
  return lambda value: value
276
276
 
277
277
  if origin in (list, set):
@@ -745,6 +745,8 @@ class SpecTypeDefnStringEnum(SpecTypeDefn):
745
745
  builder.ensure(
746
746
  isinstance(enum_value, str), "enum value should be string"
747
747
  )
748
+ assert isinstance(enum_value, str)
749
+
748
750
  deprecated = value.get("deprecated", False)
749
751
  builder.ensure(
750
752
  isinstance(deprecated, bool),
@@ -279,7 +279,12 @@ def _emit_stability_level(
279
279
  case EmitOpenAPIStabilityLevel.draft:
280
280
  stability_info["x-beta"] = True
281
281
  case EmitOpenAPIStabilityLevel.beta:
282
- stability_info["x-badges"] = [{"name": "Beta", "color": "DarkOrange"}]
282
+ stability_info["x-badges"] = [
283
+ {
284
+ "name": "Beta",
285
+ "color": "DarkOrange",
286
+ }
287
+ ]
283
288
  case EmitOpenAPIStabilityLevel.stable:
284
289
  pass
285
290
  case _:
@@ -334,18 +339,57 @@ def _emit_endpoint_response_examples(
334
339
  return {"examples": response_examples}
335
340
 
336
341
 
342
+ def _create_warning_banner(api_type: str, message: str) -> str:
343
+ return (
344
+ f'<div style="background-color: #fff3cd; border: 1px solid #ffeaa7; '
345
+ f'border-radius: 4px; padding: 12px; margin-bottom: 16px;">'
346
+ f"<strong>⚠️ {api_type} API:</strong> {message}"
347
+ f"</div>"
348
+ )
349
+
350
+
351
+ def _get_stability_warning(
352
+ stability_level: EmitOpenAPIStabilityLevel | None,
353
+ ) -> str:
354
+ resolved_stability_level = (
355
+ stability_level
356
+ if stability_level is not None
357
+ else EmitOpenAPIStabilityLevel.stable
358
+ )
359
+
360
+ match resolved_stability_level:
361
+ case EmitOpenAPIStabilityLevel.draft:
362
+ return _create_warning_banner(
363
+ "Draft",
364
+ "This endpoint is in draft status and may change significantly. Not recommended for production use.",
365
+ )
366
+ case EmitOpenAPIStabilityLevel.beta:
367
+ return _create_warning_banner(
368
+ "Beta",
369
+ "This endpoint is in beta and its required parameters may change. Use with caution in production environments.",
370
+ )
371
+ case EmitOpenAPIStabilityLevel.stable:
372
+ return ""
373
+
374
+
337
375
  def _emit_endpoint_description(
338
- description: str, guides: list[EmitOpenAPIGuide]
376
+ description: str,
377
+ guides: list[EmitOpenAPIGuide],
378
+ stability_level: EmitOpenAPIStabilityLevel | None = None,
339
379
  ) -> dict[str, str]:
380
+ stability_warning = _get_stability_warning(stability_level)
381
+
340
382
  full_guides = "<br/>".join([
341
383
  _write_guide_as_html(guide, is_open=False)
342
384
  for guide in sorted(guides, key=lambda g: g.ref_name)
343
385
  ])
344
- return {
345
- "description": description
346
- if len(guides) == 0
347
- else f"{description}<br/>{full_guides}"
348
- }
386
+
387
+ full_description_parts = [
388
+ part for part in [stability_warning, description, full_guides] if part
389
+ ]
390
+ full_description = "<br/>".join(full_description_parts)
391
+
392
+ return {"description": full_description}
349
393
 
350
394
 
351
395
  def _emit_namespace(
@@ -381,7 +425,9 @@ def _emit_namespace(
381
425
  "summary": endpoint.summary,
382
426
  }
383
427
  | _emit_endpoint_deprecated(endpoint.deprecated)
384
- | _emit_endpoint_description(endpoint.description, ctx.endpoint.guides)
428
+ | _emit_endpoint_description(
429
+ endpoint.description, ctx.endpoint.guides, endpoint.stability_level
430
+ )
385
431
  | _emit_stability_level(endpoint.stability_level)
386
432
  | _emit_endpoint_parameters(endpoint, argument_type, ctx.endpoint.examples)
387
433
  | _emit_endpoint_request_body(
@@ -75,9 +75,14 @@ def _emit_function_wrapper(function: value_spec_t.Function) -> str:
75
75
  ):
76
76
  python_type += " | None"
77
77
  any_pass_null = True
78
+
79
+ if python_type.startswith("base_t.ExtJsonValue"):
80
+ return_statement = f"self._extract({index})"
81
+ else:
82
+ return_statement = f"cast({python_type}, self._extract({index}))"
78
83
  out.write(
79
84
  f"""{INDENT}def get_{argument.ref_name}(self) -> {python_type}:
80
- {INDENT}{INDENT}return cast({python_type}, self._extract({index}))
85
+ {INDENT}{INDENT}return {return_statement}
81
86
  """
82
87
  )
83
88
  out.write("\n")
@@ -0,0 +1,106 @@
1
+ import argparse
2
+
3
+ from dateutil import tz
4
+ from opentelemetry.trace import get_current_span
5
+ from tabulate import tabulate
6
+
7
+ from uncountable.core.environment import get_local_admin_server_port
8
+ from uncountable.integration.queue_runner.command_server.command_client import (
9
+ send_job_queue_message,
10
+ send_list_queued_jobs_message,
11
+ )
12
+ from uncountable.integration.telemetry import Logger
13
+ from uncountable.types import queued_job_t
14
+
15
+
16
+ def register_enqueue_job_parser(
17
+ sub_parser_manager: argparse._SubParsersAction,
18
+ ) -> None:
19
+ run_parser = sub_parser_manager.add_parser(
20
+ "run",
21
+ description="Process a job with a given command and job ID.",
22
+ )
23
+ run_parser.add_argument("job_id", type=str, help="The ID of the job to process")
24
+
25
+ def _handle_enqueue_job(args: argparse.Namespace) -> None:
26
+ send_job_queue_message(
27
+ job_ref_name=args.job_id,
28
+ payload=queued_job_t.QueuedJobPayload(
29
+ invocation_context=queued_job_t.InvocationContextManual()
30
+ ),
31
+ host=args.host,
32
+ port=get_local_admin_server_port(),
33
+ )
34
+
35
+ run_parser.set_defaults(func=_handle_enqueue_job)
36
+
37
+
38
+ def register_list_queued_jobs(
39
+ sub_parser_manager: argparse._SubParsersAction,
40
+ ) -> None:
41
+ list_queued_jobs_parser = sub_parser_manager.add_parser(
42
+ "list-queued-jobs", description="List jobs queued on the integration server."
43
+ )
44
+
45
+ list_queued_jobs_parser.add_argument(
46
+ "--offset",
47
+ type=int,
48
+ default=0,
49
+ help="Number of jobs to skip. Should be non-negative.",
50
+ )
51
+ list_queued_jobs_parser.add_argument(
52
+ "--limit",
53
+ type=int,
54
+ default=100,
55
+ help="A number between 1 and 100 specifying the number of jobs to return in the result set.",
56
+ )
57
+
58
+ def _handle_list_queued_jobs(args: argparse.Namespace) -> None:
59
+ queued_jobs = send_list_queued_jobs_message(
60
+ offset=args.offset,
61
+ limit=args.limit,
62
+ host=args.host,
63
+ port=get_local_admin_server_port(),
64
+ )
65
+
66
+ headers = ["UUID", "Job Ref Name", "Attempts", "Submitted At"]
67
+ rows = [
68
+ [
69
+ job.uuid,
70
+ job.job_ref_name,
71
+ job.num_attempts,
72
+ job.submitted_at.ToDatetime(tz.UTC).astimezone(tz.tzlocal()),
73
+ ]
74
+ for job in queued_jobs
75
+ ]
76
+ print(tabulate(rows, headers=headers, tablefmt="grid"))
77
+
78
+ list_queued_jobs_parser.set_defaults(func=_handle_list_queued_jobs)
79
+
80
+
81
+ def main() -> None:
82
+ logger = Logger(get_current_span())
83
+
84
+ parser = argparse.ArgumentParser(
85
+ description="Execute a given integrations server command."
86
+ )
87
+
88
+ parser.add_argument(
89
+ "--host", type=str, default="localhost", nargs="?", help="The host to run on"
90
+ )
91
+
92
+ subparser_action = parser.add_subparsers(
93
+ dest="command",
94
+ required=True,
95
+ help="The command to execute (e.g., 'run')",
96
+ )
97
+
98
+ register_enqueue_job_parser(subparser_action)
99
+ register_list_queued_jobs(subparser_action)
100
+
101
+ args = parser.parse_args()
102
+ with logger.push_scope(args.command):
103
+ args.func(args)
104
+
105
+
106
+ main()
@@ -10,6 +10,8 @@ from uncountable.integration.queue_runner.command_server.protocol.command_server
10
10
  CheckHealthResult,
11
11
  EnqueueJobRequest,
12
12
  EnqueueJobResult,
13
+ ListQueuedJobsRequest,
14
+ ListQueuedJobsResult,
13
15
  )
14
16
  from uncountable.integration.queue_runner.command_server.types import (
15
17
  CommandServerBadResponse,
@@ -66,3 +68,27 @@ def check_health(*, host: str = _LOCAL_RPC_HOST, port: int) -> bool:
66
68
  assert isinstance(response, CheckHealthResult)
67
69
 
68
70
  return response.success
71
+
72
+
73
+ def send_list_queued_jobs_message(
74
+ *,
75
+ offset: int,
76
+ limit: int,
77
+ host: str = "localhost",
78
+ port: int,
79
+ ) -> list[ListQueuedJobsResult.ListQueuedJobsResultItem]:
80
+ with command_server_connection(host=host, port=port) as stub:
81
+ request = ListQueuedJobsRequest(
82
+ offset=offset,
83
+ limit=limit,
84
+ )
85
+
86
+ try:
87
+ response = stub.ListQueuedJobs(
88
+ request, timeout=_DEFAULT_MESSAGE_TIMEOUT_SECS
89
+ )
90
+ except grpc.RpcError as e:
91
+ raise ValueError(e.details()) # type: ignore
92
+
93
+ assert isinstance(response, ListQueuedJobsResult)
94
+ return list(response.queued_jobs)
@@ -1,7 +1,8 @@
1
1
  import asyncio
2
2
 
3
3
  import simplejson as json
4
- from grpc import aio
4
+ from google.protobuf.timestamp_pb2 import Timestamp
5
+ from grpc import StatusCode, aio
5
6
 
6
7
  from pkgs.argument_parser import CachedParser
7
8
  from uncountable.core.environment import get_local_admin_server_port
@@ -10,14 +11,18 @@ from uncountable.integration.queue_runner.command_server.protocol.command_server
10
11
  CheckHealthResult,
11
12
  EnqueueJobRequest,
12
13
  EnqueueJobResult,
14
+ ListQueuedJobsRequest,
15
+ ListQueuedJobsResult,
13
16
  )
14
17
  from uncountable.integration.queue_runner.command_server.types import (
15
18
  CommandEnqueueJob,
16
19
  CommandEnqueueJobResponse,
17
20
  CommandQueue,
18
21
  )
22
+ from uncountable.integration.queue_runner.datastore import DatastoreSqlite
19
23
  from uncountable.types import queued_job_t
20
24
 
25
+ from .constants import ListQueuedJobsConstants
21
26
  from .protocol.command_server_pb2_grpc import (
22
27
  CommandServerServicer,
23
28
  add_CommandServerServicer_to_server,
@@ -26,7 +31,7 @@ from .protocol.command_server_pb2_grpc import (
26
31
  queued_job_payload_parser = CachedParser(queued_job_t.QueuedJobPayload)
27
32
 
28
33
 
29
- async def serve(command_queue: CommandQueue) -> None:
34
+ async def serve(command_queue: CommandQueue, datastore: DatastoreSqlite) -> None:
30
35
  server = aio.server()
31
36
 
32
37
  class CommandServerHandler(CommandServerServicer):
@@ -54,6 +59,41 @@ async def serve(command_queue: CommandQueue) -> None:
54
59
  ) -> CheckHealthResult:
55
60
  return CheckHealthResult(success=True)
56
61
 
62
+ async def ListQueuedJobs(
63
+ self, request: ListQueuedJobsRequest, context: aio.ServicerContext
64
+ ) -> ListQueuedJobsResult:
65
+ if (
66
+ request.limit < ListQueuedJobsConstants.LIMIT_MIN
67
+ or request.limit > ListQueuedJobsConstants.LIMIT_MAX
68
+ ):
69
+ await context.abort(
70
+ StatusCode.INVALID_ARGUMENT, "Limit must be between 1 and 100."
71
+ )
72
+
73
+ if request.offset < ListQueuedJobsConstants.OFFSET_MIN:
74
+ await context.abort(
75
+ StatusCode.INVALID_ARGUMENT, "Offset cannot be negative."
76
+ )
77
+
78
+ queued_job_metadata = datastore.list_queued_job_metadata(
79
+ offset=request.offset, limit=request.limit
80
+ )
81
+
82
+ response_list: list[ListQueuedJobsResult.ListQueuedJobsResultItem] = []
83
+ for item in queued_job_metadata:
84
+ proto_timestamp = Timestamp()
85
+ proto_timestamp.FromDatetime(item.submitted_at)
86
+
87
+ response_list.append(
88
+ ListQueuedJobsResult.ListQueuedJobsResultItem(
89
+ uuid=item.queued_job_uuid,
90
+ job_ref_name=item.job_ref_name,
91
+ num_attempts=item.num_attempts,
92
+ submitted_at=proto_timestamp,
93
+ )
94
+ )
95
+ return ListQueuedJobsResult(queued_jobs=response_list)
96
+
57
97
  add_CommandServerServicer_to_server(CommandServerHandler(), server)
58
98
 
59
99
  listen_addr = f"[::]:{get_local_admin_server_port()}"
@@ -0,0 +1,4 @@
1
+ class ListQueuedJobsConstants:
2
+ LIMIT_MIN = 1
3
+ LIMIT_MAX = 100
4
+ OFFSET_MIN = 0
@@ -1,8 +1,10 @@
1
1
  syntax = "proto3";
2
+ import "google/protobuf/timestamp.proto";
2
3
 
3
4
  service CommandServer {
4
5
  rpc EnqueueJob(EnqueueJobRequest) returns (EnqueueJobResult) {}
5
6
  rpc CheckHealth(CheckHealthRequest) returns (CheckHealthResult) {}
7
+ rpc ListQueuedJobs(ListQueuedJobsRequest) returns (ListQueuedJobsResult) {}
6
8
  }
7
9
 
8
10
  message EnqueueJobRequest {
@@ -20,3 +22,19 @@ message CheckHealthRequest {}
20
22
  message CheckHealthResult {
21
23
  bool success = 1;
22
24
  }
25
+
26
+ message ListQueuedJobsRequest {
27
+ uint32 offset = 1;
28
+ uint32 limit = 2;
29
+ }
30
+
31
+ message ListQueuedJobsResult {
32
+ message ListQueuedJobsResultItem {
33
+ string uuid = 1;
34
+ string job_ref_name = 2;
35
+ int64 num_attempts = 3;
36
+ google.protobuf.Timestamp submitted_at = 4;
37
+ }
38
+
39
+ repeated ListQueuedJobsResultItem queued_jobs = 1;
40
+ }
@@ -0,0 +1,49 @@
1
+ # ruff: noqa
2
+ # -*- coding: utf-8 -*-
3
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
4
+ # source: uncountable/integration/queue_runner/command_server/protocol/command_server.proto
5
+ # Protobuf Python Version: 4.25.1
6
+ """Generated protocol buffer code."""
7
+
8
+ from google.protobuf import descriptor as _descriptor
9
+ from google.protobuf import descriptor_pool as _descriptor_pool
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ # @@protoc_insertion_point(imports)
13
+
14
+ _sym_db = _symbol_database.Default()
15
+
16
+
17
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
18
+
19
+
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
21
+ b'\nQuncountable/integration/queue_runner/command_server/protocol/command_server.proto\x1a\x1fgoogle/protobuf/timestamp.proto"E\n\x11\x45nqueueJobRequest\x12\x14\n\x0cjob_ref_name\x18\x01 \x01(\t\x12\x1a\n\x12serialized_payload\x18\x02 \x01(\t"H\n\x10\x45nqueueJobResult\x12\x1b\n\x13successfully_queued\x18\x01 \x01(\x08\x12\x17\n\x0fqueued_job_uuid\x18\x02 \x01(\t"\x14\n\x12\x43heckHealthRequest"$\n\x11\x43heckHealthResult\x12\x0f\n\x07success\x18\x01 \x01(\x08"6\n\x15ListQueuedJobsRequest\x12\x0e\n\x06offset\x18\x01 \x01(\r\x12\r\n\x05limit\x18\x02 \x01(\r"\xe4\x01\n\x14ListQueuedJobsResult\x12\x43\n\x0bqueued_jobs\x18\x01 \x03(\x0b\x32..ListQueuedJobsResult.ListQueuedJobsResultItem\x1a\x86\x01\n\x18ListQueuedJobsResultItem\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x14\n\x0cjob_ref_name\x18\x02 \x01(\t\x12\x14\n\x0cnum_attempts\x18\x03 \x01(\x03\x12\x30\n\x0csubmitted_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp2\xc3\x01\n\rCommandServer\x12\x35\n\nEnqueueJob\x12\x12.EnqueueJobRequest\x1a\x11.EnqueueJobResult"\x00\x12\x38\n\x0b\x43heckHealth\x12\x13.CheckHealthRequest\x1a\x12.CheckHealthResult"\x00\x12\x41\n\x0eListQueuedJobs\x12\x16.ListQueuedJobsRequest\x1a\x15.ListQueuedJobsResult"\x00\x62\x06proto3'
22
+ )
23
+
24
+ _globals = globals()
25
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
+ _builder.BuildTopDescriptorsAndMessages(
27
+ DESCRIPTOR,
28
+ "uncountable.integration.queue_runner.command_server.protocol.command_server_pb2",
29
+ _globals,
30
+ )
31
+ if _descriptor._USE_C_DESCRIPTORS == False:
32
+ DESCRIPTOR._options = None
33
+ _globals["_ENQUEUEJOBREQUEST"]._serialized_start = 118
34
+ _globals["_ENQUEUEJOBREQUEST"]._serialized_end = 187
35
+ _globals["_ENQUEUEJOBRESULT"]._serialized_start = 189
36
+ _globals["_ENQUEUEJOBRESULT"]._serialized_end = 261
37
+ _globals["_CHECKHEALTHREQUEST"]._serialized_start = 263
38
+ _globals["_CHECKHEALTHREQUEST"]._serialized_end = 283
39
+ _globals["_CHECKHEALTHRESULT"]._serialized_start = 285
40
+ _globals["_CHECKHEALTHRESULT"]._serialized_end = 321
41
+ _globals["_LISTQUEUEDJOBSREQUEST"]._serialized_start = 323
42
+ _globals["_LISTQUEUEDJOBSREQUEST"]._serialized_end = 377
43
+ _globals["_LISTQUEUEDJOBSRESULT"]._serialized_start = 380
44
+ _globals["_LISTQUEUEDJOBSRESULT"]._serialized_end = 608
45
+ _globals["_LISTQUEUEDJOBSRESULT_LISTQUEUEDJOBSRESULTITEM"]._serialized_start = 474
46
+ _globals["_LISTQUEUEDJOBSRESULT_LISTQUEUEDJOBSRESULTITEM"]._serialized_end = 608
47
+ _globals["_COMMANDSERVER"]._serialized_start = 611
48
+ _globals["_COMMANDSERVER"]._serialized_end = 806
49
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,87 @@
1
+ # ruff: noqa
2
+ from google.protobuf import timestamp_pb2 as _timestamp_pb2
3
+ from google.protobuf.internal import containers as _containers
4
+ from google.protobuf import descriptor as _descriptor
5
+ from google.protobuf import message as _message
6
+ from typing import (
7
+ ClassVar as _ClassVar,
8
+ Iterable as _Iterable,
9
+ Mapping as _Mapping,
10
+ Optional as _Optional,
11
+ Union as _Union,
12
+ )
13
+
14
+ DESCRIPTOR: _descriptor.FileDescriptor
15
+
16
+ class EnqueueJobRequest(_message.Message):
17
+ __slots__ = ("job_ref_name", "serialized_payload")
18
+ JOB_REF_NAME_FIELD_NUMBER: _ClassVar[int]
19
+ SERIALIZED_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
20
+ job_ref_name: str
21
+ serialized_payload: str
22
+ def __init__(
23
+ self,
24
+ job_ref_name: _Optional[str] = ...,
25
+ serialized_payload: _Optional[str] = ...,
26
+ ) -> None: ...
27
+
28
+ class EnqueueJobResult(_message.Message):
29
+ __slots__ = ("successfully_queued", "queued_job_uuid")
30
+ SUCCESSFULLY_QUEUED_FIELD_NUMBER: _ClassVar[int]
31
+ QUEUED_JOB_UUID_FIELD_NUMBER: _ClassVar[int]
32
+ successfully_queued: bool
33
+ queued_job_uuid: str
34
+ def __init__(
35
+ self, successfully_queued: bool = ..., queued_job_uuid: _Optional[str] = ...
36
+ ) -> None: ...
37
+
38
+ class CheckHealthRequest(_message.Message):
39
+ __slots__ = ()
40
+ def __init__(self) -> None: ...
41
+
42
+ class CheckHealthResult(_message.Message):
43
+ __slots__ = ("success",)
44
+ SUCCESS_FIELD_NUMBER: _ClassVar[int]
45
+ success: bool
46
+ def __init__(self, success: bool = ...) -> None: ...
47
+
48
+ class ListQueuedJobsRequest(_message.Message):
49
+ __slots__ = ("offset", "limit")
50
+ OFFSET_FIELD_NUMBER: _ClassVar[int]
51
+ LIMIT_FIELD_NUMBER: _ClassVar[int]
52
+ offset: int
53
+ limit: int
54
+ def __init__(
55
+ self, offset: _Optional[int] = ..., limit: _Optional[int] = ...
56
+ ) -> None: ...
57
+
58
+ class ListQueuedJobsResult(_message.Message):
59
+ __slots__ = ("queued_jobs",)
60
+ class ListQueuedJobsResultItem(_message.Message):
61
+ __slots__ = ("uuid", "job_ref_name", "num_attempts", "submitted_at")
62
+ UUID_FIELD_NUMBER: _ClassVar[int]
63
+ JOB_REF_NAME_FIELD_NUMBER: _ClassVar[int]
64
+ NUM_ATTEMPTS_FIELD_NUMBER: _ClassVar[int]
65
+ SUBMITTED_AT_FIELD_NUMBER: _ClassVar[int]
66
+ uuid: str
67
+ job_ref_name: str
68
+ num_attempts: int
69
+ submitted_at: _timestamp_pb2.Timestamp
70
+ def __init__(
71
+ self,
72
+ uuid: _Optional[str] = ...,
73
+ job_ref_name: _Optional[str] = ...,
74
+ num_attempts: _Optional[int] = ...,
75
+ submitted_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...,
76
+ ) -> None: ...
77
+
78
+ QUEUED_JOBS_FIELD_NUMBER: _ClassVar[int]
79
+ queued_jobs: _containers.RepeatedCompositeFieldContainer[
80
+ ListQueuedJobsResult.ListQueuedJobsResultItem
81
+ ]
82
+ def __init__(
83
+ self,
84
+ queued_jobs: _Optional[
85
+ _Iterable[_Union[ListQueuedJobsResult.ListQueuedJobsResultItem, _Mapping]]
86
+ ] = ...,
87
+ ) -> None: ...