UncountablePythonSDK 0.0.75__tar.gz → 0.0.77__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 (298) hide show
  1. {uncountablepythonsdk-0.0.75/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.77}/PKG-INFO +2 -2
  2. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
  3. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/UncountablePythonSDK.egg-info/SOURCES.txt +6 -0
  4. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/UncountablePythonSDK.egg-info/requires.txt +1 -1
  5. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/requirements.txt +1 -1
  6. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/async_batch.py +3 -3
  7. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/argument_parser/argument_parser.py +7 -7
  8. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/_s3_session.py +3 -3
  9. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization/serial_class.py +3 -0
  10. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/builder.py +26 -27
  11. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/config.py +3 -3
  12. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/emit_io_ts.py +6 -6
  13. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/emit_open_api.py +4 -4
  14. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/emit_python.py +20 -20
  15. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/emit_typescript.py +4 -4
  16. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/emit_typescript_util.py +4 -4
  17. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/type_info/emit_type_info.py +6 -6
  18. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pyproject.toml +1 -1
  19. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/core/environment.py +15 -2
  20. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/core/file_upload.py +1 -3
  21. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/construct_client.py +3 -4
  22. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/executors/generic_upload_executor.py +7 -7
  23. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/executors/script_executor.py +3 -3
  24. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/job_scheduler.py +1 -1
  25. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/worker.py +3 -8
  26. uncountablepythonsdk-0.0.77/uncountable/integration/scan_profiles.py +67 -0
  27. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  28. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/server.py +4 -12
  29. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/telemetry.py +2 -2
  30. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/webhook_server/entrypoint.py +4 -10
  31. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/__init__.py +8 -0
  32. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/create_entities.py +4 -2
  33. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/create_entity.py +4 -2
  34. uncountablepythonsdk-0.0.77/uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  35. uncountablepythonsdk-0.0.77/uncountable/types/api/recipes/get_column_calculation_values.py +58 -0
  36. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/async_batch_processor.py +43 -0
  37. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/async_batch_t.py +1 -0
  38. uncountablepythonsdk-0.0.77/uncountable/types/auth_retrieval.py +12 -0
  39. uncountablepythonsdk-0.0.77/uncountable/types/auth_retrieval_t.py +75 -0
  40. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/client_base.py +62 -4
  41. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/entity.py +3 -0
  42. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/entity_t.py +20 -0
  43. uncountablepythonsdk-0.0.77/uncountable/types/integration_server.py +9 -0
  44. uncountablepythonsdk-0.0.77/uncountable/types/integration_server_t.py +37 -0
  45. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/job_definition.py +1 -5
  46. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/job_definition_t.py +20 -60
  47. uncountablepythonsdk-0.0.75/uncountable/integration/scan_profiles.py +0 -43
  48. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/.github/workflows/documentation.yml +0 -0
  49. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/.github/workflows/publish.yml +0 -0
  50. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/.gitignore +0 -0
  51. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/README.md +0 -0
  52. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  53. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  54. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/.gitignore +0 -0
  55. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/conf.py +0 -0
  56. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/index.md +0 -0
  57. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/justfile +0 -0
  58. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/quickstart.md +0 -0
  59. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/android-chrome-192x192.png +0 -0
  60. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/android-chrome-512x512.png +0 -0
  61. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/apple-touch-icon.png +0 -0
  62. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/browserconfig.xml +0 -0
  63. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/favicon-16x16.png +0 -0
  64. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/favicon-32x32.png +0 -0
  65. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/manifest.json +0 -0
  66. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/mstile-150x150.png +0 -0
  67. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  68. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/docs/static/logo_blue.png +0 -0
  69. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/create_entity.py +0 -0
  70. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/edit_recipe_inputs.py +0 -0
  71. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  72. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  73. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/integration-server/pyproject.toml +0 -0
  74. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/invoke_uploader.py +0 -0
  75. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/set_recipe_metadata_file.py +0 -0
  76. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/set_recipe_output_file_sdk.py +0 -0
  77. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/examples/upload_files.py +0 -0
  78. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/__init__.py +0 -0
  79. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/argument_parser/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/argument_parser/_is_enum.py +0 -0
  81. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  82. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/argument_parser/case_convert.py +0 -0
  83. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/__init__.py +0 -0
  84. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  85. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/_local_session.py +0 -0
  86. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  87. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  88. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  89. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/py.typed +0 -0
  90. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization/missing_sentry.py +0 -0
  92. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization/opaque_key.py +0 -0
  93. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization/serial_union.py +0 -0
  94. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization/yaml.py +0 -0
  95. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization_util/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  97. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  98. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/serialization_util/serialization_helpers.py +0 -0
  99. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/strenum_compat/__init__.py +0 -0
  100. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/strenum_compat/strenum_compat.py +0 -0
  101. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/__main__.py +0 -0
  103. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  104. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  105. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  106. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/emit_open_api_util.py +0 -0
  107. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/load_types.py +0 -0
  108. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/open_api_util.py +0 -0
  109. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/parts/base.py.prepart +0 -0
  110. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  111. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/test.py +0 -0
  112. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/type_info/__main__.py +0 -0
  113. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/util.py +0 -0
  114. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/value_spec/__init__.py +0 -0
  115. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/value_spec/__main__.py +0 -0
  116. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  117. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  118. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/pkgs/type_spec/value_spec/types.py +0 -0
  119. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/setup.cfg +0 -0
  120. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/__init__.py +0 -0
  121. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/core/__init__.py +0 -0
  122. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/core/async_batch.py +0 -0
  123. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/core/client.py +0 -0
  124. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/core/types.py +0 -0
  125. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/__init__.py +0 -0
  126. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/cli.py +0 -0
  127. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/cron.py +0 -0
  128. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/db/__init__.py +0 -0
  129. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/db/connect.py +0 -0
  130. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/db/session.py +0 -0
  131. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/entrypoint.py +0 -0
  132. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/executors/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/executors/executors.py +0 -0
  134. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/job.py +0 -0
  135. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  138. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  139. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  140. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  141. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  142. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  143. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  144. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  145. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  147. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  148. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  149. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  150. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/queue_runner/types.py +0 -0
  151. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/scheduler.py +0 -0
  152. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  153. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/py.typed +0 -0
  154. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/__init__.py +0 -0
  155. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/batch/__init__.py +0 -0
  156. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/batch/execute_batch.py +0 -0
  157. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  158. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/chemical/__init__.py +0 -0
  159. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  160. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/get_entities_data.py +0 -0
  162. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/list_entities.py +0 -0
  163. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/lock_entity.py +0 -0
  164. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  165. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/set_values.py +0 -0
  166. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  167. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/entity/unlock_entity.py +0 -0
  168. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/equipment/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  170. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/field_options/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  172. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/id_source/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/id_source/list_id_source.py +0 -0
  174. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/id_source/match_id_source.py +0 -0
  175. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/input_groups/__init__.py +0 -0
  176. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  177. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/__init__.py +0 -0
  178. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/create_inputs.py +0 -0
  179. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/get_input_data.py +0 -0
  180. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/get_input_names.py +0 -0
  181. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  182. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  183. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/set_input_category.py +0 -0
  184. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  185. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  186. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/material_families/__init__.py +0 -0
  187. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  188. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/outputs/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/outputs/get_output_data.py +0 -0
  190. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/outputs/get_output_names.py +0 -0
  191. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  192. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/permissions/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  194. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/project/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/project/get_projects.py +0 -0
  196. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/project/get_projects_data.py +0 -0
  197. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipe_links/__init__.py +0 -0
  198. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  199. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  200. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  201. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  202. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  204. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  205. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  206. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  207. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  208. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/create_recipe.py +0 -0
  209. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/create_recipes.py +0 -0
  210. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  211. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  212. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/get_curve.py +0 -0
  213. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  214. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  215. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  216. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  217. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  218. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  219. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  220. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  221. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  222. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  223. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  224. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  225. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  226. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  227. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  228. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/triggers/__init__.py +0 -0
  229. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/triggers/run_trigger.py +0 -0
  230. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/uploader/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  232. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/async_batch.py +0 -0
  233. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/base.py +0 -0
  234. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/base_t.py +0 -0
  235. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/calculations.py +0 -0
  236. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/calculations_t.py +0 -0
  237. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/chemical_structure.py +0 -0
  238. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/chemical_structure_t.py +0 -0
  239. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/client_config.py +0 -0
  240. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/client_config_t.py +0 -0
  241. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/curves.py +0 -0
  242. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/curves_t.py +0 -0
  243. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/experiment_groups.py +0 -0
  244. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/experiment_groups_t.py +0 -0
  245. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/field_values.py +0 -0
  246. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/field_values_t.py +0 -0
  247. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/fields.py +0 -0
  248. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/fields_t.py +0 -0
  249. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/generic_upload.py +0 -0
  250. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/generic_upload_t.py +0 -0
  251. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/id_source.py +0 -0
  252. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/id_source_t.py +0 -0
  253. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/identifier.py +0 -0
  254. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/identifier_t.py +0 -0
  255. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/input_attributes.py +0 -0
  256. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/input_attributes_t.py +0 -0
  257. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/inputs.py +0 -0
  258. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/inputs_t.py +0 -0
  259. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/outputs.py +0 -0
  260. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/outputs_t.py +0 -0
  261. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/overrides.py +0 -0
  262. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/overrides_t.py +0 -0
  263. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/permissions.py +0 -0
  264. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/permissions_t.py +0 -0
  265. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/phases.py +0 -0
  266. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/phases_t.py +0 -0
  267. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/post_base.py +0 -0
  268. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/post_base_t.py +0 -0
  269. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/queued_job.py +0 -0
  270. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/queued_job_t.py +0 -0
  271. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_identifiers.py +0 -0
  272. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_identifiers_t.py +0 -0
  273. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_inputs.py +0 -0
  274. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_inputs_t.py +0 -0
  275. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_links.py +0 -0
  276. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_links_t.py +0 -0
  277. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_metadata.py +0 -0
  278. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_metadata_t.py +0 -0
  279. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_output_metadata.py +0 -0
  280. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_output_metadata_t.py +0 -0
  281. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_tags.py +0 -0
  282. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_tags_t.py +0 -0
  283. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_workflow_steps.py +0 -0
  284. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  285. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipes.py +0 -0
  286. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/recipes_t.py +0 -0
  287. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/response.py +0 -0
  288. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/response_t.py +0 -0
  289. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/secret_retrieval.py +0 -0
  290. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/secret_retrieval_t.py +0 -0
  291. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/units.py +0 -0
  292. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/units_t.py +0 -0
  293. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/users.py +0 -0
  294. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/users_t.py +0 -0
  295. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/webhook_job.py +0 -0
  296. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/webhook_job_t.py +0 -0
  297. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/uncountable/types/workflows.py +0 -0
  298. {uncountablepythonsdk-0.0.75 → uncountablepythonsdk-0.0.77}/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.75
