UncountablePythonSDK 0.0.98__tar.gz → 0.0.100__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. {uncountablepythonsdk-0.0.98/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.100}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -1
  4. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization_util/serialization_helpers.py +1 -4
  5. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/builder.py +7 -1
  6. uncountablepythonsdk-0.0.100/pkgs/type_spec/cross_output_links.py +105 -0
  7. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/emit_python.py +8 -0
  8. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/emit_typescript.py +12 -2
  9. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/emit_typescript_util.py +2 -1
  10. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/load_types.py +15 -1
  11. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/__init__.py +2 -0
  12. uncountablepythonsdk-0.0.100/uncountable/types/api/entity/create_or_update_entity.py +46 -0
  13. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/material_families/update_entity_material_families.py +1 -1
  14. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipe_links/remove_recipe_link.py +1 -1
  15. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/async_batch_processor.py +38 -0
  16. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/async_batch_t.py +1 -0
  17. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/client_base.py +27 -2
  18. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/entity_t.py +1 -1
  19. uncountablepythonsdk-0.0.98/pkgs/serialization_util/_env_flags.py +0 -3
  20. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/.github/workflows/documentation.yml +0 -0
  21. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/.github/workflows/publish.yml +0 -0
  22. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/.gitignore +0 -0
  23. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/README.md +0 -0
  24. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  25. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  26. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  27. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/.gitignore +0 -0
  28. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/conf.py +0 -0
  29. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/index.md +0 -0
  30. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/justfile +0 -0
  31. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/quickstart.md +0 -0
  32. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/requirements.txt +0 -0
  33. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/android-chrome-192x192.png +0 -0
  34. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/android-chrome-512x512.png +0 -0
  35. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/apple-touch-icon.png +0 -0
  36. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/browserconfig.xml +0 -0
  37. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/favicon-16x16.png +0 -0
  38. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/favicon-32x32.png +0 -0
  39. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/manifest.json +0 -0
  40. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/mstile-150x150.png +0 -0
  41. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  42. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/docs/static/logo_blue.png +0 -0
  43. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/async_batch.py +0 -0
  44. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/create_entity.py +0 -0
  45. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/download_files.py +0 -0
  46. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/edit_recipe_inputs.py +0 -0
  47. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  48. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  49. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  50. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/integration-server/pyproject.toml +0 -0
  51. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/invoke_uploader.py +0 -0
  52. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/set_recipe_metadata_file.py +0 -0
  53. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/set_recipe_output_file_sdk.py +0 -0
  54. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/examples/upload_files.py +0 -0
  55. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/__init__.py +0 -0
  56. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/argument_parser/__init__.py +0 -0
  57. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/argument_parser/_is_enum.py +0 -0
  58. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  59. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/argument_parser/argument_parser.py +0 -0
  60. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/argument_parser/case_convert.py +0 -0
  61. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/__init__.py +0 -0
  62. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/_blob_session.py +0 -0
  63. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  64. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/_local_session.py +0 -0
  65. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/_s3_session.py +0 -0
  66. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  67. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  68. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  69. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/py.typed +0 -0
  70. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/__init__.py +0 -0
  71. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/annotation.py +0 -0
  72. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/missing_sentry.py +0 -0
  73. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/opaque_key.py +0 -0
  74. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/serial_alias.py +0 -0
  75. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/serial_class.py +0 -0
  76. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/serial_generic.py +0 -0
  77. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/serial_union.py +0 -0
  78. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization/yaml.py +0 -0
  79. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization_util/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  81. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  82. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/serialization_util/dataclasses.py +0 -0
  83. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/strenum_compat/__init__.py +0 -0
  84. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/strenum_compat/strenum_compat.py +0 -0
  85. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/__init__.py +0 -0
  86. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/__main__.py +0 -0
  87. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  88. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  89. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  90. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/config.py +0 -0
  91. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/emit_io_ts.py +0 -0
  92. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/emit_open_api.py +0 -0
  93. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/emit_open_api_util.py +0 -0
  94. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/open_api_util.py +0 -0
  95. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/parts/base.py.prepart +0 -0
  96. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  97. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/test.py +0 -0
  98. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/type_info/__main__.py +0 -0
  99. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  100. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/util.py +0 -0
  101. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/value_spec/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/value_spec/__main__.py +0 -0
  103. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  104. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  105. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pkgs/type_spec/value_spec/types.py +0 -0
  106. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/pyproject.toml +0 -0
  107. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/setup.cfg +0 -0
  108. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/__init__.py +0 -0
  109. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/core/__init__.py +0 -0
  110. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/core/async_batch.py +0 -0
  111. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/core/client.py +0 -0
  112. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/core/environment.py +0 -0
  113. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/core/file_upload.py +0 -0
  114. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/core/types.py +0 -0
  115. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/cli.py +0 -0
  117. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/construct_client.py +0 -0
  118. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/cron.py +0 -0
  119. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/db/__init__.py +0 -0
  120. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/db/connect.py +0 -0
  121. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/db/session.py +0 -0
  122. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/entrypoint.py +0 -0
  123. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/executors/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/executors/executors.py +0 -0
  125. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  126. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/executors/script_executor.py +0 -0
  127. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/job.py +0 -0
  128. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/__init__.py +0 -0
  129. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  130. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  131. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  132. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  134. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  135. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  136. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  137. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  138. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  140. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  141. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  142. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  143. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  144. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/types.py +0 -0
  145. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/queue_runner/worker.py +0 -0
  146. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/scan_profiles.py +0 -0
  147. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/scheduler.py +0 -0
  148. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  150. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/server.py +0 -0
  151. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/telemetry.py +0 -0
  152. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  153. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/py.typed +0 -0
  154. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/__init__.py +0 -0
  155. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/batch/__init__.py +0 -0
  156. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/batch/execute_batch.py +0 -0
  157. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  158. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/chemical/__init__.py +0 -0
  159. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  160. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/create_entities.py +0 -0
  162. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/create_entity.py +0 -0
  163. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/get_entities_data.py +0 -0
  164. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  165. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/list_entities.py +0 -0
  166. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/lock_entity.py +0 -0
  167. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  168. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  169. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/set_values.py +0 -0
  170. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  171. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/entity/unlock_entity.py +0 -0
  172. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/equipment/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  174. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/field_options/__init__.py +0 -0
  175. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  176. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/files/__init__.py +0 -0
  177. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/files/download_file.py +0 -0
  178. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/id_source/__init__.py +0 -0
  179. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/id_source/list_id_source.py +0 -0
  180. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/id_source/match_id_source.py +0 -0
  181. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/input_groups/__init__.py +0 -0
  182. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  183. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/create_inputs.py +0 -0
  185. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/get_input_data.py +0 -0
  186. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/get_input_names.py +0 -0
  187. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  188. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  189. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/set_input_category.py +0 -0
  190. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  191. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  192. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/material_families/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/outputs/__init__.py +0 -0
  194. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/outputs/get_output_data.py +0 -0
  195. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/outputs/get_output_names.py +0 -0
  196. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  197. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/permissions/__init__.py +0 -0
  198. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  199. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/project/__init__.py +0 -0
  200. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/project/get_projects.py +0 -0
  201. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/project/get_projects_data.py +0 -0
  202. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipe_links/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  204. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  205. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  206. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/__init__.py +0 -0
  207. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  208. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  209. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  210. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  211. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  212. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/create_recipe.py +0 -0
  213. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/create_recipes.py +0 -0
  214. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  215. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  216. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  217. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_curve.py +0 -0
  218. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  219. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  220. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  221. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  222. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  223. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  224. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  225. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  226. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  227. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  228. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  229. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  230. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  231. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  232. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  233. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/triggers/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/triggers/run_trigger.py +0 -0
  235. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/uploader/__init__.py +0 -0
  236. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  237. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/async_batch.py +0 -0
  238. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/async_jobs.py +0 -0
  239. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/async_jobs_t.py +0 -0
  240. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/auth_retrieval.py +0 -0
  241. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/auth_retrieval_t.py +0 -0
  242. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/base.py +0 -0
  243. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/base_t.py +0 -0
  244. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/calculations.py +0 -0
  245. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/calculations_t.py +0 -0
  246. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/chemical_structure.py +0 -0
  247. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/chemical_structure_t.py +0 -0
  248. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/client_config.py +0 -0
  249. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/client_config_t.py +0 -0
  250. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/curves.py +0 -0
  251. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/curves_t.py +0 -0
  252. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/entity.py +0 -0
  253. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/experiment_groups.py +0 -0
  254. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/experiment_groups_t.py +0 -0
  255. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/field_values.py +0 -0
  256. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/field_values_t.py +0 -0
  257. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/fields.py +0 -0
  258. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/fields_t.py +0 -0
  259. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/generic_upload.py +0 -0
  260. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/generic_upload_t.py +0 -0
  261. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/id_source.py +0 -0
  262. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/id_source_t.py +0 -0
  263. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/identifier.py +0 -0
  264. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/identifier_t.py +0 -0
  265. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/input_attributes.py +0 -0
  266. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/input_attributes_t.py +0 -0
  267. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/inputs.py +0 -0
  268. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/inputs_t.py +0 -0
  269. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/integration_server.py +0 -0
  270. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/integration_server_t.py +0 -0
  271. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/job_definition.py +0 -0
  272. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/job_definition_t.py +0 -0
  273. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/outputs.py +0 -0
  274. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/outputs_t.py +0 -0
  275. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/overrides.py +0 -0
  276. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/overrides_t.py +0 -0
  277. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/permissions.py +0 -0
  278. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/permissions_t.py +0 -0
  279. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/phases.py +0 -0
  280. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/phases_t.py +0 -0
  281. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/post_base.py +0 -0
  282. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/post_base_t.py +0 -0
  283. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/queued_job.py +0 -0
  284. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/queued_job_t.py +0 -0
  285. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_identifiers.py +0 -0
  286. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_identifiers_t.py +0 -0
  287. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_inputs.py +0 -0
  288. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_inputs_t.py +0 -0
  289. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_links.py +0 -0
  290. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_links_t.py +0 -0
  291. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_metadata.py +0 -0
  292. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_metadata_t.py +0 -0
  293. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_output_metadata.py +0 -0
  294. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_output_metadata_t.py +0 -0
  295. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_tags.py +0 -0
  296. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_tags_t.py +0 -0
  297. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_workflow_steps.py +0 -0
  298. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  299. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipes.py +0 -0
  300. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/recipes_t.py +0 -0
  301. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/response.py +0 -0
  302. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/response_t.py +0 -0
  303. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/secret_retrieval.py +0 -0
  304. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/secret_retrieval_t.py +0 -0
  305. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/units.py +0 -0
  306. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/units_t.py +0 -0
  307. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/users.py +0 -0
  308. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/users_t.py +0 -0
  309. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/webhook_job.py +0 -0
  310. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/webhook_job_t.py +0 -0
  311. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/workflows.py +0 -0
  312. {uncountablepythonsdk-0.0.98 → uncountablepythonsdk-0.0.100}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.98
