UncountablePythonSDK 0.0.74__tar.gz → 0.0.76__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 (300) hide show
  1. {uncountablepythonsdk-0.0.74/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.76}/PKG-INFO +2 -2
  2. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
  3. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/UncountablePythonSDK.egg-info/SOURCES.txt +6 -0
  4. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/UncountablePythonSDK.egg-info/requires.txt +1 -1
  5. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/requirements.txt +1 -1
  6. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/async_batch.py +3 -3
  7. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization/serial_class.py +3 -0
  8. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/builder.py +7 -8
  9. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/emit_python.py +6 -6
  10. uncountablepythonsdk-0.0.76/pkgs/type_spec/emit_typescript.py +256 -0
  11. uncountablepythonsdk-0.0.76/pkgs/type_spec/emit_typescript_util.py +265 -0
  12. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pyproject.toml +1 -1
  13. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/core/environment.py +15 -2
  14. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/construct_client.py +3 -4
  15. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/job_scheduler.py +1 -1
  16. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/worker.py +17 -22
  17. uncountablepythonsdk-0.0.76/uncountable/integration/scan_profiles.py +67 -0
  18. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/server.py +4 -12
  19. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/telemetry.py +2 -2
  20. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/webhook_server/entrypoint.py +4 -10
  21. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/__init__.py +8 -0
  22. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/create_entities.py +4 -2
  23. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/create_entity.py +4 -2
  24. uncountablepythonsdk-0.0.76/uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  25. uncountablepythonsdk-0.0.76/uncountable/types/api/recipes/get_column_calculation_values.py +58 -0
  26. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/async_batch_processor.py +43 -0
  27. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/async_batch_t.py +1 -0
  28. uncountablepythonsdk-0.0.76/uncountable/types/auth_retrieval.py +12 -0
  29. uncountablepythonsdk-0.0.76/uncountable/types/auth_retrieval_t.py +75 -0
  30. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/client_base.py +62 -4
  31. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/entity.py +3 -0
  32. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/entity_t.py +20 -0
  33. uncountablepythonsdk-0.0.76/uncountable/types/integration_server.py +9 -0
  34. uncountablepythonsdk-0.0.76/uncountable/types/integration_server_t.py +37 -0
  35. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/job_definition.py +1 -5
  36. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/job_definition_t.py +20 -60
  37. uncountablepythonsdk-0.0.74/pkgs/type_spec/emit_typescript.py +0 -486
  38. uncountablepythonsdk-0.0.74/pkgs/type_spec/emit_typescript_util.py +0 -30
  39. uncountablepythonsdk-0.0.74/uncountable/integration/scan_profiles.py +0 -43
  40. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/.github/workflows/documentation.yml +0 -0
  41. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/.github/workflows/publish.yml +0 -0
  42. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/.gitignore +0 -0
  43. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/README.md +0 -0
  44. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  45. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  46. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/.gitignore +0 -0
  47. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/conf.py +0 -0
  48. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/index.md +0 -0
  49. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/justfile +0 -0
  50. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/quickstart.md +0 -0
  51. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/android-chrome-192x192.png +0 -0
  52. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/android-chrome-512x512.png +0 -0
  53. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/apple-touch-icon.png +0 -0
  54. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/browserconfig.xml +0 -0
  55. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/favicon-16x16.png +0 -0
  56. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/favicon-32x32.png +0 -0
  57. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/manifest.json +0 -0
  58. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/mstile-150x150.png +0 -0
  59. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  60. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/docs/static/logo_blue.png +0 -0
  61. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/create_entity.py +0 -0
  62. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/edit_recipe_inputs.py +0 -0
  63. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  64. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  65. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/integration-server/pyproject.toml +0 -0
  66. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/invoke_uploader.py +0 -0
  67. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/set_recipe_metadata_file.py +0 -0
  68. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/set_recipe_output_file_sdk.py +0 -0
  69. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/examples/upload_files.py +0 -0
  70. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/__init__.py +0 -0
  71. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/argument_parser/__init__.py +0 -0
  72. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/argument_parser/_is_enum.py +0 -0
  73. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  74. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/argument_parser/argument_parser.py +0 -0
  75. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/argument_parser/case_convert.py +0 -0
  76. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/__init__.py +0 -0
  77. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  78. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/_local_session.py +0 -0
  79. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/_s3_session.py +0 -0
  80. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  81. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  82. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  83. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/py.typed +0 -0
  84. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization/__init__.py +0 -0
  85. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization/missing_sentry.py +0 -0
  86. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization/opaque_key.py +0 -0
  87. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization/serial_union.py +0 -0
  88. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization/yaml.py +0 -0
  89. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization_util/__init__.py +0 -0
  90. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  91. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  92. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/serialization_util/serialization_helpers.py +0 -0
  93. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/strenum_compat/__init__.py +0 -0
  94. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/strenum_compat/strenum_compat.py +0 -0
  95. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/__main__.py +0 -0
  97. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  99. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  100. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/config.py +0 -0
  101. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/emit_io_ts.py +0 -0
  102. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/emit_open_api.py +0 -0
  103. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/emit_open_api_util.py +0 -0
  104. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/load_types.py +0 -0
  105. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/open_api_util.py +0 -0
  106. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/parts/base.py.prepart +0 -0
  107. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  108. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/test.py +0 -0
  109. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/type_info/__main__.py +0 -0
  110. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  111. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/util.py +0 -0
  112. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/value_spec/__init__.py +0 -0
  113. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/value_spec/__main__.py +0 -0
  114. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  115. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  116. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/pkgs/type_spec/value_spec/types.py +0 -0
  117. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/setup.cfg +0 -0
  118. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/core/__init__.py +0 -0
  120. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/core/async_batch.py +0 -0
  121. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/core/client.py +0 -0
  122. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/core/file_upload.py +0 -0
  123. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/core/types.py +0 -0
  124. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/__init__.py +0 -0
  125. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/cli.py +0 -0
  126. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/cron.py +0 -0
  127. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/db/__init__.py +0 -0
  128. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/db/connect.py +0 -0
  129. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/db/session.py +0 -0
  130. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/entrypoint.py +0 -0
  131. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/executors/__init__.py +0 -0
  132. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/executors/executors.py +0 -0
  133. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  134. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/executors/script_executor.py +0 -0
  135. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/job.py +0 -0
  136. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  138. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  139. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  140. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  142. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  143. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  144. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  145. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  146. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  148. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  149. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  150. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  151. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/queue_runner/types.py +0 -0
  152. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/scheduler.py +0 -0
  153. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  154. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  155. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/py.typed +0 -0
  156. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/batch/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/batch/execute_batch.py +0 -0
  159. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  160. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/chemical/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  162. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/get_entities_data.py +0 -0
  164. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/list_entities.py +0 -0
  165. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/lock_entity.py +0 -0
  166. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  167. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/set_values.py +0 -0
  168. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  169. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/entity/unlock_entity.py +0 -0
  170. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/equipment/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  172. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/field_options/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  174. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/id_source/__init__.py +0 -0
  175. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/id_source/list_id_source.py +0 -0
  176. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/id_source/match_id_source.py +0 -0
  177. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/input_groups/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  179. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/create_inputs.py +0 -0
  181. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/get_input_data.py +0 -0
  182. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/get_input_names.py +0 -0
  183. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  184. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  185. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/set_input_category.py +0 -0
  186. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  187. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  188. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/material_families/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  190. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/outputs/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/outputs/get_output_data.py +0 -0
  192. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/outputs/get_output_names.py +0 -0
  193. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  194. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/permissions/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  196. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/project/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/project/get_projects.py +0 -0
  198. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/project/get_projects_data.py +0 -0
  199. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipe_links/__init__.py +0 -0
  200. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  201. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  202. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  204. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/__init__.py +0 -0
  205. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  206. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  207. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  208. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  209. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  210. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/create_recipe.py +0 -0
  211. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/create_recipes.py +0 -0
  212. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  213. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  214. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/get_curve.py +0 -0
  215. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  216. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  217. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  218. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  219. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  220. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  221. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  222. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  223. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  224. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  225. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  226. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  227. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  228. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  229. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  230. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/triggers/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/triggers/run_trigger.py +0 -0
  232. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/uploader/__init__.py +0 -0
  233. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  234. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/async_batch.py +0 -0
  235. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/base.py +0 -0
  236. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/base_t.py +0 -0
  237. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/calculations.py +0 -0
  238. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/calculations_t.py +0 -0
  239. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/chemical_structure.py +0 -0
  240. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/chemical_structure_t.py +0 -0
  241. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/client_config.py +0 -0
  242. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/client_config_t.py +0 -0
  243. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/curves.py +0 -0
  244. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/curves_t.py +0 -0
  245. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/experiment_groups.py +0 -0
  246. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/experiment_groups_t.py +0 -0
  247. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/field_values.py +0 -0
  248. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/field_values_t.py +0 -0
  249. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/fields.py +0 -0
  250. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/fields_t.py +0 -0
  251. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/generic_upload.py +0 -0
  252. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/generic_upload_t.py +0 -0
  253. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/id_source.py +0 -0
  254. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/id_source_t.py +0 -0
  255. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/identifier.py +0 -0
  256. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/identifier_t.py +0 -0
  257. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/input_attributes.py +0 -0
  258. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/input_attributes_t.py +0 -0
  259. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/inputs.py +0 -0
  260. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/inputs_t.py +0 -0
  261. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/outputs.py +0 -0
  262. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/outputs_t.py +0 -0
  263. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/overrides.py +0 -0
  264. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/overrides_t.py +0 -0
  265. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/permissions.py +0 -0
  266. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/permissions_t.py +0 -0
  267. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/phases.py +0 -0
  268. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/phases_t.py +0 -0
  269. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/post_base.py +0 -0
  270. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/post_base_t.py +0 -0
  271. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/queued_job.py +0 -0
  272. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/queued_job_t.py +0 -0
  273. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_identifiers.py +0 -0
  274. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_identifiers_t.py +0 -0
  275. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_inputs.py +0 -0
  276. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_inputs_t.py +0 -0
  277. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_links.py +0 -0
  278. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_links_t.py +0 -0
  279. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_metadata.py +0 -0
  280. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_metadata_t.py +0 -0
  281. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_output_metadata.py +0 -0
  282. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_output_metadata_t.py +0 -0
  283. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_tags.py +0 -0
  284. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_tags_t.py +0 -0
  285. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_workflow_steps.py +0 -0
  286. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  287. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipes.py +0 -0
  288. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/recipes_t.py +0 -0
  289. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/response.py +0 -0
  290. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/response_t.py +0 -0
  291. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/secret_retrieval.py +0 -0
  292. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/secret_retrieval_t.py +0 -0
  293. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/units.py +0 -0
  294. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/units_t.py +0 -0
  295. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/users.py +0 -0
  296. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/users_t.py +0 -0
  297. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/webhook_job.py +0 -0
  298. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/webhook_job_t.py +0 -0
  299. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/uncountable/types/workflows.py +0 -0
  300. {uncountablepythonsdk-0.0.74 → uncountablepythonsdk-0.0.76}/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.76
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
@@ -16,7 +16,7 @@ Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
- Requires-Dist: aiotus==0.*
19
+ Requires-Dist: aiotus==1.*
20
20
  Requires-Dist: aiohttp==3.*
