UncountablePythonSDK 0.0.99__tar.gz → 0.0.101__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 (311) hide show
  1. {uncountablepythonsdk-0.0.99/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.101}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
  4. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/builder.py +7 -1
  5. uncountablepythonsdk-0.0.101/pkgs/type_spec/cross_output_links.py +105 -0
  6. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/emit_python.py +8 -0
  7. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/emit_typescript.py +12 -2
  8. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/emit_typescript_util.py +2 -1
  9. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/load_types.py +15 -1
  10. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/__init__.py +2 -0
  11. uncountablepythonsdk-0.0.101/uncountable/types/api/entity/create_or_update_entity.py +46 -0
  12. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/async_batch_processor.py +74 -0
  13. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/async_batch_t.py +2 -0
  14. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/client_base.py +25 -0
  15. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/.github/workflows/documentation.yml +0 -0
  16. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/.github/workflows/publish.yml +0 -0
  17. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/.gitignore +0 -0
  18. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/README.md +0 -0
  19. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  20. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  21. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  22. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/.gitignore +0 -0
  23. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/conf.py +0 -0
  24. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/index.md +0 -0
  25. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/justfile +0 -0
  26. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/quickstart.md +0 -0
  27. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/requirements.txt +0 -0
  28. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/android-chrome-192x192.png +0 -0
  29. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/android-chrome-512x512.png +0 -0
  30. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/apple-touch-icon.png +0 -0
  31. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/browserconfig.xml +0 -0
  32. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/favicon-16x16.png +0 -0
  33. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/favicon-32x32.png +0 -0
  34. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/manifest.json +0 -0
  35. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/mstile-150x150.png +0 -0
  36. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  37. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/docs/static/logo_blue.png +0 -0
  38. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/async_batch.py +0 -0
  39. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/create_entity.py +0 -0
  40. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/download_files.py +0 -0
  41. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/edit_recipe_inputs.py +0 -0
  42. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  43. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  44. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  45. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/integration-server/pyproject.toml +0 -0
  46. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/invoke_uploader.py +0 -0
  47. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/set_recipe_metadata_file.py +0 -0
  48. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/set_recipe_output_file_sdk.py +0 -0
  49. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/examples/upload_files.py +0 -0
  50. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/__init__.py +0 -0
  51. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/argument_parser/__init__.py +0 -0
  52. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/argument_parser/_is_enum.py +0 -0
  53. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  54. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/argument_parser/argument_parser.py +0 -0
  55. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/argument_parser/case_convert.py +0 -0
  56. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/__init__.py +0 -0
  57. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/_blob_session.py +0 -0
  58. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  59. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/_local_session.py +0 -0
  60. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/_s3_session.py +0 -0
  61. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  62. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  63. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  64. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/py.typed +0 -0
  65. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/__init__.py +0 -0
  66. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/annotation.py +0 -0
  67. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/missing_sentry.py +0 -0
  68. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/opaque_key.py +0 -0
  69. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/serial_alias.py +0 -0
  70. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/serial_class.py +0 -0
  71. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/serial_generic.py +0 -0
  72. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/serial_union.py +0 -0
  73. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization/yaml.py +0 -0
  74. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization_util/__init__.py +0 -0
  75. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  76. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  77. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization_util/dataclasses.py +0 -0
  78. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/serialization_util/serialization_helpers.py +0 -0
  79. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/strenum_compat/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/strenum_compat/strenum_compat.py +0 -0
  81. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/__init__.py +0 -0
  82. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/__main__.py +0 -0
  83. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  84. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  85. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  86. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/config.py +0 -0
  87. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/emit_io_ts.py +0 -0
  88. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/emit_open_api.py +0 -0
  89. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/emit_open_api_util.py +0 -0
  90. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/open_api_util.py +0 -0
  91. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/parts/base.py.prepart +0 -0
  92. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  93. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/test.py +0 -0
  94. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/type_info/__main__.py +0 -0
  95. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  96. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/util.py +0 -0
  97. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/value_spec/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/value_spec/__main__.py +0 -0
  99. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  100. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  101. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pkgs/type_spec/value_spec/types.py +0 -0
  102. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/pyproject.toml +0 -0
  103. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/setup.cfg +0 -0
  104. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/__init__.py +0 -0
  105. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/core/__init__.py +0 -0
  106. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/core/async_batch.py +0 -0
  107. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/core/client.py +0 -0
  108. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/core/environment.py +0 -0
  109. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/core/file_upload.py +0 -0
  110. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/core/types.py +0 -0
  111. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/__init__.py +0 -0
  112. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/cli.py +0 -0
  113. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/construct_client.py +0 -0
  114. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/cron.py +0 -0
  115. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/db/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/db/connect.py +0 -0
  117. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/db/session.py +0 -0
  118. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/entrypoint.py +0 -0
  119. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/executors/__init__.py +0 -0
  120. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/executors/executors.py +0 -0
  121. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  122. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/executors/script_executor.py +0 -0
  123. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/job.py +0 -0
  124. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/__init__.py +0 -0
  125. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  126. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  127. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  128. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  129. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  130. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  131. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  132. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  133. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  134. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  136. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  137. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  138. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  139. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  140. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/types.py +0 -0
  141. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/queue_runner/worker.py +0 -0
  142. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/scan_profiles.py +0 -0
  143. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/scheduler.py +0 -0
  144. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  146. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/server.py +0 -0
  147. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/telemetry.py +0 -0
  148. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  149. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/py.typed +0 -0
  150. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/batch/__init__.py +0 -0
  152. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/batch/execute_batch.py +0 -0
  153. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  154. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/chemical/__init__.py +0 -0
  155. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  156. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/create_entities.py +0 -0
  158. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/create_entity.py +0 -0
  159. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/get_entities_data.py +0 -0
  160. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  161. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/list_entities.py +0 -0
  162. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/lock_entity.py +0 -0
  163. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  164. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  165. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/set_values.py +0 -0
  166. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  167. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/entity/unlock_entity.py +0 -0
  168. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/equipment/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  170. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/field_options/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  172. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/files/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/files/download_file.py +0 -0
  174. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/id_source/__init__.py +0 -0
  175. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/id_source/list_id_source.py +0 -0
  176. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/id_source/match_id_source.py +0 -0
  177. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/input_groups/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  179. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/create_inputs.py +0 -0
  181. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/get_input_data.py +0 -0
  182. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/get_input_names.py +0 -0
  183. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  184. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  185. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/set_input_category.py +0 -0
  186. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  187. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  188. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/material_families/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  190. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/outputs/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/outputs/get_output_data.py +0 -0
  192. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/outputs/get_output_names.py +0 -0
  193. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  194. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/permissions/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  196. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/project/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/project/get_projects.py +0 -0
  198. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/project/get_projects_data.py +0 -0
  199. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipe_links/__init__.py +0 -0
  200. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  201. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  202. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  204. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/__init__.py +0 -0
  205. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  206. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  207. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  208. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  209. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  210. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/create_recipe.py +0 -0
  211. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/create_recipes.py +0 -0
  212. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  213. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  214. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  215. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_curve.py +0 -0
  216. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  217. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  218. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  219. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  220. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  221. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  222. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  223. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  224. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  225. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  226. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  227. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  228. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  229. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  230. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  231. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/triggers/__init__.py +0 -0
  232. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/triggers/run_trigger.py +0 -0
  233. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/uploader/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  235. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/async_batch.py +0 -0
  236. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/async_jobs.py +0 -0
  237. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/async_jobs_t.py +0 -0
  238. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/auth_retrieval.py +0 -0
  239. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/auth_retrieval_t.py +0 -0
  240. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/base.py +0 -0
  241. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/base_t.py +0 -0
  242. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/calculations.py +0 -0
  243. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/calculations_t.py +0 -0
  244. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/chemical_structure.py +0 -0
  245. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/chemical_structure_t.py +0 -0
  246. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/client_config.py +0 -0
  247. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/client_config_t.py +0 -0
  248. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/curves.py +0 -0
  249. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/curves_t.py +0 -0
  250. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/entity.py +0 -0
  251. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/entity_t.py +0 -0
  252. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/experiment_groups.py +0 -0
  253. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/experiment_groups_t.py +0 -0
  254. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/field_values.py +0 -0
  255. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/field_values_t.py +0 -0
  256. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/fields.py +0 -0
  257. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/fields_t.py +0 -0
  258. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/generic_upload.py +0 -0
  259. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/generic_upload_t.py +0 -0
  260. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/id_source.py +0 -0
  261. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/id_source_t.py +0 -0
  262. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/identifier.py +0 -0
  263. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/identifier_t.py +0 -0
  264. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/input_attributes.py +0 -0
  265. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/input_attributes_t.py +0 -0
  266. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/inputs.py +0 -0
  267. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/inputs_t.py +0 -0
  268. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/integration_server.py +0 -0
  269. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/integration_server_t.py +0 -0
  270. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/job_definition.py +0 -0
  271. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/job_definition_t.py +0 -0
  272. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/outputs.py +0 -0
  273. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/outputs_t.py +0 -0
  274. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/overrides.py +0 -0
  275. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/overrides_t.py +0 -0
  276. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/permissions.py +0 -0
  277. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/permissions_t.py +0 -0
  278. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/phases.py +0 -0
  279. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/phases_t.py +0 -0
  280. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/post_base.py +0 -0
  281. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/post_base_t.py +0 -0
  282. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/queued_job.py +0 -0
  283. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/queued_job_t.py +0 -0
  284. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_identifiers.py +0 -0
  285. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_identifiers_t.py +0 -0
  286. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_inputs.py +0 -0
  287. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_inputs_t.py +0 -0
  288. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_links.py +0 -0
  289. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_links_t.py +0 -0
  290. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_metadata.py +0 -0
  291. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_metadata_t.py +0 -0
  292. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_output_metadata.py +0 -0
  293. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_output_metadata_t.py +0 -0
  294. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_tags.py +0 -0
  295. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_tags_t.py +0 -0
  296. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_workflow_steps.py +0 -0
  297. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  298. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipes.py +0 -0
  299. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/recipes_t.py +0 -0
  300. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/response.py +0 -0
  301. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/response_t.py +0 -0
  302. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/secret_retrieval.py +0 -0
  303. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/secret_retrieval_t.py +0 -0
  304. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/units.py +0 -0
  305. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/units_t.py +0 -0
  306. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/users.py +0 -0
  307. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/users_t.py +0 -0
  308. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/webhook_job.py +0 -0
  309. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/webhook_job_t.py +0 -0
  310. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/uncountable/types/workflows.py +0 -0
  311. {uncountablepythonsdk-0.0.99 → uncountablepythonsdk-0.0.101}/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.99