3
+ Version: 0.0.77
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.75
3
+ Version: 0.0.77
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)
@@ -49,7 +49,7 @@ class ParserExtraFieldsError(ParserError):
49
49
  self.extra_fields = extra_fields
50
50
 
51
51
  def __str__(self) -> str:
52
- return f"extra fields were provided: {", ".join(self.extra_fields)}"
52
+ return f"extra fields were provided: {', '.join(self.extra_fields)}"
53
53
 
54
54
 
55
55
  def is_optional(field_type: typing.Any) -> bool:
@@ -268,15 +268,15 @@ def _build_parser_inner(
268
268
 
269
269
  def parse_int(value: typing.Any) -> T:
270
270
  if isinstance(value, str):
271
- assert (
272
- "_" not in value
273
- ), "numbers with underscores not considered integers"
271
+ assert "_" not in value, (
272
+ "numbers with underscores not considered integers"
273
+ )
274
274
 
275
275
  dec_value = Decimal(value)
276
276
  int_value = int(dec_value)
277
- assert (
278
- int_value == dec_value
279
- ), f"value ({value}) cannot be parsed to int without discarding precision"
277
+ assert int_value == dec_value, (
278
+ f"value ({value}) cannot be parsed to int without discarding precision"
279
+ )
280
280
  return int_value # type: ignore
281
281
 
282
282
  return parse_int
@@ -76,9 +76,9 @@ class S3Session(FileSystemSession):
76
76
  filepaths: list[FileSystemObject],
77
77
  ) -> list[FileObjectData]:
