UncountablePythonSDK 0.0.114__tar.gz → 0.0.115__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 (335) hide show
  1. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/UncountablePythonSDK.egg-info/SOURCES.txt +3 -0
  4. uncountablepythonsdk-0.0.115/examples/integration-server/jobs/materials_auto/example_http.py +35 -0
  5. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/integration-server/jobs/materials_auto/profile.yaml +6 -0
  6. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +18 -5
  7. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/core/environment.py +1 -1
  8. uncountablepythonsdk-0.0.115/uncountable/integration/http_server/__init__.py +5 -0
  9. uncountablepythonsdk-0.0.115/uncountable/integration/http_server/types.py +67 -0
  10. uncountablepythonsdk-0.0.115/uncountable/integration/job.py +240 -0
  11. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/server.py +2 -2
  12. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/telemetry.py +1 -1
  13. uncountablepythonsdk-0.0.115/uncountable/integration/webhook_server/entrypoint.py +95 -0
  14. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/lookup_entity.py +15 -1
  15. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/client_base.py +49 -0
  16. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/entity_t.py +2 -0
  17. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/integration_server_t.py +2 -0
  18. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/job_definition.py +2 -0
  19. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/job_definition_t.py +25 -2
  20. uncountablepythonsdk-0.0.114/uncountable/integration/job.py +0 -116
  21. uncountablepythonsdk-0.0.114/uncountable/integration/webhook_server/entrypoint.py +0 -170
  22. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/.github/workflows/documentation.yml +0 -0
  23. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/.github/workflows/publish.yml +0 -0
  24. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/.gitignore +0 -0
  25. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/.python-version +0 -0
  26. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/README.md +0 -0
  27. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  28. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  29. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  30. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/.gitignore +0 -0
  31. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/conf.py +0 -0
  32. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/index.md +0 -0
  33. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/justfile +0 -0
  34. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/quickstart.md +0 -0
  35. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/requirements.txt +0 -0
  36. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/android-chrome-192x192.png +0 -0
  37. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/android-chrome-512x512.png +0 -0
  38. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/apple-touch-icon.png +0 -0
  39. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/browserconfig.xml +0 -0
  40. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/favicon-16x16.png +0 -0
  41. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/favicon-32x32.png +0 -0
  42. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/manifest.json +0 -0
  43. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/mstile-150x150.png +0 -0
  44. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  45. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/docs/static/logo_blue.png +0 -0
  46. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/async_batch.py +0 -0
  47. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/create_entity.py +0 -0
  48. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/create_ingredient_sdk.py +0 -0
  49. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/download_files.py +0 -0
  50. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/edit_recipe_inputs.py +0 -0
  51. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  52. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  53. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  54. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  55. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/integration-server/pyproject.toml +0 -0
  56. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/invoke_uploader.py +0 -0
  57. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/set_recipe_metadata_file.py +0 -0
  58. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/set_recipe_output_file_sdk.py +0 -0
  59. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/examples/upload_files.py +0 -0
  60. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/__init__.py +0 -0
  61. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/argument_parser/__init__.py +0 -0
  62. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/argument_parser/_is_enum.py +0 -0
  63. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  64. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/argument_parser/argument_parser.py +0 -0
  65. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/argument_parser/case_convert.py +0 -0
  66. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/_blob_session.py +0 -0
  68. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  69. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/_local_session.py +0 -0
  70. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/_s3_session.py +0 -0
  71. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  72. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  73. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  74. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/py.typed +0 -0
  75. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/__init__.py +0 -0
  76. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/annotation.py +0 -0
  77. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/missing_sentry.py +0 -0
  78. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/opaque_key.py +0 -0
  79. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/serial_alias.py +0 -0
  80. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/serial_class.py +0 -0
  81. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/serial_generic.py +0 -0
  82. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/serial_union.py +0 -0
  83. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization/yaml.py +0 -0
  84. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization_util/__init__.py +0 -0
  85. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  86. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  87. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization_util/dataclasses.py +0 -0
  88. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/serialization_util/serialization_helpers.py +0 -0
  89. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/strenum_compat/__init__.py +0 -0
  90. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/strenum_compat/strenum_compat.py +0 -0
  91. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/__main__.py +0 -0
  93. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  94. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  95. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  96. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/builder.py +0 -0
  97. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/config.py +0 -0
  98. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/cross_output_links.py +0 -0
  99. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/emit_io_ts.py +0 -0
  100. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/emit_open_api.py +0 -0
  101. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/emit_open_api_util.py +0 -0
  102. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/emit_python.py +0 -0
  103. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/emit_typescript.py +0 -0
  104. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/emit_typescript_util.py +0 -0
  105. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/load_types.py +0 -0
  106. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  107. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/open_api_util.py +0 -0
  108. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/parts/base.py.prepart +0 -0
  109. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  110. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/test.py +0 -0
  111. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/type_info/__main__.py +0 -0
  112. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  113. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  114. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/util.py +0 -0
  115. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/value_spec/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/value_spec/__main__.py +0 -0
  117. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  118. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  119. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pkgs/type_spec/value_spec/types.py +0 -0
  120. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/pyproject.toml +0 -0
  121. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/setup.cfg +0 -0
  122. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/__init__.py +0 -0
  123. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/core/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/core/async_batch.py +0 -0
  125. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/core/client.py +0 -0
  126. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/core/file_upload.py +0 -0
  127. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/core/types.py +0 -0
  128. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/__init__.py +0 -0
  129. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/cli.py +0 -0
  130. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/construct_client.py +0 -0
  131. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/cron.py +0 -0
  132. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/db/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/db/connect.py +0 -0
  134. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/db/session.py +0 -0
  135. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/entrypoint.py +0 -0
  136. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/executors/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/executors/executors.py +0 -0
  138. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  139. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/executors/script_executor.py +0 -0
  140. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  142. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  143. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  144. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  146. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  147. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  148. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  149. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  150. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  152. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  153. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  154. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  155. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  156. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/types.py +0 -0
  157. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/queue_runner/worker.py +0 -0
  158. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/scan_profiles.py +0 -0
  159. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/scheduler.py +0 -0
  160. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  162. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/py.typed +0 -0
  163. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/batch/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/batch/execute_batch.py +0 -0
  167. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  168. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/chemical/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  170. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  172. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/create_entities.py +0 -0
  174. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/create_entity.py +0 -0
  175. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  176. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/export_entities.py +0 -0
  177. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/get_entities_data.py +0 -0
  178. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  179. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/list_entities.py +0 -0
  180. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/lock_entity.py +0 -0
  181. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  182. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  183. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/set_values.py +0 -0
  184. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  185. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/entity/unlock_entity.py +0 -0
  186. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/equipment/__init__.py +0 -0
  187. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  188. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/field_options/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  190. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/files/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/files/download_file.py +0 -0
  192. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/id_source/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/id_source/list_id_source.py +0 -0
  194. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/id_source/match_id_source.py +0 -0
  195. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/input_groups/__init__.py +0 -0
  196. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  197. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/__init__.py +0 -0
  198. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/create_inputs.py +0 -0
  199. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/get_input_data.py +0 -0
  200. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/get_input_names.py +0 -0
  201. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  202. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  203. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/set_input_category.py +0 -0
  204. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  205. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  206. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/material_families/__init__.py +0 -0
  207. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  208. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/outputs/__init__.py +0 -0
  209. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/outputs/get_output_data.py +0 -0
  210. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/outputs/get_output_names.py +0 -0
  211. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  212. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/permissions/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  214. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/project/__init__.py +0 -0
  215. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/project/get_projects.py +0 -0
  216. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/project/get_projects_data.py +0 -0
  217. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipe_links/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  219. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  220. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  222. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/__init__.py +0 -0
  223. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  224. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  225. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  226. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  227. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  228. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  229. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  230. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/create_recipe.py +0 -0
  231. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/create_recipes.py +0 -0
  232. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  233. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  234. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  235. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_curve.py +0 -0
  236. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  237. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  238. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  239. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  240. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  241. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  242. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  243. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  244. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  245. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  246. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  247. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  248. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  249. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  250. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  251. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/runsheet/__init__.py +0 -0
  252. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  253. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/triggers/__init__.py +0 -0
  254. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/triggers/run_trigger.py +0 -0
  255. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/uploader/__init__.py +0 -0
  256. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  257. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/async_batch.py +0 -0
  258. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/async_batch_processor.py +0 -0
  259. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/async_batch_t.py +0 -0
  260. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/async_jobs.py +0 -0
  261. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/async_jobs_t.py +0 -0
  262. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/auth_retrieval.py +0 -0
  263. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/auth_retrieval_t.py +0 -0
  264. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/base.py +0 -0
  265. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/base_t.py +0 -0
  266. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/calculations.py +0 -0
  267. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/calculations_t.py +0 -0
  268. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/chemical_structure.py +0 -0
  269. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/chemical_structure_t.py +0 -0
  270. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/client_config.py +0 -0
  271. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/client_config_t.py +0 -0
  272. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/curves.py +0 -0
  273. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/curves_t.py +0 -0
  274. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/data.py +0 -0
  275. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/data_t.py +0 -0
  276. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/entity.py +0 -0
  277. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/experiment_groups.py +0 -0
  278. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/experiment_groups_t.py +0 -0
  279. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/exports.py +0 -0
  280. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/exports_t.py +0 -0
  281. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/field_values.py +0 -0
  282. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/field_values_t.py +0 -0
  283. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/fields.py +0 -0
  284. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/fields_t.py +0 -0
  285. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/generic_upload.py +0 -0
  286. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/generic_upload_t.py +0 -0
  287. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/id_source.py +0 -0
  288. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/id_source_t.py +0 -0
  289. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/identifier.py +0 -0
  290. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/identifier_t.py +0 -0
  291. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/input_attributes.py +0 -0
  292. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/input_attributes_t.py +0 -0
  293. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/inputs.py +0 -0
  294. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/inputs_t.py +0 -0
  295. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/integration_server.py +0 -0
  296. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/outputs.py +0 -0
  297. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/outputs_t.py +0 -0
  298. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/overrides.py +0 -0
  299. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/overrides_t.py +0 -0
  300. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/permissions.py +0 -0
  301. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/permissions_t.py +0 -0
  302. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/phases.py +0 -0
  303. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/phases_t.py +0 -0
  304. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/post_base.py +0 -0
  305. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/post_base_t.py +0 -0
  306. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/queued_job.py +0 -0
  307. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/queued_job_t.py +0 -0
  308. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_identifiers.py +0 -0
  309. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_identifiers_t.py +0 -0
  310. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_inputs.py +0 -0
  311. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_inputs_t.py +0 -0
  312. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_links.py +0 -0
  313. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_links_t.py +0 -0
  314. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_metadata.py +0 -0
  315. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_metadata_t.py +0 -0
  316. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_output_metadata.py +0 -0
  317. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_output_metadata_t.py +0 -0
  318. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_tags.py +0 -0
  319. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_tags_t.py +0 -0
  320. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_workflow_steps.py +0 -0
  321. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  322. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipes.py +0 -0
  323. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/recipes_t.py +0 -0
  324. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/response.py +0 -0
  325. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/response_t.py +0 -0
  326. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/secret_retrieval.py +0 -0
  327. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/secret_retrieval_t.py +0 -0
  328. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/units.py +0 -0
  329. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/units_t.py +0 -0
  330. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/users.py +0 -0
  331. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/users_t.py +0 -0
  332. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/webhook_job.py +0 -0
  333. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/webhook_job_t.py +0 -0
  334. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/workflows.py +0 -0
  335. {uncountablepythonsdk-0.0.114 → uncountablepythonsdk-0.0.115}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.114
