UncountablePythonSDK 0.0.179__tar.gz → 0.0.180__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 (442) hide show
  1. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/.github/workflows/documentation.yml +1 -1
  2. {uncountablepythonsdk-0.0.179/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.180}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  4. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/UncountablePythonSDK.egg-info/SOURCES.txt +8 -0
  5. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_http.py +6 -6
  6. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_instrument.py +3 -4
  7. uncountablepythonsdk-0.0.180/examples/integration-server/pyproject.toml +223 -0
  8. uncountablepythonsdk-0.0.180/examples/stream_dataset_measurements.py +196 -0
  9. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/__init__.py +7 -1
  10. uncountablepythonsdk-0.0.180/pkgs/argument_parser/cached_parser.py +123 -0
  11. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_inner.py +8 -1
  12. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/__init__.py +2 -2
  13. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_blob_session.py +5 -5
  14. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_file_share_session.py +5 -5
  15. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_gdrive_session.py +8 -8
  16. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_local_session.py +4 -4
  17. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_s3_session.py +4 -4
  18. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_sftp_session.py +4 -4
  19. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/file_type_utils.py +1 -1
  20. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/__init__.py +1 -0
  21. uncountablepythonsdk-0.0.180/pkgs/serialization/usage.py +17 -0
  22. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/yaml.py +2 -1
  23. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization_util/__init__.py +2 -0
  24. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization_util/convert_to_snakecase.py +9 -1
  25. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization_util/dataclasses.py +2 -1
  26. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/actions_registry/__main__.py +1 -1
  27. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/builder.py +145 -14
  28. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/config.py +2 -2
  29. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/cross_output_links.py +1 -2
  30. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/emit_io_ts.py +3 -0
  31. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/emit_open_api.py +57 -52
  32. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/emit_python.py +30 -20
  33. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/emit_typescript_util.py +18 -5
  34. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/load_types.py +9 -2
  35. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/parts/base.ts.prepart +7 -0
  36. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/type_info/emit_type_info.py +14 -5
  37. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +6 -6
  38. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/util.py +1 -2
  39. uncountablepythonsdk-0.0.180/pkgs/type_spec/value_spec/__init__.py +6 -0
  40. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/value_spec/__main__.py +8 -7
  41. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/client.py +1 -2
  42. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/file_upload.py +2 -1
  43. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/query/builder.py +8 -4
  44. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/cli.py +1 -1
  45. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/db/connect.py +4 -0
  46. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/db/session.py +1 -1
  47. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/executors/generic_upload_executor.py +4 -2
  48. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/executors/script_executor.py +2 -1
  49. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/command_client.py +8 -8
  50. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/command_server.py +3 -6
  51. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/__init__.py +1 -0
  52. uncountablepythonsdk-0.0.180/uncountable/integration/queue_runner/job_process.py +78 -0
  53. uncountablepythonsdk-0.0.179/uncountable/integration/queue_runner/worker.py → uncountablepythonsdk-0.0.180/uncountable/integration/queue_runner/job_runner.py +19 -48
  54. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/job_scheduler.py +20 -3
  55. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/queue_runner.py +9 -2
  56. uncountablepythonsdk-0.0.180/uncountable/integration/queue_runner/worker.py +48 -0
  57. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/scheduler.py +41 -19
  58. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/secret_retrieval/basic_secret.py +1 -2
  59. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/server.py +8 -1
  60. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/telemetry.py +3 -3
  61. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/__init__.py +4 -0
  62. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/condition_parameters/upsert_condition_match.py +1 -1
  63. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/notebooks/get_notebook_content.py +2 -1
  64. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_recipes_data.py +1 -0
  65. uncountablepythonsdk-0.0.180/uncountable/types/api/time_series/ingest_dataset_measurements.py +45 -0
  66. uncountablepythonsdk-0.0.180/uncountable/types/api/user/__init__.py +1 -0
  67. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/async_batch_processor.py +39 -1
  68. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/async_batch_t.py +1 -0
  69. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/client_base.py +1 -1
  70. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/curves_t.py +4 -2
  71. uncountablepythonsdk-0.0.180/uncountable/types/dataset_measurements.py +10 -0
  72. uncountablepythonsdk-0.0.180/uncountable/types/dataset_measurements_t.py +60 -0
  73. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/entity_t.py +16 -0
  74. uncountablepythonsdk-0.0.179/examples/integration-server/pyproject.toml +0 -223
  75. uncountablepythonsdk-0.0.179/pkgs/argument_parser/cached_parser.py +0 -56
  76. uncountablepythonsdk-0.0.179/pkgs/type_spec/value_spec/__init__.py +0 -1
  77. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/.github/workflows/publish.yml +0 -0
  78. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/.gitignore +0 -0
  79. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/README.md +0 -0
  80. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  81. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  82. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  83. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/.flowmarkignore +0 -0
  84. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/.gitignore +0 -0
  85. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/conf.py +0 -0
  86. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/index.md +0 -0
  87. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/integration_examples/add_file_to_folder.md +0 -0
  88. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/integration_examples/create_ingredient.md +0 -0
  89. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/integration_examples/create_output.md +0 -0
  90. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/integration_examples/index.md +0 -0
  91. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/integration_examples/upload_file.md +0 -0
  92. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/justfile +0 -0
  93. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/requirements.txt +0 -0
  94. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/android-chrome-192x192.png +0 -0
  95. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/android-chrome-512x512.png +0 -0
  96. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/apple-touch-icon.png +0 -0
  97. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/browserconfig.xml +0 -0
  98. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/favicon-16x16.png +0 -0
  99. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/favicon-32x32.png +0 -0
  100. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/manifest.json +0 -0
  101. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/mstile-150x150.png +0 -0
  102. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  103. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/docs/static/logo_blue.png +0 -0
  104. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/async_batch.py +0 -0
  105. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/async_batch_large_parse.py +0 -0
  106. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/basic_auth.py +0 -0
  107. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/create_entity.py +0 -0
  108. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/create_ingredient_sdk.py +0 -0
  109. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/download_files.py +0 -0
  110. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/edit_recipe_inputs.py +0 -0
  111. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  112. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  113. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  114. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  115. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  116. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  117. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  118. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/invoke_uploader.py +0 -0
  119. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/oauth.py +0 -0
  120. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/set_input_pdf_attribute.py +0 -0
  121. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/set_recipe_metadata_file.py +0 -0
  122. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/set_recipe_output_file_sdk.py +0 -0
  123. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/examples/upload_files.py +0 -0
  124. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/__init__.py +0 -0
  125. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/case_convert.py +0 -0
  126. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_base.py +0 -0
  127. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_builder.py +0 -0
  128. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_cache.py +0 -0
  129. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_error.py +0 -0
  130. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_function_type.py +0 -0
  131. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/parser_options.py +0 -0
  132. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/argument_parser/type_predicates.py +0 -0
  133. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
  134. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  135. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/py.typed +0 -0
  136. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/annotation.py +0 -0
  137. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/missing_sentry.py +0 -0
  138. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/opaque_key.py +0 -0
  139. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/serial_alias.py +0 -0
  140. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/serial_class.py +0 -0
  141. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/serial_generic.py +0 -0
  142. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/serial_union.py +0 -0
  143. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization/unknown.py +0 -0
  144. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  145. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/serialization_util/serialization_helpers.py +0 -0
  146. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/strenum_compat/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/strenum_compat/strenum_compat.py +0 -0
  148. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/__main__.py +0 -0
  150. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
  152. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  153. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/builder_types.py +0 -0
  154. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/emit_open_api_util.py +0 -0
  155. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/emit_typescript.py +0 -0
  156. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  157. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/open_api_util.py +0 -0
  158. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/parts/base.py.prepart +0 -0
  159. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/test.py +0 -0
  160. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/type_info/__main__.py +0 -0
  161. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  162. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  163. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  164. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pkgs/type_spec/value_spec/types.py +0 -0
  165. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/pyproject.toml +0 -0
  166. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/setup.cfg +0 -0
  167. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/__init__.py +0 -0
  168. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/async_batch.py +0 -0
  170. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/environment.py +0 -0
  171. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/query/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/query/column.py +0 -0
  173. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/query/row.py +0 -0
  174. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/query/types.py +0 -0
  175. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/core/types.py +0 -0
  176. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/__init__.py +0 -0
  177. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/construct_client.py +0 -0
  178. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/cron.py +0 -0
  179. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/db/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/entrypoint.py +0 -0
  181. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/executors/__init__.py +0 -0
  182. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/executors/executors.py +0 -0
  183. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/http_server/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/http_server/types.py +0 -0
  185. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/job.py +0 -0
  186. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/__init__.py +0 -0
  187. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  188. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  189. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  191. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  192. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  193. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  194. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
  195. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  196. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
  197. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +0 -0
  198. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  199. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
  200. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  201. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  202. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/queue_runner/types.py +0 -0
  203. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/request_context.py +0 -0
  204. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/scan_profiles.py +0 -0
  205. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  206. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  207. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  208. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/integration/webhook_signature_key.py +0 -0
  209. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/py.typed +0 -0
  210. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/__init__.py +0 -0
  211. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/batch/__init__.py +0 -0
  212. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/batch/execute_batch.py +0 -0
  213. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  214. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/chemical/__init__.py +0 -0
  215. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  216. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  217. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
  218. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/__init__.py +0 -0
  219. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/create_entities.py +0 -0
  220. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/create_entity.py +0 -0
  221. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
  222. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  223. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/export_entities.py +0 -0
  224. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/get_entities_data.py +0 -0
  225. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  226. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/list_aggregate.py +0 -0
  227. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/list_entities.py +0 -0
  228. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/lock_entity.py +0 -0
  229. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/lookup_entity.py +0 -0
  230. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  231. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/set_barcode.py +0 -0
  232. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
  233. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  234. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/set_values.py +0 -0
  235. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  236. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/entity/unlock_entity.py +0 -0
  237. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/equipment/__init__.py +0 -0
  238. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  239. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/field_options/__init__.py +0 -0
  240. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  241. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/file_folders/__init__.py +0 -0
  242. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  243. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  244. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/files/__init__.py +0 -0
  245. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/files/download_file.py +0 -0
  246. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/id_source/__init__.py +0 -0
  247. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/id_source/list_id_source.py +0 -0
  248. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/id_source/match_id_source.py +0 -0
  249. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/input_groups/__init__.py +0 -0
  250. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  251. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/__init__.py +0 -0
  252. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/create_inputs.py +0 -0
  253. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/get_input_data.py +0 -0
  254. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/get_input_names.py +0 -0
  255. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  256. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  257. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/set_input_category.py +0 -0
  258. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  259. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  260. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/integrations/__init__.py +0 -0
  261. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  262. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/integrations/push_notification.py +0 -0
  263. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  264. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/listing/__init__.py +0 -0
  265. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/listing/export_listing.py +0 -0
  266. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/listing/fetch_listing.py +0 -0
  267. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/material_families/__init__.py +0 -0
  268. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  269. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/notebooks/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  271. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/output_parameters/__init__.py +0 -0
  272. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  273. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/outputs/__init__.py +0 -0
  274. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/outputs/get_output_data.py +0 -0
  275. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/outputs/get_output_names.py +0 -0
  276. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  277. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  278. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  279. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/permissions/__init__.py +0 -0
  280. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  281. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  282. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/project/__init__.py +0 -0
  283. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/project/get_projects.py +0 -0
  284. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/project/get_projects_data.py +0 -0
  285. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipe_links/__init__.py +0 -0
  286. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  287. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
  288. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  289. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  290. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  291. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/__init__.py +0 -0
  292. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  293. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  294. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  295. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  296. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  297. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  298. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  299. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/create_recipe.py +0 -0
  300. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/create_recipes.py +0 -0
  301. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  302. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  303. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  304. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_curve.py +0 -0
  305. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  306. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  307. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  308. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  309. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  310. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  311. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  312. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  313. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  314. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  315. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  316. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  317. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  318. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  319. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  320. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  321. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  322. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/runsheet/__init__.py +0 -0
  323. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  324. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  325. {uncountablepythonsdk-0.0.179/uncountable/types/api/triggers → uncountablepythonsdk-0.0.180/uncountable/types/api/time_series}/__init__.py +0 -0
  326. {uncountablepythonsdk-0.0.179/uncountable/types/api/uploader → uncountablepythonsdk-0.0.180/uncountable/types/api/triggers}/__init__.py +0 -0
  327. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/triggers/run_trigger.py +0 -0
  328. {uncountablepythonsdk-0.0.179/uncountable/types/api/user → uncountablepythonsdk-0.0.180/uncountable/types/api/uploader}/__init__.py +0 -0
  329. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  330. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  331. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/api/user/get_current_user_info.py +0 -0
  332. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/async_batch.py +0 -0
  333. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/async_jobs.py +0 -0
  334. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/async_jobs_t.py +0 -0
  335. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/auth_retrieval.py +0 -0
  336. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/auth_retrieval_t.py +0 -0
  337. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/base.py +0 -0
  338. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/base_t.py +0 -0
  339. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/calculations.py +0 -0
  340. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/calculations_t.py +0 -0
  341. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/chemical_structure.py +0 -0
  342. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/chemical_structure_t.py +0 -0
  343. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/client_config.py +0 -0
  344. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/client_config_t.py +0 -0
  345. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/condition_match.py +0 -0
  346. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/condition_match_t.py +0 -0
  347. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/curves.py +0 -0
  348. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/data.py +0 -0
  349. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/data_t.py +0 -0
  350. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/entity.py +0 -0
  351. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/experiment_groups.py +0 -0
  352. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/experiment_groups_t.py +0 -0
  353. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/exports.py +0 -0
  354. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/exports_t.py +0 -0
  355. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/field_values.py +0 -0
  356. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/field_values_t.py +0 -0
  357. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/fields.py +0 -0
  358. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/fields_t.py +0 -0
  359. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/generic_upload.py +0 -0
  360. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/generic_upload_t.py +0 -0
  361. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/id_source.py +0 -0
  362. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/id_source_t.py +0 -0
  363. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/identifier.py +0 -0
  364. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/identifier_t.py +0 -0
  365. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/input_attributes.py +0 -0
  366. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/input_attributes_t.py +0 -0
  367. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/inputs.py +0 -0
  368. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/inputs_t.py +0 -0
  369. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/integration_server.py +0 -0
  370. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/integration_server_t.py +0 -0
  371. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/integration_session.py +0 -0
  372. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/integration_session_t.py +0 -0
  373. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/integrations.py +0 -0
  374. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/integrations_t.py +0 -0
  375. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/job_definition.py +0 -0
  376. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/job_definition_t.py +0 -0
  377. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/listing.py +0 -0
  378. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/listing_t.py +0 -0
  379. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/notices.py +0 -0
  380. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/notices_t.py +0 -0
  381. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/notifications.py +0 -0
  382. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/notifications_t.py +0 -0
  383. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/outputs.py +0 -0
  384. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/outputs_t.py +0 -0
  385. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/overrides.py +0 -0
  386. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/overrides_t.py +0 -0
  387. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/permissions.py +0 -0
  388. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/permissions_t.py +0 -0
  389. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/phases.py +0 -0
  390. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/phases_t.py +0 -0
  391. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/post_base.py +0 -0
  392. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/post_base_t.py +0 -0
  393. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/queued_job.py +0 -0
  394. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/queued_job_t.py +0 -0
  395. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_identifiers.py +0 -0
  396. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_identifiers_t.py +0 -0
  397. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_inputs.py +0 -0
  398. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_inputs_t.py +0 -0
  399. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_links.py +0 -0
  400. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_links_t.py +0 -0
  401. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_metadata.py +0 -0
  402. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_metadata_t.py +0 -0
  403. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_output_metadata.py +0 -0
  404. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_output_metadata_t.py +0 -0
  405. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_step_relationships.py +0 -0
  406. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_step_relationships_t.py +0 -0
  407. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_tags.py +0 -0
  408. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_tags_t.py +0 -0
  409. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_workflow_step_types.py +0 -0
  410. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  411. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_workflow_steps.py +0 -0
  412. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  413. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipes.py +0 -0
  414. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/recipes_t.py +0 -0
  415. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/request_headers.py +0 -0
  416. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/request_headers_t.py +0 -0
  417. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/response.py +0 -0
  418. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/response_t.py +0 -0
  419. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/runsheet.py +0 -0
  420. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/runsheet_format.py +0 -0
  421. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/runsheet_format_t.py +0 -0
  422. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/runsheet_t.py +0 -0
  423. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/secret_retrieval.py +0 -0
  424. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/secret_retrieval_t.py +0 -0
  425. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/sockets.py +0 -0
  426. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/sockets_t.py +0 -0
  427. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/specs.py +0 -0
  428. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/specs_t.py +0 -0
  429. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/step_relationships.py +0 -0
  430. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/step_relationships_t.py +0 -0
  431. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/units.py +0 -0
  432. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/units_t.py +0 -0
  433. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/uploader.py +0 -0
  434. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/uploader_t.py +0 -0
  435. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/users.py +0 -0
  436. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/users_t.py +0 -0
  437. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/webhook.py +0 -0
  438. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/webhook_job.py +0 -0
  439. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/webhook_job_t.py +0 -0
  440. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/webhook_t.py +0 -0
  441. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/workflows.py +0 -0
  442. {uncountablepythonsdk-0.0.179 → uncountablepythonsdk-0.0.180}/uncountable/types/workflows_t.py +0 -0