3
+ Version: 0.0.100
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.2
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.98
3
+ Version: 0.0.100
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
@@ -61,7 +61,6 @@ pkgs/serialization/serial_generic.py
61
61
  pkgs/serialization/serial_union.py
62
62
  pkgs/serialization/yaml.py
63
63
  pkgs/serialization_util/__init__.py
64
- pkgs/serialization_util/_env_flags.py
65
64
  pkgs/serialization_util/_get_type_for_serialization.py
66
65
  pkgs/serialization_util/convert_to_snakecase.py
67
66
  pkgs/serialization_util/dataclasses.py
@@ -72,6 +71,7 @@ pkgs/type_spec/__init__.py
72
71
  pkgs/type_spec/__main__.py
73
72
  pkgs/type_spec/builder.py
74
73
  pkgs/type_spec/config.py
74
+ pkgs/type_spec/cross_output_links.py
75
75
  pkgs/type_spec/emit_io_ts.py
76
76
  pkgs/type_spec/emit_open_api.py
77
77
  pkgs/type_spec/emit_open_api_util.py
@@ -230,6 +230,7 @@ uncountable/types/api/chemical/convert_chemical_formats.py
230
230
  uncountable/types/api/entity/__init__.py
231
231
  uncountable/types/api/entity/create_entities.py
