UncountablePythonSDK 0.0.55__tar.gz → 0.0.57__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 (257) hide show
  1. {uncountablepythonsdk-0.0.55/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.57}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/UncountablePythonSDK.egg-info/SOURCES.txt +1 -0
  4. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/examples/create_entity.py +3 -1
  5. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/examples/edit_recipe_inputs.py +3 -1
  6. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/argument_parser/argument_parser.py +4 -2
  7. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/_gdrive_session.py +5 -2
  8. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/_s3_session.py +2 -1
  9. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/_sftp_session.py +5 -4
  10. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization/serial_class.py +6 -2
  11. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization/yaml.py +4 -1
  12. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/actions_registry/emit_typescript.py +3 -1
  13. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/builder.py +16 -6
  14. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/config.py +3 -1
  15. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/emit_io_ts.py +5 -5
  16. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/emit_open_api.py +10 -6
  17. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/emit_open_api_util.py +3 -4
  18. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/emit_python.py +9 -5
  19. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/emit_typescript.py +17 -8
  20. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/type_info/emit_type_info.py +5 -3
  21. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/value_spec/convert_type.py +3 -1
  22. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/value_spec/emit_python.py +12 -4
  23. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/core/client.py +6 -2
  24. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/core/file_upload.py +15 -3
  25. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/construct_client.py +2 -1
  26. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/executors/generic_upload_executor.py +9 -7
  27. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/secret_retrieval/retrieve_secret.py +1 -3
  28. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/telemetry.py +12 -4
  29. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/__init__.py +2 -0
  30. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/create_entities.py +1 -1
  31. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/create_entity.py +1 -1
  32. uncountablepythonsdk-0.0.57/uncountable/types/api/recipes/clear_recipe_outputs.py +35 -0
  33. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/async_batch.py +1 -0
  34. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/async_batch_processor.py +72 -0
  35. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/async_batch_t.py +9 -0
  36. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/client_base.py +22 -2
  37. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/entity_t.py +2 -0
  38. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/.github/workflows/documentation.yml +0 -0
  39. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/.github/workflows/publish.yml +0 -0
  40. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/.gitignore +0 -0
  41. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/README.md +0 -0
  42. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  43. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  44. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  45. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/.gitignore +0 -0
  46. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/conf.py +0 -0
  47. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/index.md +0 -0
  48. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/justfile +0 -0
  49. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/quickstart.md +0 -0
  50. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/requirements.txt +0 -0
  51. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/android-chrome-192x192.png +0 -0
  52. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/android-chrome-512x512.png +0 -0
  53. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/apple-touch-icon.png +0 -0
  54. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/browserconfig.xml +0 -0
  55. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/favicon-16x16.png +0 -0
  56. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/favicon-32x32.png +0 -0
  57. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/manifest.json +0 -0
  58. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/mstile-150x150.png +0 -0
  59. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  60. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/docs/static/logo_blue.png +0 -0
  61. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/examples/async_batch.py +0 -0
  62. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/examples/invoke_uploader.py +0 -0
  63. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/examples/upload_files.py +0 -0
  64. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/__init__.py +0 -0
  65. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/argument_parser/__init__.py +0 -0
  66. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/argument_parser/_is_enum.py +0 -0
  67. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  68. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/argument_parser/case_convert.py +0 -0
  69. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/__init__.py +0 -0
  70. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/_local_session.py +0 -0
  71. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  72. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  73. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization/__init__.py +0 -0
  74. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization/missing_sentry.py +0 -0
  75. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization/opaque_key.py +0 -0
  76. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization/serial_union.py +0 -0
  77. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization_util/__init__.py +0 -0
  78. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  79. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  80. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/serialization_util/serialization_helpers.py +0 -0
  81. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/strenum_compat/__init__.py +0 -0
  82. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/strenum_compat/strenum_compat.py +0 -0
  83. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/__init__.py +0 -0
  84. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/__main__.py +0 -0
  85. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  86. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  87. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/emit_typescript_util.py +0 -0
  88. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/load_types.py +0 -0
  89. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/open_api_util.py +0 -0
  90. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/parts/base.py.prepart +0 -0
  91. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  92. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/test.py +0 -0
  93. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/type_info/__main__.py +0 -0
  94. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/util.py +0 -0
  95. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/value_spec/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/value_spec/__main__.py +0 -0
  97. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pkgs/type_spec/value_spec/types.py +0 -0
  98. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/pyproject.toml +0 -0
  99. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/setup.cfg +0 -0
  100. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/__init__.py +0 -0
  101. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/core/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/core/async_batch.py +0 -0
  103. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/core/types.py +0 -0
  104. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/core/version.py +0 -0
  105. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/__init__.py +0 -0
  106. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/cron.py +0 -0
  107. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/db/__init__.py +0 -0
  108. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/db/connect.py +0 -0
  109. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/entrypoint.py +0 -0
  110. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/executors/__init__.py +0 -0
  111. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/executors/executors.py +0 -0
  112. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/executors/script_executor.py +0 -0
  113. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/job.py +0 -0
  114. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  115. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/integration/server.py +0 -0
  116. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/py.typed +0 -0
  117. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/batch/__init__.py +0 -0
  119. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/batch/execute_batch.py +0 -0
  120. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  121. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/chemical/__init__.py +0 -0
  122. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  123. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/get_entities_data.py +0 -0
  125. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/list_entities.py +0 -0
  126. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/lock_entity.py +0 -0
  127. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  128. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/set_values.py +0 -0
  129. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  130. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/entity/unlock_entity.py +0 -0
  131. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/equipment/__init__.py +0 -0
  132. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  133. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/field_options/__init__.py +0 -0
  134. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  135. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/id_source/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/id_source/list_id_source.py +0 -0
  137. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/id_source/match_id_source.py +0 -0
  138. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/input_groups/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  140. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/create_inputs.py +0 -0
  142. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/get_input_data.py +0 -0
  143. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/get_input_names.py +0 -0
  144. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  145. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  146. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/set_input_category.py +0 -0
  147. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  148. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  149. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/material_families/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  151. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/outputs/__init__.py +0 -0
  152. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/outputs/get_output_data.py +0 -0
  153. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/outputs/get_output_names.py +0 -0
  154. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  155. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/permissions/__init__.py +0 -0
  156. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  157. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/project/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/project/get_projects.py +0 -0
  159. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/project/get_projects_data.py +0 -0
  160. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipe_links/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  162. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  163. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  165. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  167. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  168. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  169. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  170. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/create_recipe.py +0 -0
  171. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/create_recipes.py +0 -0
  172. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  173. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  174. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/get_curve.py +0 -0
  175. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  176. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  177. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  178. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  179. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  180. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  181. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  182. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  183. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  184. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  185. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  186. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  187. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  188. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  189. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/triggers/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/triggers/run_trigger.py +0 -0
  191. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/uploader/__init__.py +0 -0
  192. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  193. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/base.py +0 -0
  194. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/base_t.py +0 -0
  195. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/calculations.py +0 -0
  196. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/calculations_t.py +0 -0
  197. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/chemical_structure.py +0 -0
  198. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/chemical_structure_t.py +0 -0
  199. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/client_config.py +0 -0
  200. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/client_config_t.py +0 -0
  201. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/curves.py +0 -0
  202. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/curves_t.py +0 -0
  203. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/entity.py +0 -0
  204. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/experiment_groups.py +0 -0
  205. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/experiment_groups_t.py +0 -0
  206. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/field_values.py +0 -0
  207. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/field_values_t.py +0 -0
  208. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/fields.py +0 -0
  209. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/fields_t.py +0 -0
  210. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/generic_upload.py +0 -0
  211. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/generic_upload_t.py +0 -0
  212. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/id_source.py +0 -0
  213. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/id_source_t.py +0 -0
  214. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/identifier.py +0 -0
  215. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/identifier_t.py +0 -0
  216. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/input_attributes.py +0 -0
  217. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/input_attributes_t.py +0 -0
  218. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/inputs.py +0 -0
  219. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/inputs_t.py +0 -0
  220. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/job_definition.py +0 -0
  221. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/job_definition_t.py +0 -0
  222. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/outputs.py +0 -0
  223. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/outputs_t.py +0 -0
  224. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/overrides.py +0 -0
  225. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/overrides_t.py +0 -0
  226. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/permissions.py +0 -0
  227. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/permissions_t.py +0 -0
  228. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/phases.py +0 -0
  229. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/phases_t.py +0 -0
  230. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/post_base.py +0 -0
  231. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/post_base_t.py +0 -0
  232. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_identifiers.py +0 -0
  233. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_identifiers_t.py +0 -0
  234. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_inputs.py +0 -0
  235. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_inputs_t.py +0 -0
  236. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_links.py +0 -0
  237. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_links_t.py +0 -0
  238. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_metadata.py +0 -0
  239. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_metadata_t.py +0 -0
  240. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_output_metadata.py +0 -0
  241. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_output_metadata_t.py +0 -0
  242. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_tags.py +0 -0
  243. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_tags_t.py +0 -0
  244. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_workflow_steps.py +0 -0
  245. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  246. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipes.py +0 -0
  247. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/recipes_t.py +0 -0
  248. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/response.py +0 -0
  249. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/response_t.py +0 -0
  250. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/secret_retrieval.py +0 -0
  251. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/secret_retrieval_t.py +0 -0
  252. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/units.py +0 -0
  253. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/units_t.py +0 -0
  254. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/users.py +0 -0
  255. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/users_t.py +0 -0
  256. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/uncountable/types/workflows.py +0 -0
  257. {uncountablepythonsdk-0.0.55 → uncountablepythonsdk-0.0.57}/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.55