3
+ Version: 0.0.101
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.99
3
+ Version: 0.0.101
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
@@ -71,6 +71,7 @@ pkgs/type_spec/__init__.py
71
71
  pkgs/type_spec/__main__.py
72
72
  pkgs/type_spec/builder.py
73
73
  pkgs/type_spec/config.py
74
+ pkgs/type_spec/cross_output_links.py
74
75
  pkgs/type_spec/emit_io_ts.py
75
76
  pkgs/type_spec/emit_open_api.py
76
77
  pkgs/type_spec/emit_open_api_util.py
@@ -229,6 +230,7 @@ uncountable/types/api/chemical/convert_chemical_formats.py
229
230
  uncountable/types/api/entity/__init__.py
230
231
  uncountable/types/api/entity/create_entities.py
231
232
  uncountable/types/api/entity/create_entity.py
233
+ uncountable/types/api/entity/create_or_update_entity.py
232
234
  uncountable/types/api/entity/get_entities_data.py
233
235
  uncountable/types/api/entity/grant_entity_permissions.py
234
236
  uncountable/types/api/entity/list_entities.py
@@ -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
@@ -9,9 +9,11 @@ import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  import uncountable.types.api.equipment.associate_equipment_input as associate_equipment_input_t
11
11
  import uncountable.types.api.recipes.associate_recipe_as_input as associate_recipe_as_input_t