78
78
  downloaded_files: list[FileObjectData] = []
79
- assert (
80
- self.bucket is not None
81
- ), "call to download_files on uninitialized s3 session"
79
+ assert self.bucket is not None, (
80
+ "call to download_files on uninitialized s3 session"
81
+ )
82
82
 
83
83
  for file_object in filepaths:
84
84
  if (
@@ -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)
@@ -359,9 +359,9 @@ class SpecTypeDefn(SpecType):
359
359
  property_name_case = NameCase(name_case_raw)
360
360
 
361
361
  if property_name_case != NameCase.preserve:
362
- assert util.is_valid_property_name(
363
- name
364
- ), f"{name} is not a valid property name"
362
+ assert util.is_valid_property_name(name), (
363
+ f"{name} is not a valid property name"
364
+ )
365
365
 
366
366
  data_type = data.get("type")
367
367
  builder.ensure(data_type is not None, "missing `type` entry")
@@ -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):
@@ -595,21 +590,21 @@ class SpecTypeDefnUnion(SpecTypeDefn):
595
590
  self.discriminator_map = {}
596
591
  for sub_type in self.types:
597
592
  builder.push_where(sub_type.name)
598
- assert isinstance(
599
- sub_type, SpecTypeDefnObject
600
- ), "union-type-must-be-object"
593
+ assert isinstance(sub_type, SpecTypeDefnObject), (
594
+ "union-type-must-be-object"
595
+ )
601
596
  assert sub_type.properties is not None
