UncountablePythonSDK 0.0.109__tar.gz → 0.0.111__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 (318) hide show
  1. {uncountablepythonsdk-0.0.109/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.111}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/UncountablePythonSDK.egg-info/SOURCES.txt +5 -0
  4. uncountablepythonsdk-0.0.111/examples/create_ingredient_sdk.py +34 -0
  5. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/argument_parser/argument_parser.py +3 -3
  6. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/builder.py +19 -2
  7. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/emit_open_api.py +27 -0
  8. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/open_api_util.py +12 -1
  9. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/type_info/emit_type_info.py +30 -4
  10. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/__init__.py +4 -0
  11. uncountablepythonsdk-0.0.111/uncountable/types/api/condition_parameters/upsert_condition_match.py +71 -0
  12. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/create_inputs.py +2 -0
  13. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/edit_recipe_inputs.py +12 -0
  14. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/set_recipe_outputs.py +2 -0
  15. uncountablepythonsdk-0.0.111/uncountable/types/api/uploader/__init__.py +1 -0
  16. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/async_batch_processor.py +40 -0
  17. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/async_batch_t.py +2 -0
  18. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/client_base.py +27 -0
  19. uncountablepythonsdk-0.0.111/uncountable/types/data.py +12 -0
  20. uncountablepythonsdk-0.0.111/uncountable/types/data_t.py +93 -0
  21. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/entity_t.py +7 -1
  22. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/.github/workflows/documentation.yml +0 -0
  23. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/.github/workflows/publish.yml +0 -0
  24. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/.gitignore +0 -0
  25. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/README.md +0 -0
  26. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  27. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  28. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  29. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/.gitignore +0 -0
  30. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/conf.py +0 -0
  31. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/index.md +0 -0
  32. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/justfile +0 -0
  33. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/quickstart.md +0 -0
  34. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/requirements.txt +0 -0
  35. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/android-chrome-192x192.png +0 -0
  36. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/android-chrome-512x512.png +0 -0
  37. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/apple-touch-icon.png +0 -0
  38. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/browserconfig.xml +0 -0
  39. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/favicon-16x16.png +0 -0
  40. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/favicon-32x32.png +0 -0
  41. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/manifest.json +0 -0
  42. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/mstile-150x150.png +0 -0
  43. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  44. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/docs/static/logo_blue.png +0 -0
  45. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/async_batch.py +0 -0
  46. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/create_entity.py +0 -0
  47. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/download_files.py +0 -0
  48. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/edit_recipe_inputs.py +0 -0
  49. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  50. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  51. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  52. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/integration-server/pyproject.toml +0 -0
  53. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/invoke_uploader.py +0 -0
  54. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/set_recipe_metadata_file.py +0 -0
  55. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/set_recipe_output_file_sdk.py +0 -0
  56. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/examples/upload_files.py +0 -0
  57. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/__init__.py +0 -0
  58. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/argument_parser/__init__.py +0 -0
  59. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/argument_parser/_is_enum.py +0 -0
  60. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  61. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/argument_parser/case_convert.py +0 -0
  62. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/__init__.py +0 -0
  63. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/_blob_session.py +0 -0
  64. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  65. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/_local_session.py +0 -0
  66. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/_s3_session.py +0 -0
  67. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  68. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  69. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  70. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/py.typed +0 -0
  71. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/__init__.py +0 -0
  72. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/annotation.py +0 -0
  73. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/missing_sentry.py +0 -0
  74. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/opaque_key.py +0 -0
  75. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/serial_alias.py +0 -0
  76. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/serial_class.py +0 -0
  77. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/serial_generic.py +0 -0
  78. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/serial_union.py +0 -0
  79. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization/yaml.py +0 -0
  80. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization_util/__init__.py +0 -0
  81. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  82. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  83. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization_util/dataclasses.py +0 -0
  84. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/serialization_util/serialization_helpers.py +0 -0
  85. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/strenum_compat/__init__.py +0 -0
  86. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/strenum_compat/strenum_compat.py +0 -0
  87. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/__init__.py +0 -0
  88. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/__main__.py +0 -0
  89. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  90. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  91. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  92. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/config.py +0 -0
  93. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/cross_output_links.py +0 -0
  94. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/emit_io_ts.py +0 -0
  95. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/emit_open_api_util.py +0 -0
  96. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/emit_python.py +0 -0
  97. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/emit_typescript.py +0 -0
  98. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/emit_typescript_util.py +0 -0
  99. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/load_types.py +0 -0
  100. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/parts/base.py.prepart +0 -0
  101. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  102. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/test.py +0 -0
  103. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/type_info/__main__.py +0 -0
  104. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/util.py +0 -0
  105. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/value_spec/__init__.py +0 -0
  106. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/value_spec/__main__.py +0 -0
  107. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  108. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  109. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pkgs/type_spec/value_spec/types.py +0 -0
  110. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/pyproject.toml +0 -0
  111. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/setup.cfg +0 -0
  112. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/__init__.py +0 -0
  113. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/core/__init__.py +0 -0
  114. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/core/async_batch.py +0 -0
  115. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/core/client.py +0 -0
  116. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/core/environment.py +0 -0
  117. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/core/file_upload.py +0 -0
  118. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/core/types.py +0 -0
  119. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/__init__.py +0 -0
  120. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/cli.py +0 -0
  121. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/construct_client.py +0 -0
  122. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/cron.py +0 -0
  123. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/db/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/db/connect.py +0 -0
  125. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/db/session.py +0 -0
  126. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/entrypoint.py +0 -0
  127. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/executors/__init__.py +0 -0
  128. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/executors/executors.py +0 -0
  129. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  130. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/executors/script_executor.py +0 -0
  131. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/job.py +0 -0
  132. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  134. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  135. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  136. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  138. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  139. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  140. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  141. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  142. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  144. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  145. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  146. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  147. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  148. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/types.py +0 -0
  149. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/queue_runner/worker.py +0 -0
  150. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/scan_profiles.py +0 -0
  151. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/scheduler.py +0 -0
  152. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  153. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  154. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/server.py +0 -0
  155. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/telemetry.py +0 -0
  156. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  157. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/py.typed +0 -0
  158. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/__init__.py +0 -0
  159. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/batch/__init__.py +0 -0
  160. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/batch/execute_batch.py +0 -0
  161. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  162. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/chemical/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  164. {uncountablepythonsdk-0.0.109/uncountable/types/api/entity → uncountablepythonsdk-0.0.111/uncountable/types/api/condition_parameters}/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.109/uncountable/types/api/equipment → uncountablepythonsdk-0.0.111/uncountable/types/api/entity}/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/create_entities.py +0 -0
  167. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/create_entity.py +0 -0
  168. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  169. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/get_entities_data.py +0 -0
  170. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  171. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/list_entities.py +0 -0
  172. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/lock_entity.py +0 -0
  173. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/lookup_entity.py +0 -0
  174. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  175. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  176. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/set_values.py +0 -0
  177. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  178. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/entity/unlock_entity.py +0 -0
  179. {uncountablepythonsdk-0.0.109/uncountable/types/api/field_options → uncountablepythonsdk-0.0.111/uncountable/types/api/equipment}/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  181. {uncountablepythonsdk-0.0.109/uncountable/types/api/files → uncountablepythonsdk-0.0.111/uncountable/types/api/field_options}/__init__.py +0 -0
  182. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  183. {uncountablepythonsdk-0.0.109/uncountable/types/api/id_source → uncountablepythonsdk-0.0.111/uncountable/types/api/files}/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/files/download_file.py +0 -0
  185. {uncountablepythonsdk-0.0.109/uncountable/types/api/input_groups → uncountablepythonsdk-0.0.111/uncountable/types/api/id_source}/__init__.py +0 -0
  186. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/id_source/list_id_source.py +0 -0
  187. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/id_source/match_id_source.py +0 -0
  188. {uncountablepythonsdk-0.0.109/uncountable/types/api/inputs → uncountablepythonsdk-0.0.111/uncountable/types/api/input_groups}/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  190. {uncountablepythonsdk-0.0.109/uncountable/types/api/material_families → uncountablepythonsdk-0.0.111/uncountable/types/api/inputs}/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/get_input_data.py +0 -0
  192. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/get_input_names.py +0 -0
  193. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  194. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  195. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/set_input_category.py +0 -0
  196. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  197. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  198. {uncountablepythonsdk-0.0.109/uncountable/types/api/outputs → uncountablepythonsdk-0.0.111/uncountable/types/api/material_families}/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  200. {uncountablepythonsdk-0.0.109/uncountable/types/api/permissions → uncountablepythonsdk-0.0.111/uncountable/types/api/outputs}/__init__.py +0 -0
  201. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/outputs/get_output_data.py +0 -0
  202. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/outputs/get_output_names.py +0 -0
  203. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  204. {uncountablepythonsdk-0.0.109/uncountable/types/api/project → uncountablepythonsdk-0.0.111/uncountable/types/api/permissions}/__init__.py +0 -0
  205. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  206. {uncountablepythonsdk-0.0.109/uncountable/types/api/recipe_links → uncountablepythonsdk-0.0.111/uncountable/types/api/project}/__init__.py +0 -0
  207. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/project/get_projects.py +0 -0
  208. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/project/get_projects_data.py +0 -0
  209. {uncountablepythonsdk-0.0.109/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.111/uncountable/types/api/recipe_links}/__init__.py +0 -0
  210. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  211. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  212. {uncountablepythonsdk-0.0.109/uncountable/types/api/recipes → uncountablepythonsdk-0.0.111/uncountable/types/api/recipe_metadata}/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  214. {uncountablepythonsdk-0.0.109/uncountable/types/api/triggers → uncountablepythonsdk-0.0.111/uncountable/types/api/recipes}/__init__.py +0 -0
  215. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  216. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  217. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  218. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  219. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  220. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  221. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/create_recipe.py +0 -0
  222. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/create_recipes.py +0 -0
  223. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  224. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  225. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_curve.py +0 -0
  226. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  227. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  228. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  229. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  230. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  231. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  232. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  233. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  234. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  235. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  236. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  237. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  238. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  239. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  240. {uncountablepythonsdk-0.0.109/uncountable/types/api/uploader → uncountablepythonsdk-0.0.111/uncountable/types/api/triggers}/__init__.py +0 -0
  241. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/triggers/run_trigger.py +0 -0
  242. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  243. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/async_batch.py +0 -0
  244. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/async_jobs.py +0 -0
  245. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/async_jobs_t.py +0 -0
  246. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/auth_retrieval.py +0 -0
  247. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/auth_retrieval_t.py +0 -0
  248. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/base.py +0 -0
  249. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/base_t.py +0 -0
  250. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/calculations.py +0 -0
  251. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/calculations_t.py +0 -0
  252. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/chemical_structure.py +0 -0
  253. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/chemical_structure_t.py +0 -0
  254. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/client_config.py +0 -0
  255. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/client_config_t.py +0 -0
  256. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/curves.py +0 -0
  257. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/curves_t.py +0 -0
  258. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/entity.py +0 -0
  259. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/experiment_groups.py +0 -0
  260. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/experiment_groups_t.py +0 -0
  261. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/field_values.py +0 -0
  262. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/field_values_t.py +0 -0
  263. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/fields.py +0 -0
  264. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/fields_t.py +0 -0
  265. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/generic_upload.py +0 -0
  266. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/generic_upload_t.py +0 -0
  267. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/id_source.py +0 -0
  268. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/id_source_t.py +0 -0
  269. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/identifier.py +0 -0
  270. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/identifier_t.py +0 -0
  271. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/input_attributes.py +0 -0
  272. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/input_attributes_t.py +0 -0
  273. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/inputs.py +0 -0
  274. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/inputs_t.py +0 -0
  275. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/integration_server.py +0 -0
  276. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/integration_server_t.py +0 -0
  277. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/job_definition.py +0 -0
  278. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/job_definition_t.py +0 -0
  279. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/outputs.py +0 -0
  280. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/outputs_t.py +0 -0
  281. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/overrides.py +0 -0
  282. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/overrides_t.py +0 -0
  283. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/permissions.py +0 -0
  284. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/permissions_t.py +0 -0
  285. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/phases.py +0 -0
  286. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/phases_t.py +0 -0
  287. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/post_base.py +0 -0
  288. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/post_base_t.py +0 -0
  289. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/queued_job.py +0 -0
  290. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/queued_job_t.py +0 -0
  291. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_identifiers.py +0 -0
  292. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_identifiers_t.py +0 -0
  293. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_inputs.py +0 -0
  294. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_inputs_t.py +0 -0
  295. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_links.py +0 -0
  296. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_links_t.py +0 -0
  297. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_metadata.py +0 -0
  298. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_metadata_t.py +0 -0
  299. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_output_metadata.py +0 -0
  300. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_output_metadata_t.py +0 -0
  301. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_tags.py +0 -0
  302. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_tags_t.py +0 -0
  303. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_workflow_steps.py +0 -0
  304. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  305. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipes.py +0 -0
  306. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/recipes_t.py +0 -0
  307. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/response.py +0 -0
  308. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/response_t.py +0 -0
  309. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/secret_retrieval.py +0 -0
  310. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/secret_retrieval_t.py +0 -0
  311. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/units.py +0 -0
  312. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/units_t.py +0 -0
  313. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/users.py +0 -0
  314. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/users_t.py +0 -0
  315. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/webhook_job.py +0 -0
  316. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/webhook_job_t.py +0 -0
  317. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/uncountable/types/workflows.py +0 -0
  318. {uncountablepythonsdk-0.0.109 → uncountablepythonsdk-0.0.111}/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.109