21
21
  Requires-Dist: requests==2.*
22
22
  Requires-Dist: SQLAlchemy>=1.4.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.74
3
+ Version: 0.0.76
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
@@ -16,7 +16,7 @@ Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
- Requires-Dist: aiotus==0.*
19
+ Requires-Dist: aiotus==1.*
20
20
  Requires-Dist: aiohttp==3.*
21
21
  Requires-Dist: requests==2.*
22
22
  Requires-Dist: SQLAlchemy>=1.4.0
@@ -136,6 +136,8 @@ uncountable/types/__init__.py
136
136
  uncountable/types/async_batch.py
137
137
  uncountable/types/async_batch_processor.py
138
138
  uncountable/types/async_batch_t.py
139
+ uncountable/types/auth_retrieval.py
140
+ uncountable/types/auth_retrieval_t.py
139
141
  uncountable/types/base.py
140
142
  uncountable/types/base_t.py
141
143
  uncountable/types/calculations.py
@@ -165,6 +167,8 @@ uncountable/types/input_attributes.py
165
167
  uncountable/types/input_attributes_t.py
166
168
  uncountable/types/inputs.py
167
169
  uncountable/types/inputs_t.py
170
+ uncountable/types/integration_server.py
171
+ uncountable/types/integration_server_t.py
168
172
  uncountable/types/job_definition.py
