UncountablePythonSDK 0.0.50__tar.gz → 0.0.52__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 (254) hide show
  1. {uncountablepythonsdk-0.0.50/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.52}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/requirements.txt +3 -3
  4. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/construct_client.py +17 -19
  5. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/secret_retrieval/retrieve_secret.py +32 -1
  6. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/server.py +11 -1
  7. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/telemetry.py +30 -25
  8. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/create_entities.py +1 -1
  9. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/create_entity.py +1 -1
  10. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/client_base.py +2 -2
  11. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/job_definition.py +2 -1
  12. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/job_definition_t.py +22 -7
  13. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/.github/workflows/documentation.yml +0 -0
  14. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/.github/workflows/publish.yml +0 -0
  15. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/.gitignore +0 -0
  16. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/README.md +0 -0
  17. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  18. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  19. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  20. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  21. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/.gitignore +0 -0
  22. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/conf.py +0 -0
  23. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/index.md +0 -0
  24. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/justfile +0 -0
  25. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/quickstart.md +0 -0
  26. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/android-chrome-192x192.png +0 -0
  27. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/android-chrome-512x512.png +0 -0
  28. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/apple-touch-icon.png +0 -0
  29. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/browserconfig.xml +0 -0
  30. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/favicon-16x16.png +0 -0
  31. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/favicon-32x32.png +0 -0
  32. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/manifest.json +0 -0
  33. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/mstile-150x150.png +0 -0
  34. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  35. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/docs/static/logo_blue.png +0 -0
  36. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/examples/async_batch.py +0 -0
  37. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/examples/create_entity.py +0 -0
  38. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/examples/edit_recipe_inputs.py +0 -0
  39. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/examples/invoke_uploader.py +0 -0
  40. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/examples/upload_files.py +0 -0
  41. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/__init__.py +0 -0
  42. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/argument_parser/__init__.py +0 -0
  43. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/argument_parser/_is_enum.py +0 -0
  44. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  45. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/argument_parser/argument_parser.py +0 -0
  46. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/argument_parser/case_convert.py +0 -0
  47. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/__init__.py +0 -0
  48. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  49. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/_local_session.py +0 -0
  50. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/_s3_session.py +0 -0
  51. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  52. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  53. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  54. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization/__init__.py +0 -0
  55. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization/missing_sentry.py +0 -0
  56. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization/opaque_key.py +0 -0
  57. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization/serial_class.py +0 -0
  58. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization/serial_union.py +0 -0
  59. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization/yaml.py +0 -0
  60. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization_util/__init__.py +0 -0
  61. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  62. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  63. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/serialization_util/serialization_helpers.py +0 -0
  64. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/strenum_compat/__init__.py +0 -0
  65. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/strenum_compat/strenum_compat.py +0 -0
  66. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/__main__.py +0 -0
  68. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  69. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  70. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  71. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/builder.py +0 -0
  72. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/config.py +0 -0
  73. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/emit_io_ts.py +0 -0
  74. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/emit_open_api.py +0 -0
  75. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/emit_open_api_util.py +0 -0
  76. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/emit_python.py +0 -0
  77. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/emit_typescript.py +0 -0
  78. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/emit_typescript_util.py +0 -0
  79. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/load_types.py +0 -0
  80. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/open_api_util.py +0 -0
  81. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/parts/base.py.prepart +0 -0
  82. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  83. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/test.py +0 -0
  84. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/type_info/__main__.py +0 -0
  85. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  86. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/util.py +0 -0
  87. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/value_spec/__init__.py +0 -0
  88. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/value_spec/__main__.py +0 -0
  89. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  90. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  91. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pkgs/type_spec/value_spec/types.py +0 -0
  92. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/pyproject.toml +0 -0
  93. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/setup.cfg +0 -0
  94. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/__init__.py +0 -0
  95. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/core/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/core/async_batch.py +0 -0
  97. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/core/client.py +0 -0
  98. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/core/file_upload.py +0 -0
  99. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/core/types.py +0 -0
  100. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/core/version.py +0 -0
  101. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/cron.py +0 -0
  103. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/db/__init__.py +0 -0
  104. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/db/connect.py +0 -0
  105. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/entrypoint.py +0 -0
  106. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/executors/__init__.py +0 -0
  107. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/executors/executors.py +0 -0
  108. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  109. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/executors/script_executor.py +0 -0
  110. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/job.py +0 -0
  111. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  112. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/py.typed +0 -0
  113. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/__init__.py +0 -0
  114. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/__init__.py +0 -0
  115. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/batch/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/batch/execute_batch.py +0 -0
  117. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  118. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/chemical/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  120. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/__init__.py +0 -0
  121. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/get_entities_data.py +0 -0
  122. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/list_entities.py +0 -0
  123. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/lock_entity.py +0 -0
  124. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  125. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/set_values.py +0 -0
  126. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  127. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/entity/unlock_entity.py +0 -0
  128. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/equipment/__init__.py +0 -0
  129. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  130. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/field_options/__init__.py +0 -0
  131. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  132. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/id_source/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/id_source/list_id_source.py +0 -0
  134. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/id_source/match_id_source.py +0 -0
  135. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/input_groups/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  137. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/__init__.py +0 -0
  138. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/create_inputs.py +0 -0
  139. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/get_input_data.py +0 -0
  140. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/get_input_names.py +0 -0
  141. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  142. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  143. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/set_input_category.py +0 -0
  144. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  145. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  146. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/material_families/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  148. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/outputs/__init__.py +0 -0
  149. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/outputs/get_output_data.py +0 -0
  150. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/outputs/get_output_names.py +0 -0
  151. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  152. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/permissions/__init__.py +0 -0
  153. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  154. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/project/__init__.py +0 -0
  155. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/project/get_projects.py +0 -0
  156. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/project/get_projects_data.py +0 -0
  157. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipe_links/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  159. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  160. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  162. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  164. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  165. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  166. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  167. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/create_recipe.py +0 -0
  168. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/create_recipes.py +0 -0
  169. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  170. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  171. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/get_curve.py +0 -0
  172. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  173. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  174. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  175. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  176. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  177. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  178. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  179. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  180. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  181. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  182. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  183. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  184. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  185. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  186. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/triggers/__init__.py +0 -0
  187. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/triggers/run_trigger.py +0 -0
  188. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/uploader/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  190. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/async_batch.py +0 -0
  191. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/async_batch_processor.py +0 -0
  192. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/async_batch_t.py +0 -0
  193. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/base.py +0 -0
  194. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/base_t.py +0 -0
  195. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/calculations.py +0 -0
  196. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/calculations_t.py +0 -0
  197. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/chemical_structure.py +0 -0
  198. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/chemical_structure_t.py +0 -0
  199. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/client_config.py +0 -0
  200. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/client_config_t.py +0 -0
  201. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/curves.py +0 -0
  202. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/curves_t.py +0 -0
  203. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/entity.py +0 -0
  204. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/entity_t.py +0 -0
  205. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/experiment_groups.py +0 -0
  206. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/experiment_groups_t.py +0 -0
  207. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/field_values.py +0 -0
  208. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/field_values_t.py +0 -0
  209. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/fields.py +0 -0
  210. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/fields_t.py +0 -0
  211. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/generic_upload.py +0 -0
  212. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/generic_upload_t.py +0 -0
  213. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/id_source.py +0 -0
  214. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/id_source_t.py +0 -0
  215. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/identifier.py +0 -0
  216. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/identifier_t.py +0 -0
  217. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/input_attributes.py +0 -0
  218. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/input_attributes_t.py +0 -0
  219. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/inputs.py +0 -0
  220. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/inputs_t.py +0 -0
  221. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/outputs.py +0 -0
  222. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/outputs_t.py +0 -0
  223. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/permissions.py +0 -0
  224. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/permissions_t.py +0 -0
  225. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/phases.py +0 -0
  226. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/phases_t.py +0 -0
  227. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/post_base.py +0 -0
  228. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/post_base_t.py +0 -0
  229. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_identifiers.py +0 -0
  230. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_identifiers_t.py +0 -0
  231. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_inputs.py +0 -0
  232. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_inputs_t.py +0 -0
  233. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_links.py +0 -0
  234. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_links_t.py +0 -0
  235. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_metadata.py +0 -0
  236. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_metadata_t.py +0 -0
  237. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_output_metadata.py +0 -0
  238. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_output_metadata_t.py +0 -0
  239. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_tags.py +0 -0
  240. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_tags_t.py +0 -0
  241. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_workflow_steps.py +0 -0
  242. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  243. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipes.py +0 -0
  244. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/recipes_t.py +0 -0
  245. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/response.py +0 -0
  246. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/response_t.py +0 -0
  247. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/secret_retrieval.py +0 -0
  248. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/secret_retrieval_t.py +0 -0
  249. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/units.py +0 -0
  250. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/units_t.py +0 -0
  251. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/users.py +0 -0
  252. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/users_t.py +0 -0
  253. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/uncountable/types/workflows.py +0 -0
  254. {uncountablepythonsdk-0.0.50 → uncountablepythonsdk-0.0.52}/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.50