602
597
  discriminator_type = sub_type.properties.get(self.discriminator)
603
- assert (
604
- discriminator_type is not None
605
- ), f"missing-discriminator-field: {sub_type}"
598
+ assert discriminator_type is not None, (
599
+ f"missing-discriminator-field: {sub_type}"
600
+ )
606
601
  prop_type = unwrap_literal_type(discriminator_type.spec_type)
607
602
  assert prop_type is not None
608
603
  assert prop_type.is_value_to_string()
609
604
  discriminant = str(prop_type.value)
610
- assert (
611
- discriminant not in self.discriminator_map
612
- ), f"duplicated-discriminant, {discriminant} in {sub_type}"
605
+ assert discriminant not in self.discriminator_map, (
606
+ f"duplicated-discriminant, {discriminant} in {sub_type}"
607
+ )
613
608
  self.discriminator_map[discriminant] = sub_type
614
609
 
615
610
  builder.pop_where()
@@ -929,9 +924,9 @@ class SpecEndpoint:
929
924
  self.is_external = self.path_root == "api/external"
930
925
  self.has_attachment = data.get("has_attachment", False)
931
926
 
932
- assert (
933
- not is_sdk or self.desc is not None
934
- ), f"Endpoint description required for SDK endpoints, missing: {path}"
927
+ assert not is_sdk or self.desc is not None, (
928
+ f"Endpoint description required for SDK endpoints, missing: {path}"
929
+ )
935
930
 
936
931
  @property
937
932
  def resolved_path(self: Self) -> str:
@@ -1113,9 +1108,9 @@ class SpecNamespace:
1113
1108
  continue
1114
1109
 
1115
1110
  if "value" in defn:
1116
- assert util.is_valid_property_name(
1117
- name
1118
- ), f"{name} is not a valid constant name"
1111
+ assert util.is_valid_property_name(name), (
1112
+ f"{name} is not a valid constant name"
1113
+ )
1119
1114
  spec_constant = SpecConstant(self, name)
1120
1115
  self.constants[name] = spec_constant
1121
1116
  continue
@@ -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
  )
@@ -1456,4 +1455,4 @@ class SpecBuilder:
1456
1455
  )
1457
1456
 
1458
1457
  def resolve_proper_name(self, stype: SpecTypeDefn) -> str:
1459
- return f"{".".join(stype.namespace.path)}.{stype.name}"
1458
+ return f"{'.'.join(stype.namespace.path)}.{stype.name}"
@@ -108,9 +108,9 @@ def parse_yaml_config(config_file: str) -> Config:
108
108
  raw_config: dict[str, ConfigValueType] = yaml.safe_load(input)
109
109
 
110
110
  raw_type_spec_types = raw_config["type_spec_types"]
111
- assert isinstance(
112
- raw_type_spec_types, list
113
- ), "type_spec_types, must be a list of folders"
111
+ assert isinstance(raw_type_spec_types, list), (
112
+ "type_spec_types, must be a list of folders"
113
+ )
114
114
  type_spec_types = [os.path.abspath(folder) for folder in raw_type_spec_types]
115
115
 