169
173
  uncountable/types/job_definition_t.py
170
174
  uncountable/types/outputs.py
@@ -217,6 +221,7 @@ uncountable/types/api/entity/__init__.py
217
221
  uncountable/types/api/entity/create_entities.py
218
222
  uncountable/types/api/entity/create_entity.py
219
223
  uncountable/types/api/entity/get_entities_data.py
224
+ uncountable/types/api/entity/grant_entity_permissions.py
220
225
  uncountable/types/api/entity/list_entities.py
221
226
  uncountable/types/api/entity/lock_entity.py
222
227
  uncountable/types/api/entity/resolve_entity_ids.py
@@ -267,6 +272,7 @@ uncountable/types/api/recipes/create_recipe.py
267
272
  uncountable/types/api/recipes/create_recipes.py
268
273
  uncountable/types/api/recipes/disassociate_recipe_as_input.py
269
274
  uncountable/types/api/recipes/edit_recipe_inputs.py
275
+ uncountable/types/api/recipes/get_column_calculation_values.py
270
276
  uncountable/types/api/recipes/get_curve.py
271
277
  uncountable/types/api/recipes/get_recipe_calculations.py
272
278
  uncountable/types/api/recipes/get_recipe_links.py
@@ -1,4 +1,4 @@
1
- aiotus==0.*
1
+ aiotus==1.*
2
2
  aiohttp==3.*