3
+ Version: 0.0.52
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.50
3
+ Version: 0.0.52
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -1,7 +1,7 @@
1
- furo==2024.7.18
2
- myst-parser==3.0.1
1
+ furo==2024.8.6
2
+ myst-parser==4.0.0
3
3
  sphinx-autoapi==3.2.0
4
4
  sphinx-copybutton==0.5.2
5
5
  Sphinx==8.0.0
6
- sphinx_design==0.6.0
6
+ sphinx_design==0.6.1
7
7
  sphinx-favicon==1.0.1
@@ -1,34 +1,32 @@
1
- import os
2
-
3
1
  from uncountable.core import AuthDetailsApiKey, Client
4
2
  from uncountable.core.client import ClientConfig
5
- from uncountable.core.types import AuthDetailsAll
3
+ from uncountable.core.types import AuthDetailsAll, AuthDetailsOAuth
4
+ from uncountable.integration.secret_retrieval.retrieve_secret import retrieve_secret
6
5
  from uncountable.integration.telemetry import JobLogger
7
6
  from uncountable.types.job_definition_t import (
8
- AuthRetrievalEnv,
7
+ AuthRetrievalBasic,
8
+ AuthRetrievalOAuth,
9
9
  ProfileMetadata,
10
10
  )
11
11
 