@@ -10,7 +10,7 @@ jobs:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
12
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
13
- - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
13
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
14
14
  - uses: extractions/setup-crate@0551596312d4008a6dfbc4d3c38fa20eaef46d2d # v2
15
15
  with:
16
16
  repo: casey/just@1.50.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.179
3
+ Version: 0.0.180
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.179
3
+ Version: 0.0.180
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
@@ -41,6 +41,7 @@ examples/oauth.py
41
41
  examples/set_input_pdf_attribute.py
42
42
  examples/set_recipe_metadata_file.py
43
43
  examples/set_recipe_output_file_sdk.py
44
+ examples/stream_dataset_measurements.py
44
45
  examples/upload_files.py
45
46
  examples/integration-server/pyproject.toml
46
47
  examples/integration-server/jobs/materials_auto/concurrent_cron.py
@@ -84,6 +85,7 @@ pkgs/serialization/serial_class.py
84
85
  pkgs/serialization/serial_generic.py
85
86
  pkgs/serialization/serial_union.py
86
87
  pkgs/serialization/unknown.py
88
+ pkgs/serialization/usage.py
87
89
  pkgs/serialization/yaml.py
88
90
  pkgs/serialization_util/__init__.py
89
91
  pkgs/serialization_util/_get_type_for_serialization.py
