UncountablePythonSDK 0.0.74__tar.gz → 0.0.75__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 (293) hide show
  1. {uncountablepythonsdk-0.0.74/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.75}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. uncountablepythonsdk-0.0.75/pkgs/type_spec/emit_typescript.py +256 -0
  4. uncountablepythonsdk-0.0.75/pkgs/type_spec/emit_typescript_util.py +265 -0
  5. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/worker.py +14 -14
  6. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/create_entities.py +1 -1
  7. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/create_entity.py +1 -1
  8. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/client_base.py +2 -2
  9. uncountablepythonsdk-0.0.74/pkgs/type_spec/emit_typescript.py +0 -486
  10. uncountablepythonsdk-0.0.74/pkgs/type_spec/emit_typescript_util.py +0 -30
  11. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/.github/workflows/documentation.yml +0 -0
  12. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/.github/workflows/publish.yml +0 -0
  13. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/.gitignore +0 -0
  14. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/README.md +0 -0
  15. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  16. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  17. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  18. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  19. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/.gitignore +0 -0
  20. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/conf.py +0 -0
  21. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/index.md +0 -0
  22. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/justfile +0 -0
  23. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/quickstart.md +0 -0
  24. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/requirements.txt +0 -0
  25. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/android-chrome-192x192.png +0 -0
  26. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/android-chrome-512x512.png +0 -0
  27. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/apple-touch-icon.png +0 -0
  28. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/browserconfig.xml +0 -0
  29. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/favicon-16x16.png +0 -0
  30. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/favicon-32x32.png +0 -0
  31. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/manifest.json +0 -0
  32. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/mstile-150x150.png +0 -0
  33. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  34. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/docs/static/logo_blue.png +0 -0
  35. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/async_batch.py +0 -0
  36. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/create_entity.py +0 -0
  37. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/edit_recipe_inputs.py +0 -0
  38. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  39. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  40. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/integration-server/pyproject.toml +0 -0
  41. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/invoke_uploader.py +0 -0
  42. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/set_recipe_metadata_file.py +0 -0
  43. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/set_recipe_output_file_sdk.py +0 -0
  44. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/examples/upload_files.py +0 -0
  45. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/__init__.py +0 -0
  46. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/argument_parser/__init__.py +0 -0
  47. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/argument_parser/_is_enum.py +0 -0
  48. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  49. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/argument_parser/argument_parser.py +0 -0
  50. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/argument_parser/case_convert.py +0 -0
  51. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/__init__.py +0 -0
  52. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  53. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/_local_session.py +0 -0
  54. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/_s3_session.py +0 -0
  55. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  56. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  57. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  58. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/py.typed +0 -0
  59. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization/__init__.py +0 -0
  60. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization/missing_sentry.py +0 -0
  61. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization/opaque_key.py +0 -0
  62. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization/serial_class.py +0 -0
  63. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization/serial_union.py +0 -0
  64. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization/yaml.py +0 -0
  65. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization_util/__init__.py +0 -0
  66. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  67. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  68. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/serialization_util/serialization_helpers.py +0 -0
  69. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/strenum_compat/__init__.py +0 -0
  70. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/strenum_compat/strenum_compat.py +0 -0
  71. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/__init__.py +0 -0
  72. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/__main__.py +0 -0
  73. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  74. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  75. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  76. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/builder.py +0 -0
  77. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/config.py +0 -0
  78. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/emit_io_ts.py +0 -0
  79. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/emit_open_api.py +0 -0
  80. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/emit_open_api_util.py +0 -0
  81. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/emit_python.py +0 -0
  82. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/load_types.py +0 -0
  83. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/open_api_util.py +0 -0
  84. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/parts/base.py.prepart +0 -0
  85. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  86. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/test.py +0 -0
  87. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/type_info/__main__.py +0 -0
  88. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  89. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/util.py +0 -0
  90. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/value_spec/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/value_spec/__main__.py +0 -0
  92. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  93. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  94. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pkgs/type_spec/value_spec/types.py +0 -0
  95. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/pyproject.toml +0 -0
  96. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/setup.cfg +0 -0
  97. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/core/__init__.py +0 -0
  99. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/core/async_batch.py +0 -0
  100. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/core/client.py +0 -0
  101. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/core/environment.py +0 -0
  102. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/core/file_upload.py +0 -0
  103. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/core/types.py +0 -0
  104. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/__init__.py +0 -0
  105. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/cli.py +0 -0
  106. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/construct_client.py +0 -0
  107. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/cron.py +0 -0
  108. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/db/__init__.py +0 -0
  109. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/db/connect.py +0 -0
  110. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/db/session.py +0 -0
  111. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/entrypoint.py +0 -0
  112. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/executors/__init__.py +0 -0
  113. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/executors/executors.py +0 -0
  114. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  115. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/executors/script_executor.py +0 -0
  116. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/job.py +0 -0
  117. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  120. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  121. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  122. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  123. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  124. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  125. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  126. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  127. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  128. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  129. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  130. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  131. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  132. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  133. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/queue_runner/types.py +0 -0
  134. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/scan_profiles.py +0 -0
  135. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/scheduler.py +0 -0
  136. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  138. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/server.py +0 -0
  139. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/telemetry.py +0 -0
  140. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  141. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/py.typed +0 -0
  142. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/__init__.py +0 -0
  144. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/batch/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/batch/execute_batch.py +0 -0
  146. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  147. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/chemical/__init__.py +0 -0
  148. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  149. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/get_entities_data.py +0 -0
  151. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/list_entities.py +0 -0
  152. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/lock_entity.py +0 -0
  153. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  154. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/set_values.py +0 -0
  155. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  156. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/entity/unlock_entity.py +0 -0
  157. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/equipment/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  159. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/field_options/__init__.py +0 -0
  160. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  161. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/id_source/__init__.py +0 -0
  162. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/id_source/list_id_source.py +0 -0
  163. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/id_source/match_id_source.py +0 -0
  164. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/input_groups/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  166. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/__init__.py +0 -0
  167. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/create_inputs.py +0 -0
  168. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/get_input_data.py +0 -0
  169. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/get_input_names.py +0 -0
  170. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  171. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  172. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/set_input_category.py +0 -0
  173. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  174. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  175. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/material_families/__init__.py +0 -0
  176. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  177. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/outputs/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/outputs/get_output_data.py +0 -0
  179. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/outputs/get_output_names.py +0 -0
  180. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  181. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/permissions/__init__.py +0 -0
  182. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  183. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/project/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/project/get_projects.py +0 -0
  185. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/project/get_projects_data.py +0 -0
  186. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipe_links/__init__.py +0 -0
  187. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  188. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  189. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  191. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/__init__.py +0 -0
  192. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  193. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  194. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  195. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  196. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  197. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/create_recipe.py +0 -0
  198. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/create_recipes.py +0 -0
  199. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  200. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  201. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/get_curve.py +0 -0
  202. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  203. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  204. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  205. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  206. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  207. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  208. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  209. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  210. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  211. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  212. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  213. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  214. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  215. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  216. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  217. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/triggers/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/triggers/run_trigger.py +0 -0
  219. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/uploader/__init__.py +0 -0
  220. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  221. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/async_batch.py +0 -0
  222. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/async_batch_processor.py +0 -0
  223. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/async_batch_t.py +0 -0
  224. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/base.py +0 -0
  225. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/base_t.py +0 -0
  226. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/calculations.py +0 -0
  227. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/calculations_t.py +0 -0
  228. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/chemical_structure.py +0 -0
  229. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/chemical_structure_t.py +0 -0
  230. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/client_config.py +0 -0
  231. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/client_config_t.py +0 -0
  232. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/curves.py +0 -0
  233. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/curves_t.py +0 -0
  234. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/entity.py +0 -0
  235. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/entity_t.py +0 -0
  236. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/experiment_groups.py +0 -0
  237. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/experiment_groups_t.py +0 -0
  238. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/field_values.py +0 -0
  239. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/field_values_t.py +0 -0
  240. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/fields.py +0 -0
  241. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/fields_t.py +0 -0
  242. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/generic_upload.py +0 -0
  243. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/generic_upload_t.py +0 -0
  244. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/id_source.py +0 -0
  245. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/id_source_t.py +0 -0
  246. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/identifier.py +0 -0
  247. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/identifier_t.py +0 -0
  248. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/input_attributes.py +0 -0
  249. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/input_attributes_t.py +0 -0
  250. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/inputs.py +0 -0
  251. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/inputs_t.py +0 -0
  252. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/job_definition.py +0 -0
  253. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/job_definition_t.py +0 -0
  254. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/outputs.py +0 -0
  255. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/outputs_t.py +0 -0
  256. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/overrides.py +0 -0
  257. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/overrides_t.py +0 -0
  258. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/permissions.py +0 -0
  259. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/permissions_t.py +0 -0
  260. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/phases.py +0 -0
  261. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/phases_t.py +0 -0
  262. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/post_base.py +0 -0
  263. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/post_base_t.py +0 -0
  264. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/queued_job.py +0 -0
  265. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/queued_job_t.py +0 -0
  266. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_identifiers.py +0 -0
  267. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_identifiers_t.py +0 -0
  268. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_inputs.py +0 -0
  269. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_inputs_t.py +0 -0
  270. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_links.py +0 -0
  271. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_links_t.py +0 -0
  272. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_metadata.py +0 -0
  273. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_metadata_t.py +0 -0
  274. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_output_metadata.py +0 -0
  275. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_output_metadata_t.py +0 -0
  276. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_tags.py +0 -0
  277. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_tags_t.py +0 -0
  278. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_workflow_steps.py +0 -0
  279. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  280. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipes.py +0 -0
  281. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/recipes_t.py +0 -0
  282. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/response.py +0 -0
  283. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/response_t.py +0 -0
  284. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/secret_retrieval.py +0 -0
  285. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/secret_retrieval_t.py +0 -0
  286. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/units.py +0 -0
  287. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/units_t.py +0 -0
  288. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/users.py +0 -0
  289. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/users_t.py +0 -0
  290. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/webhook_job.py +0 -0
  291. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/webhook_job_t.py +0 -0
  292. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/workflows.py +0 -0
  293. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.75}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.74