12
12
 
13
- def _get_env_var(name: str) -> str:
14
- value = os.getenv(name)
15
- if value is None:
16
- raise Exception(f"environment variable {name} is missing")
17
- return value
18
-
19
-
20
13
  def _construct_auth_details(profile_meta: ProfileMetadata) -> AuthDetailsAll:
21
14
  match profile_meta.auth_retrieval:
22
- case AuthRetrievalEnv():
23
- api_id = _get_env_var(f"UNC_PROFILE_{profile_meta.name.upper()}_API_ID")
24
- api_secret_key = _get_env_var(
25
- f"UNC_PROFILE_{profile_meta.name.upper()}_API_SECRET_KEY"
15
+ case AuthRetrievalOAuth():
16
+ refresh_token = retrieve_secret(
17
+ profile_meta.auth_retrieval.refresh_token_secret,
18
+ profile_metadata=profile_meta,
19
+ )
20
+ return AuthDetailsOAuth(refresh_token=refresh_token)
21
+ case AuthRetrievalBasic():
22
+ api_id = retrieve_secret(
23
+ profile_meta.auth_retrieval.api_id_secret, profile_metadata=profile_meta
24
+ )
25
+ api_key = retrieve_secret(
26
+ profile_meta.auth_retrieval.api_key_secret, profile_metadata=profile_meta
26
27
  )
27
28
 
28
- assert api_id is not None
29
- assert api_secret_key is not None
30
-
31
- return AuthDetailsApiKey(api_id=api_id, api_secret_key=api_secret_key)
29
+ return AuthDetailsApiKey(api_id=api_id, api_secret_key=api_key)
32
30
 
33
31
 
34
32
  def _construct_client_config(
@@ -1,5 +1,10 @@
1
+ import base64
2
+ import functools
3
+ import json
1
4
  import os
2
5
 
6
+ import boto3
7
+
3
8
  from uncountable.types.job_definition_t import ProfileMetadata
4
9
  from uncountable.types.secret_retrieval_t import (
5
10
  SecretRetrieval,
@@ -22,6 +27,25 @@ class SecretRetrievalError(BaseException):
22
27
  return f"{self.secret_retrieval.type} secret retrieval failed{append_message}"
23
28
 
24
29
 
30
+ @functools.cache
31
+ def _get_aws_secret(*, secret_name: str, region_name: str, sub_key: str | None) -> str:
32
+ client = boto3.client("secretsmanager", region_name=region_name)
33
+ response = client.get_secret_value(SecretId=secret_name)
34
+
35
+ if "SecretString" in response:
36
+ secret = response["SecretString"]
37
+ else:
38
+ secret = base64.b64decode(response["SecretBinary"])
39
+
40
+ value = json.loads(secret)
41
+
42
+ if sub_key is not None:
43
+ assert isinstance(value, dict)
44
+ return str(value[sub_key])
45
+ else:
46
+ return str(value)
47
+
48
+
25
49
  def retrieve_secret(
26
50
  secret_retrieval: SecretRetrieval, profile_metadata: ProfileMetadata
27
51
  ) -> str:
@@ -37,4 +61,11 @@ def retrieve_secret(
37
61
  )
38
62
  return secret
39
63
  case SecretRetrievalAWS():
40
- raise NotImplementedError("aws secret retrieval not yet implemented")
64
+ try:
65
+ return _get_aws_secret(
66
+ secret_name=secret_retrieval.secret_name,
67
+ region_name=secret_retrieval.region,
68
+ sub_key=secret_retrieval.sub_key,
69
+ )
70
+ except Exception as e:
71
+ raise SecretRetrievalError(secret_retrieval) from e
@@ -11,6 +11,7 @@ from apscheduler.triggers.cron import CronTrigger
11
11
  from sqlalchemy.engine.base import Engine
12
12
 
13
13
  from uncountable.integration.cron import CronJobArgs, cron_job_executor
14
+ from uncountable.integration.telemetry import Logger
14
15
  from uncountable.types import base_t
15
16
  from uncountable.types.client_config_t import ClientConfigOptions
16
17
  from uncountable.types.job_definition_t import (
@@ -26,6 +27,7 @@ _MAX_APSCHEDULER_CONCURRENT_JOBS = 1
26
27
  class IntegrationServer:
27
28
  _scheduler: BaseScheduler
28
29
  _engine: Engine
30
+ _server_logger: Logger
29
31
 
30
32
  def __init__(self, engine: Engine) -> None:
31
33
  self._engine = engine
@@ -34,6 +36,7 @@ class IntegrationServer:
34
36
  jobstores={"default": SQLAlchemyJobStore(engine=engine)},
35
37
  executors={"default": ThreadPoolExecutor(_MAX_APSCHEDULER_CONCURRENT_JOBS)},
36
38
  )
39
+ self._server_logger = Logger()
37
40
 
38
41
  def register_profile(
39
42
  self,
@@ -59,7 +62,14 @@ class IntegrationServer:
59
62
  definition=job_defn, profile_metadata=profile_metadata
60
63
  )
61
64
  )
62
- existing_job = self._scheduler.get_job(job_defn.id)
65
+ try:
66
+ existing_job = self._scheduler.get_job(job_defn.id)
67
+ except ValueError as e:
68
+ self._server_logger.log_warning(
69
+ f"could not reconstitute job {job_defn.id}: {e}"
70
+ )
71
+ self._scheduler.remove_job(job_defn.id)
72
+ existing_job = None
63
73
  if existing_job is not None:
64
74
  existing_job.modify(
65
75
  name=job_defn.name,
@@ -49,10 +49,39 @@ class LogSeverity(StrEnum):
49
49
  ERROR = "Error"
50
50
 
51
51
 
52
- class JobLogger:
52
+ class Logger:
53
53
  current_span_id: int | None = None
54
54
  current_trace_id: int | None = None
55
55
 
56
+ def _patch_attributes(self, attributes: Attributes | None) -> Attributes:
57
+ return attributes or {}
58
+
59
+ def _emit_log(
60
+ self, message: str, *, severity: LogSeverity, attributes: Attributes | None
61
+ ) -> None:
62
+ log_record = LogRecord(
63
+ body=message,
64
+ severity_text=severity,
65
+ timestamp=time.time_ns(),
66
+ attributes=self._patch_attributes(attributes),
67
+ span_id=self.current_span_id,
68
+ trace_id=self.current_trace_id,
69
+ )
70
+ log_file: TextIO = sys.stderr if severity == LogSeverity.ERROR else sys.stdout
71
+ log_file.write(log_record.to_json())
72
+ log_file.flush()
73
+
74
+ def log_info(self, message: str, *, attributes: Attributes | None = None) -> None:
75
+ self._emit_log(message=message, severity=LogSeverity.INFO, attributes=attributes)
76
+
77
+ def log_warning(self, message: str, *, attributes: Attributes | None = None) -> None:
78
+ self._emit_log(message=message, severity=LogSeverity.WARN, attributes=attributes)
79
+
80
+ def log_error(self, message: str, *, attributes: Attributes | None = None) -> None:
81
+ self._emit_log(message=message, severity=LogSeverity.ERROR, attributes=attributes)
82
+
83
+
84
+ class JobLogger(Logger):
56
85
  def __init__(
57
86
  self,
58
87
  *,
@@ -104,27 +133,3 @@ class JobLogger:
104
133
  self.current_span_id = span.get_span_context().span_id
105
134
  self.current_trace_id = span.get_span_context().trace_id
106
135
  yield self
107
-
108
- def _emit_log(
109
- self, message: str, *, severity: LogSeverity, attributes: Attributes | None
110
- ) -> None:
111
- log_record = LogRecord(
112
- body=message,
113
- severity_text=severity,
114
- timestamp=time.time_ns(),
115
- attributes=self._patch_attributes(attributes),
116
- span_id=self.current_span_id,
117
- trace_id=self.current_trace_id,
118
- )
119
- log_file: TextIO = sys.stderr if severity == LogSeverity.ERROR else sys.stdout
120
- log_file.write(log_record.to_json())
121
- log_file.flush()
122
-
123
- def log_info(self, message: str, *, attributes: Attributes | None = None) -> None:
124
- self._emit_log(message=message, severity=LogSeverity.INFO, attributes=attributes)
125
-
126
- def log_warning(self, message: str, *, attributes: Attributes | None = None) -> None:
127
- self._emit_log(message=message, severity=LogSeverity.WARN, attributes=attributes)
128
-
129
- def log_error(self, message: str, *, attributes: Attributes | None = None) -> None:
130
- self._emit_log(message=message, severity=LogSeverity.ERROR, attributes=attributes)
@@ -34,7 +34,7 @@ class EntityToCreate:
34
34
  @dataclasses.dataclass(kw_only=True)
35
35
  class Arguments:
36
36
  definition_id: base_t.ObjectId
37
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS]]
37
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL]]
38
38
  entities_to_create: list[EntityToCreate]