3
+ Version: 0.0.57
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.55
3
+ Version: 0.0.57
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
@@ -229,6 +229,7 @@ uncountable/types/api/recipes/add_recipe_to_project.py
229
229
  uncountable/types/api/recipes/archive_recipes.py
230
230
  uncountable/types/api/recipes/associate_recipe_as_input.py
231
231
  uncountable/types/api/recipes/associate_recipe_as_lot.py
232
+ uncountable/types/api/recipes/clear_recipe_outputs.py
232
233
  uncountable/types/api/recipes/create_recipe.py
233
234
  uncountable/types/api/recipes/create_recipes.py
234
235
  uncountable/types/api/recipes/disassociate_recipe_as_input.py
@@ -14,7 +14,9 @@ entities = client.create_entity(
14
14
  definition_id=24,
15
15
  entity_type=entity_t.EntityType.LAB_REQUEST,
16
16
  field_values=[
17
- field_values_t.FieldRefNameValue(field_ref_name="name", value="SDK Lab Request"),
17
+ field_values_t.FieldRefNameValue(
18
+ field_ref_name="name", value="SDK Lab Request"
19
+ ),
18
20
  field_values_t.FieldRefNameValue(field_ref_name="materialFamilyId", value=1),
19
21
  ],
20
22
  )