@@ -159,6 +161,8 @@ uncountable/integration/executors/script_executor.py
159
161
  uncountable/integration/http_server/__init__.py
160
162
  uncountable/integration/http_server/types.py
161
163
  uncountable/integration/queue_runner/__init__.py
164
+ uncountable/integration/queue_runner/job_process.py
165
+ uncountable/integration/queue_runner/job_runner.py
162
166
  uncountable/integration/queue_runner/job_scheduler.py
163
167
  uncountable/integration/queue_runner/queue_runner.py
164
168
  uncountable/integration/queue_runner/types.py
@@ -208,6 +212,8 @@ uncountable/types/curves.py
208
212
  uncountable/types/curves_t.py
209
213
  uncountable/types/data.py
210
214
  uncountable/types/data_t.py
215
+ uncountable/types/dataset_measurements.py
216
+ uncountable/types/dataset_measurements_t.py
211
217
  uncountable/types/entity.py
212
218
  uncountable/types/entity_t.py
213
219
  uncountable/types/experiment_groups.py
@@ -420,6 +426,8 @@ uncountable/types/api/recipes/upsert_step_relationships.py
420
426
  uncountable/types/api/runsheet/__init__.py
421
427
  uncountable/types/api/runsheet/complete_async_upload.py
422
428
  uncountable/types/api/runsheet/export_default_runsheet.py