39
39
 
40
40
 
@@ -40,7 +40,7 @@ class EntityFieldInitialValue:
40
40
  @dataclasses.dataclass(kw_only=True)
41
41
  class Arguments:
42
42
  definition_id: base_t.ObjectId
43
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS]]
43
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL]]
44
44
  field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None
45
45
 
46
46
 
@@ -235,7 +235,7 @@ class ClientMethods(ABC):
235
235
  self,
236
236
  *,
237
237
  definition_id: base_t.ObjectId,
238
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS]],
238
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL]],
239
239
  entities_to_create: list[create_entities_t.EntityToCreate],
240
240
  ) -> create_entities_t.Data:
241
241
  """Creates new Uncountable entities
@@ -260,7 +260,7 @@ class ClientMethods(ABC):
260
260
  self,
261
261
  *,
262
262
  definition_id: base_t.ObjectId,
263
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS]],
263
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL]],
264
264
  field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None,
265
265
  ) -> create_entity_t.Data:
266
266
  """Creates a new Uncountable entity
@@ -21,7 +21,8 @@ from .job_definition_t import JobDefinitionBase as JobDefinitionBase
21
21
  from .job_definition_t import CronJobDefinition as CronJobDefinition
22
22
  from .job_definition_t import JobDefinition as JobDefinition