232
232
  uncountable/types/api/entity/create_entity.py
233
+ uncountable/types/api/entity/create_or_update_entity.py
233
234
  uncountable/types/api/entity/get_entities_data.py
234
235
  uncountable/types/api/entity/grant_entity_permissions.py
235
236
  uncountable/types/api/entity/list_entities.py
@@ -23,7 +23,6 @@ from pkgs.serialization import (
23
23
  get_serial_class_data,
24
24
  )
25
25
 
26
- from ._env_flags import USE_FASTJSON
27
26
  from ._get_type_for_serialization import SerializationType, get_serialization_type
28
27
  from .dataclasses import iterate_fields
29
28
 
@@ -110,9 +109,7 @@ def _get_dataclass_conversion_lookups(dataclass_type: Any) -> DataclassConversio
110
109
  if scd.has_to_string_value(key):
111
110
  value_conversion_functions[key] = _to_string_value
112
111
  elif scd.has_unconverted_value(key):
113
- value_conversion_functions[key] = (
114
- serialize_for_storage if USE_FASTJSON else identity
115
- )
112
+ value_conversion_functions[key] = serialize_for_storage
116
113
  else:
117
114
  value_conversion_functions[key] = serialize_for_api
118
115
 
@@ -13,6 +13,7 @@ from enum import Enum, StrEnum, auto
13
13
  from typing import Any, Self