3
+ Version: 0.0.75
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.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.74
3
+ Version: 0.0.75
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
@@ -0,0 +1,256 @@
1
+ import io
2
+ import os
3
+
4
+ from . import builder, util
5
+ from .config import TypeScriptConfig
6
+ from .emit_io_ts import emit_type_io_ts
7
+ from .emit_typescript_util import (
8
+ MODIFY_NOTICE,
9
+ EmitTypescriptContext,
10
+ emit_namespace_imports_ts,
11
+ emit_type_ts,
12
+ emit_value_ts,
13
+ resolve_namespace_name,
14
+ resolve_namespace_ref,
15
+ ts_type_name,
16
+ )
17
+
18
+
19
+ def emit_typescript(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
20
+ _emit_types(builder, config)
21
+ _emit_id_source(builder, config)
22
+
23
+
24
+ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
25
+ index_out = io.StringIO()
26
+ index_out.write(MODIFY_NOTICE)
27
+
28
+ index_out_end = io.StringIO()
29
+
30
+ for namespace in sorted(
31
+ builder.namespaces.values(),
32
+ key=lambda ns: resolve_namespace_name(ns),
33
+ ):
34
+ ctx = EmitTypescriptContext(out=io.StringIO(), namespace=namespace)
35
+
36
+ _emit_namespace(ctx, config, namespace)
37
+
38
+ prepart = builder.preparts["typescript"].get(namespace.name)
39
+ part = builder.parts["typescript"].get(namespace.name)
40
+
41
+ # Don't emit an empty file
42
+ if (
43
+ prepart is None
44
+ and part is None
45
+ and len(namespace.types) == 0
46
+ and len(namespace.constants) == 0
47
+ ):
48
+ # Try to capture some common incompleteness errors
49
+ if namespace.endpoint is None or namespace.endpoint.function is None:
50
+ raise Exception(
51
+ f"Namespace {"/".join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
52
+ )
53
+ continue
54
+
55
+ full = io.StringIO()
56
+ if prepart:
57
+ full.write(MODIFY_NOTICE)
58
+ full.write(f"// === START section from {namespace.name}.ts.prepart ===\n")
59
+ full.write(prepart)
60
+ full.write(f"// === END section from {namespace.name}.ts.prepart ===\n")
61
+ full.write("\n")
62
+
63
+ emit_namespace_imports_ts(ctx.namespaces, out=full, current_namespace=namespace)
64
+ if namespace.emit_io_ts:
65
+ full.write("import * as IO from 'io-ts';")
66
+ full.write(ctx.out.getvalue())
67
+
68
+ if part:
69
+ full.write("\n")
70
+ full.write(MODIFY_NOTICE)
71
+ full.write(f"// === START section from {namespace.name}.ts.part ===\n")
72
+ full.write(part)
73
+ full.write(f"// === END section from {namespace.name}.ts.part ===\n")
74
+
75
+ full.write(MODIFY_NOTICE)
76
+
77
+ basename = "/".join(namespace.path)
78
+ filename = f"{config.types_output}/{basename}.ts"
79
+ util.rewrite_file(filename, full.getvalue())
80
+
81
+ if len(namespace.path) == 1:
82
+ index_out.write(
83
+ f"import * as {resolve_namespace_ref(namespace)} from './{resolve_namespace_name(namespace)}'\n"
84
+ ) # noqa: E501
85
+ index_out_end.write(f"export {{{resolve_namespace_ref(namespace)}}}\n")
86
+
87
+ index_out.write("\n")
88
+ index_out.write(MODIFY_NOTICE)
89
+ index_out.write(index_out_end.getvalue())
90
+ index_out.write(MODIFY_NOTICE)
91
+ util.rewrite_file(f"{config.types_output}/index.ts", index_out.getvalue())
92
+
93
+
94
+ def _emit_namespace(
95
+ ctx: EmitTypescriptContext,
96
+ config: TypeScriptConfig,
97
+ namespace: builder.SpecNamespace,
98
+ ) -> None:
99
+ for stype in namespace.types.values():
100
+ if namespace.emit_io_ts:
101
+ emit_type_io_ts(ctx, stype, namespace.derive_types_from_io_ts)
102
+ if not namespace.emit_io_ts or not namespace.derive_types_from_io_ts:
103
+ emit_type_ts(ctx, stype)
104
+
105
+ for sconst in namespace.constants.values():
106
+ _emit_constant(ctx, sconst)
107
+
108
+ if namespace.endpoint is not None:
109
+ _emit_endpoint(ctx, config, namespace, namespace.endpoint)
110
+
111
+
112
+ def _emit_endpoint(
113
+ ctx: EmitTypescriptContext,
114
+ config: TypeScriptConfig,
115
+ namespace: builder.SpecNamespace,
116
+ endpoint: builder.SpecEndpoint,
117
+ ) -> None:
118
+ if endpoint.suppress_ts:
119
+ return
120
+
121
+ assert namespace.path[0] == "api"
122
+ has_arguments = "Arguments" in namespace.types
123
+ has_data = "Data" in namespace.types
124
+ has_deprecated_result = "DeprecatedResult" in namespace.types
125
+ is_binary = endpoint.result_type == builder.ResultType.binary
126
+
127
+ result_type_count = sum([has_data, has_deprecated_result, is_binary])
128
+ assert result_type_count < 2
129
+
130
+ # Don't emit interface for those with unsupported types
131
+ if not has_arguments or result_type_count == 0:
132
+ return
133
+
134
+ if not is_binary:
135
+ assert endpoint.result_type == builder.ResultType.json
136
+
137
+ data_loader_head = ""
138
+ data_loader_body = ""
139
+ if endpoint.data_loader:
140
+ # Don't support alternately named data for now
141
+ assert has_data
142
+
143
+ data_loader_head = (
144
+ 'import { buildApiDataLoader, argsKey } from "unc_base/data_manager"\n'
145
+ )
146
+ data_loader_body = (
147
+ "\nexport const data = buildApiDataLoader(argsKey(), apiCall)\n"
148
+ )
149
+
150
+ method = endpoint.method.capitalize()
151
+ if endpoint.has_attachment:
152
+ assert endpoint.method == "post"
153
+ method = f"{method}Attach"
154
+ wrap_name = (
155
+ f"buildWrappedBinary{method}Call" if is_binary else f"buildWrapped{method}Call"
156
+ )
157
+ wrap_call = (
158
+ f"{wrap_name}<Arguments>" if is_binary else f"{wrap_name}<Arguments, Response>"
159
+ )
160
+ type_path = f"unc_mat/types/{"/".join(namespace.path)}"
161
+
162
+ if is_binary:
163
+ tsx_response_part = f"""import {{ {wrap_name} }} from "unc_base/api"
164
+ import type {{ Arguments }} from "{type_path}"
165
+
166
+ export type {{ Arguments }}
167
+ """
168
+ elif has_data and endpoint.has_attachment:
169
+ tsx_response_part = f"""import {{ {wrap_name}, type AttachmentResponse }} from "unc_base/api"
170
+ import type {{ Arguments, Data }} from "{type_path}"
171
+
172
+ export type {{ Arguments, Data }}
173
+ export type Response = AttachmentResponse<Data>
174
+ """
175
+ elif has_data:
176
+ tsx_response_part = f"""import {{ {wrap_name}, type JsonResponse }} from "unc_base/api"
177
+ import type {{ Arguments, Data }} from "{type_path}"
178
+
179
+ export type {{ Arguments, Data }}
180
+ export type Response = JsonResponse<Data>
181
+ """
182
+
183
+ else:
184
+ assert has_deprecated_result
185
+ tsx_response_part = f"""import {{ {wrap_name} }} from "unc_base/api"
186
+ import type {{ Arguments, DeprecatedResult }} from "{type_path}"
187
+
188
+ export type {{ Arguments }}
189
+ export type Response = DeprecatedResult
190
+ """
191
+
192
+ tsx_api = f"""{MODIFY_NOTICE}
193
+ {data_loader_head}{tsx_response_part}
194
+ export const apiCall = {wrap_call}(
195
+ "{endpoint.path_root}/{endpoint.path_dirname}/{endpoint.path_basename}",
196
+ )
197
+ {data_loader_body}"""
198
+
199
+ output = f"{config.routes_output}/{"/".join(namespace.path)}.tsx"
200
+ util.rewrite_file(output, tsx_api)
201
+
202
+ # Hacky index support, until enough is migrated to regen entirely
203
+ # Emits the import into the UI API index file
204
+ index_path = f"{config.routes_output}/{"/".join(namespace.path[0:-1])}/index.tsx"
205
+ api_name = f"Api{ts_type_name(namespace.path[0 - 1])}"
206
+ if os.path.exists(index_path):
207
+ with open(index_path) as index:
208
+ index_data = index.read()
209
+ need_index = index_data.find(api_name) == -1
210
+ else:
211
+ need_index = True
212
+
213
+ if need_index:
214
+ with open(index_path, "a") as index:
215
+ print(f"Updated API Index {index_path}")
216
+ index.write(f'import * as {api_name} from "./{namespace.path[-1]}"\n\n')
217
+ index.write(f"export {{ {api_name} }}\n")
218
+
219
+
220
+ def _emit_constant(ctx: EmitTypescriptContext, sconst: builder.SpecConstant) -> None:
221
+ ctx.out.write("\n\n")
222
+ ctx.out.write(MODIFY_NOTICE)
223
+ value = emit_value_ts(ctx, sconst.value_type, sconst.value)
224
+ const_name = sconst.name.upper()
225
+ ctx.out.write(f"export const {const_name} = {value}\n")
226
+
227
+
228
+ def _emit_id_source(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
229
+ id_source_output = config.id_source_output
230
+ if id_source_output is None:
231
+ return
232
+ enum_out = io.StringIO()
233
+ enum_out.write(MODIFY_NOTICE)
234
+
235
+ enum_out.write("export type KnownEnumsType =\n")
236
+ enum_map = {
237
+ builder.resolve_proper_name(string_enum): string_enum
238
+ for string_enum in builder.emit_id_source_enums
239
+ }
240
+ sorted_keys = sorted(enum_map.keys())
241
+ for key in sorted_keys:
242
+ enum_out.write(f' | "{key}"\n')
243
+
244
+ enum_out.write(f"\n{MODIFY_NOTICE}")
245
+ enum_out.write("export const ENUM_NAME_MAPS = {\n")
246
+ for key in sorted_keys:
247
+ string_enum = enum_map[key]
248
+ enum_out.write(f' "{builder.resolve_proper_name(string_enum)}": {{\n')
249
+ for entry in string_enum.values.values():
250
+ if entry.label is not None:
251
+ enum_out.write(f' "{entry.value}": "{entry.label}",\n')
252
+ enum_out.write(" },\n")
253
+ enum_out.write("}\n")
254
+
255
+ enum_out.write(f"\n{MODIFY_NOTICE}")
256
+ util.rewrite_file(id_source_output, enum_out.getvalue())
@@ -0,0 +1,265 @@
1
+ import io
2
+ import typing
3
+ from dataclasses import dataclass, field
4
+
5
+ from . import builder, util
6
+
7
+ INDENT = " "
8
+
9
+ MODIFY_NOTICE = "// DO NOT MODIFY -- This file is generated by type_spec\n"
10
+
11
+
12
+ base_name_map = {
13
+ builder.BaseTypeName.s_boolean: "boolean",
14
+ builder.BaseTypeName.s_date: "string", # IMPROVE: Aliased DateStr
15
+ builder.BaseTypeName.s_date_time: "string", # IMPROVE: Aliased DateTimeStr
16
+ # Decimal's are marked as to_string_values thus are strings in the front-end
17
+ builder.BaseTypeName.s_decimal: "string",
18
+ builder.BaseTypeName.s_dict: "PartialRecord",
19
+ builder.BaseTypeName.s_integer: "number",
20
+ builder.BaseTypeName.s_lossy_decimal: "number",
21
+ builder.BaseTypeName.s_opaque_key: "string",
22
+ builder.BaseTypeName.s_none: "null",
23
+ builder.BaseTypeName.s_string: "string",
24
+ # UNC: global types
25
+ builder.BaseTypeName.s_json_value: "JsonValue",
26
+ }
27
+
28
+
29
+ @dataclass(kw_only=True)
30
+ class EmitTypescriptContext:
31
+ out: io.StringIO
32
+ namespace: builder.SpecNamespace
33
+ namespaces: set[builder.SpecNamespace] = field(default_factory=set)
34
+
35
+
36
+ def ts_type_name(name: str) -> str:
37
+ return "".join([x.title() for x in name.split("_")])
38
+
39
+
40
+ def resolve_namespace_ref(namespace: builder.SpecNamespace) -> str:
41
+ return f"{ts_type_name(namespace.name)}T"
42
+
43
+
44
+ def ts_name(name: str, name_case: builder.NameCase) -> str:
45
+ if name_case == builder.NameCase.preserve:
46
+ return name
47
+ bits = util.split_any_name(name)
48
+ return "".join([bits[0], *[x.title() for x in bits[1:]]])
49
+
50
+
51
+ def emit_value_ts(
52
+ ctx: EmitTypescriptContext, stype: builder.SpecType, value: typing.Any
53
+ ) -> str:
54
+ """Mimics emit_python even if not all types are used in TypeScript yet"""
55
+ literal = builder.unwrap_literal_type(stype)
56
+ if literal is not None:
57
+ return emit_value_ts(ctx, literal.value_type, literal.value)
58
+
59
+ if stype.is_base_type(builder.BaseTypeName.s_string):
60
+ assert isinstance(value, str)
61
+ return util.encode_common_string(value)
62
+ elif stype.is_base_type(builder.BaseTypeName.s_integer):
63
+ assert isinstance(value, int)
64
+ return str(value)
65
+ elif stype.is_base_type(builder.BaseTypeName.s_boolean):
66
+ assert isinstance(value, bool)
67
+ return "true" if value else "false"
68
+ elif stype.is_base_type(builder.BaseTypeName.s_lossy_decimal):
69
+ return str(value)
70
+ elif stype.is_base_type(builder.BaseTypeName.s_decimal):
71
+ return f"'{value}'"
72
+ elif isinstance(stype, builder.SpecTypeInstance):
73
+ if stype.defn_type.is_base_type(builder.BaseTypeName.s_list):
74
+ sub_type = stype.parameters[0]
75
+ return (
76
+ "[" + ", ".join([emit_value_ts(ctx, sub_type, x) for x in value]) + "]"
77
+ )
78
+
79
+ if stype.defn_type.is_base_type(builder.BaseTypeName.s_dict):
80
+ key_type = stype.parameters[0]
81
+ value_type = stype.parameters[1]
82
+ return (
83
+ "{\n\t"
84
+ + ",\n\t".join(
85
+ "["
86
+ + emit_value_ts(ctx, key_type, dkey)
87
+ + "]: "
88
+ + emit_value_ts(ctx, value_type, dvalue)
89
+ for dkey, dvalue in value.items()
90
+ )
91
+ + "\n}"
92
+ )
93
+
94
+ if stype.defn_type.is_base_type(builder.BaseTypeName.s_optional):
95
+ sub_type = stype.parameters[0]
96
+ if value is None:
97
+ return "null"
98
+ return emit_value_ts(ctx, sub_type, value)
99
+
100
+ elif isinstance(stype, builder.SpecTypeDefnStringEnum):
101
+ return f"{refer_to(ctx, stype)}.{ts_enum_name(value, stype.name_case)}"
102
+
103
+ raise Exception("invalid constant type", value, stype)
104
+
105
+
106
+ def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
107
+ if not isinstance(stype, builder.SpecTypeDefn):
108
+ return
109
+
110
+ if stype.is_base or stype.is_predefined:
111
+ return
112
+
113
+ ctx.out.write("\n")
114
+ ctx.out.write(MODIFY_NOTICE)
115
+
116
+ if isinstance(stype, builder.SpecTypeDefnExternal):
117
+ assert not stype.is_exported, "expecting private names"
118
+ ctx.out.write(stype.external_map["ts"])
119
+ ctx.out.write("\n")
120
+ return
121
+
122
+ assert stype.is_exported, "expecting exported names"
123
+ if isinstance(stype, builder.SpecTypeDefnAlias):
124
+ ctx.out.write(f"export type {stype.name} = {refer_to(ctx, stype.alias)}\n")
125
+ return
126
+
127
+ if isinstance(stype, builder.SpecTypeDefnUnion):
128
+ ctx.out.write(
129
+ f"export type {stype.name} = {refer_to(ctx, stype.get_backing_type())}\n"
130
+ )
131
+ return
132
+
133
+ if isinstance(stype, builder.SpecTypeDefnStringEnum):
134
+ ctx.out.write(f"export enum {stype.name} {{\n")
135
+ assert stype.values
136
+ for name, entry in stype.values.items():
137
+ ctx.out.write(
138
+ f'{INDENT}{ts_enum_name(name, stype.name_case)} = "{entry.value}",\n'
139
+ )
140
+ ctx.out.write("}\n")
141
+ return
142
+
143
+ assert isinstance(stype, builder.SpecTypeDefnObject)
144
+ assert stype.base is not None
145
+
146
+ base_type = ""
147
+ if not stype.base.is_base:
148
+ base_type = f"{refer_to(ctx, stype.base)} & "
149
+
150
+ if stype.properties is None and base_type == "":
151
+ ctx.out.write(f"export type {stype.name} = TEmpty\n")
152
+ elif stype.properties is None:
153
+ ctx.out.write(f"export type {stype.name} = {base_type}{{}}\n")
154
+ else:
155
+ if isinstance(stype, builder.SpecTypeDefnObject) and len(stype.parameters) > 0:
156
+ full_type_name = f'{stype.name}<{", ".join(stype.parameters)}>'
157
+ else:
158
+ full_type_name = stype.name
159
+ ctx.out.write(f"export type {full_type_name} = {base_type}{{")
160
+ ctx.out.write("\n")
161
+ for prop in stype.properties.values():
162
+ ref_type = refer_to(ctx, prop.spec_type)
163
+ prop_name = ts_name(prop.name, prop.name_case)
164
+ if prop.has_default and not prop.parse_require:
165
+ # For now, we'll assume the generated types with defaults are meant as
166
+ # arguments, thus treat like extant==missing
167
+ # IMPROVE: if we can decide they are meant as output instead, then
168
+ # they should be marked as required
169
+ ctx.out.write(f"{INDENT}{prop_name}?: {ref_type}")
170
+ elif prop.extant == builder.PropertyExtant.missing:
171
+ # Unlike optional below, missing does not imply null is possible. They
172
+ # treated distinctly.
173
+ ctx.out.write(f"{INDENT}{prop_name}?: {ref_type}")
174
+ elif prop.extant == builder.PropertyExtant.optional:
175
+ # Need to add in |null since Python side can produce null's right now
176
+ # IMPROVE: It would be better if the serializer could instead omit the None's
177
+ # Dropping the null should be forward compatible
178
+ ctx.out.write(f"{INDENT}{prop_name}?: {ref_type} | null")
179
+ else:
180
+ ctx.out.write(f"{INDENT}{prop_name}: {ref_type}")
181
+ ctx.out.write("\n")
182
+ ctx.out.write("}\n")
183
+
184
+
185
+ def refer_to(ctx: EmitTypescriptContext, stype: builder.SpecType) -> str:
186
+ return refer_to_impl(ctx, stype)[0]
187
+
188
+
189
+ def refer_to_impl(
190
+ ctx: EmitTypescriptContext, stype: builder.SpecType
191
+ ) -> tuple[str, bool]:
192
+ """
193
+ @return (string-specific, multiple-types)
194
+ """
195
+ if isinstance(stype, builder.SpecTypeInstance):
196
+ if stype.defn_type.name == builder.BaseTypeName.s_list:
197
+ spec, multi = refer_to_impl(ctx, stype.parameters[0])
198
+ return f"({spec})[]" if multi else f"{spec}[]", False
199
+ if stype.defn_type.name == builder.BaseTypeName.s_readonly_array:
200
+ spec, multi = refer_to_impl(ctx, stype.parameters[0])
201
+ return f"readonly ({spec})[]" if multi else f"readonly {spec}[]", False
202
+ if stype.defn_type.name == builder.BaseTypeName.s_union:
203
+ return (
204
+ f'({" | ".join([refer_to(ctx, p) for p in stype.parameters])})',
205
+ False,
206
+ )
207
+ if stype.defn_type.name == builder.BaseTypeName.s_literal:
208
+ parts = []
209
+ for parameter in stype.parameters:
210
+ assert isinstance(parameter, builder.SpecTypeLiteralWrapper)
211
+ parts.append(refer_to(ctx, parameter))
212
+ return f'({" | ".join(parts)})', False
213
+ if stype.defn_type.name == builder.BaseTypeName.s_optional:
214
+ return f"{refer_to(ctx, stype.parameters[0])} | null", True
215
+ if stype.defn_type.name == builder.BaseTypeName.s_tuple:
216
+ return f"[{", ".join([refer_to(ctx, p) for p in stype.parameters])}]", False
217
+ params = ", ".join([refer_to(ctx, p) for p in stype.parameters])
218
+ return f"{refer_to(ctx, stype.defn_type)}<{params}>", False
219
+
220
+ if isinstance(stype, builder.SpecTypeLiteralWrapper):
221
+ return emit_value_ts(ctx, stype.value_type, stype.value), False
222
+
223
+ if isinstance(stype, builder.SpecTypeGenericParameter):
224
+ return stype.name, False
225
+
226
+ assert isinstance(stype, builder.SpecTypeDefn)
227
+ if stype.is_base: # assume correct namespace
228
+ if stype.name == builder.BaseTypeName.s_list:
229
+ return "any[]", False # TODO: generic type
230
+ return base_name_map[builder.BaseTypeName(stype.name)], False
231
+
232
+ if stype.namespace == ctx.namespace:
233
+ return stype.name, False
234
+
235
+ ctx.namespaces.add(stype.namespace)
236
+ return f"{resolve_namespace_ref(stype.namespace)}.{stype.name}", False
237
+
238
+
239
+ def ts_enum_name(name: str, name_case: builder.NameCase) -> str:
240
+ if name_case == builder.NameCase.js_upper:
241
+ return name.upper()
242
+ return ts_name(name, name_case)
243
+
244
+
245
+ def resolve_namespace_name(namespace: builder.SpecNamespace) -> str:
246
+ return namespace.name
247
+
248
+
249
+ def emit_namespace_imports_ts(
250
+ namespaces: set[builder.SpecNamespace],
251
+ out: io.StringIO,
252
+ current_namespace: builder.SpecNamespace,
253
+ ) -> None:
254
+ for ns in sorted(
255
+ namespaces,
256
+ key=lambda name: resolve_namespace_name(name),
257
+ ):
258
+ import_as = resolve_namespace_ref(ns)
259
+ import_path = (
260
+ "./"
261
+ if len(current_namespace.path) == 1
262
+ else "../" * (len(current_namespace.path) - 1)
263
+ )
264
+ import_from = f"{import_path}{resolve_namespace_name(ns)}"
265
+ out.write(f'import * as {import_as} from "{import_from}"\n') # noqa: E501
@@ -86,23 +86,23 @@ def run_queued_job(
86
86
  profile_metadata=job_details.profile_metadata,
87
87
  job_definition=job_details.job_definition,
88
88
  )
89
- client = construct_uncountable_client(
90
- profile_meta=job_details.profile_metadata, job_logger=job_logger
91
- )
92
- batch_processor = AsyncBatchProcessor(client=client)
89
+ try:
90
+ client = construct_uncountable_client(
91
+ profile_meta=job_details.profile_metadata, job_logger=job_logger
92
+ )
93
+ batch_processor = AsyncBatchProcessor(client=client)
93
94
 
94
- payload = _resolve_queued_job_payload(queued_job)
95
+ payload = _resolve_queued_job_payload(queued_job)
95
96
 
96
- args = JobArguments(
97
- job_definition=job_details.job_definition,
98
- client=client,
99
- batch_processor=batch_processor,
100
- profile_metadata=job_details.profile_metadata,
101
- logger=job_logger,
102
- payload=payload,
103
- )
97
+ args = JobArguments(
98
+ job_definition=job_details.job_definition,
99
+ client=client,
100
+ batch_processor=batch_processor,
101
+ profile_metadata=job_details.profile_metadata,
102
+ logger=job_logger,
103
+ payload=payload,
104
+ )
104
105
 
105
- try:
106
106
  return execute_job(
107
107
  args=args,
108
108
  profile_metadata=job_details.profile_metadata,
@@ -41,7 +41,7 @@ class EntityToCreate:
41
41
  @dataclasses.dataclass(kw_only=True)
42
42
  class Arguments:
43
43
  definition_id: base_t.ObjectId
44
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.OUTPUT]]
44
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.CONDITION_PARAMETER], typing.Literal[entity_t.EntityType.OUTPUT]]
45
45
  entities_to_create: list[EntityToCreate]