23
23
  from .job_definition_t import AuthRetrievalBase as AuthRetrievalBase
24
- from .job_definition_t import AuthRetrievalEnv as AuthRetrievalEnv
24
+ from .job_definition_t import AuthRetrievalOAuth as AuthRetrievalOAuth
25
+ from .job_definition_t import AuthRetrievalBasic as AuthRetrievalBasic
25
26
  from .job_definition_t import AuthRetrieval as AuthRetrieval
26
27
  from .job_definition_t import ProfileDefinition as ProfileDefinition
27
28
  from .job_definition_t import ProfileMetadata as ProfileMetadata
@@ -18,7 +18,8 @@ from . import secret_retrieval_t
18
18
  __all__: list[str] = [
19
19
  "AuthRetrieval",
20
20
  "AuthRetrievalBase",
21
- "AuthRetrievalEnv",
21
+ "AuthRetrievalBasic",
22
+ "AuthRetrievalOAuth",
22
23
  "AuthRetrievalType",
23
24
  "CronJobDefinition",
24
25
  "GenericUploadDataSource",
@@ -54,7 +55,8 @@ class JobExecutorType(StrEnum):
54
55
 
55
56
  # DO NOT MODIFY -- This file is generated by type_spec
56
57
  class AuthRetrievalType(StrEnum):
57
- ENV = "env"
58
+ OAUTH = "oauth"
59
+ BASIC = "basic"
58
60
 
59
61
 
60
62
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -162,7 +164,7 @@ class JobDefinitionBase:
162
164
  id: str
163
165
  name: str
164
166
  executor: JobExecutor
165
- enabled: bool = False
167
+ enabled: bool = True
166
168
 
167
169
 
168
170
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -198,17 +200,30 @@ class AuthRetrievalBase:
198
200
  parse_require={"type"},
199
201
  )