@@ -38,7 +38,9 @@ edits.append(
38
38
  )
39
39
  )
40
40
  edits.append(
41
- edit_recipe_inputs_t.RecipeInputEditAddInstructions(instructions="Mix for 3 minutes")
41
+ edit_recipe_inputs_t.RecipeInputEditAddInstructions(
42
+ instructions="Mix for 3 minutes"
43
+ )
42
44
  )
43
45
  batch_loader.edit_recipe_inputs(
44
46
  recipe_key=IdentifierKeyBatchReference(reference=created_recipe_reference),
@@ -48,7 +48,7 @@ class ParserExtraFieldsError(ParserError):
48
48
  self.extra_fields = extra_fields
49
49
 
50
50
  def __str__(self) -> str:
51
- return f"extra fields were provided: {', '.join(self.extra_fields)}"
51
+ return f"extra fields were provided: {", ".join(self.extra_fields)}"
52
52
 
53
53
 
54
54
  def is_optional(field_type: typing.Any) -> bool:
@@ -250,7 +250,9 @@ def _build_parser_inner(
250
250
  convert_string_to_snake_case=context.options.convert_to_snake_case,
251
251
  )
252
252
  v_parser = _build_parser_inner(args[1], context)
253
- return lambda value: origin((k_parser(k), v_parser(v)) for k, v in value.items())
253
+ return lambda value: origin(
254
+ (k_parser(k), v_parser(v)) for k, v in value.items()
255
+ )
254
256
 
255
257
  if origin == typing.Literal:
256
258
  valid_values: set[T] = set(typing.get_args(parsed_type))
@@ -212,7 +212,8 @@ class GDriveSession(FileSystemSession):
212
212
  for file_context in files:
213
213
  if (
214
214
  valid_file_extensions is not None
215
- and os.path.splitext(file_context["name"])[1] not in valid_file_extensions
215
+ and os.path.splitext(file_context["name"])[1]
216
+ not in valid_file_extensions
216
217
  ):
217
218
  continue
218
219
  gdrive_files.append(
@@ -256,7 +257,9 @@ class GDriveSession(FileSystemSession):
256
257
  dest_filename=new_filename,
257
258
  )
258
259
  else:
259
- move_gdrive_file(self.connection, src_file.file_id, dest_file.file_id)
260
+ move_gdrive_file(
261
+ self.connection, src_file.file_id, dest_file.file_id
262
+ )
260
263
  elif isinstance(src_file, FileObjectData):
261
264
  if src_file.mime_type is None:
262
265
  raise IncompatibleFileReference(
@@ -64,7 +64,8 @@ class S3Session(FileSystemSession):
64
64
  if not recursive and (obj.key == prefix or "/" in obj.key[len(prefix) :]):
65
65
  continue
66
66
  if valid_extensions is None or any(
67
- obj.key.endswith(valid_extension) for valid_extension in valid_extensions
67
+ obj.key.endswith(valid_extension)
68
+ for valid_extension in valid_extensions
68
69
  ):
69
70
  filesystem_references.append(FileSystemFileReference(obj.key))
70
71
 
@@ -42,7 +42,8 @@ def list_sftp_files(
42
42
 
43
43
  def _add_file(path: str) -> None:
44
44
  if (
45
- valid_extensions is None or os.path.splitext(path)[1] in valid_extensions
45
+ valid_extensions is None
46
+ or os.path.splitext(path)[1] in valid_extensions
46
47
  ) and (parent_dir_path is None or os.path.dirname(path) == parent_dir_path):
47
48
  file_paths.append(path)
48
49
 
@@ -106,9 +107,9 @@ class SFTPSession(FileSystemSession):
106
107
  recursive: bool = True,
107
108
  valid_extensions: list[str] | None = None,
108
109
  ) -> list[FileSystemObject]:
109
- if not isinstance(dir_path, FileSystemFileReference) or not self.connection.isdir(
110
- dir_path.filepath
111
- ):
110
+ if not isinstance(
111
+ dir_path, FileSystemFileReference
112
+ ) or not self.connection.isdir(dir_path.filepath):
112
113
  raise IncompatibleFileReference()
113
114
 
114
115
  return [
@@ -91,11 +91,15 @@ def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | N
91
91
  if curr_base_class_data is not None:
92
92
  if base_class_data is None:
93
93
  base_class_data = _SerialClassData()
94
- base_class_data.unconverted_keys |= curr_base_class_data.unconverted_keys
94
+ base_class_data.unconverted_keys |= (
95
+ curr_base_class_data.unconverted_keys
96
+ )
95
97
  base_class_data.unconverted_values |= (
96
98
  curr_base_class_data.unconverted_values
97
99
  )
98
- base_class_data.to_string_values |= curr_base_class_data.to_string_values
100
+ base_class_data.to_string_values |= (
101
+ curr_base_class_data.to_string_values
102
+ )
99
103
  base_class_data.parse_require |= curr_base_class_data.parse_require
100
104
  return base_class_data
101
105
 
@@ -45,7 +45,10 @@ def safe_load(src: str | bytes | SupportsRead) -> Any:
45
45
 
46
46
 
47
47
  def safe_dump(
48
- obj: Any, sort_keys: bool = False, indent: int | None = None, width: int | None = None
48
+ obj: Any,
49
+ sort_keys: bool = False,
50
+ indent: int | None = None,
51
+ width: int | None = None,
49
52
  ) -> str:
50
53
  return yaml.safe_dump(obj, sort_keys=sort_keys, indent=indent, width=width)
51
54
 
@@ -129,7 +129,9 @@ def _emit_action_definition(
129
129
  out.write(f"{indent}{_action_symbol_name(action_definition)}: {{\n")
130
130
  out.write(f"{sub_indent}name: {encode_common_string(action_definition.name)},\n")
131
131
  if action_definition.icon is not None:
132
- out.write(f"{sub_indent}icon: {encode_common_string(action_definition.icon)},\n")
132
+ out.write(
133
+ f"{sub_indent}icon: {encode_common_string(action_definition.icon)},\n"
134
+ )
133
135
  out.write(
134
136
  f"{sub_indent}shortDescription: {encode_common_string(action_definition.short_description)},\n"
135
137
  )
@@ -712,7 +712,9 @@ class SpecTypeDefnStringEnum(SpecTypeDefn):
712
712
  elif isinstance(data_values, list):
713
713
  for value in data_values:
714
714
  if value in self.values:
715
- raise Exception("duplicate value in typespec enum", self.name, value)
715
+ raise Exception(
716
+ "duplicate value in typespec enum", self.name, value
717
+ )
716
718
  self.values[value] = StringEnumEntry(name=value, value=value)
717
719
  else:
718
720
  raise Exception("unsupported values type")
@@ -972,7 +974,9 @@ def _parse_const(
972
974
  return value
973
975
 
974
976
  if const_type.name == BaseTypeName.s_boolean:
975
- builder.ensure(isinstance(value, bool), "invalid value for boolean constant")
977
+ builder.ensure(
978
+ isinstance(value, bool), "invalid value for boolean constant"
979
+ )
976
980
  return value
977
981
 
978
982
  raise Exception("unsupported-const-scalar-type", const_type)
@@ -1004,7 +1008,9 @@ class SpecConstant:
1004
1008
  assert isinstance(self.value, dict)
1005
1009
  # the parsing checks that the values are correct, so a simple length check
1006
1010
  # should be enough to check completeness
1007
- builder.ensure(len(key_type.values) == len(self.value), "incomplete-enum-map")
1011
+ builder.ensure(
1012
+ len(key_type.values) == len(self.value), "incomplete-enum-map"
1013
+ )
1008
1014
 
1009
1015
 
1010
1016
  class SpecNamespace:
@@ -1335,7 +1341,9 @@ class SpecBuilder:
1335
1341
  ) -> SpecType:
1336
1342
  self.push_where(spec)
1337
1343
  parsed_type = util.parse_type_str(spec)
1338
- result = self._convert_parsed_type(parsed_type, namespace, top=True, scope=scope)
1344
+ result = self._convert_parsed_type(
1345
+ parsed_type, namespace, top=True, scope=scope
1346
+ )
1339
1347
  self.pop_where()
1340
1348
  return result
1341
1349
 
@@ -1385,7 +1393,9 @@ class SpecBuilder:
1385
1393
  path_meta: list[str] | None = meta.get("path")
1386
1394
  guide_key: SpecGuideKey = RootGuideKey()
1387
1395
  if path_meta is not None:
1388
- path_details = _resolve_endpoint_path("".join(path_meta), self.api_endpoints)
1396
+ path_details = _resolve_endpoint_path(
1397
+ "".join(path_meta), self.api_endpoints
1398
+ )
1389
1399
  guide_key = EndpointGuideKey(path=path_details.resolved_path)
1390
1400
 
1391
1401
  self.guides[guide_key].append(
@@ -1398,4 +1408,4 @@ class SpecBuilder:
1398
1408
  )
1399
1409
 
1400
1410
  def resolve_proper_name(self, stype: SpecTypeDefn) -> str:
1401
- return f"{'.'.join(stype.namespace.path)}.{stype.name}"
1411
+ return f"{".".join(stype.namespace.path)}.{stype.name}"
@@ -125,7 +125,9 @@ def parse_yaml_config(config_file: str) -> Config:
125
125
  python = _parse_language(PythonConfig, raw_config["python"])
126
126
  raw_open_api = raw_config.get("open_api")
127
127
  open_api = (
128
- _parse_language(OpenAPIConfig, raw_open_api) if raw_open_api is not None else None
128
+ _parse_language(OpenAPIConfig, raw_open_api)
129
+ if raw_open_api is not None
130
+ else None
129
131
  )
130
132
 
131
133
  return Config(
@@ -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")
@@ -129,7 +129,7 @@ def refer_to_io_ts(
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)
@@ -286,7 +286,9 @@ def _emit_endpoint_request_body(
286
286
  "type": "object",
287
287
  "title": "Body",
288
288
  "required": ["data"],
289
- "properties": {"data": {"$ref": "#/components/schema/Arguments"}},
289
+ "properties": {
290
+ "data": {"$ref": "#/components/schema/Arguments"}
291
+ },
290
292
  }
291
293
  }
292
294
  | _emit_endpoint_argument_examples(examples)
@@ -361,7 +363,9 @@ def _emit_namespace(
361
363
  | _emit_is_beta(endpoint.is_beta)
362
364
  | _emit_stability_level(endpoint.stability_level)
363
365
  | _emit_endpoint_parameters(endpoint, argument_type, ctx.endpoint.examples)
364
- | _emit_endpoint_request_body(endpoint, argument_type, ctx.endpoint.examples)
366
+ | _emit_endpoint_request_body(
367
+ endpoint, argument_type, ctx.endpoint.examples
368
+ )
365
369
  | {
366
370
  "responses": {
367
371
  "200": {
@@ -412,7 +416,7 @@ def _emit_namespace(
412
416
  {name: value.asdict() for name, value in types.items()},
413
417
  )
414
418
 
415
- path = f"{config.types_output}/common/{'/'.join(namespace.path)}.yaml"
419
+ path = f"{config.types_output}/common/{"/".join(namespace.path)}.yaml"
416
420
  oa_namespace = {"components": oa_components}
417
421
  _rewrite_with_notice(path, yaml.dumps(oa_namespace, sort_keys=False))
418
422
 
@@ -555,7 +559,7 @@ def _emit_endpoint(
555
559
  gctx.tags.add(EmitOpenAPITag(name=tag_name, description=""))
556
560
  gctx.tag_groups[tag_group].add(tag_name)
557
561
 
558
- ref_path = f"common/{'/'.join(namespace.path)}.yaml#/components/endpoint"
562
+ ref_path = f"common/{"/".join(namespace.path)}.yaml#/components/endpoint"
559
563
  ep = namespace.endpoint
560
564
  gctx.paths.append(
561
565
  EmitOpenAPIPath(
@@ -573,7 +577,7 @@ def _emit_endpoint(
573
577
  ctx.endpoint = EmitOpenAPIEndpoint(
574
578
  method=namespace.endpoint.method.lower(),
575
579
  tags=[tag_name],
576
- summary=f"{'/'.join(namespace.path[path_cutoff:])}",
580
+ summary=f"{"/".join(namespace.path[path_cutoff:])}",
577
581
  description=description,
578
582
  is_beta=namespace.endpoint.is_beta,
579
583
  stability_level=namespace.endpoint.stability_level,
@@ -690,5 +694,5 @@ def open_api_type(
690
694
  ctx.namespaces.add(stype.namespace)
691
695
  # external namespace resolution
692
696
  return OpenAPIRefType(
693
- 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}"
694
698
  )
@@ -6,7 +6,6 @@ WORK-IN-PROGRESS, DON'T USE!
6
6
 
7
7
  from collections import defaultdict
8
8
  from dataclasses import dataclass, field
9
- from typing import TypeAlias
10
9
 
11
10
  from pkgs.serialization_util.serialization_helpers import JsonValue
12
11
 
@@ -15,9 +14,9 @@ from .open_api_util import OpenAPIType
15
14
 
16
15
  MODIFY_NOTICE = "# DO NOT MODIFY -- This file is generated by type_spec"
17
16
 
18
- GlobalContextInfo: TypeAlias = dict[str, str | dict[str, str]]
19
- TagGroupToNamedTags: TypeAlias = dict[str, str | list[str]]
20
- TagPathsToRef: TypeAlias = dict[str, dict[str, str]]
17
+ type GlobalContextInfo = dict[str, str | dict[str, str]]
18
+ type TagGroupToNamedTags = dict[str, str | list[str]]
19
+ type TagPathsToRef = dict[str, dict[str, str]]
21
20
 
22
21
 
23
22
  @dataclass
@@ -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
@@ -621,7 +621,9 @@ def _emit_string_enum(ctx: Context, stype: builder.SpecTypeDefnStringEnum) -> No
621
621
  ctx.out.write(f"{INDENT}labels={{\n")
622
622
  for entry in stype.values.values():
623
623
  if entry.label is not None:
624
- ctx.out.write(f'{INDENT}{INDENT}"{entry.value}": "{entry.label}",\n')
624
+ ctx.out.write(
625
+ f'{INDENT}{INDENT}"{entry.value}": "{entry.label}",\n'
626
+ )
625
627
 
626
628
  ctx.out.write(f"{INDENT}}},\n")
627
629
  if need_deprecated:
@@ -722,7 +724,9 @@ def _emit_properties(
722
724
  if (
723
725
  isinstance(prop.spec_type, builder.SpecTypeInstance)
724
726
  and (
725
- prop.spec_type.defn_type.is_base_type(builder.BaseTypeName.s_list)
727
+ prop.spec_type.defn_type.is_base_type(
728
+ builder.BaseTypeName.s_list
729
+ )
726
730
  )
727
731
  and default == "[]"
728
732
  ):
@@ -1026,7 +1030,7 @@ def _emit_namespace_imports(
1026
1030
  if ns.endpoint is not None:
1027
1031
  import_alias = "_".join(ns.path[2:]) + "_t"
1028
1032
  out.write(
1029
- f"import {config.types_package}.{'.'.join(ns.path)} as {import_alias}\n"
1033
+ f"import {config.types_package}.{".".join(ns.path)} as {import_alias}\n"
1030
1034
  )
1031
1035
  continue
1032
1036
  elif from_namespace is not None:
@@ -1184,7 +1188,7 @@ def _emit_api_argument_lookup(
1184
1188
  continue
1185
1189
 
1186
1190
  import_alias = "_".join(namespace.path[1:])
1187
- api_import = f"{config.types_package}.{'.'.join(namespace.path)}"
1191
+ api_import = f"{config.types_package}.{".".join(namespace.path)}"
1188
1192
  imports.append(f"import {api_import} as {import_alias}")
1189
1193
 
1190
1194
  route_group = (
@@ -92,7 +92,9 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
92
92
  builder.namespaces.values(),
93
93
  key=lambda ns: _resolve_namespace_name(ns),
94
94
  ):
95
- ctx = EmitTypescriptContext(out=io.StringIO(), namespace=namespace, config=config)
95
+ ctx = EmitTypescriptContext(
96
+ out=io.StringIO(), namespace=namespace, config=config
97
+ )
96
98
 
97
99
  _emit_namespace(ctx, namespace)
98
100
 
@@ -109,7 +111,7 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
109
111
  # Try to capture some common incompleteness errors
110
112
  if namespace.endpoint is None or namespace.endpoint.function is None:
111
113
  raise Exception(
112
- f"Namespace {'/'.join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
114
+ f"Namespace {"/".join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
113
115
  )
114
116
  continue
115
117
 
@@ -161,7 +163,9 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
161
163
  util.rewrite_file(f"{config.types_output}/index.ts", index_out.getvalue())
162
164
 
163
165
 
164
- def _emit_namespace(ctx: EmitTypescriptContext, namespace: builder.SpecNamespace) -> None:
166
+ def _emit_namespace(
167
+ ctx: EmitTypescriptContext, namespace: builder.SpecNamespace
168
+ ) -> None:
165
169
  for stype in namespace.types.values():
166
170
  if namespace.emit_io_ts:
167
171
  emit_type_io_ts(ctx, stype, namespace.derive_types_from_io_ts)
@@ -222,7 +226,7 @@ def _emit_endpoint(
222
226
  wrap_call = (
223
227
  f"{wrap_name}<Arguments>" if is_binary else f"{wrap_name}<Arguments, Response>"
224
228
  )
225
- type_path = f"unc_mat/types/{'/'.join(namespace.path)}"
229
+ type_path = f"unc_mat/types/{"/".join(namespace.path)}"
226
230
 
227
231
  if is_binary:
228
232
  tsx_response_part = f"""import {{ {wrap_name} }} from "unc_base/api"
@@ -261,12 +265,14 @@ export const apiCall = {wrap_call}(
261
265
  )
262
266
  {data_loader_body}"""
263
267
 
264
- output = f"{ctx.config.routes_output}/{'/'.join(namespace.path)}.tsx"
268
+ output = f"{ctx.config.routes_output}/{"/".join(namespace.path)}.tsx"
265
269
  util.rewrite_file(output, tsx_api)
266
270
 
267
271
  # Hacky index support, until enough is migrated to regen entirely
268
272
  # Emits the import into the UI API index file
269
- index_path = f"{ctx.config.routes_output}/{'/'.join(namespace.path[0:-1])}/index.tsx"
273
+ index_path = (
274
+ f"{ctx.config.routes_output}/{"/".join(namespace.path[0:-1])}/index.tsx"
275
+ )
270
276
  api_name = f"Api{ts_type_name(namespace.path[0 - 1])}"
271
277
  if os.path.exists(index_path):
272
278
  with open(index_path) as index:
@@ -404,7 +410,10 @@ def refer_to_impl(
404
410
  spec, multi = refer_to_impl(ctx, stype.parameters[0])
405
411
  return f"readonly ({spec})[]" if multi else f"readonly {spec}[]", False
406
412
  if stype.defn_type.name == builder.BaseTypeName.s_union:
407
- return f'({" | ".join([refer_to(ctx, p) for p in stype.parameters])})', False
413
+ return (
414
+ f'({" | ".join([refer_to(ctx, p) for p in stype.parameters])})',
415
+ False,
416
+ )
408
417
  if stype.defn_type.name == builder.BaseTypeName.s_literal:
409
418
  parts = []
410
419
  for parameter in stype.parameters:
@@ -414,7 +423,7 @@ def refer_to_impl(
414
423
  if stype.defn_type.name == builder.BaseTypeName.s_optional:
415
424
  return f"{refer_to(ctx, stype.parameters[0])} | null", True
416
425
  if stype.defn_type.name == builder.BaseTypeName.s_tuple:
417
- return f"[{', '.join([refer_to(ctx, p) for p in stype.parameters])}]", False
426
+ return f"[{", ".join([refer_to(ctx, p) for p in stype.parameters])}]", False
418
427
  params = ", ".join([refer_to(ctx, p) for p in stype.parameters])
419
428
  return f"{refer_to(ctx, stype.defn_type)}<{params}>", False
420
429
 
@@ -3,7 +3,7 @@ import dataclasses
3
3
  import decimal
4
4
  import io
5
5
  import json
6
- from typing import Any, Optional, TypeAlias, Union, cast
6
+ from typing import Any, Optional, Union, cast
7
7
 
8
8
  from main.base.types import data_t
9
9
  from main.base.types.base_t import PureJsonValue
@@ -134,7 +134,7 @@ class MapStringEnum(MapTypeBase):
134
134
  values: dict[str, str]
135
135
 
136
136
 
137
- MapType: TypeAlias = Union[MapTypeObject, MapTypeAlias, MapStringEnum]
137
+ type MapType = Union[MapTypeObject, MapTypeAlias, MapStringEnum]
138
138
 
139
139
 
140
140
  @dataclasses.dataclass
@@ -255,7 +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 prop_ref_name in all_fields_group, f"layout-missing-field:{prop_ref_name}"
258
+ assert (
259
+ prop_ref_name in all_fields_group
260
+ ), f"layout-missing-field:{prop_ref_name}"
259
261
 
260
262
  return layout
261
263
 
@@ -25,7 +25,9 @@ TYPE_MAP = {
25
25
  "List": MappedType(base_type=value_spec_t.BaseType.LIST, param_count=1),
26
26
  "Optional": MappedType(base_type=value_spec_t.BaseType.OPTIONAL, param_count=1),
27
27
  "String": MappedType(base_type=value_spec_t.BaseType.STRING),
28
- "Union": MappedType(base_type=value_spec_t.BaseType.UNION, variable_param_count=True),
28
+ "Union": MappedType(
29
+ base_type=value_spec_t.BaseType.UNION, variable_param_count=True
30
+ ),
29
31
  # not part of type_spec's types now
30
32
  "Symbol": MappedType(base_type=value_spec_t.BaseType.SYMBOL),
31
33
  "Any": MappedType(base_type=value_spec_t.BaseType.ANY),
@@ -160,7 +160,9 @@ def _emit_function(function: value_spec_t.Function, indent: str) -> str:
160
160
  sub_indent = indent + INDENT
161
161
  out.write(f"{_function_symbol_name(function)} = value_spec_t.Function(\n")
162
162
  out.write(f"{sub_indent}name={encode_common_string(function.name)},\n")
163
- out.write(f"{sub_indent}description={encode_common_string(function.description)},\n")
163
+ out.write(
164
+ f"{sub_indent}description={encode_common_string(function.description)},\n"
165
+ )
164
166
  out.write(f"{sub_indent}brief={encode_common_string(function.brief)},\n")
165
167
  out.write(
166
168
  f"{sub_indent}return_value={_emit_function_return(function.return_value, sub_indent)},\n"
@@ -184,16 +186,22 @@ def _emit_argument(argument: value_spec_t.FunctionArgument, indent: str) -> str:
184
186
  out.write("value_spec_t.FunctionArgument(\n")
185
187
  out.write(f"{sub_indent}ref_name={encode_common_string(argument.ref_name)},\n")
186
188
  out.write(f"{sub_indent}name={encode_common_string(argument.name)},\n")
187
- out.write(f"{sub_indent}description={encode_common_string(argument.description)},\n")
189
+ out.write(
190
+ f"{sub_indent}description={encode_common_string(argument.description)},\n"
191
+ )
188
192
  out.write(f"{sub_indent}pass_null={str(argument.pass_null)},\n")
189
- out.write(f"{sub_indent}extant=value_spec_t.ArgumentExtant.{argument.extant.name},\n")
193
+ out.write(
194
+ f"{sub_indent}extant=value_spec_t.ArgumentExtant.{argument.extant.name},\n"
195
+ )
190
196
  out.write(f"{sub_indent}type={_emit_type(argument.type, sub_indent)},\n")
191
197
  out.write(f"{indent})")
192
198
 
193
199
  return out.getvalue()
194
200
 
195
201
 
196
- def _emit_function_return(return_value: value_spec_t.FunctionReturn, indent: str) -> str:
202
+ def _emit_function_return(
203
+ return_value: value_spec_t.FunctionReturn, indent: str
204
+ ) -> str:
197
205
  out = io.StringIO()
198
206
 
199
207
  sub_indent = indent + INDENT
@@ -56,7 +56,9 @@ HTTPRequest = HTTPPostRequest | HTTPGetRequest
56
56
 
57
57
  @dataclass(kw_only=True)
58
58
  class ClientConfig(ClientConfigOptions):
59
- transform_request: typing.Callable[[requests.Request], requests.Request] | None = None
59
+ transform_request: typing.Callable[[requests.Request], requests.Request] | None = (
60
+ None
61
+ )
60
62
  job_logger: typing.Optional[JobLogger] = None
61
63
 
62
64
 
@@ -153,10 +155,12 @@ class Client(ClientMethods):
153
155
  ):
154
156
  self._auth_details = auth_details
155
157
  self._base_url = base_url
156
- self._file_uploader = FileUploader(self._base_url, self._auth_details)
157
158
  self._cfg = config or ClientConfig()
158
159
  self._session = requests.Session()
159
160
  self._session.verify = not self._cfg.allow_insecure_tls
161
+ self._file_uploader = FileUploader(
162
+ self._base_url, self._auth_details, self._cfg.allow_insecure_tls
163
+ )
160
164
 
161
165
  def _get_response_json(
162
166
  self, response: requests.Response, request_id: str
@@ -68,10 +68,17 @@ class UploadFailed(Exception):
68
68
  class FileUploader:
69
69
  _auth_details: AuthDetailsAll
70
70
  _base_url: str
71
-
72
- def __init__(self: Self, base_url: str, auth_details: AuthDetailsAll) -> None:
71
+ _allow_insecure_tls: bool
72
+
73
+ def __init__(
74
+ self: Self,
75
+ base_url: str,
76
+ auth_details: AuthDetailsAll,
77
+ allow_insecure_tls: bool = False,
78
+ ) -> None:
73
79
  self._base_url = base_url
74
80
  self._auth_details = auth_details
81
+ self._allow_insecure_tls = allow_insecure_tls
75
82
 
76
83
  async def _upload_file(self: Self, file_upload: FileUpload) -> UploadedFile:
77
84
  creation_url = f"{self._base_url}/api/external/file_upload/files"
@@ -92,6 +99,9 @@ class FileUploader:
92
99
  file_bytes.bytes_data,
93
100
  {"filename": file_bytes.name.encode()},
94
101
  client_session=session,
102
+ config=aiotus.RetryConfiguration(
103
+ ssl=False if self._allow_insecure_tls else None
104
+ ),
95
105
  chunksize=_CHUNK_SIZE,
96
106
  )
97
107
  if location is None:
@@ -100,7 +110,9 @@ class FileUploader:
100
110
  name=file_bytes.name, file_id=int(location.path.split("/")[-1])
101
111
  )
102
112
 
103
- def upload_files(self: Self, *, file_uploads: list[FileUpload]) -> list[UploadedFile]:
113
+ def upload_files(
114
+ self: Self, *, file_uploads: list[FileUpload]
115
+ ) -> list[UploadedFile]:
104
116
  return [
105
117
  asyncio.run(self._upload_file(file_upload)) for file_upload in file_uploads
106
118
  ]
@@ -23,7 +23,8 @@ def _construct_auth_details(profile_meta: ProfileMetadata) -> AuthDetailsAll:
23
23
  profile_meta.auth_retrieval.api_id_secret, profile_metadata=profile_meta
24
24
  )
25
25
  api_key = retrieve_secret(
26
- profile_meta.auth_retrieval.api_key_secret, profile_metadata=profile_meta
26
+ profile_meta.auth_retrieval.api_key_secret,
27
+ profile_metadata=profile_meta,
27
28
  )
28
29
 
29
30
  return AuthDetailsApiKey(api_id=api_id, api_secret_key=api_key)