12
+ import uncountable.types.api.recipes.associate_recipe_as_lot as associate_recipe_as_lot_t
12
13
  from uncountable.types import async_batch_t
13
14
  from uncountable.types import base_t
14
15
  import uncountable.types.api.recipes.clear_recipe_outputs as clear_recipe_outputs_t
16
+ import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
15
17
  import uncountable.types.api.recipes.create_recipe as create_recipe_t
16
18
  import uncountable.types.api.recipes.edit_recipe_inputs as edit_recipe_inputs_t
17
19
  from uncountable.types import entity_t
@@ -112,6 +114,41 @@ class AsyncBatchProcessorBase(ABC):
112
114
  batch_reference=req.batch_reference,
113
115
  )
114
116
 
117
+ def associate_recipe_as_lot(
118
+ self,
119
+ *,
120
+ recipe_key: identifier_t.IdentifierKey,
121
+ ingredient_key: identifier_t.IdentifierKey,
122
+ depends_on: list[str] | None = None,
123
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
124
+ """Create a new lot association for the provided recipe with the provided ingredient
125
+
126
+ :param recipe_key: Identifier for the recipe
127
+ :param ingredient_key: Identifier for the ingredient
128
+ :param depends_on: A list of batch reference keys to process before processing this request
129
+ """
130
+ args = associate_recipe_as_lot_t.Arguments(
131
+ recipe_key=recipe_key,
132
+ ingredient_key=ingredient_key,
133
+ )
134
+ json_data = serialize_for_api(args)
135
+
136
+ batch_reference = str(uuid.uuid4())
137
+
138
+ req = async_batch_t.AsyncBatchRequest(
139
+ path=async_batch_t.AsyncBatchRequestPath.ASSOCIATE_RECIPE_AS_LOT,
140
+ data=json_data,
141
+ depends_on=depends_on,
142
+ batch_reference=batch_reference,
143
+ )
144
+
145
+ self._enqueue(req)
146
+
147
+ return async_batch_t.QueuedAsyncBatchRequest(
148
+ path=req.path,
149
+ batch_reference=req.batch_reference,
150
+ )
151
+
115
152
  def clear_recipe_outputs(
116
153
  self,
117
154
  *,
@@ -144,6 +181,43 @@ class AsyncBatchProcessorBase(ABC):
144
181
  batch_reference=req.batch_reference,
145
182
  )
146
183
 
184
+ def create_or_update_entity(
185
+ self,
186
+ *,
187
+ entity_type: entity_t.EntityType,
188
+ definition_key: identifier_t.IdentifierKey,
189
+ field_values: list[field_values_t.FieldArgumentValue],
190
+ entity_key: identifier_t.IdentifierKey | None = None,
191
+ depends_on: list[str] | None = None,
192
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
193
+ """Creates or updates field values for an entity
194
+
195
+ :param depends_on: A list of batch reference keys to process before processing this request
196
+ """
197
+ args = create_or_update_entity_t.Arguments(
198
+ entity_key=entity_key,
199
+ entity_type=entity_type,
200
+ definition_key=definition_key,
201
+ field_values=field_values,
202
+ )
203
+ json_data = serialize_for_api(args)
204
+
205
+ batch_reference = str(uuid.uuid4())
206
+
207
+ req = async_batch_t.AsyncBatchRequest(
208
+ path=async_batch_t.AsyncBatchRequestPath.CREATE_OR_UPDATE_ENTITY,
209
+ data=json_data,
210
+ depends_on=depends_on,
211
+ batch_reference=batch_reference,
212
+ )
213
+
214
+ self._enqueue(req)
215
+
216
+ return async_batch_t.QueuedAsyncBatchRequest(
217
+ path=req.path,
218
+ batch_reference=req.batch_reference,
219
+ )
220
+
147
221
  def create_recipe(
148
222
  self,
149
223
  *,
@@ -37,6 +37,8 @@ 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
+ ASSOCIATE_RECIPE_AS_LOT = "recipes/associate_recipe_as_lot"
41
+ CREATE_OR_UPDATE_ENTITY = "entity/create_or_update_entity"
40
42
 
41
43
 
42
44
  # 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
  *,