200
202
  @dataclasses.dataclass(kw_only=True)
201
- class AuthRetrievalEnv(AuthRetrievalBase):
202
- type: typing.Literal[AuthRetrievalType.ENV] = AuthRetrievalType.ENV
203
+ class AuthRetrievalOAuth(AuthRetrievalBase):
204
+ type: typing.Literal[AuthRetrievalType.OAUTH] = AuthRetrievalType.OAUTH
205
+ refresh_token_secret: secret_retrieval_t.SecretRetrieval
206
+
207
+
208
+ # DO NOT MODIFY -- This file is generated by type_spec
209
+ @serial_class(
210
+ parse_require={"type"},
211
+ )
212
+ @dataclasses.dataclass(kw_only=True)
213
+ class AuthRetrievalBasic(AuthRetrievalBase):
214
+ type: typing.Literal[AuthRetrievalType.BASIC] = AuthRetrievalType.BASIC
215
+ api_id_secret: secret_retrieval_t.SecretRetrieval
216
+ api_key_secret: secret_retrieval_t.SecretRetrieval
203
217
 
204
218
 
205
219
  # DO NOT MODIFY -- This file is generated by type_spec
206
220
  AuthRetrieval = typing.Annotated[
207
- typing.Union[AuthRetrievalEnv],
221
+ typing.Union[AuthRetrievalOAuth, AuthRetrievalBasic],
208
222
  serial_union_annotation(
209
223
  discriminator="type",
210
224
  discriminator_map={
211
- "env": AuthRetrievalEnv,
225
+ "oauth": AuthRetrievalOAuth,
226
+ "basic": AuthRetrievalBasic,
212
227
  },
213
228
  ),
214
229
  ]