3
+ Version: 0.0.111
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.109
3
+ Version: 0.0.111
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
@@ -26,6 +26,7 @@ docs/static/favicons/mstile-150x150.png
26
26
  docs/static/favicons/safari-pinned-tab.svg
27
27
  examples/async_batch.py
28
28
  examples/create_entity.py
29
+ examples/create_ingredient_sdk.py
29
30
  examples/download_files.py
30
31
  examples/edit_recipe_inputs.py
31
32
  examples/invoke_uploader.py
@@ -159,6 +160,8 @@ uncountable/types/client_config.py
159
160
  uncountable/types/client_config_t.py
160
161
  uncountable/types/curves.py
161
162
  uncountable/types/curves_t.py
163
+ uncountable/types/data.py
164
+ uncountable/types/data_t.py
162
165
  uncountable/types/entity.py
163
166
  uncountable/types/entity_t.py
164
167
  uncountable/types/experiment_groups.py
@@ -227,6 +230,8 @@ uncountable/types/api/batch/execute_batch.py
227
230
  uncountable/types/api/batch/execute_batch_load_async.py
228
231
  uncountable/types/api/chemical/__init__.py
229
232
  uncountable/types/api/chemical/convert_chemical_formats.py
233
+ uncountable/types/api/condition_parameters/__init__.py
234
+ uncountable/types/api/condition_parameters/upsert_condition_match.py
230
235
  uncountable/types/api/entity/__init__.py