3
+ Version: 0.0.115
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.114
3
+ Version: 0.0.115
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
@@ -37,6 +37,7 @@ examples/upload_files.py
37
37
  examples/integration-server/pyproject.toml
38
38
  examples/integration-server/jobs/materials_auto/concurrent_cron.py
39
39
  examples/integration-server/jobs/materials_auto/example_cron.py
40
+ examples/integration-server/jobs/materials_auto/example_http.py
40
41
  examples/integration-server/jobs/materials_auto/example_runsheet_wh.py
41
42
  examples/integration-server/jobs/materials_auto/example_wh.py
42
43
  examples/integration-server/jobs/materials_auto/profile.yaml
@@ -126,6 +127,8 @@ uncountable/integration/executors/__init__.py
126
127
  uncountable/integration/executors/executors.py
127
128
  uncountable/integration/executors/generic_upload_executor.py
128
129
  uncountable/integration/executors/script_executor.py
130
+ uncountable/integration/http_server/__init__.py
131
+ uncountable/integration/http_server/types.py
129
132
  uncountable/integration/queue_runner/__init__.py
130
133
  uncountable/integration/queue_runner/job_scheduler.py
131
134
  uncountable/integration/queue_runner/queue_runner.py
@@ -0,0 +1,35 @@
1
+ from dataclasses import dataclass
2
+
3
+ from uncountable.integration.http_server import (
4
+ GenericHttpRequest,
5
+ GenericHttpResponse,
6
+ )
7
+ from uncountable.integration.job import CustomHttpJob, register_job
8
+ from uncountable.types import job_definition_t
9
+
10
+
11
+ @dataclass(kw_only=True)
12
+ class ExampleWebhookPayload:
13
+ id: int
14
+ message: str
15
+
16
+
17
+ @register_job
18
+ class HttpExample(CustomHttpJob):
19
+ @staticmethod
20
+ def validate_request(
21
+ *,
22
+ request: GenericHttpRequest,
23
+ job_definition: job_definition_t.HttpJobDefinitionBase,
24
+ profile_meta: job_definition_t.ProfileMetadata,
25
+ ) -> None:
26
+ return None
27
+
28
+ @staticmethod
29
+ def handle_request(
30
+ *,
31
+ request: GenericHttpRequest,
32
+ job_definition: job_definition_t.HttpJobDefinitionBase,
33
+ profile_meta: job_definition_t.ProfileMetadata,
34
+ ) -> GenericHttpResponse:
35
+ return GenericHttpResponse(response="OK", status_code=200)
@@ -60,6 +60,12 @@ jobs:
60
60
  executor:
61
61
  type: script
62
62
  import_path: example_wh
63
+ - id: example_http
64
+ type: custom_http
65
+ name: Custom HTTP
66
+ executor:
67
+ type: script
68
+ import_path: example_http
63
69
  - id: example_runsheet_wh
64
70
  type: webhook
65
71
  name: Runsheet Webhook
@@ -1,13 +1,14 @@
1
1
  import json
2
+ import re
2
3
  from dataclasses import dataclass
3
4
  from io import StringIO
4
5
  from pathlib import Path
5
6
  from typing import assert_never
6
7
 
7
8
  from main.base.types import (
9
+ base_t,
8
10
  ui_entry_actions_t,
9
11
  )
10
- from pkgs.argument_parser import snake_to_camel_case
11
12
  from pkgs.serialization_util import serialize_for_api
12
13
  from pkgs.type_spec import emit_typescript_util
13
14
  from pkgs.type_spec.builder import (
@@ -45,8 +46,8 @@ def ui_entry_variable_to_type_spec_type(
45
46
  match variable:
46
47
  case ui_entry_actions_t.UiEntryActionVariableString():
47
48
  return BaseTypeName.s_string
48
- case ui_entry_actions_t.UiEntryActionVariableEntityFields():
49
- return "entity.Entity"
49
+ case ui_entry_actions_t.UiEntryActionVariableSingleEntity():
50
+ return "ObjectId"
50
51
  case _:
51
52
  assert_never(variable)
52
53
 
@@ -157,6 +158,15 @@ def emit_entry_action_definition(
157
158
  )
158
159
 
159
160
 
161
+ def _validate_input(input: ui_entry_actions_t.UiEntryActionVariable) -> None:
162
+ if "_" in input.vs_var_name:
163
+ raise ValueError(f"Expected camelCase for variable {input.vs_var_name}")
164
+ if not re.fullmatch(base_t.REF_NAME_STRICT_REGEX, input.vs_var_name):
165
+ raise ValueError(
166
+ f"Variable {input.vs_var_name} has invalid syntax. See REF_NAME_STRICT_REGEX"
167
+ )
168
+
169
+
160
170
  def emit_query_index(
161
171
  ctx: emit_typescript_util.EmitTypescriptContext,
162
172
  defn_infos: list[EntryActionTypeInfo],
@@ -182,6 +192,7 @@ def emit_query_index(
182
192
  "type": BaseTypeName.s_object,
183
193
  "properties": {
184
194
  "value_spec_var": {"type": "String"},
195
+ "type": {"type": "ui_entry_actions.UiEntryActionDataType"},
185
196
  "variable": {"type": "ui_entry_actions.UiEntryActionVariable"},
186
197
  },
187
198
  },
@@ -215,10 +226,12 @@ def emit_query_index(
215
226
  for scope, defn in definitions.items():
216
227
  inputs = []
217
228
  outputs = []
218
- for name, input in defn.inputs.items():
229
+ for input in defn.inputs.values():
230
+ _validate_input(input)
219
231
  inputs.append(
220
232
  serialize_for_api({
221
- "value_spec_var": snake_to_camel_case(name),
233
+ "value_spec_var": input.vs_var_name,
234
+ "type": input.type,
222
235
  "variable": input,
223
236
  })
224
237
  )
@@ -18,7 +18,7 @@ def get_server_env() -> str | None:
18
18
  return os.environ.get("UNC_SERVER_ENV")
19
19
 
20
20
 
21
- def get_webhook_server_port() -> int:
21
+ def get_http_server_port() -> int:
22
22
  return int(os.environ.get("UNC_WEBHOOK_SERVER_PORT", "5001"))
23
23
 
24
24
 
@@ -0,0 +1,5 @@
1
+ # CLOSED MODULE
2
+
3
+ from .types import GenericHttpRequest as GenericHttpRequest
4
+ from .types import GenericHttpResponse as GenericHttpResponse
5
+ from .types import HttpException as HttpException
@@ -0,0 +1,67 @@
1
+ import base64
2
+ import functools
3
+ from dataclasses import dataclass
4
+
5
+ from flask.wrappers import Response
6
+
7
+
8
+ class HttpException(Exception):
9
+ error_code: int
10
+ message: str
11
+
12
+ def __init__(self, *, error_code: int, message: str) -> None:
13
+ self.error_code = error_code
14
+ self.message = message
15
+
16
+ @staticmethod
17
+ def payload_failed_signature() -> "HttpException":
18
+ return HttpException(
19
+ error_code=401, message="webhook payload did not match signature"
20
+ )
21
+
22
+ @staticmethod
23
+ def no_signature_passed() -> "HttpException":
24
+ return HttpException(error_code=400, message="missing signature")
25
+
26
+ @staticmethod
27
+ def body_parse_error() -> "HttpException":
28
+ return HttpException(error_code=400, message="body parse error")
29
+
30
+ @staticmethod
31
+ def unknown_error() -> "HttpException":
32
+ return HttpException(error_code=500, message="internal server error")
33
+
34
+ @staticmethod
35
+ def configuration_error(
36
+ message: str = "internal configuration error",
37
+ ) -> "HttpException":
38
+ return HttpException(error_code=500, message=message)
39
+
40
+ def __str__(self) -> str:
41
+ return f"[{self.error_code}]: {self.message}"
42
+
43
+ def make_error_response(self) -> Response:
44
+ return Response(
45
+ status=self.error_code, response={"error": {"message": str(self)}}
46
+ )
47
+
48
+
49
+ @dataclass(kw_only=True, frozen=True)
50
+ class GenericHttpRequest:
51
+ body_base64: str
52
+ headers: dict[str, str]
53
+
54
+ @functools.cached_property
55
+ def body_bytes(self) -> bytes:
56
+ return base64.b64decode(self.body_base64)
57
+
58
+ @functools.cached_property
59
+ def body_text(self) -> str:
60
+ return self.body_bytes.decode()
61
+
62
+
63
+ @dataclass(kw_only=True)
64
+ class GenericHttpResponse:
65
+ response: str
66
+ status_code: int
67
+ headers: dict[str, str] | None = None
@@ -0,0 +1,240 @@
1
+ import functools
2
+ import hmac
3
+ import typing
4
+ from abc import ABC, abstractmethod
5
+ from dataclasses import dataclass
6
+
7
+ import simplejson
8
+
9
+ from pkgs.argument_parser import CachedParser
10
+ from pkgs.serialization_util import serialize_for_api
11
+ from uncountable.core.async_batch import AsyncBatchProcessor
12
+ from uncountable.core.client import Client
13
+ from uncountable.core.environment import get_local_admin_server_port
14
+ from uncountable.core.file_upload import FileUpload
15
+ from uncountable.integration.http_server import (
16
+ GenericHttpRequest,
17
+ GenericHttpResponse,
18
+ HttpException,
19
+ )
20
+ from uncountable.integration.queue_runner.command_server.command_client import (
21
+ send_job_queue_message,
22
+ )
23
+ from uncountable.integration.queue_runner.command_server.types import (
24
+ CommandServerException,
25
+ )
26
+ from uncountable.integration.secret_retrieval.retrieve_secret import retrieve_secret
27
+ from uncountable.integration.telemetry import JobLogger
28
+ from uncountable.types import (
29
+ base_t,
30
+ entity_t,
31
+ job_definition_t,
32
+ queued_job_t,
33
+ webhook_job_t,
34
+ )
35
+ from uncountable.types.job_definition_t import (
36
+ HttpJobDefinitionBase,
37
+ JobDefinition,
38
+ JobResult,
39
+ ProfileMetadata,
40
+ )
41
+
42
+
43
+ @dataclass(kw_only=True)
44
+ class JobArguments:
45
+ job_definition: JobDefinition
46
+ profile_metadata: ProfileMetadata
47
+ client: Client
48
+ batch_processor: AsyncBatchProcessor
49
+ logger: JobLogger
50
+ payload: base_t.JsonValue
51
+
52
+
53
+ # only for compatibility:
54
+ CronJobArguments = JobArguments
55
+
56
+
57
+ class Job[PT](ABC):
58
+ _unc_job_registered: bool = False
59
+
60
+ @property
61
+ @abstractmethod
62
+ def payload_type(self) -> type[PT]: ...
63
+
64
+ @abstractmethod
65
+ def run_outer(self, args: JobArguments) -> JobResult: ...
66
+
67
+ @functools.cached_property
68
+ def _cached_payload_parser(self) -> CachedParser[PT]:
69
+ return CachedParser(self.payload_type)
70
+
71
+ def get_payload(self, payload: base_t.JsonValue) -> PT:
72
+ return self._cached_payload_parser.parse_storage(payload)
73
+
74
+
75
+ class CronJob(Job):
76
+ @property
77
+ def payload_type(self) -> type[None]:
78
+ return type(None)
79
+
80
+ def run_outer(self, args: JobArguments) -> JobResult:
81
+ assert isinstance(args, CronJobArguments)
82
+ return self.run(args)
83
+
84
+ @abstractmethod
85
+ def run(self, args: JobArguments) -> JobResult: ...
86
+
87
+
88
+ WPT = typing.TypeVar("WPT")
89
+
90
+
91
+ @dataclass(kw_only=True)
92
+ class WebhookResponse:
93
+ pass
94
+
95
+
96
+ class CustomHttpJob(Job[GenericHttpRequest]):
97
+ @property
98
+ def payload_type(self) -> type[GenericHttpRequest]:
99
+ return GenericHttpRequest
100
+
101
+ @staticmethod
102
+ @abstractmethod
103
+ def validate_request(
104
+ *,
105
+ request: GenericHttpRequest,
106
+ job_definition: HttpJobDefinitionBase,
107
+ profile_meta: ProfileMetadata,
108
+ ) -> None:
109
+ """
110
+ Validate that the request is valid. If the request is invalid, raise an
111
+ exception.
112
+ """
113
+ ...
114
+
115
+ @staticmethod
116
+ @abstractmethod
117
+ def handle_request(
118
+ *,
119
+ request: GenericHttpRequest,
120
+ job_definition: HttpJobDefinitionBase,
121
+ profile_meta: ProfileMetadata,
122
+ ) -> GenericHttpResponse:
123
+ """
124
+ Handle the request synchronously. Normally this should just enqueue a job
125
+ and return immediately (see WebhookJob as an example).
126
+ """
127
+ ...
128
+
129
+ def run_outer(self, args: JobArguments) -> JobResult:
130
+ args.logger.log_warning(
131
+ message=f"Unexpected call to run_outer for CustomHttpJob: {args.job_definition.id}"
132
+ )
133
+ return JobResult(success=False)
134
+
135
+
136
+ class WebhookJob[WPT](Job[webhook_job_t.WebhookEventPayload]):
137
+ @property
138
+ def payload_type(self) -> type[webhook_job_t.WebhookEventPayload]:
139
+ return webhook_job_t.WebhookEventPayload
140
+
141
+ @property
142
+ @abstractmethod
143
+ def webhook_payload_type(self) -> type[WPT]: ...
144
+
145
+ @staticmethod
146
+ def validate_request(
147
+ *,
148
+ request: GenericHttpRequest,
149
+ job_definition: job_definition_t.HttpJobDefinitionBase,
150
+ profile_meta: ProfileMetadata,
151
+ ) -> None:
152
+ assert isinstance(job_definition, job_definition_t.WebhookJobDefinition)
153
+ signature_key = retrieve_secret(
154
+ profile_metadata=profile_meta,
155
+ secret_retrieval=job_definition.signature_key_secret,
156
+ )
157
+ passed_signature = request.headers.get("Uncountable-Webhook-Signature")
158
+ if passed_signature is None:
159
+ raise HttpException.no_signature_passed()
160
+
161
+ request_body_signature = hmac.new(
162
+ signature_key.encode("utf-8"), msg=request.body_bytes, digestmod="sha256"
163
+ ).hexdigest()
164
+
165
+ if request_body_signature != passed_signature:
166
+ raise HttpException.payload_failed_signature()
167
+
168
+ @staticmethod
169
+ def handle_request(
170
+ *,
171
+ request: GenericHttpRequest,
172
+ job_definition: job_definition_t.HttpJobDefinitionBase,
173
+ profile_meta: ProfileMetadata, # noqa: ARG004
174
+ ) -> GenericHttpResponse:
175
+ try:
176
+ request_body = simplejson.loads(request.body_text)
177
+ webhook_payload = typing.cast(base_t.JsonValue, request_body)
178
+ except (simplejson.JSONDecodeError, ValueError) as e:
179
+ raise HttpException.body_parse_error() from e
180
+
181
+ try:
182
+ send_job_queue_message(
183
+ job_ref_name=job_definition.id,
184
+ payload=queued_job_t.QueuedJobPayload(
185
+ invocation_context=queued_job_t.InvocationContextWebhook(
186
+ webhook_payload=webhook_payload
187
+ )
188
+ ),
189
+ port=get_local_admin_server_port(),
190
+ )
191
+ except CommandServerException as e:
192
+ raise HttpException.unknown_error() from e
193
+
194
+ return GenericHttpResponse(
195
+ response=simplejson.dumps(serialize_for_api(WebhookResponse())),
196
+ status_code=200,
197
+ )
198
+
199
+ def run_outer(self, args: JobArguments) -> JobResult:
200
+ webhook_body = self.get_payload(args.payload)
201
+ inner_payload = CachedParser(self.webhook_payload_type).parse_api(
202
+ webhook_body.data
203
+ )
204
+ return self.run(args, inner_payload)
205
+
206
+ @abstractmethod
207
+ def run(self, args: JobArguments, payload: WPT) -> JobResult: ...
208
+
209
+
210
+ def register_job(cls: type[Job]) -> type[Job]:
211
+ cls._unc_job_registered = True
212
+ return cls
213
+
214
+
215
+ class RunsheetWebhookJob(WebhookJob[webhook_job_t.RunsheetWebhookPayload]):
216
+ @property
217
+ def webhook_payload_type(self) -> type:
218
+ return webhook_job_t.RunsheetWebhookPayload
219
+
220
+ @abstractmethod
221
+ def build_runsheet(
222
+ self,
223
+ *,
224
+ args: JobArguments,
225
+ entities: list[entity_t.Entity],
226
+ ) -> FileUpload: ...
227
+
228
+ def run(
229
+ self, args: JobArguments, payload: webhook_job_t.RunsheetWebhookPayload
230
+ ) -> JobResult:
231
+ runsheet = self.build_runsheet(args=args, entities=payload.entities)
232
+
233
+ files = args.client.upload_files(file_uploads=[runsheet])
234
+ args.client.complete_async_upload(
235
+ async_job_id=payload.async_job_id, file_id=files[0].file_id
236
+ )
237
+
238
+ return JobResult(
239
+ success=True,
240
+ )
@@ -16,7 +16,7 @@ from uncountable.integration.telemetry import Logger
16
16
  from uncountable.types import base_t, job_definition_t
17
17
  from uncountable.types.job_definition_t import (
18
18
  CronJobDefinition,
19
- WebhookJobDefinition,
19
+ HttpJobDefinitionBase,
20
20
  )
21
21
 
22
22
  _MAX_APSCHEDULER_CONCURRENT_JOBS = 1
@@ -86,7 +86,7 @@ class IntegrationServer:
86
86
  misfire_grace_time=None,
87
87
  **job_opts,
88
88
  )
89
- case WebhookJobDefinition():
89
+ case HttpJobDefinitionBase():
90
90
  pass
91
91
  case _:
92
92
  assert_never(job_defn)
@@ -177,7 +177,7 @@ class JobLogger(Logger):
177
177
  patched_attributes["job.definition.cron_spec"] = (
178
178
  self.job_definition.cron_spec
179
179
  )
180
- case job_definition_t.WebhookJobDefinition():
180
+ case job_definition_t.HttpJobDefinitionBase():
181
181
  pass
182
182
  case _:
183
183
  assert_never(self.job_definition)
@@ -0,0 +1,95 @@
1
+ import base64
2
+
3
+ import flask
4
+ from flask.typing import ResponseReturnValue
5
+ from opentelemetry.trace import get_current_span
6
+ from uncountable.core.environment import (
7
+ get_http_server_port,
8
+ get_server_env,
9
+ )
10
+ from uncountable.integration.executors.script_executor import resolve_script_executor
11
+ from uncountable.integration.http_server import GenericHttpRequest, HttpException
12
+ from uncountable.integration.job import CustomHttpJob, WebhookJob
13
+ from uncountable.integration.scan_profiles import load_profiles
14
+ from uncountable.integration.telemetry import Logger
15
+ from uncountable.types import job_definition_t
16
+
17
+ app = flask.Flask(__name__)
18
+
19
+
20
+ def register_route(
21
+ *,
22
+ server_logger: Logger,
23
+ profile_meta: job_definition_t.ProfileMetadata,
24
+ job: job_definition_t.HttpJobDefinitionBase,
25
+ ) -> None:
26
+ route = f"/{profile_meta.name}/{job.id}"
27
+
28
+ def handle_request() -> ResponseReturnValue:
29
+ with server_logger.push_scope(route):
30
+ try:
31
+ if not isinstance(job.executor, job_definition_t.JobExecutorScript):
32
+ raise HttpException.configuration_error(
33
+ message="[internal] http job must use a script executor"
34
+ )
35
+ job_instance = resolve_script_executor(
36
+ executor=job.executor, profile_metadata=profile_meta
37
+ )
38
+ if not isinstance(job_instance, (CustomHttpJob, WebhookJob)):
39
+ raise HttpException.configuration_error(
40
+ message="[internal] http job must descend from CustomHttpJob"
41
+ )
42
+ http_request = GenericHttpRequest(
43
+ body_base64=base64.b64encode(flask.request.get_data()).decode(),
44
+ headers=dict(flask.request.headers),
45
+ )
46
+ job_instance.validate_request(
47
+ request=http_request, job_definition=job, profile_meta=profile_meta
48
+ )
49
+ http_response = job_instance.handle_request(
50
+ request=http_request, job_definition=job, profile_meta=profile_meta
51
+ )
52
+
53
+ return flask.make_response(
54
+ http_response.response,
55
+ http_response.status_code,
56
+ http_response.headers,
57
+ )
58
+ except HttpException as e:
59
+ server_logger.log_exception(e)
60
+ return e.make_error_response()
61
+ except Exception as e:
62
+ server_logger.log_exception(e)
63
+ return HttpException.unknown_error().make_error_response()
64
+
65
+ app.add_url_rule(
66
+ route,
67
+ endpoint=f"handle_request_{job.id}",
68
+ view_func=handle_request,
69
+ methods=["POST"],
70
+ )
71
+
72
+ server_logger.log_info(f"job {job.id} webhook registered at: {route}")
73
+
74
+
75
+ def main() -> None:
76
+ profiles = load_profiles()
77
+ for profile_metadata in profiles:
78
+ server_logger = Logger(get_current_span())
79
+ for job in profile_metadata.jobs:
80
+ if isinstance(job, job_definition_t.HttpJobDefinitionBase):
81
+ register_route(
82
+ server_logger=server_logger, profile_meta=profile_metadata, job=job
83
+ )
84
+
85
+
86
+ main()
87
+
88
+
89
+ if __name__ == "__main__":
90
+ app.run(
91
+ host="0.0.0.0",
92
+ port=get_http_server_port(),
93
+ debug=get_server_env() == "playground",
94
+ exclude_patterns=[],
95
+ )
@@ -21,6 +21,7 @@ __all__: list[str] = [
21
21
  "Data",
22
22
  "ENDPOINT_METHOD",
23
23
  "ENDPOINT_PATH",
24
+ "LookupEntityCompositeFieldValues",
24
25
  "LookupEntityFieldValue",
25
26
  "LookupEntityQuery",
26
27
  "LookupEntityQueryBase",
@@ -35,6 +36,7 @@ ENDPOINT_PATH = "api/external/entity/lookup_entity"
35
36
  # DO NOT MODIFY -- This file is generated by type_spec
36
37
  class LookupEntityQueryType(StrEnum):
37
38
  FIELD_VALUE = "field_value"
39
+ COMPOSITE_FIELD_VALUES = "composite_field_values"
38
40
 
39
41
 
40
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -69,14 +71,26 @@ class LookupEntityFieldValue:
69
71
  value: LookupFieldArgumentValue
70
72
 
71
73
 
74
+ # DO NOT MODIFY -- This file is generated by type_spec
75
+ @serial_class(
76
+ named_type_path="sdk.api.entity.lookup_entity.LookupEntityCompositeFieldValues",
77
+ parse_require={"type"},
78
+ )
79
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
80
+ class LookupEntityCompositeFieldValues:
81
+ type: typing.Literal[LookupEntityQueryType.COMPOSITE_FIELD_VALUES] = LookupEntityQueryType.COMPOSITE_FIELD_VALUES
82
+ values: list[LookupFieldArgumentValue]
83
+
84
+
72
85
  # DO NOT MODIFY -- This file is generated by type_spec
73
86
  LookupEntityQuery = typing.Annotated[
74
- typing.Union[LookupEntityFieldValue],
87
+ LookupEntityFieldValue | LookupEntityCompositeFieldValues,
75
88
  serial_union_annotation(
76
89
  named_type_path="sdk.api.entity.lookup_entity.LookupEntityQuery",
77
90
  discriminator="type",
78
91
  discriminator_map={
79
92
  "field_value": LookupEntityFieldValue,
93
+ "composite_field_values": LookupEntityCompositeFieldValues,
80
94
  },
81
95
  ),
82
96
  ]