14
14
 
15
15
  from . import util
16
+ from .cross_output_links import CrossOutputPaths
16
17
  from .util import parse_type_str, unused
17
18
 
18
19
  RawDict = dict[Any, Any]
@@ -1321,7 +1322,11 @@ class NameDataPair:
1321
1322
 
1322
1323
  class SpecBuilder:
1323
1324
  def __init__(
1324
- self, *, api_endpoints: dict[EndpointKey, str], top_namespace: str
1325
+ self,
1326
+ *,
1327
+ api_endpoints: dict[EndpointKey, str],
1328
+ top_namespace: str,
1329
+ cross_output_paths: CrossOutputPaths | None,
1325
1330
  ) -> None:
1326
1331
  self.top_namespace = top_namespace
1327
1332
  self.where: list[str] = []
@@ -1332,6 +1337,7 @@ class SpecBuilder:
1332
1337
  self.examples: dict[str, list[SpecEndpointExample]] = defaultdict(list)
1333
1338
  self.guides: dict[SpecGuideKey, list[SpecGuide]] = defaultdict(list)
1334
1339
  self.api_endpoints = api_endpoints
1340
+ self.cross_output_paths = cross_output_paths
1335
1341
  base_namespace = SpecNamespace(name=base_namespace_name)
1336
1342
  for base_type in BaseTypeName:
1337
1343
  defn = SpecTypeDefnObject(base_namespace, base_type, is_base=True)
@@ -0,0 +1,105 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from dataclasses import dataclass
5
+
6
+ from pkgs.type_spec import builder
7
+
8
+
9
+ def get_python_stub_file_path(
10
+ function_name: str | None,
11
+ ) -> str | None:
12
+ if function_name is None:
13
+ return None
14
+ module_dir, file_name, func_name = function_name.rsplit(".", 2)
15
+ module_path = os.path.relpath(module_dir.replace(".", "/"))
16
+ api_stub_file = f"{module_path}/{file_name}.py"
17
+ return api_stub_file
18
+
19
+
20
+ @dataclass(kw_only=True, frozen=True)
21
+ class CrossOutputPaths:
22
+ python_types_output: str
23
+ typescript_types_output: str
24
+ typescript_routes_output: str
25
+ typespec_files_input: list[str]
26
+
27
+
28
+ def get_python_api_file_path(
29
+ cross_output_paths: CrossOutputPaths,
30
+ namespace: builder.SpecNamespace,
31
+ ) -> str:
32
+ return f"{cross_output_paths.python_types_output}/{'/'.join(namespace.path)}{'' if len(namespace.path) > 1 else '_t'}.py"
33
+
34
+
35
+ def get_typescript_api_file_path(
36
+ cross_output_paths: CrossOutputPaths,
37
+ namespace: builder.SpecNamespace,
38
+ ) -> str:
39
+ return (
40
+ f"{cross_output_paths.typescript_routes_output}/{'/'.join(namespace.path)}.tsx"
41
+ )
42
+
43
+
44
+ def get_yaml_api_file_path(
45
+ cross_output_paths: CrossOutputPaths,
46
+ namespace: builder.SpecNamespace,
47
+ ) -> str:
48
+ abs_path = next(
49
+ (
50
+ path
51
+ for path in cross_output_paths.typespec_files_input
52
+ if (
53
+ namespace.endpoint is None
54
+ or namespace.endpoint.default_endpoint_key in path
55
+ )
56
+ ),
57
+ cross_output_paths.typespec_files_input[0],
58
+ )
59
+ return f"{os.path.relpath(abs_path)}/{'/'.join(namespace.path)}.yaml"
60
+
61
+
62
+ def get_return_to_root_path(path: str) -> str:
63
+ return "../" * (path.count("/"))
64
+
65
+
66
+ def get_path_links(
67
+ cross_output_paths: CrossOutputPaths | None,
68
+ namespace: builder.SpecNamespace,
69
+ *,
70
+ current_path_type: str,
71
+ ) -> str:
72
+ if cross_output_paths is None:
73
+ return ""
74
+
75
+ api_paths = {
76
+ "Python": get_python_api_file_path(cross_output_paths, namespace),
77
+ "TypeScript": get_typescript_api_file_path(cross_output_paths, namespace),
78
+ "YAML": get_yaml_api_file_path(cross_output_paths, namespace),
79
+ }
80
+
81
+ assert current_path_type in api_paths
82
+
83
+ comment_prefix = "#"
84
+ if current_path_type == "TypeScript":
85
+ comment_prefix = "//"
86
+
87
+ return_to_root_path = get_return_to_root_path(api_paths[current_path_type])
88
+ del api_paths[current_path_type]
89
+
90
+ paths_string = ""
91
+ for path_name, path in api_paths.items():
92
+ paths_string += (
93
+ f"{comment_prefix} {path_name}: file://./{return_to_root_path}{path}\n"
94
+ )
95
+
96
+ if namespace.endpoint is not None:
97
+ for (
98
+ endpoint,
99
+ path_specific_endpoint,
100
+ ) in namespace.endpoint.path_per_api_endpoint.items():
101
+ path_from_root = get_python_stub_file_path(path_specific_endpoint.function)
102
+ if path_from_root is None:
103
+ continue
104
+ paths_string += f"{comment_prefix} Implementation for {endpoint}: file://./{return_to_root_path}{path_from_root}\n"
105
+ return paths_string
@@ -7,6 +7,7 @@ from typing import Any
7
7
  from . import builder, util