231
236
  uncountable/types/api/entity/create_entities.py
232
237
  uncountable/types/api/entity/create_entity.py
@@ -0,0 +1,34 @@
1
+ import os
2
+
3
+ import uncountable.types.api.inputs.create_inputs as create_inputs
4
+ from uncountable.core import AuthDetailsApiKey, Client
5
+ from uncountable.types import field_values_t, inputs_t
6
+
7
+ client = Client(
8
+ base_url="http://localhost:5000",
9
+ auth_details=AuthDetailsApiKey(
10
+ api_id=os.environ["UNC_API_ID"],
11
+ api_secret_key=os.environ["UNC_API_SECRET_KEY"],
12
+ ),
13
+ )
14
+
15
+ client.external_create_inputs(
16
+ inputs_to_create=[
17
+ create_inputs.InputToCreate(
18
+ name="sdk test ing",
19
+ material_family_ids=[1],
20
+ quantity_type=inputs_t.IngredientQuantityType.NUMERIC,
21
+ type=inputs_t.IngredientType.INGREDIENT,
22
+ field_values=[
23
+ field_values_t.FieldRefNameValue(
24
+ field_ref_name="carrieTestNumericField",
25
+ value="10",
26
+ ),
27
+ field_values_t.FieldRefNameValue(
28
+ field_ref_name="carrieTestCheckboxField",
29
+ value=True,
30
+ ),
31
+ ],
32
+ )
33
+ ]
34
+ )
@@ -12,13 +12,13 @@ from enum import Enum, auto
12
12
  from importlib import resources