46
46
 
47
47
 
@@ -44,7 +44,7 @@ class EntityFieldInitialValue:
44
44
  @dataclasses.dataclass(kw_only=True)
45
45
  class Arguments:
46
46
  definition_id: base_t.ObjectId
47
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.OUTPUT]]
47
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.CONDITION_PARAMETER], typing.Literal[entity_t.EntityType.OUTPUT]]
48
48
  field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None
49
49
 
50
50
 
@@ -257,7 +257,7 @@ class ClientMethods(ABC):
257
257
  self,
258
258
  *,
259
259
  definition_id: base_t.ObjectId,
260
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.OUTPUT]],
260
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.CONDITION_PARAMETER], typing.Literal[entity_t.EntityType.OUTPUT]],
261
261
  entities_to_create: list[create_entities_t.EntityToCreate],
262
262
  ) -> create_entities_t.Data:
263
263
  """Creates new Uncountable entities
@@ -282,7 +282,7 @@ class ClientMethods(ABC):
282
282
  self,
283
283
  *,
284
284
  definition_id: base_t.ObjectId,
285
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.OUTPUT]],
285
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.CONDITION_PARAMETER], typing.Literal[entity_t.EntityType.OUTPUT]],
286
286
  field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None,
287
287
  ) -> create_entity_t.Data:
288
288
  """Creates a new Uncountable entity