429
+ uncountable/types/api/time_series/__init__.py
430
+ uncountable/types/api/time_series/ingest_dataset_measurements.py
423
431
  uncountable/types/api/triggers/__init__.py
424
432
  uncountable/types/api/triggers/run_trigger.py
425
433
  uncountable/types/api/uploader/__init__.py
@@ -23,9 +23,9 @@ class HttpExample(CustomHttpJob):
23
23
  @staticmethod
24
24
  def validate_request(
25
25
  *,
26
- request: GenericHttpRequest, # noqa: ARG004
27
- job_definition: job_definition_t.HttpJobDefinitionBase, # noqa: ARG004
28
- profile_meta: job_definition_t.ProfileMetadata, # noqa: ARG004
26
+ request: GenericHttpRequest, # ruff:ignore[unused-static-method-argument]
27
+ job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
28
+ profile_meta: job_definition_t.ProfileMetadata, # ruff:ignore[unused-static-method-argument]
29
29
  ) -> None:
30
30
  if (
31
31
  CustomHttpJob.get_validated_oauth_request_user_id(
@@ -40,8 +40,8 @@ class HttpExample(CustomHttpJob):
40
40
  @staticmethod
41
41
  def handle_request(
42
42
  *,
43
- request: GenericHttpRequest, # noqa: ARG004
44
- job_definition: job_definition_t.HttpJobDefinitionBase, # noqa: ARG004
45
- profile_meta: job_definition_t.ProfileMetadata, # noqa: ARG004
43
+ request: GenericHttpRequest, # ruff:ignore[unused-static-method-argument]
44
+ job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
45
+ profile_meta: job_definition_t.ProfileMetadata, # ruff:ignore[unused-static-method-argument]
46
46
  ) -> GenericHttpResponse:
47
47
  return GenericHttpResponse(response="OK", status_code=200)
@@ -84,10 +84,9 @@ class InstrumentExample(WebhookJob[InstrumentPayload]):
84
84
  num_users = len(message.user_ids)
85
85
  if num_users <= 1:
86
86
  break
87
- else:
88
- args.logger.log_info(
89
- f"Session still open, {num_users} users in room."
90
- )
87
+ args.logger.log_info(
88
+ f"Session still open, {num_users} users in room."
89
+ )
91
90
  case _:
92
91
  args.logger.log_info("Session still open...")
93
92
  continue
@@ -0,0 +1,223 @@
1
+ [project]
2
+ # begin_project_name
3
+ # DO NOT MODIFY
4
+ name = "integration-server-testing"
5
+ # end_project_name
6
+ dynamic = ["version"]
7
+ dependencies = [
8
+ "mypy >= 2.1.0, < 3",
9
+ "ruff == 0.*",
10
+ "openpyxl == 3.*",
11
+ "more_itertools ==11.*",
12
+ "types-paramiko ==5.0.0.20260617",
13
+ "types-openpyxl == 3.*",
14
+ "types-pytz ==2026.*",
15
+ "types-requests == 2.*",
16
+ "types-simplejson == 3.*",
17
+ "pandas-stubs",
18
+ "xlrd == 2.*",
19
+ "msgspec ==0.21.*",
20
+ "websockets==16.1.1",
21
+ ]
22
+
23
+ [tool.mypy]
24
+ strict = true
25
+ show_error_codes = true
26
+ check_untyped_defs = true
27
+ disallow_any_generics = false
28
+ disallow_incomplete_defs = true
29
+ disallow_subclassing_any = false
30
+ disallow_untyped_calls = false
31
+ disallow_untyped_decorators = true
32
+ disallow_untyped_defs = true
33
+ implicit_reexport = true
34
+ no_implicit_optional = true
35
+ no_implicit_reexport = true
36
+ strict_equality = true
37
+ warn_redundant_casts = true
38
+ warn_unused_ignores = false
39
+ warn_no_return = true
40
+ warn_return_any = true
41
+ local_partial_types = true
42
+ warn_unreachable = false
43
+ warn_unused_configs = true
44
+ exclude = [
45
+ "env"
46
+ ]
47
+
48
+ [tool.ruff]
49
+ preview = true
50
+ lint.select = ['ALL']
51
+ lint.ignore = [
52
+ "builtin-variable-shadowing", # Variable shadows python built-in. Nice to have
53
+ "builtin-argument-shadowing", # Variable shadows python built-in. Nice to have
54
+ "builtin-attribute-shadowing", # Class attribute shadows python built-in. Nice to have
55
+ "ANN", # Missing type annotations. Skip in favor of mypy
56
+ "ARG", # Unused arguments. Skip
57
+ "mutable-argument-default", # Do not use mutable data structures for argument defaults. Priority.
58
+ "function-uses-loop-variable", # Function doesn't bind loop variable. Priority
59
+ "raise-without-from-inside-except", # Exception handling raise from. Skip
60
+ "BLE", # Blind exception. Should Add
61
+ "unnecessary-generator-set", # Unecessary generator. Skip
62
+ "unnecessary-list-comprehension-set", # Unnecessary list comprehension. Skip
63
+ "unnecessary-literal-set", # Unnecessary list. rewrite as set. Skip
64
+ "unnecessary-collection-call", # Unnecessary dict call. Skip
65
+ "unnecessary-comprehension", # Unnecessary list comprehension. Skip
66
+ "unnecessary-map", # Unnecessary use of map. Should Add
67
+ "missing-trailing-comma", # Trailing comma. Too opinionated. Skip
68
+ "CPY", # Copyright notices. Skip
69
+ "D", # Docstrings. Skip
70
+ "DOC", # Docstrings. Skip
71
+ "call-datetime-without-tzinfo", # Missing tzinfo. Should add
72
+ "call-datetime-today", # Use of today instead of now. Should add
73
+ "call-datetime-utcnow", # Use of utcnow not allowed. Should add
74
+ "call-datetime-utcfromtimestamp", # Use of utcfrom timestamp not allowed. Should add
75
+ "call-datetime-now-without-tzinfo", # now without tz not allowed. Should add
76
+ "call-datetime-fromtimestamp", # use of from timestamp without tz not allowed. Should add
77
+ "call-datetime-strptime-without-zone", # replace timezone after strptime. Should add
78
+ "call-date-today", # Use of today not allowed. Should add
79
+ "line-too-long", # Line length. Skip
80
+ "raw-string-in-exception", # exception must not use a string literal. skip
81
+ "f-string-in-exception", # exception must not use an f string. skip
82
+ "dot-format-in-exception", # exception must not use a format string. skip
83
+ "ERA", # Rules around commented code. Skip
84
+ "shebang-missing-executable-file", # Executable files need shebang. Skip
85
+ "unused-variable", # TEMPORARY DISABLE TO CLEAR UP BUILD. Unused variables. Prioritize.
86
+ "boolean-type-hint-positional-argument", # boolean positional args. Skip
87
+ "boolean-default-value-positional-argument", # boolean default positional. Skip
88
+ "boolean-positional-value-in-call", # boolean positional. Skip
89
+ "line-contains-fixme", # Fixme comment. Skip
90
+ "line-contains-todo", # todo comment. Skip
91
+ "line-contains-hack", # hack comment. Skip
92
+ "static-join-to-f-string", # Use F-String instead of join. Should Add
93
+ "read-whole-file", # replace read function. Skip
94
+ "write-whole-file", # opinionated file opening. Skip
95
+ "repeated-append", # extend vs append. Skip
96
+ "reimplemented-operator", # opinionated rules about lambdas. skip
97
+ "reimplemented-starmap", # starmap vs generator. Skip
98
+ "logging-f-string", # avoid f strings in log statements. Should add
99
+ "implicit-namespace-package", # implicit imports. use __init__. Skip
100
+ "single-line-implicit-string-concatenation", # rule conflicts with formatter. Skip
101
+ "explicit-string-concatenation", # Explicitly concatenated string should be implicitly concatenated. Skip
102
+ "invalid-class-name", # class name case. Skip
103
+ "invalid-function-name", # function name lower case. Skip
104
+ "invalid-argument-name", # argument name lower cas. Skip
105
+ "invalid-first-argument-name-for-class-method", # cls_ first variable. Should add
106
+ "non-lowercase-variable-in-function", # lower case variable. Skip
107
+ "lowercase-imported-as-non-lowercase", # case consistency on import. Skip
108
+ "mixed-case-variable-in-class-scope", # mix casing, skip
109
+ "camelcase-imported-as-acronym", # don't use acronym. Should add
110
+ "error-suffix-on-exception-name", # exception override should be named with error. should add
111
+ "invalid-module-name", # module naming. Should add
112
+ "pandas-use-of-inplace-argument", # avoid inplace. Skip
113
+ "pandas-use-of-dot-not-null", # .notna. Should add
114
+ "pandas-use-of-dot-pivot-or-unstack", # .pivottable. Should add
115
+ "pandas-use-of-dot-values", # use .to_numpy. Skip
116
+ "pandas-use-of-pd-merge", # use .merge. Should add
117
+ "try-except-in-loop", # avoid try except in loop. Skip
118
+ "manual-list-comprehension", # use list comprehension. Skip
119
+ "manual-list-copy", # use list.copy. Skip
120
+ "manual-dict-comprehension", # use dictionary comprehension. Skip
121
+ "suspicious-eval-usage", # avoid eval. Should add
122
+ "blanket-type-ignore", # ignore specific rules. Skip
123
+ "blanket-noqa", # ignore specific rules. Skip
124
+ "useless-import-alias", # import alias doesn't rename. Skip
125
+ "import-outside-top-level", # import at top level. Skip
126
+ "compare-to-empty-string", # falsy empty string. Skip
127
+ "comparison-with-itself", # self comparison. Skip
128
+ "manual-from-import", # alias import. Skip
129
+ "too-many-return-statements", # too many return statements. Skip
130
+ "too-many-branches", # too many branches. Skip
131
+ "too-many-arguments", # too many arguments. Skip
132
+ "too-many-statements", # too many statements. Skip
133
+ "too-many-boolean-expressions", # too many expressions. Skip
134
+ "too-many-positional-arguments", # too many positional arguments. Skip
135
+ "repeated-equality-comparison", # multiple comparisons. Skip
136
+ "magic-value-comparison", # magic values. skip
137
+ "collapsible-else-if", # use elif instead of else if. skip
138
+ "non-augmented-assignment", # use augmented assignment. confuses strings, wait for fix. skip
139
+ "literal-membership", # use a set literal for membership test. skip
140
+ "no-self-use", # method inference. skip
141
+ "unnecessary-lambda", # inline lambda. skip
142
+ "useless-else-on-loop", # else without break. skip
143
+ "global-variable-not-assigned", # global withotu assignment. consider
144
+ "global-statement", # discourage global. skip
145
+ "subprocess-run-without-check", # subprocess run without check arg. skip
146
+ "unspecified-encoding", # open without encoding. skip
147
+ "redefined-loop-name", # for loop variable overwritten. skip
148
+ "pytest-fixture-incorrect-parentheses-style", # change ficture decorator. should add
149
+ "pytest-raises-too-broad", # use more specific raises decorator. should add
150
+ "pytest-composite-assertion", # break down complex assertsions. skip
151
+ "PTH", # enforces new python path library usage. skip
152
+ "unnecessary-literal-union", # turn union of literals to just literal with multiple. should add
153
+ "redundant-numeric-union", # use float instead of int | float. should remove floats
154
+ "RET", # enforces return semantics. break up and re-evaluate later
155
+ "unnecessary-paren-on-raise-exception", # unnecessary parens on exception. skip.
156
+ "ambiguous-unicode-character-string", # ambiguous characters. skip
157
+ "collection-literal-concatenation", # prefer star to concatenation. skip
158
+ "explicit-f-string-type-conversion", # use explicit conversion flag. skip
159
+ "mutable-class-default", # type with class var. should add
160
+ "unnecessary-iterable-allocation-for-first-element", # prefer next for single element. skip
161
+ "unused-noqa", # unused noqa. should add
162
+ "S", # should split up
163
+ "assert", # allow asserts. skip
164
+ "collapsible-if", # use single if instead of nested. skip
165
+ "suppressible-exception", # use exception supress. skip
166
+ "if-else-block-instead-of-if-exp", # use ternary. skip
167
+ "reimplemented-builtin", # use any/all. should add
168
+ "uncapitalized-environment-variables", # case of env variable. skip
169
+ "if-with-same-arms", # combine if branches. skip
170
+ "open-file-with-context-handler", # use context handler for files. should add
171
+ "multiple-with-statements", # use single with. should add
172
+ "private-member-access", # private member access. should add
173
+ "no-slots-in-str-subclass", # subclass of string should define slot. should add
174
+ "print", # print. skip
175
+ "p-print", # pprint. skip
176
+ "typing-only-first-party-import", # move application import into type checking. skip
177
+ "typing-only-third-party-import", # move third party import into type checking. consider
178
+ "typing-only-standard-library-import", # move library into type checking lbock. consider
179
+ "TD", # todo comments. skip
180
+ "relative-imports", # eliminate relative imports from parents. skip
181
+ "raise-vanilla-class", # create your own exception. skip
182
+ "raise-vanilla-args", # avoid long messages. skip
183
+ "type-check-without-type-error", # prefer type error. should add
184
+ "verbose-raise", # raise without exception name. consider
185
+ "try-consider-else", # move statement to else block. consider
186
+ "raise-within-try", # move raise to inner function. skip
187
+ "non-pep604-annotation-union", # use union for type annotations. should add
188
+ "convert-typed-dict-functional-to-class", # eliminate typeddict. should add
189
+ "printf-string-formatting", # use format specifiers. should add
190
+ "zip-without-explicit-strict", # zip strict. we have a deprecated pattern here, consider
191
+ "outdated-version-block", # outdated version block, consider
192
+ "zip-instead-of-pairwise", # prefer itertools.pairwise over zip, consider
193
+ "unsorted-dunder-all", # __all__ is not sorted. skip due to isort complication
194
+ "datetime-timezone-utc", # use datetime.UTC, TODO add back in
195
+ "deprecated-import", # replacing List with list, TODO add back in
196
+ # ## FROM RUFF UPGRADE
197
+ "import-private-name", # private name imports. should add
198
+ "too-many-nested-blocks", # too many nested blocks -- add with config. skip
199
+ "unnecessary-dict-comprehension-for-iterable", # unnecessary dict comprehension. skip
200
+ "enumerate-for-loop", # index variable should use enumerate. should add.
201
+ "too-many-locals" # too many local variables. configure below. should add with config
202
+ ]
203
+ line-length = 90
204
+ target-version = "py311"
205
+
206
+ exclude = [
207
+ 'env'
208
+ ]
209
+ [tool.ruff.lint.per-file-ignores]
210
+ "__init__.py" = ["unused-import"]
211
+
212
+ [tool.ruff.lint.isort]
213
+ split-on-trailing-comma = true
214
+ known-first-party = ["pkgs"]
215
+
216
+ [tool.ruff.lint.mccabe]
217
+ max-complexity = 130 # goal would be to bring this down to ~50 or so
218
+
219
+ [tool.ruff.lint.pylint]
220
+ max-locals=50
221
+
222
+ [tool.setuptools]
223
+ py-modules = []
@@ -0,0 +1,196 @@
1
+ import argparse
2
+ import datetime
3
+ import json
4
+ import os
5
+ import random
6
+ import time
7
+ from decimal import Decimal
8
+
9
+ import requests
10
+ from uncountable.types import dataset_measurements_t, identifier_t
11
+ from uncountable.types.api.time_series import ingest_dataset_measurements as api
12
+
13
+ from pkgs.serialization_util import serialize_for_api
14
+
15
+ API_ID_ENV_VAR = "UNC_API_ID"
16
+ API_SECRET_KEY_ENV_VAR = "UNC_API_SECRET_KEY"
17
+ MEASUREMENTS_PER_SECOND = 500
18
+ ONE_SECOND = datetime.timedelta(seconds=1)
19
+ VALUE_QUANTUM = Decimal("0.0001")
20
+
21
+
22
+ def _random_value(*, min_value: Decimal, max_value: Decimal) -> Decimal:
23
+ span = max_value - min_value
24
+ sampled = (min_value + span * Decimal(str(random.random()))).quantize(VALUE_QUANTUM)
25
+ return max(min_value, min(max_value, sampled))
26
+
27
+
28
+ def _window_sizes(*, num_measurements: int) -> list[int]:
29
+ full_windows, remainder = divmod(num_measurements, MEASUREMENTS_PER_SECOND)
30
+ window_sizes = [MEASUREMENTS_PER_SECOND] * full_windows
31
+ if remainder:
32
+ window_sizes.append(remainder)
33
+ return window_sizes
34
+
35
+
36
+ def _build_measurements(
37
+ *,
38
+ anchor: datetime.datetime,
39
+ window_index: int,
40
+ measurement_count: int,
41
+ min_value: Decimal,
42
+ max_value: Decimal,
43
+ ) -> list[dataset_measurements_t.Measurement]:
44
+ window_start = anchor + window_index * ONE_SECOND
45
+ step = ONE_SECOND / measurement_count
46
+ return [
47
+ dataset_measurements_t.Measurement(
48
+ observation_timestamp=window_start + index * step,
49
+ value=dataset_measurements_t.NumericMeasurementValue(
50
+ value=_random_value(min_value=min_value, max_value=max_value)
51
+ ),
52
+ )
53
+ for index in range(measurement_count)
54
+ ]
55
+
56
+
57
+ def _sleep_until(instant: datetime.datetime) -> None:
58
+ remaining_seconds = (instant - datetime.datetime.now(datetime.UTC)).total_seconds()
59
+ if remaining_seconds > 0:
60
+ time.sleep(remaining_seconds)
61
+
62
+
63
+ def _post_measurements(
64
+ *,
65
+ session: requests.Session,
66
+ url: str,
67
+ dataset_id: int,
68
+ measurements: list[dataset_measurements_t.Measurement],
69
+ ) -> None:
70
+ arguments = api.Arguments(
71
+ dataset_key=identifier_t.IdentifierKeyId(id=dataset_id),
72
+ measurements=measurements,
73
+ )
74
+ body = {"data": json.dumps(serialize_for_api(arguments))}
75
+ response = session.post(url, data=body)
76
+ response.raise_for_status()
77
+
78
+
79
+ def _stream(
80
+ *,
81
+ session: requests.Session,
82
+ url: str,
83
+ dataset_id: int,
84
+ num_measurements: int,
85
+ min_value: Decimal,
86
+ max_value: Decimal,
87
+ ) -> None:
88
+ anchor = datetime.datetime.now(datetime.UTC)
89
+ window_sizes = _window_sizes(num_measurements=num_measurements)
90
+ print(
91
+ f"streaming {num_measurements} measurement(s) to dataset {dataset_id} "
92
+ f"at {MEASUREMENTS_PER_SECOND}/second across {len(window_sizes)} second(s)",
93
+ flush=True,
94
+ )
95
+ streamed = 0
96
+ for window_index, measurement_count in enumerate(window_sizes):
97
+ measurements = _build_measurements(
98
+ anchor=anchor,
99
+ window_index=window_index,
100
+ measurement_count=measurement_count,
101
+ min_value=min_value,
102
+ max_value=max_value,
103
+ )
104
+ _sleep_until(anchor + (window_index + 1) * ONE_SECOND)
105
+ _post_measurements(
106
+ session=session,
107
+ url=url,
108
+ dataset_id=dataset_id,
109
+ measurements=measurements,
110
+ )
111
+ streamed += measurement_count
112
+ percent_complete = 100 * streamed / num_measurements
113
+ print(
114
+ f"streamed {streamed}/{num_measurements} measurement(s) "
115
+ f"({percent_complete:.1f}%)",
116
+ flush=True,
117
+ )
118
+ print(f"done: streamed {streamed} measurement(s)", flush=True)
119
+
120
+
121
+ def _parse_args() -> argparse.Namespace:
122
+ parser = argparse.ArgumentParser(
123
+ description=(
124
+ "Stream random measurements to a monitor (timeseries) dataset via the "
125
+ "dataset stream API."
126
+ ),
127
+ allow_abbrev=False,
128
+ )
129
+ parser.add_argument(
130
+ "--base-url",
131
+ required=True,
132
+ help="Base URL of the Uncountable server, e.g. http://localhost:5000",
133
+ )
134
+ parser.add_argument(
135
+ "--dataset-id",
136
+ type=int,
137
+ required=True,
138
+ help="Object id of the monitor dataset to receive measurements",
139
+ )
140
+ parser.add_argument(
141
+ "--num-measurements",
142
+ type=int,
143
+ required=True,
144
+ help="Total number of measurements to stream",
145
+ )
146
+ parser.add_argument(
147
+ "--min-value",
148
+ type=Decimal,
149
+ required=True,
150
+ help="Minimum random measurement value",
151
+ )
152
+ parser.add_argument(
153
+ "--max-value",
154
+ type=Decimal,
155
+ required=True,
156
+ help="Maximum random measurement value",
157
+ )
158
+ args = parser.parse_args()
159
+ if args.num_measurements <= 0:
160
+ parser.error("--num-measurements must be positive")
161
+ if args.max_value < args.min_value:
162
+ parser.error("--max-value must be greater than or equal to --min-value")
163
+ return args
164
+
165
+
166
+ def main() -> None:
167
+ args = _parse_args()
168
+
169
+ api_id = os.environ.get(API_ID_ENV_VAR)
170
+ api_secret_key = os.environ.get(API_SECRET_KEY_ENV_VAR)
171
+ if not api_id or not api_secret_key:
172
+ missing = [
173
+ name
174
+ for name, value in (
175
+ (API_ID_ENV_VAR, api_id),
176
+ (API_SECRET_KEY_ENV_VAR, api_secret_key),
177
+ )
178
+ if not value
179
+ ]
180
+ raise SystemExit(
181
+ f"missing required environment variable(s): {', '.join(missing)}"
182
+ )
183
+
184
+ session = requests.Session()
185
+ session.auth = (api_id, api_secret_key)
186
+ _stream(
187
+ session=session,
188
+ url=f"{args.base_url.rstrip('/')}/{api.ENDPOINT_PATH}",
189
+ dataset_id=args.dataset_id,
190
+ num_measurements=args.num_measurements,
191
+ min_value=args.min_value,
192
+ max_value=args.max_value,
193
+ )
194
+
195
+
196
+ main()
@@ -2,6 +2,7 @@
2
2
 
3
3
  __all__ = [
4
4
  "CachedParser",
5
+ "InternalCachedParser",
5
6
  "ParserBase",
6
7
  "ParserEnumError",
7
8
  "ParserError",
@@ -10,6 +11,7 @@ __all__ = [
10
11
  "ParserOptions",
11
12
  "ParserTypeError",
12
13
  "SourceEncoding",
14
+ "TestCachedParser",
13
15
  "build_parser",
14
16
  "camel_to_snake_case",
15
17
  "is_missing",
@@ -20,7 +22,11 @@ __all__ = [
20
22
  "snake_to_camel_case",
21
23
  ]
22
24
 
23
- from .cached_parser import CachedParser as CachedParser
25
+ from .cached_parser import (
26
+ CachedParser as CachedParser,
27
+ InternalCachedParser as InternalCachedParser,
28
+ TestCachedParser as TestCachedParser,
29
+ )
24
30
  from .case_convert import (
25
31
  camel_to_snake_case as camel_to_snake_case,
26
32
  kebab_to_pascal_case as kebab_to_pascal_case,