13
13
 
14
14
  import dateutil.parser
15
+ import msgspec.yaml
15
16
 
16
17
  from pkgs.serialization import (
17
18
  MissingSentryType,
18
19
  OpaqueKey,
19
20
  get_serial_class_data,
20
21
  get_serial_union_data,
21
- yaml,
22
22
  )
23
23
 
24
24
  from ._is_enum import is_string_enum_class
@@ -561,11 +561,11 @@ class ParserBase(ABC, typing.Generic[T]):
561
561
 
562
562
  def parse_yaml_file(self, path: str) -> T:
563
563
  with open(path, encoding="utf-8") as data_in:
564
- return self.parse_storage(yaml.safe_load(data_in))
564
+ return self.parse_storage(msgspec.yaml.decode(data_in.read()))
565
565
 
566
566
  def parse_yaml_resource(self, package: resources.Package, resource: str) -> T:
567
567
  with resources.open_text(package, resource) as fp:
568
- return self.parse_storage(yaml.safe_load(fp))
568
+ return self.parse_storage(msgspec.yaml.decode(fp.read()))
569
569
 
570
570
 
571
571
  class CachedParser(ParserBase[T], typing.Generic[T]):
@@ -624,7 +624,12 @@ class SpecTypeDefnUnion(SpecTypeDefn):
624
624
  prop_type = unwrap_literal_type(discriminator_type.spec_type)
625
625
  assert prop_type is not None
626
626
  assert prop_type.is_value_to_string()
627
- discriminant = str(prop_type.value)
627
+ value_type = prop_type.value_type
628
+ if isinstance(value_type, SpecTypeDefnStringEnum):
629
+ assert isinstance(prop_type.value, str)
630
+ discriminant = value_type.values[prop_type.value].value
631
+ else:
632
+ discriminant = str(prop_type.value)
628
633
  assert discriminant not in self.discriminator_map, (
629
634
  f"duplicated-discriminant, {discriminant} in {sub_type}"
630
635
  )
@@ -793,6 +798,7 @@ class SpecTypeDefnStringEnum(SpecTypeDefn):
793
798
  TOKEN_ENDPOINT = "$endpoint"
794
799
  TOKEN_EMIT_IO_TS = "$emit_io_ts"
795
800
  TOKEN_EMIT_TYPE_INFO = "$emit_type_info"
801
+ TOKEN_EMIT_TYPE_INFO_PYTHON = "$emit_type_info_python"
796
802
  # The import token is only for explicit ordering of the files, to process constants
797
803
  # and enums correctly. It does not impact the final generation of files, or the
798
804
  # language imports. Those are still auto-resolved.
@@ -1161,6 +1167,7 @@ class SpecNamespace:
1161
1167
  self.endpoint: SpecEndpoint | None = None
1162
1168
  self.emit_io_ts = False
1163
1169
  self.emit_type_info = False
1170
+ self.emit_type_info_python = False
1164
1171
  self.derive_types_from_io_ts = False
1165
1172
  self._imports: list[str] | None = None
1166
1173
  self.path = name.split(".")
@@ -1215,6 +1222,11 @@ class SpecNamespace:
1215
1222
  self.emit_type_info = defn
1216
1223
  continue
1217
1224
 
1225
+ if name == TOKEN_EMIT_TYPE_INFO_PYTHON:
1226
+ assert defn in (True, False)
1227
+ self.emit_type_info_python = defn
1228
+ continue
1229
+
1218
1230
  if name == TOKEN_IMPORT:
1219
1231
  assert self._imports is None
1220
1232
  imports = [defn] if isinstance(defn, str) else defn
@@ -1276,7 +1288,12 @@ class SpecNamespace:
1276
1288
  parsed_name = parse_type_str(full_name)[0]
1277
1289
  name = parsed_name.name
1278
1290
 