3
3
  requests==2.*
4
4
  SQLAlchemy>=1.4.0
@@ -2,6 +2,6 @@ furo==2024.8.6
2
2
  myst-parser==4.0.0
3
3
  sphinx-autoapi==3.3.0
4
4
  sphinx-copybutton==0.5.2
5
- Sphinx==8.0.0
5
+ Sphinx==8.1.3
6
6
  sphinx_design==0.6.1
7
7
  sphinx-favicon==1.0.1
@@ -1,3 +1,4 @@
1
+ import os
1
2
  from decimal import Decimal
2
3
 
3
4
  from uncountable.core import AsyncBatchProcessor, AuthDetailsApiKey, Client
@@ -11,10 +12,9 @@ from uncountable.types.recipe_identifiers import (
11
12
  )
12
13
 
13
14
  client = Client(
14
- base_url="https://app.uncountable.com",
15
+ base_url=os.environ["UNC_BASE_URL"],
15
16
  auth_details=AuthDetailsApiKey(
16
- api_id="X",
17
- api_secret_key="X",
17
+ api_id=os.environ["UNC_API_ID"], api_secret_key=os.environ["UNC_API_SECRET_KEY"]
18
18
  ),
19
19
  )
20
20
  batch_loader = AsyncBatchProcessor(client=client)
@@ -103,6 +103,9 @@ def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | N
103
103
  if hasattr(type_class, "__unc_serial_data")
104
104
  else None
105
105
  )
106
+ if base_class_data is None:
107
+ return None
108
+
106
109
  if type_class.__bases__ is not None:
107
110
  for base in type_class.__bases__:
108
111
  curr_base_class_data = _get_merged_serial_class_data(base)
@@ -535,13 +535,8 @@ class SpecTypeDefnObject(SpecTypeDefn):
535
535
  base_type: list[SpecType] = [self.base] if self.base is not None else []
536
536
  return base_type + prop_types
537
537
 
538
- def get_generic(self) -> Optional[str]:
539
- if len(self.parameters) > 0:
540
- assert (
541
- len(self.parameters) == 1
542
- ), "Only single generic parameters current supported"
543
- return self.parameters[0]
544
- return None
538
+ def get_generics(self) -> list[str]:
539
+ return self.parameters
545
540
 
546
541
 
547
542
  class SpecTypeDefnAlias(SpecTypeDefn):
@@ -1134,7 +1129,11 @@ class SpecNamespace:
1134
1129
  spec_type = SpecTypeDefnStringEnum(self, name)
1135
1130
  else:
1136
1131
  parameters = (
1137
- [parameter.name for parameter in parsed_name.parameters[0]]
1132
+ [
1133
+ parameter.name
1134
+ for name_parameters in parsed_name.parameters
1135
+ for parameter in name_parameters
1136
+ ]
1138
1137
  if parsed_name.parameters is not None
1139
1138
  else None
1140
1139
  )
@@ -814,11 +814,11 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
814
814
 
815
815
  class_out = io.StringIO()
816
816
  base_class = ""
817
- generic = stype.get_generic()
817
+ generics = stype.get_generics()
818
818
  if not stype.base.is_base:
819
819
  base_class = f"({refer_to(ctx, stype.base)})"
820
- elif generic is not None:
821
- base_class = f"(typing.Generic[{generic}])"
820
+ elif len(generics) > 0:
821
+ base_class = f"(typing.Generic[{", ".join(generics)}])"
822
822
  class_out.write(f"class {stype.name}{base_class}:\n")
823
823
 
824
824
  emitted_properties_metadata = _emit_type_properties(
@@ -829,7 +829,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
829
829
  to_string_values = emitted_properties_metadata.to_string_values
830
830
  parse_require = emitted_properties_metadata.parse_require
831
831
 
832
- _emit_generic(ctx, stype.get_generic())
832
+ _emit_generics(ctx, generics)
833
833
 
834
834
  # Emit serial_class decorator
835
835
  ctx.out.write("@serial_class(\n")
@@ -864,8 +864,8 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
864
864
  ctx.out.write(class_out.getvalue())
865
865
 
866
866
 
867
- def _emit_generic(ctx: Context, generic: Optional[str]) -> None:
868
- if generic is not None:
867
+ def _emit_generics(ctx: Context, generics: list[str]) -> None:
868
+ for generic in generics:
869
869
  ctx.out.write(f'{generic} = typing.TypeVar("{generic}")\n')
870
870
  ctx.out.write(f"{LINE_BREAK}{LINE_BREAK}")
871
871
 
@@ -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())