116
116
  api_endpoint = _parse_string_lookup(
@@ -100,14 +100,14 @@ def _emit_type_io_ts_impl(ctx: EmitTypescriptContext, stype: builder.SpecType) -
100
100
  else:
101
101
  assert len(missable_lines) > 0 and len(required_lines) > 0
102
102
  ctx.out.write("IO.intersection([\n")
103
- ctx.out.write(f"{INDENT}IO.partial({"{"}\n")
103
+ ctx.out.write(f"{INDENT}IO.partial({'{'}\n")
104
104
  for line in missable_lines:
105
105
  ctx.out.write(f"{INDENT}{line}")
106
- ctx.out.write(f"{INDENT}{"}"}),\n")
107
- ctx.out.write(f"{INDENT}IO.type({"{"}\n")
106
+ ctx.out.write(f"{INDENT}{'}'}),\n")
107
+ ctx.out.write(f"{INDENT}IO.type({'{'}\n")
108
108
  for line in required_lines:
109
109
  ctx.out.write(f"{INDENT}{line}")
110
- ctx.out.write(f"{INDENT}{"}"}),\n")
110
+ ctx.out.write(f"{INDENT}{'}'}),\n")
111
111
  ctx.out.write("])\n")
112
112
 
113
113
  ctx.out.write("\n")
@@ -125,11 +125,11 @@ def refer_to_io_ts(
125
125
  spec = refer_to_io_ts(ctx, stype.parameters[0])
126
126
  return f"IO.array({spec})"
127
127
  if stype.defn_type.name == builder.BaseTypeName.s_union:
128
- return f'IO.union([{", ".join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])'
128
+ return f"IO.union([{', '.join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])"
129
129
  if stype.defn_type.name == builder.BaseTypeName.s_optional:
130
130
  return f"IO.optional({refer_to_io_ts(ctx, stype.parameters[0])})"
131
131
  if stype.defn_type.name == builder.BaseTypeName.s_tuple:
132
- return f"IO.tuple([{", ".join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])"
132
+ return f"IO.tuple([{', '.join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])"
133
133
  return refer_to_io_ts(ctx, stype.defn_type)
134
134
 
135
135
  assert isinstance(stype, builder.SpecTypeDefn)
@@ -416,7 +416,7 @@ def _emit_namespace(
416
416
  {name: value.asdict() for name, value in types.items()},
417
417
  )
418
418
 
419
- path = f"{config.types_output}/common/{"/".join(namespace.path)}.yaml"
419
+ path = f"{config.types_output}/common/{'/'.join(namespace.path)}.yaml"
420
420
  oa_namespace = {"components": oa_components}
421
421
  _rewrite_with_notice(path, yaml.dumps(oa_namespace, sort_keys=False))
422
422
 
@@ -559,7 +559,7 @@ def _emit_endpoint(
559
559
  gctx.tags.add(EmitOpenAPITag(name=tag_name, description=""))
560
560
  gctx.tag_groups[tag_group].add(tag_name)
561
561
 
562
- ref_path = f"common/{"/".join(namespace.path)}.yaml#/components/endpoint"
562
+ ref_path = f"common/{'/'.join(namespace.path)}.yaml#/components/endpoint"
563
563
  ep = namespace.endpoint
564
564
  gctx.paths.append(
565
565
  EmitOpenAPIPath(
@@ -577,7 +577,7 @@ def _emit_endpoint(
577
577
  ctx.endpoint = EmitOpenAPIEndpoint(
578
578
  method=namespace.endpoint.method.lower(),
579
579
  tags=[tag_name],
580
- summary=f"{"/".join(namespace.path[path_cutoff:])}",
580
+ summary=f"{'/'.join(namespace.path[path_cutoff:])}",
581
581
  description=description,
582
582
  is_beta=namespace.endpoint.is_beta,
583
583
  stability_level=namespace.endpoint.stability_level,
@@ -694,5 +694,5 @@ def open_api_type(
694
694
  ctx.namespaces.add(stype.namespace)
695
695
  # external namespace resolution
696
696
  return OpenAPIRefType(
697
- source=f"{resolve_namespace_ref(source_path=ctx.namespace.path, ref_path=stype.namespace.path, ref="/components/schema")}/{stype.name}"
697
+ source=f"{resolve_namespace_ref(source_path=ctx.namespace.path, ref_path=stype.namespace.path, ref='/components/schema')}/{stype.name}"
698
698
  )
@@ -296,7 +296,7 @@ def _emit_types(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
296
296
  full.write(f"# === END section from {namespace.name}.part.py ===\n")
297
297
 
298
298
  basename = "/".join(namespace.path)
299
- filename = f"{config.types_output}/{basename}{"" if len(namespace.path) > 1 else "_t"}.py"
299
+ filename = f"{config.types_output}/{basename}{'' if len(namespace.path) > 1 else '_t'}.py"
300
300
  util.rewrite_file(filename, full.getvalue())
301
301
 
302
302
  # Deprecated SDK support
@@ -390,13 +390,13 @@ from .base_t import ObjectId as ObjectId
390
390
  def _validate_supports_handler_generation(
391
391
  stype: builder.SpecTypeDefn, name: str, supports_inheritance: bool = False
392
392
  ) -> builder.SpecTypeDefnObject:
393
- assert isinstance(
394
- stype, builder.SpecTypeDefnObject
395
- ), f"External api {name} must be an object"
393
+ assert isinstance(stype, builder.SpecTypeDefnObject), (
394
+ f"External api {name} must be an object"
395
+ )
396
396
  if not supports_inheritance:
397
- assert (
398
- stype.base is None or stype.base.is_base
399
- ), f"Inheritance not supported in external api {name}"
397
+ assert stype.base is None or stype.base.is_base, (
398
+ f"Inheritance not supported in external api {name}"
399
+ )
400
400
  return stype
401
401
 
402
402
 
@@ -756,7 +756,7 @@ def _emit_properties(
756
756
  def _named_type_path(ctx: Context, stype: builder.SpecTypeDefn) -> str:
757
757
  parts = [] if stype.is_base else stype.namespace.path.copy()
758
758
  parts.append(stype.name)
759
- return f"{ctx.builder.top_namespace}.{".".join(parts)}"
759
+ return f"{ctx.builder.top_namespace}.{'.'.join(parts)}"
760
760
 
761
761
 
762
762
  def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
@@ -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")
@@ -858,14 +858,14 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
858
858
  if stype.is_hashable:
859
859
  dc_args.extend(["frozen=True", "eq=True"])
860
860
  if len(dc_args) > 0:
861
- dataclass += f'({", ".join(dc_args)})'
861
+ dataclass += f"({', '.join(dc_args)})"
862
862
 
863
863
  ctx.out.write(f"{dataclass}\n")
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
 
@@ -966,9 +966,9 @@ from main.site.framework.types import StaticRouteType
966
966
  )
967
967
  sorted_endpoints = sorted(endpoints, key=_route_identifier)
968
968
 
969
- assert len(endpoints) == len(
970
- set(map(_route_identifier, endpoints))
971
- ), "Endpoints are not unique"
969
+ assert len(endpoints) == len(set(map(_route_identifier, endpoints))), (
970
+ "Endpoints are not unique"
971
+ )
972
972
 
973
973
  path_set = set()
974
974
  for endpoint in sorted_endpoints:
@@ -1037,7 +1037,7 @@ def _emit_namespace_imports(
1037
1037
  if ns.endpoint is not None:
1038
1038
  import_alias = "_".join(ns.path[2:]) + "_t"
1039
1039
  out.write(
1040
- f"import {config.types_package}.{".".join(ns.path)} as {import_alias}\n"
1040
+ f"import {config.types_package}.{'.'.join(ns.path)} as {import_alias}\n"
1041
1041
  )
1042
1042
  continue
1043
1043
  elif from_namespace is not None:
@@ -1195,7 +1195,7 @@ def _emit_api_argument_lookup(
1195
1195
  continue
1196
1196
 
1197
1197
  import_alias = "_".join(namespace.path[1:])
1198
- api_import = f"{config.types_package}.{".".join(namespace.path)}"
1198
+ api_import = f"{config.types_package}.{'.'.join(namespace.path)}"
1199
1199
  imports.append(f"import {api_import} as {import_alias}")
1200
1200
 
1201
1201
  route_group = (
@@ -48,7 +48,7 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
48
48
  # Try to capture some common incompleteness errors
49
49
  if namespace.endpoint is None or namespace.endpoint.function is None:
50
50
  raise Exception(
51
- f"Namespace {"/".join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
51
+ f"Namespace {'/'.join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
52
52
  )
53
53
  continue
54
54
 
@@ -157,7 +157,7 @@ def _emit_endpoint(
157
157
  wrap_call = (
158
158
  f"{wrap_name}<Arguments>" if is_binary else f"{wrap_name}<Arguments, Response>"
159
159
  )
160
- type_path = f"unc_mat/types/{"/".join(namespace.path)}"
160
+ type_path = f"unc_mat/types/{'/'.join(namespace.path)}"
161
161
 
162
162
  if is_binary:
163
163
  tsx_response_part = f"""import {{ {wrap_name} }} from "unc_base/api"
@@ -196,12 +196,12 @@ export const apiCall = {wrap_call}(
196
196
  )
197
197
  {data_loader_body}"""
198
198
 
199
- output = f"{config.routes_output}/{"/".join(namespace.path)}.tsx"
199
+ output = f"{config.routes_output}/{'/'.join(namespace.path)}.tsx"
200
200
  util.rewrite_file(output, tsx_api)
201
201
 
202
202
  # Hacky index support, until enough is migrated to regen entirely
203
203
  # Emits the import into the UI API index file
204
- index_path = f"{config.routes_output}/{"/".join(namespace.path[0:-1])}/index.tsx"
204
+ index_path = f"{config.routes_output}/{'/'.join(namespace.path[0:-1])}/index.tsx"
205
205
  api_name = f"Api{ts_type_name(namespace.path[0 - 1])}"
206
206
  if os.path.exists(index_path):
207
207
  with open(index_path) as index:
@@ -153,7 +153,7 @@ def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
153
153
  ctx.out.write(f"export type {stype.name} = {base_type}{{}}\n")
154
154
  else:
155
155
  if isinstance(stype, builder.SpecTypeDefnObject) and len(stype.parameters) > 0:
156
- full_type_name = f'{stype.name}<{", ".join(stype.parameters)}>'
156
+ full_type_name = f"{stype.name}<{', '.join(stype.parameters)}>"
157
157
  else:
158
158
  full_type_name = stype.name
159
159
  ctx.out.write(f"export type {full_type_name} = {base_type}{{")
@@ -201,7 +201,7 @@ def refer_to_impl(
201
201
  return f"readonly ({spec})[]" if multi else f"readonly {spec}[]", False
202
202
  if stype.defn_type.name == builder.BaseTypeName.s_union:
203
203
  return (
204
- f'({" | ".join([refer_to(ctx, p) for p in stype.parameters])})',
204
+ f"({' | '.join([refer_to(ctx, p) for p in stype.parameters])})",
205
205
  False,
206
206
  )
207
207
  if stype.defn_type.name == builder.BaseTypeName.s_literal:
@@ -209,11 +209,11 @@ def refer_to_impl(
209
209
  for parameter in stype.parameters:
210
210
  assert isinstance(parameter, builder.SpecTypeLiteralWrapper)
211
211
  parts.append(refer_to(ctx, parameter))
212
- return f'({" | ".join(parts)})', False
212
+ return f"({' | '.join(parts)})", False
213
213
  if stype.defn_type.name == builder.BaseTypeName.s_optional:
214
214
  return f"{refer_to(ctx, stype.parameters[0])} | null", True
215
215
  if stype.defn_type.name == builder.BaseTypeName.s_tuple:
216
- return f"[{", ".join([refer_to(ctx, p) for p in stype.parameters])}]", False
216
+ return f"[{', '.join([refer_to(ctx, p) for p in stype.parameters])}]", False
217
217
  params = ", ".join([refer_to(ctx, p) for p in stype.parameters])
218
218
  return f"{refer_to(ctx, stype.defn_type)}<{params}>", False
219
219
 
@@ -234,9 +234,9 @@ def _extract_and_validate_layout(
234
234
 
235
235
  local_ref_name = None
236
236
  if group.ref_name is not None:
237
- assert (
238
- base_layout is None or base_layout.get(group.ref_name) is None
239
- ), f"group-name-duplicate-in-base:{group.ref_name}"
237
+ assert base_layout is None or base_layout.get(group.ref_name) is None, (
238
+ f"group-name-duplicate-in-base:{group.ref_name}"
239
+ )
240
240
  local_ref_name = group.ref_name
241
241
 
242
242
  if group.extends:
@@ -255,9 +255,9 @@ def _extract_and_validate_layout(
255
255
  assert group_ref_name in layout, f"missing-base-group:{group_ref_name}"
256
256
 
257
257
  for prop_ref_name in stype.properties:
258
- assert (
259
- prop_ref_name in all_fields_group
260
- ), f"layout-missing-field:{prop_ref_name}"
258
+ assert prop_ref_name in all_fields_group, (
259
+ f"layout-missing-field:{prop_ref_name}"
260
+ )
261
261
 
262
262
  return layout
263
263
 
@@ -49,7 +49,7 @@ keywords = [ "uncountable", "sdk", "api", "uncountable-sdk" ]
49
49
  requires-python = ">=3.11"
50
50
  # May be compatible with older versions
51
51
  dependencies = [
52
- "aiotus == 0.*",
52
+ "aiotus ==1.*",
53
53
  "aiohttp == 3.*",
54
54
  "requests == 2.*",
55
55
  "SQLAlchemy >= 1.4.0",
@@ -2,6 +2,8 @@ import functools
2
2
  import os
3
3
  from importlib.metadata import PackageNotFoundError, version
4
4
 
5
+ from uncountable.types import integration_server_t
6
+
5
7
 
6
8
  @functools.cache
7
9
  def get_version() -> str:
@@ -12,8 +14,8 @@ def get_version() -> str:
12
14
  return version_str
13
15
 
14
16
 
15
- def get_integration_env() -> str | None:
16
- return os.environ.get("UNC_INTEGRATION_ENV")
17
+ def get_server_env() -> str | None:
18
+ return os.environ.get("UNC_SERVER_ENV")
17
19
 
18
20
 
19
21
  def get_webhook_server_port() -> int:
@@ -26,3 +28,14 @@ def get_local_admin_server_port() -> int:
26
28
 
27
29
  def get_otel_enabled() -> bool:
28
30
  return os.environ.get("UNC_OTEL_ENABLED") == "true"
31
+
32
+
33
+ def get_profiles_module() -> str:
34
+ return os.environ["UNC_PROFILES_MODULE"]
35
+
36
+
37
+ def get_integration_envs() -> list[integration_server_t.IntegrationEnvironment]:
38
+ return [
39
+ integration_server_t.IntegrationEnvironment(env)
40
+ for env in os.environ.get("UNC_INTEGRATION_ENVS", "prod").split(",")
41
+ ]
@@ -99,9 +99,7 @@ class FileUploader:
99
99
  file_bytes.bytes_data,
100
100
  {"filename": file_bytes.name.encode()},
101
101
  client_session=session,
102
- config=aiotus.RetryConfiguration(
103
- ssl=False if self._allow_insecure_tls else None
104
- ),
102
+ config=aiotus.RetryConfiguration(ssl=not self._allow_insecure_tls),
105
103
  chunksize=_CHUNK_SIZE,
106
104
  )
107
105
  if location is None:
@@ -3,22 +3,21 @@ from uncountable.core.client import ClientConfig
3
3
  from uncountable.core.types import AuthDetailsAll, AuthDetailsOAuth
4
4
  from uncountable.integration.secret_retrieval.retrieve_secret import retrieve_secret
5
5
  from uncountable.integration.telemetry import JobLogger
6
+ from uncountable.types import auth_retrieval_t
6
7
  from uncountable.types.job_definition_t import (
7
- AuthRetrievalBasic,
8
- AuthRetrievalOAuth,
9
8
  ProfileMetadata,
10
9
  )
11
10
 
12
11
 
13
12
  def _construct_auth_details(profile_meta: ProfileMetadata) -> AuthDetailsAll:
14
13
  match profile_meta.auth_retrieval:
15
- case AuthRetrievalOAuth():
14
+ case auth_retrieval_t.AuthRetrievalOAuth():
16
15
  refresh_token = retrieve_secret(
17
16
  profile_meta.auth_retrieval.refresh_token_secret,
18
17
  profile_metadata=profile_meta,
19
18
  )
20
19
  return AuthDetailsOAuth(refresh_token=refresh_token)
21
- case AuthRetrievalBasic():
20
+ case auth_retrieval_t.AuthRetrievalBasic():
22
21
  api_id = retrieve_secret(
23
22
  profile_meta.auth_retrieval.api_id_secret, profile_metadata=profile_meta
24
23
  )