1279
- if name in [TOKEN_EMIT_IO_TS, TOKEN_EMIT_TYPE_INFO, TOKEN_IMPORT]:
1291
+ if name in [
1292
+ TOKEN_EMIT_IO_TS,
1293
+ TOKEN_EMIT_TYPE_INFO,
1294
+ TOKEN_IMPORT,
1295
+ TOKEN_EMIT_TYPE_INFO_PYTHON,
1296
+ ]:
1280
1297
  continue
1281
1298
 
1282
1299
  builder.push_where(name)
@@ -7,6 +7,7 @@ WORK-IN-PROGRESS, DON'T USE!
7
7
  import dataclasses
8
8
  import json
9
9
  import re
10
+ from enum import StrEnum
10
11
  from typing import Collection, assert_never, cast
11
12
 
12
13
  from pkgs.serialization import yaml
@@ -62,6 +63,10 @@ base_name_map = {
62
63
  }
63
64
 
64
65
 
66
+ class OpenAPIDefaultBehavior(StrEnum):
67
+ OPTIONAL_WITH_DEFAULT = "optional_with_default"
68
+
69
+
65
70
  def _rewrite_with_notice(
66
71
  file_path: str, file_content: str, *, notice: str = MODIFY_NOTICE
67
72
  ) -> bool:
@@ -432,6 +437,18 @@ def _emit_namespace(
432
437
  _rewrite_with_notice(path, yaml.dumps(oa_namespace, sort_keys=False))
433
438
 
434
439
 
440
+ def _get_openapi_default_behavior(
441
+ prop: builder.SpecProperty,
442
+ ) -> OpenAPIDefaultBehavior | None:
443
+ if prop.ext_info is None or prop.ext_info.get("open_api") is None:
444
+ return None
445
+ value_passed = prop.ext_info["open_api"].get("default_required_behavior")
446
+ if value_passed is None:
447
+ return None
448
+ assert isinstance(value_passed, str)
449
+ return OpenAPIDefaultBehavior(value_passed)
450
+
451
+
435
452
  def _emit_type(
436
453
  ctx: EmitOpenAPIContext,
437
454
  stype: builder.SpecType,
@@ -495,6 +512,16 @@ def _emit_type(
495
512
  # arguments, thus treat like extant==missing
496
513
  # IMPROVE: if we can decide they are meant as output instead, then
497
514
  # they should be marked as required
515
+ openapi_default_beahvior = _get_openapi_default_behavior(prop)
516
+ match openapi_default_beahvior:
517
+ case None:
518
+ pass
519
+ case OpenAPIDefaultBehavior.OPTIONAL_WITH_DEFAULT:
520
+ ref_type.nullable = True
521
+ assert prop.default is not None, (
522
+ "optional_with_default requires default"
523
+ )
524
+ ref_type.default = prop.default
498
525
  properties[prop_name] = ref_type
499
526
  elif prop.extant == builder.PropertyExtant.missing:
500
527
  # Unlike optional below, missing does not imply null is possible. They
@@ -1,14 +1,23 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from enum import StrEnum
3
3
 
4
+ from pkgs.serialization_util import JsonValue
5
+
4
6
 
5
7
  class OpenAPIType(ABC):
6
8
  description: str | None = None
7
9
  nullable: bool = False
10
+ default: JsonValue
8
11
 
9
- def __init__(self, description: str | None = None, nullable: bool = False) -> None:
12
+ def __init__(
13
+ self,
14
+ description: str | None = None,
15
+ nullable: bool = False,
16
+ default: JsonValue = None,
17
+ ) -> None:
10
18
  self.description = description
11
19
  self.nullable = nullable
20
+ self.default = default
12
21
 
13
22
  @abstractmethod
14
23
  def asdict(self) -> dict[str, object]:
@@ -19,6 +28,8 @@ class OpenAPIType(ABC):
19
28
  emitted["description"] = self.description
20
29
  if self.nullable:
21
30
  emitted["nullable"] = self.nullable
31
+ if self.default is not None:
32
+ emitted["default"] = self.default
22
33
  return emitted
23
34
 
24
35
 
@@ -116,7 +116,7 @@ def asdict_for_yaml_dump(dataclass_instance: Any) -> Any:
116
116
 
117
117
 
118
118
  def emit_type_info_python(build: builder.SpecBuilder, output: str) -> None:
119
- type_map = _build_map_all(build)
119
+ type_map = _build_map_all(build, python=True)
120
120
 
121
121
  stripped = _dict_null_strip(asdict_for_yaml_dump(type_map))
122
122
 
@@ -176,11 +176,14 @@ class MapAll:
176
176
  namespaces: dict[str, MapNamespace]
177
177
 
178
178
 
179
- def _build_map_all(build: builder.SpecBuilder) -> MapAll:
179
+ def _build_map_all(build: builder.SpecBuilder, *, python: bool = False) -> MapAll:
180
180
  map_all = MapAll(namespaces={})
181
181
 
182
182
  for namespace in build.namespaces.values():
183
- if not namespace.emit_type_info:
183
+ if not python and not namespace.emit_type_info:
184
+ continue
185
+
186
+ if python and not namespace.emit_type_info_python:
184
187
  continue
185
188
 
186
189
  map_namespace = MapNamespace(types={})
@@ -296,6 +299,21 @@ def _extract_and_validate_layout(
296
299
  return layout
297
300
 
298
301
 
302
+ def _pull_property_from_type_recursively(
303
+ stype: builder.SpecTypeDefnObject,
304
+ property_name: str,
305
+ ) -> builder.SpecProperty | None:
306
+ assert stype.properties is not None
307
+ prop = stype.properties.get(property_name)
308
+ if prop is not None:
309
+ return prop
310
+
311
+ if stype.base is None:
312
+ return None
313
+
314
+ return _pull_property_from_type_recursively(stype.base, property_name)
315
+
316
+
299
317
  def _validate_type_ext_info(
300
318
  stype: builder.SpecTypeDefnObject,
301
319
  ) -> tuple[ExtInfoLayout | None, type_info_t.ExtInfo | None]:
@@ -306,9 +324,15 @@ def _validate_type_ext_info(
306
324
  if ext_info.label_fields is not None:
307
325
  assert stype.properties is not None
308
326
  for name in ext_info.label_fields:
309
- prop = stype.properties.get(name)
327
+ prop = _pull_property_from_type_recursively(stype, name)
310
328
  assert prop is not None, f"missing-label-field:{name}"
311
329
 
330
+ if ext_info.actions is not None:
331
+ assert stype.properties is not None
332
+ for action in ext_info.actions:
333
+ prop = _pull_property_from_type_recursively(stype, action.property)
334
+ assert prop is not None, f"missing-action-field:{action.property}"
335
+
312
336
  if not stype.is_base and isinstance(stype.base, builder.SpecTypeDefnObject):
313
337
  base_layout, _ = _validate_type_ext_info(stype.base)
314
338
  else:
@@ -416,6 +440,8 @@ def _parse_ext_info(in_ext: Any) -> type_info_t.ExtInfo | None:
416
440
  df["result_type"] = serialize_for_storage(converted)
417
441
  mod_ext["data_format"] = df
418
442
 
443
+ if "open_api" in mod_ext:
444
+ del mod_ext["open_api"]
419
445
  return ext_info_parser.parse_storage(mod_ext)
420
446
 
421
447
 
@@ -25,6 +25,7 @@ from .api.recipes import create_recipe as create_recipe_t
25
25
  from .api.recipe_links import create_recipe_link as create_recipe_link_t
26
26
  from .api.recipes import create_recipes as create_recipes_t
27
27
  from . import curves_t as curves_t
28
+ from . import data_t as data_t
28
29
  from .api.recipes import disassociate_recipe_as_input as disassociate_recipe_as_input_t
29
30
  from .api.files import download_file as download_file_t
30
31
  from .api.recipes import edit_recipe_inputs as edit_recipe_inputs_t
@@ -106,6 +107,7 @@ from . import units_t as units_t
106
107
  from .api.entity import unlock_entity as unlock_entity_t
107
108
  from .api.recipes import unlock_recipes as unlock_recipes_t
108
109
  from .api.material_families import update_entity_material_families as update_entity_material_families_t
110
+ from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
109
111
  from .api.field_options import upsert_field_options as upsert_field_options_t
110
112
  from . import users_t as users_t
111
113
  from . import webhook_job_t as webhook_job_t
@@ -136,6 +138,7 @@ __all__: list[str] = [
136
138
  "create_recipe_link_t",
137
139
  "create_recipes_t",
138
140
  "curves_t",
141
+ "data_t",
139
142
  "disassociate_recipe_as_input_t",
140
143
  "download_file_t",
141
144
  "edit_recipe_inputs_t",
@@ -217,6 +220,7 @@ __all__: list[str] = [
217
220
  "unlock_entity_t",
218
221
  "unlock_recipes_t",
219
222
  "update_entity_material_families_t",
223
+ "upsert_condition_match_t",
220
224
  "upsert_field_options_t",
221
225
  "users_t",
222
226
  "webhook_job_t",
@@ -0,0 +1,71 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from ... import async_batch_t
13
+ from ... import identifier_t
14
+
15
+ __all__: list[str] = [
16
+ "Arguments",
17
+ "ConditionParameter",
18
+ "Data",
19
+ "ENDPOINT_METHOD",
20
+ "ENDPOINT_PATH",
21
+ "MatchType",
22
+ ]
23
+
24
+ ENDPOINT_METHOD = "POST"
25
+ ENDPOINT_PATH = "api/external/condition_parameters/upsert_condition_match"
26
+
27
+
28
+ # DO NOT MODIFY -- This file is generated by type_spec
29
+ @serial_class(
30
+ named_type_path="sdk.api.condition_parameters.upsert_condition_match.ConditionParameter",
31
+ to_string_values={"max_value", "min_value"},
32
+ )
33
+ @dataclasses.dataclass(kw_only=True)
34
+ class ConditionParameter:
35
+ condition_parameter_key: identifier_t.IdentifierKey
36
+ allow_null: bool
37
+ min_value: Decimal | None = None
38
+ max_value: Decimal | None = None
39
+ categorical_values: list[str | None] | None = None
40
+ match_type: MatchType | None = None
41
+
42
+
43
+ # DO NOT MODIFY -- This file is generated by type_spec
44
+ class MatchType(StrEnum):
45
+ ALL = "all"
46
+ EQ = "eq"
47
+ EQCATEGORICAL = "eqCategorical"
48
+ RANGE = "range"
49
+
50
+
51
+ # DO NOT MODIFY -- This file is generated by type_spec
52
+ @serial_class(
53
+ named_type_path="sdk.api.condition_parameters.upsert_condition_match.Arguments",
54
+ )
55
+ @dataclasses.dataclass(kw_only=True)
56
+ class Arguments:
57
+ explicit_name: bool = False
58
+ name: str | None = None
59
+ condition_parameters: list[ConditionParameter] | None = None
60
+ output_conditions: list[identifier_t.IdentifierKey] | None = None
61
+ existing_condition_match: identifier_t.IdentifierKey | None = None
62
+
63
+
64
+ # DO NOT MODIFY -- This file is generated by type_spec
65
+ @serial_class(
66
+ named_type_path="sdk.api.condition_parameters.upsert_condition_match.Data",
67
+ )
68
+ @dataclasses.dataclass(kw_only=True)
69
+ class Data(async_batch_t.AsyncBatchActionReturn):
70
+ pass
71
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import base_t
12
+ from ... import field_values_t
12
13
  from ... import input_attributes_t
13
14
  from ... import inputs_t
14
15
 
@@ -46,6 +47,7 @@ class InputToCreate:
46
47
  type: typing.Literal[inputs_t.IngredientType.INGREDIENT] | typing.Literal[inputs_t.IngredientType.PROCESS_PARAMETER]
47
48
  attributes: list[input_attributes_t.InputAttributeValue] | None = None
48
49
  category_id: base_t.ObjectId | None = None
50
+ field_values: list[field_values_t.FieldRefNameValue] | None = None
49
51
 
50
52
 
51
53
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -21,6 +21,7 @@ __all__: list[str] = [
21
21
  "Data",
22
22
  "ENDPOINT_METHOD",
23
23
  "ENDPOINT_PATH",
24
+ "MixStepMatchStrategy",
24
25
  "PlaceholderBase",
25
26
  "PlaceholderDisplayMode",
26
27
  "PlaceholderType",
@@ -58,6 +59,12 @@ class RecipeInputEditType(StrEnum):
58
59
  SET_PLACEHOLDER = "set_placeholder"
59
60
 
60
61
 
62
+ # DO NOT MODIFY -- This file is generated by type_spec
63
+ class MixStepMatchStrategy(StrEnum):
64
+ FIRST = "first"
65
+ LAST = "last"
66
+
67
+
61
68
  # DO NOT MODIFY -- This file is generated by type_spec
62
69
  @serial_class(
63
70
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditBase",
@@ -101,6 +108,7 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
101
108
  @dataclasses.dataclass(kw_only=True)
102
109
  class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
103
110
  type: typing.Literal[RecipeInputEditType.CHANGE_BASIS] = RecipeInputEditType.CHANGE_BASIS
111
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
104
112
 
105
113
 
106
114
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -112,6 +120,7 @@ class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
112
120
  class RecipeInputEditUpsertInput(RecipeInputEditInputBase):
113
121
  type: typing.Literal[RecipeInputEditType.UPSERT_INPUT] = RecipeInputEditType.UPSERT_INPUT
114
122
  clear_first: bool
123
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
115
124
 
116
125
 
117
126
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -134,6 +143,7 @@ class RecipeInputEditSetLot(RecipeInputEditBase):
134
143
  type: typing.Literal[RecipeInputEditType.SET_LOT] = RecipeInputEditType.SET_LOT
135
144
  ingredient_key: identifier_t.IdentifierKey
136
145
  ingredient_lot_recipe_key: identifier_t.IdentifierKey
146
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
137
147
 
138
148
 
139
149
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -169,6 +179,7 @@ class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
169
179
  type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
170
180
  clear_first: bool
171
181
  annotations: list[AnnotationEdit]
182
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
172
183
 
173
184
 
174
185
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -238,6 +249,7 @@ class RecipeInputEditPlaceholder(RecipeInputEditBase):
238
249
  type: typing.Literal[RecipeInputEditType.SET_PLACEHOLDER] = RecipeInputEditType.SET_PLACEHOLDER
239
250
  ingredient_key: identifier_t.IdentifierKey
240
251
  placeholder: RecipeInputPlaceholder
252
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
241
253
 
242
254
 
243
255
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base_t
13
+ from ... import data_t
13
14
  from ... import field_values_t
14
15
  from ... import recipes_t
15
16
  from ... import response_t
@@ -59,6 +60,7 @@ class RecipeOutputValue:
59
60
  value_numeric: Decimal | None = None
60
61
  value_str: str | None = None
61
62
  value_curve: CurveValues | None = None
63
+ value_color: data_t.RecipeOutputColor | None = None
62
64
  formatting: recipes_t.RecipeAttributeFormatting | None = None
63
65
  field_values: list[field_values_t.ArgumentValueRefName | field_values_t.ArgumentValueId] | None = None
64
66
 
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -28,6 +28,7 @@ from uncountable.types import recipe_metadata_t
28
28
  from uncountable.types import recipe_workflow_steps_t
29
29
  import uncountable.types.api.entity.set_entity_field_values as set_entity_field_values_t
30
30
  import uncountable.types.api.recipes.set_recipe_metadata as set_recipe_metadata_t
31
+ import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
31
32
  import uuid
32
33
  from abc import ABC, abstractmethod
33
34
  from pkgs.serialization_util import serialize_for_api
@@ -489,3 +490,42 @@ class AsyncBatchProcessorBase(ABC):
489
490
  path=req.path,
490
491
  batch_reference=req.batch_reference,
491
492
  )
493
+
494
+ def upsert_condition_match(
495
+ self,
496
+ *,
497
+ explicit_name: bool = False,
498
+ name: str | None = None,
499
+ condition_parameters: list[upsert_condition_match_t.ConditionParameter] | None = None,
500
+ output_conditions: list[identifier_t.IdentifierKey] | None = None,
501
+ existing_condition_match: identifier_t.IdentifierKey | None = None,
502
+ depends_on: list[str] | None = None,
503
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
504
+ """Creates or updates condition match
505
+
506
+ :param depends_on: A list of batch reference keys to process before processing this request
507
+ """
508
+ args = upsert_condition_match_t.Arguments(
509
+ name=name,
510
+ condition_parameters=condition_parameters,
511
+ output_conditions=output_conditions,
512
+ explicit_name=explicit_name,
513
+ existing_condition_match=existing_condition_match,
514
+ )
515
+ json_data = serialize_for_api(args)
516
+
517
+ batch_reference = str(uuid.uuid4())
518
+
519
+ req = async_batch_t.AsyncBatchRequest(
520
+ path=async_batch_t.AsyncBatchRequestPath.UPSERT_CONDITION_MATCH,
521
+ data=json_data,
522
+ depends_on=depends_on,
523
+ batch_reference=batch_reference,
524
+ )
525
+
526
+ self._enqueue(req)
527
+
528
+ return async_batch_t.QueuedAsyncBatchRequest(
529
+ path=req.path,
530
+ batch_reference=req.batch_reference,
531
+ )
@@ -41,6 +41,8 @@ class AsyncBatchRequestPath(StrEnum):
41
41
  CREATE_OR_UPDATE_ENTITY = "entity/create_or_update_entity"
42
42
  ADD_TIME_SERIES_DATA = "recipes/add_time_series_data"
43
43
  LOOKUP_ENTITY = "entity/lookup_entity"
44
+ CREATE_RECIPE_LINK = "recipe_links/create_recipe_link"
45
+ UPSERT_CONDITION_MATCH = "condition_parameters/upsert_condition_match"
44
46
 
45
47
 
46
48
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -88,6 +88,7 @@ import uncountable.types.api.recipes.unarchive_recipes as unarchive_recipes_t
88
88
  import uncountable.types.api.entity.unlock_entity as unlock_entity_t
89
89
  import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
90
90
  import uncountable.types.api.material_families.update_entity_material_families as update_entity_material_families_t
91
+ import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
91
92
  import uncountable.types.api.field_options.upsert_field_options as upsert_field_options_t
92
93
  from abc import ABC, abstractmethod
93
94
  import dataclasses
@@ -1673,6 +1674,32 @@ class ClientMethods(ABC):
1673
1674
  )
1674
1675
  return self.do_request(api_request=api_request, return_type=update_entity_material_families_t.Data)
1675
1676
 
1677
+ def upsert_condition_match(
1678
+ self,
1679
+ *,
1680
+ explicit_name: bool = False,
1681
+ name: str | None = None,
1682
+ condition_parameters: list[upsert_condition_match_t.ConditionParameter] | None = None,
1683
+ output_conditions: list[identifier_t.IdentifierKey] | None = None,
1684
+ existing_condition_match: identifier_t.IdentifierKey | None = None,
1685
+ ) -> upsert_condition_match_t.Data:
1686
+ """Creates or updates condition match
1687
+
1688
+ """
1689
+ args = upsert_condition_match_t.Arguments(
1690
+ name=name,
1691
+ condition_parameters=condition_parameters,
1692
+ output_conditions=output_conditions,
1693
+ explicit_name=explicit_name,
1694
+ existing_condition_match=existing_condition_match,
1695
+ )
1696
+ api_request = APIRequest(
1697
+ method=upsert_condition_match_t.ENDPOINT_METHOD,
1698
+ endpoint=upsert_condition_match_t.ENDPOINT_PATH,
1699
+ args=args,
1700
+ )
1701
+ return self.do_request(api_request=api_request, return_type=upsert_condition_match_t.Data)
1702
+
1676
1703
  def upsert_field_options(
1677
1704
  self,
1678
1705
  *,
@@ -0,0 +1,12 @@
1
+ # ruff: noqa: E402 Q003
2
+ # fmt: off
3
+ # isort: skip_file
4
+ # DO NOT MODIFY -- This file is generated by type_spec
5
+ # Kept only for SDK backwards compatibility
6
+ from .data_t import RgbColor as RgbColor
7
+ from .data_t import CielabColor as CielabColor
8
+ from .data_t import XyzColor as XyzColor
9
+ from .data_t import LChColor as LChColor
10
+ from .data_t import HslColor as HslColor
11
+ from .data_t import RecipeOutputColor as RecipeOutputColor
12
+ # DO NOT MODIFY -- This file is generated by type_spec