8
8
  from .builder import EndpointEmitType, EndpointSpecificPath
9
9
  from .config import PythonConfig
10
+ from .cross_output_links import get_path_links
10
11
 
11
12
  INDENT = " "
12
13
  LINE_BREAK = "\n"
@@ -354,6 +355,13 @@ def _get_epf_root(endpoint_specific_path: EndpointSpecificPath) -> str:
354
355
  def _emit_namespace(ctx: Context, namespace: builder.SpecNamespace) -> None:
355
356
  endpoint = namespace.endpoint
356
357
  if endpoint is not None:
358
+ path_links = get_path_links(
359
+ ctx.builder.cross_output_paths, namespace, current_path_type="Python"
360
+ )
361
+ if path_links != "":
362
+ ctx.out.write("\n")
363
+ ctx.out.write(path_links)
364
+
357
365
  ctx.out.write("\n")
358
366
  ctx.out.write(f'{ENDPOINT_METHOD} = "{endpoint.method.upper()}"\n')
359
367
  for endpoint_specific_path in sorted(
@@ -4,6 +4,7 @@ import os
4
4
  from . import builder, util
5
5
  from .builder import EndpointKey, EndpointSpecificPath
6
6
  from .config import TypeScriptConfig
7
+ from .cross_output_links import get_path_links
7
8
  from .emit_io_ts import emit_type_io_ts
8
9
  from .emit_typescript_util import (
9
10
  MODIFY_NOTICE,
@@ -32,7 +33,11 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
32
33
  builder.namespaces.values(),
33
34
  key=lambda ns: resolve_namespace_name(ns),
34
35
  ):
35
- ctx = EmitTypescriptContext(out=io.StringIO(), namespace=namespace)
36
+ ctx = EmitTypescriptContext(
37
+ out=io.StringIO(),
38
+ namespace=namespace,
39
+ cross_output_paths=builder.cross_output_paths,
40
+ )
36
41
 
37
42
  _emit_namespace(ctx, config, namespace)
38
43
 
@@ -139,6 +144,10 @@ def _emit_endpoint(
139
144
  if not is_binary:
140
145
  assert endpoint.result_type == builder.ResultType.json
141
146
 
147
+ paths_string = get_path_links(
148
+ ctx.cross_output_paths, namespace, current_path_type="TypeScript"
149
+ )
150
+
142
151
  data_loader_head = ""
143
152
  data_loader_body = ""
144
153
  if endpoint.data_loader:
@@ -236,7 +245,8 @@ export type Response = DeprecatedResult
236
245
  endpoint_path_part = f"""appSpecificApiPath({{{path_lookup_map}
237
246
  }}),"""
238
247
 
239
- tsx_api = f"""{MODIFY_NOTICE}
248
+ # tsx_api = f"""{MODIFY_NOTICE}
249
+ tsx_api = f"""{MODIFY_NOTICE}{paths_string}
240
250
  {data_loader_head}{tsx_response_part}
241
251
  export const apiCall = {wrap_call}(
242
252
  {endpoint_path_part}
@@ -3,12 +3,12 @@ import typing
3
3
  from dataclasses import dataclass, field
4
4
 
5
5
  from . import builder, util
6
+ from .cross_output_links import CrossOutputPaths
6
7
 
7
8
  INDENT = " "
8
9
 
9
10
  MODIFY_NOTICE = "// DO NOT MODIFY -- This file is generated by type_spec\n"
10
11
 
11
-
12
12
  base_name_map = {
13
13
  builder.BaseTypeName.s_boolean: "boolean",
14
14
  builder.BaseTypeName.s_date: "string", # IMPROVE: Aliased DateStr
@@ -31,6 +31,7 @@ class EmitTypescriptContext:
31
31
  out: io.StringIO
32
32
  namespace: builder.SpecNamespace
33
33
  namespaces: set[builder.SpecNamespace] = field(default_factory=set)
34
+ cross_output_paths: CrossOutputPaths | None = None
34
35
 
35
36
 
36
37
  def ts_type_name(name: str) -> str:
@@ -8,6 +8,7 @@ from pkgs.serialization import yaml
8
8
 
9
9
  from .builder import SpecBuilder
10
10
  from .config import Config
11
+ from .cross_output_links import CrossOutputPaths
11
12
 
12
13
  ext_map = {
13
14
  ".ts": "typescript",
@@ -41,8 +42,21 @@ def find_and_handle_files(
41
42
 
42
43
 
43
44
  def load_types(config: Config) -> SpecBuilder | None:
45
+ if config.typescript is not None and config.python is not None:
46
+ cross_output_paths = CrossOutputPaths(
47
+ python_types_output=config.python.types_output,
48
+ typescript_types_output=config.typescript.types_output,
49
+ typescript_routes_output=config.typescript.routes_output,
50
+ typespec_files_input=config.type_spec_types,
51
+ # IMPROVE not sure how to know which one is the correct one in emit_typescript
52
+ )
53
+ else:
54
+ cross_output_paths = None
55
+
44
56
  builder = SpecBuilder(
45
- api_endpoints=config.api_endpoint, top_namespace=config.top_namespace
57
+ api_endpoints=config.api_endpoint,
58
+ top_namespace=config.top_namespace,
59
+ cross_output_paths=cross_output_paths,
46
60
  )
47
61
 
48
62
  def handle_builder_add(
@@ -19,6 +19,7 @@ from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
19
19
  from .api.entity import create_entities as create_entities_t
20
20
  from .api.entity import create_entity as create_entity_t
21
21
  from .api.inputs import create_inputs as create_inputs_t
22
+ from .api.entity import create_or_update_entity as create_or_update_entity_t
22
23
  from .api.recipes import create_recipe as create_recipe_t
23
24
  from .api.recipe_links import create_recipe_link as create_recipe_link_t
24
25
  from .api.recipes import create_recipes as create_recipes_t
@@ -127,6 +128,7 @@ __all__: list[str] = [
127
128
  "create_entities_t",
128
129
  "create_entity_t",
129
130
  "create_inputs_t",
131
+ "create_or_update_entity_t",
130
132
  "create_recipe_t",
131
133
  "create_recipe_link_t",
132
134
  "create_recipes_t",
@@ -0,0 +1,46 @@
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
+ import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from ... import async_batch_t
12
+ from ... import entity_t
13
+ from ... import field_values_t
14
+ from ... import identifier_t
15
+
16
+ __all__: list[str] = [
17
+ "Arguments",
18
+ "Data",
19
+ "ENDPOINT_METHOD",
20
+ "ENDPOINT_PATH",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "POST"
24
+ ENDPOINT_PATH = "api/external/entity/create_or_update_entity"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ @serial_class(
29
+ named_type_path="sdk.api.entity.create_or_update_entity.Arguments",
30
+ )
31
+ @dataclasses.dataclass(kw_only=True)
32
+ class Arguments:
33
+ entity_type: entity_t.EntityType
34
+ definition_key: identifier_t.IdentifierKey
35
+ field_values: list[field_values_t.FieldArgumentValue]
36
+ entity_key: identifier_t.IdentifierKey | None = None
37
+
38
+
39
+ # DO NOT MODIFY -- This file is generated by type_spec
40
+ @serial_class(
41
+ named_type_path="sdk.api.entity.create_or_update_entity.Data",
42
+ )
43
+ @dataclasses.dataclass(kw_only=True)
44
+ class Data(async_batch_t.AsyncBatchActionReturn):
45
+ pass
46
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -32,7 +32,7 @@ ENDPOINT_PATH = "api/external/material_families/external_update_entity_material_
32
32
  @dataclasses.dataclass(kw_only=True)
33
33
  class Arguments:
34
34
  entity_key: identifier_t.IdentifierKey
35
- entity_type: typing.Literal[entity_t.EntityType.RECIPE_METADATA] | typing.Literal[entity_t.EntityType.INGREDIENT] | typing.Literal[entity_t.EntityType.OUTPUT] | typing.Literal[entity_t.EntityType.CONDITION_PARAMETER] | typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE]
35
+ entity_type: typing.Literal[entity_t.EntityType.RECIPE_METADATA] | typing.Literal[entity_t.EntityType.INGREDIENT] | typing.Literal[entity_t.EntityType.OUTPUT] | typing.Literal[entity_t.EntityType.CONDITION_PARAMETER] | typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[entity_t.EntityType.INGREDIENT_CATEGORY_ALL]
36
36
  material_family_ids: list[base_t.ObjectId]
37
37
  update_type: post_base_t.UpdateType
38
38
 
@@ -31,7 +31,7 @@ ENDPOINT_PATH = "api/external/recipe_links/remove_recipe_link"
31
31
  class Arguments:
32
32
  recipe_from_key: identifier_t.IdentifierKey
33
33
  recipe_to_key: identifier_t.IdentifierKey
34
- link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]
34
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK] | typing.Literal[recipe_links_t.RecipeLinkType.PREVIOUS_EXPERIMENT]
35
35
 
36
36
 
37
37
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -12,6 +12,7 @@ import uncountable.types.api.recipes.associate_recipe_as_input as associate_reci
12
12
  from uncountable.types import async_batch_t
13
13
  from uncountable.types import base_t
14
14
  import uncountable.types.api.recipes.clear_recipe_outputs as clear_recipe_outputs_t
15
+ import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
15
16
  import uncountable.types.api.recipes.create_recipe as create_recipe_t
16
17
  import uncountable.types.api.recipes.edit_recipe_inputs as edit_recipe_inputs_t
17
18
  from uncountable.types import entity_t
@@ -144,6 +145,43 @@ class AsyncBatchProcessorBase(ABC):
144
145
  batch_reference=req.batch_reference,
145
146
  )
146
147
 
148
+ def create_or_update_entity(
149
+ self,
150
+ *,
151
+ entity_type: entity_t.EntityType,
152
+ definition_key: identifier_t.IdentifierKey,
153
+ field_values: list[field_values_t.FieldArgumentValue],
154
+ entity_key: identifier_t.IdentifierKey | None = None,
155
+ depends_on: list[str] | None = None,
156
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
157
+ """Creates or updates field values for an entity
158
+
159
+ :param depends_on: A list of batch reference keys to process before processing this request
160
+ """
161
+ args = create_or_update_entity_t.Arguments(
162
+ entity_key=entity_key,
163
+ entity_type=entity_type,
164
+ definition_key=definition_key,
165
+ field_values=field_values,
166
+ )
167
+ json_data = serialize_for_api(args)
168
+
169
+ batch_reference = str(uuid.uuid4())
170
+
171
+ req = async_batch_t.AsyncBatchRequest(
172
+ path=async_batch_t.AsyncBatchRequestPath.CREATE_OR_UPDATE_ENTITY,
173
+ data=json_data,
174
+ depends_on=depends_on,
175
+ batch_reference=batch_reference,
176
+ )
177
+
178
+ self._enqueue(req)
179
+
180
+ return async_batch_t.QueuedAsyncBatchRequest(
181
+ path=req.path,
182
+ batch_reference=req.batch_reference,
183
+ )
184
+
147
185
  def create_recipe(
148
186
  self,
149
187
  *,
@@ -37,6 +37,7 @@ class AsyncBatchRequestPath(StrEnum):
37
37
  CLEAR_RECIPE_OUTPUTS = "recipes/clear_recipe_outputs"
38
38
  GRANT_ENTITY_PERMISSIONS = "entity/grant_entity_permissions"
39
39
  SET_ENTITY_FIELD_VALUES = "entity/set_entity_field_values"
40
+ CREATE_OR_UPDATE_ENTITY = "entity/create_or_update_entity"
40
41
 
41
42
 
42
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -20,6 +20,7 @@ import uncountable.types.api.chemical.convert_chemical_formats as convert_chemic
20
20
  import uncountable.types.api.entity.create_entities as create_entities_t
21
21
  import uncountable.types.api.entity.create_entity as create_entity_t
22
22
  import uncountable.types.api.inputs.create_inputs as create_inputs_t
23
+ import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
23
24
  import uncountable.types.api.recipes.create_recipe as create_recipe_t
24
25
  import uncountable.types.api.recipe_links.create_recipe_link as create_recipe_link_t
25
26
  import uncountable.types.api.recipes.create_recipes as create_recipes_t
@@ -332,6 +333,30 @@ class ClientMethods(ABC):
332
333
  )
333
334
  return self.do_request(api_request=api_request, return_type=create_inputs_t.Data)
334
335
 
336
+ def create_or_update_entity(
337
+ self,
338
+ *,
339
+ entity_type: entity_t.EntityType,
340
+ definition_key: identifier_t.IdentifierKey,
341
+ field_values: list[field_values_t.FieldArgumentValue],
342
+ entity_key: identifier_t.IdentifierKey | None = None,
343
+ ) -> create_or_update_entity_t.Data:
344
+ """Creates or updates field values for an entity
345
+
346
+ """
347
+ args = create_or_update_entity_t.Arguments(
348
+ entity_key=entity_key,
349
+ entity_type=entity_type,
350
+ definition_key=definition_key,
351
+ field_values=field_values,
352
+ )
353
+ api_request = APIRequest(
354
+ method=create_or_update_entity_t.ENDPOINT_METHOD,
355
+ endpoint=create_or_update_entity_t.ENDPOINT_PATH,
356
+ args=args,
357
+ )
358
+ return self.do_request(api_request=api_request, return_type=create_or_update_entity_t.Data)
359
+
335
360
  def create_recipe(
336
361
  self,
337
362
  *,
@@ -1125,7 +1150,7 @@ class ClientMethods(ABC):
1125
1150
  *,
1126
1151
  recipe_from_key: identifier_t.IdentifierKey,
1127
1152
  recipe_to_key: identifier_t.IdentifierKey,
1128
- link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK],
1153
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK] | typing.Literal[recipe_links_t.RecipeLinkType.PREVIOUS_EXPERIMENT],
1129
1154
  ) -> remove_recipe_link_t.Data:
1130
1155
  """Remove a link between two recipes. Skip if the link doesn't already exist
1131
1156
 
@@ -1577,7 +1602,7 @@ class ClientMethods(ABC):
1577
1602
  self,
1578
1603
  *,
1579
1604
  entity_key: identifier_t.IdentifierKey,
1580
- entity_type: typing.Literal[entity_t.EntityType.RECIPE_METADATA] | typing.Literal[entity_t.EntityType.INGREDIENT] | typing.Literal[entity_t.EntityType.OUTPUT] | typing.Literal[entity_t.EntityType.CONDITION_PARAMETER] | typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE],
1605
+ entity_type: typing.Literal[entity_t.EntityType.RECIPE_METADATA] | typing.Literal[entity_t.EntityType.INGREDIENT] | typing.Literal[entity_t.EntityType.OUTPUT] | typing.Literal[entity_t.EntityType.CONDITION_PARAMETER] | typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[entity_t.EntityType.INGREDIENT_CATEGORY_ALL],
1581
1606
  material_family_ids: list[base_t.ObjectId],
1582
1607
  update_type: post_base_t.UpdateType,
1583
1608
  ) -> update_entity_material_families_t.Data:
@@ -346,7 +346,7 @@ class EntityType(StrEnum):
346
346
 
347
347
  # DO NOT MODIFY -- This file is generated by type_spec
348
348
  LimitedEntityType = typing.Annotated[
349
- typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT],
349
+ typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL],
350
350
  serial_alias_annotation(
351
351
  named_type_path="sdk.entity.LimitedEntityType",
352
352
  ),
@@ -1,3 +0,0 @@
1
- import os
2
-
3
- USE_FASTJSON: bool = os.environ.get("USE_FASTJSON", "false").lower() == "true"