UncountablePythonSDK 0.0.191__tar.gz → 0.0.193__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.
Files changed (471) hide show
  1. {uncountablepythonsdk-0.0.191/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.193}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/UncountablePythonSDK.egg-info/SOURCES.txt +8 -0
  4. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/UncountablePythonSDK.egg-info/scm_file_list.json +8 -0
  5. uncountablepythonsdk-0.0.193/pkgs/argument_parser/parse_fallback.py +26 -0
  6. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_inner.py +116 -54
  7. uncountablepythonsdk-0.0.193/pkgs/codeowners.py +157 -0
  8. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/__init__.py +1 -0
  9. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/serial_class.py +26 -1
  10. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/builder.py +93 -19
  11. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/builder_types.py +6 -0
  12. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_io_ts.py +1 -1
  13. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_open_api.py +29 -32
  14. uncountablepythonsdk-0.0.193/pkgs/type_spec/emit_open_api_examples.py +221 -0
  15. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_python.py +27 -81
  16. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_typescript_util.py +10 -4
  17. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/client.py +7 -4
  18. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/file_upload.py +5 -3
  19. uncountablepythonsdk-0.0.193/uncountable/core/tls.py +34 -0
  20. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/types.py +4 -4
  21. uncountablepythonsdk-0.0.193/uncountable/integration/queue_runner/command_handlers.py +144 -0
  22. uncountablepythonsdk-0.0.193/uncountable/integration/queue_runner/job_dispatcher.py +44 -0
  23. uncountablepythonsdk-0.0.193/uncountable/integration/queue_runner/job_scheduler.py +200 -0
  24. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/queue_runner.py +5 -1
  25. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/telemetry.py +13 -3
  26. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/__init__.py +2 -0
  27. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/files/download_file.py +18 -2
  28. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/listing/fetch_listing.py +2 -1
  29. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/notebooks/get_notebook_content.py +15 -1
  30. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/client_base.py +5 -2
  31. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/listing.py +2 -0
  32. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/listing_t.py +18 -0
  33. uncountablepythonsdk-0.0.193/uncountable/types/notebook_files.py +10 -0
  34. uncountablepythonsdk-0.0.193/uncountable/types/notebook_files_t.py +64 -0
  35. uncountablepythonsdk-0.0.191/uncountable/integration/queue_runner/job_scheduler.py +0 -321
  36. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/.github/workflows/documentation.yml +0 -0
  37. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/.github/workflows/publish.yml +0 -0
  38. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/.gitignore +0 -0
  39. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/README.md +0 -0
  40. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  41. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  42. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  43. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/.flowmarkignore +0 -0
  44. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/.gitignore +0 -0
  45. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/conf.py +0 -0
  46. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/index.md +0 -0
  47. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/integration_examples/add_file_to_folder.md +0 -0
  48. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/integration_examples/create_ingredient.md +0 -0
  49. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/integration_examples/create_output.md +0 -0
  50. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/integration_examples/index.md +0 -0
  51. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/integration_examples/upload_file.md +0 -0
  52. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/justfile +0 -0
  53. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/requirements.txt +0 -0
  54. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/android-chrome-192x192.png +0 -0
  55. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/android-chrome-512x512.png +0 -0
  56. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/apple-touch-icon.png +0 -0
  57. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/browserconfig.xml +0 -0
  58. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/favicon-16x16.png +0 -0
  59. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/favicon-32x32.png +0 -0
  60. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/manifest.json +0 -0
  61. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/mstile-150x150.png +0 -0
  62. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  63. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/docs/static/logo_blue.png +0 -0
  64. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/async_batch.py +0 -0
  65. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/async_batch_large_parse.py +0 -0
  66. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/basic_auth.py +0 -0
  67. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/create_entity.py +0 -0
  68. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/create_ingredient_sdk.py +0 -0
  69. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/download_files.py +0 -0
  70. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/edit_recipe_inputs.py +0 -0
  71. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  72. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  73. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  74. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_http_get.py +0 -0
  75. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  76. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  77. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  78. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  79. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_scale_connection.py +0 -0
  80. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  81. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  82. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/integration-server/pyproject.toml +0 -0
  83. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/invoke_uploader.py +0 -0
  84. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/oauth.py +0 -0
  85. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/set_input_pdf_attribute.py +0 -0
  86. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/set_recipe_metadata_file.py +0 -0
  87. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/set_recipe_output_file_sdk.py +0 -0
  88. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/stream_dataset_measurements.py +0 -0
  89. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/examples/upload_files.py +0 -0
  90. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/cached_parser.py +0 -0
  93. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/case_convert.py +0 -0
  94. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/field_name_resolution.py +0 -0
  95. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_base.py +0 -0
  96. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_builder.py +0 -0
  97. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_cache.py +0 -0
  98. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_error.py +0 -0
  99. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_function_type.py +0 -0
  100. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/parser_options.py +0 -0
  101. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/argument_parser/type_predicates.py +0 -0
  102. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/__init__.py +0 -0
  103. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_blob_session.py +0 -0
  104. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  105. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  106. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_local_session.py +0 -0
  107. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_s3_session.py +0 -0
  108. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
  109. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  110. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  111. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  112. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/py.typed +0 -0
  113. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/annotation.py +0 -0
  114. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/missing_sentry.py +0 -0
  115. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/opaque_key.py +0 -0
  116. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/serial_alias.py +0 -0
  117. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/serial_generic.py +0 -0
  118. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/serial_union.py +0 -0
  119. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/unknown.py +0 -0
  120. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/usage.py +0 -0
  121. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization/yaml.py +0 -0
  122. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/__init__.py +0 -0
  123. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  124. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  125. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/dataclasses.py +0 -0
  126. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/reuse_containers.py +0 -0
  127. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/serialization_helpers.py +0 -0
  128. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/serialize_for_api_encoding.py +0 -0
  129. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/serialization_util/source_encoding_serializer.py +0 -0
  130. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/strenum_compat/__init__.py +0 -0
  131. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/strenum_compat/strenum_compat.py +0 -0
  132. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/AGENTS.md +0 -0
  133. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/CLAUDE.md +0 -0
  134. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/__main__.py +0 -0
  136. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  138. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
  139. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  140. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/config.py +0 -0
  141. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/cross_output_links.py +0 -0
  142. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_open_api_util.py +0 -0
  143. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_scss.py +0 -0
  144. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/emit_typescript.py +0 -0
  145. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/load_types.py +0 -0
  146. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  147. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/open_api_util.py +0 -0
  148. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/parts/base.py.prepart +0 -0
  149. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  150. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/test.py +0 -0
  151. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/type_info/__main__.py +0 -0
  152. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  153. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  154. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  155. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/util.py +0 -0
  156. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/value_spec/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/value_spec/__main__.py +0 -0
  158. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  159. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  160. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pkgs/type_spec/value_spec/types.py +0 -0
  161. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/pyproject.toml +0 -0
  162. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/setup.cfg +0 -0
  163. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/__init__.py +0 -0
  164. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/async_batch.py +0 -0
  166. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/environment.py +0 -0
  167. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/query/__init__.py +0 -0
  168. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/query/builder.py +0 -0
  169. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/query/column.py +0 -0
  170. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/query/row.py +0 -0
  171. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/core/query/types.py +0 -0
  172. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/cli.py +0 -0
  174. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/construct_client.py +0 -0
  175. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/cron.py +0 -0
  176. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/db/__init__.py +0 -0
  177. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/db/connect.py +0 -0
  178. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/db/session.py +0 -0
  179. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/entrypoint.py +0 -0
  180. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/executors/__init__.py +0 -0
  181. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/executors/executors.py +0 -0
  182. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  183. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/executors/script_executor.py +0 -0
  184. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/http_server/__init__.py +0 -0
  185. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/http_server/types.py +0 -0
  186. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/job.py +0 -0
  187. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/job_queue.py +0 -0
  188. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/ownership_lock.py +0 -0
  189. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  192. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  193. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  194. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  196. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  197. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  198. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  199. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
  200. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  201. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  202. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
  203. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +0 -0
  204. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  205. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
  206. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  207. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  208. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/job_process.py +0 -0
  209. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/job_runner.py +0 -0
  210. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/types.py +0 -0
  211. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/queue_runner/worker.py +0 -0
  212. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/request_context.py +0 -0
  213. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/scan_profiles.py +0 -0
  214. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/scheduler.py +0 -0
  215. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
  217. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  218. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/server.py +0 -0
  219. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/service.py +0 -0
  220. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/service_runner.py +0 -0
  221. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/webhook_bootstrap.py +0 -0
  222. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/webhook_entity.py +0 -0
  223. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  224. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/integration/webhook_server/gunicorn_config.py +0 -0
  225. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/py.typed +0 -0
  226. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/__init__.py +0 -0
  227. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/batch/__init__.py +0 -0
  228. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/batch/execute_batch.py +0 -0
  229. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  230. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/chemical/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  232. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  233. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  234. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
  235. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/__init__.py +0 -0
  236. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/add_entity_comment.py +0 -0
  237. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/create_entities.py +0 -0
  238. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/create_entity.py +0 -0
  239. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
  240. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  241. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/export_entities.py +0 -0
  242. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/get_entities_data.py +0 -0
  243. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  244. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/list_aggregate.py +0 -0
  245. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/list_entities.py +0 -0
  246. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/lock_entity.py +0 -0
  247. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/lookup_entity.py +0 -0
  248. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  249. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/set_barcode.py +0 -0
  250. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
  251. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  252. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/set_values.py +0 -0
  253. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  254. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/entity/unlock_entity.py +0 -0
  255. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/equipment/__init__.py +0 -0
  256. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  257. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/field_options/__init__.py +0 -0
  258. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  259. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/file_folders/__init__.py +0 -0
  260. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  261. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  262. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/files/__init__.py +0 -0
  263. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/id_source/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/id_source/list_id_source.py +0 -0
  265. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/id_source/match_id_source.py +0 -0
  266. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/input_groups/__init__.py +0 -0
  267. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  268. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/__init__.py +0 -0
  269. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/create_inputs.py +0 -0
  270. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/get_input_data.py +0 -0
  271. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/get_input_names.py +0 -0
  272. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  273. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  274. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/set_input_category.py +0 -0
  275. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  276. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  277. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/integrations/__init__.py +0 -0
  278. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  279. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/integrations/push_notification.py +0 -0
  280. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  281. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/listing/__init__.py +0 -0
  282. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/listing/export_listing.py +0 -0
  283. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/material_families/__init__.py +0 -0
  284. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  285. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/ml/__init__.py +0 -0
  286. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/ml/get_analyze_results.py +0 -0
  287. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/ml/get_suggest_results.py +0 -0
  288. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/ml/submit_async_job.py +0 -0
  289. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/notebooks/__init__.py +0 -0
  290. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  291. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/output_parameters/__init__.py +0 -0
  292. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  293. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/outputs/__init__.py +0 -0
  294. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/outputs/get_output_data.py +0 -0
  295. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/outputs/get_output_names.py +0 -0
  296. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  297. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  298. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  299. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/permissions/__init__.py +0 -0
  300. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  301. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  302. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/project/__init__.py +0 -0
  303. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/project/get_projects.py +0 -0
  304. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/project/get_projects_data.py +0 -0
  305. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipe_links/__init__.py +0 -0
  306. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  307. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
  308. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  309. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  310. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  311. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/__init__.py +0 -0
  312. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  313. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  314. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  315. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  316. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  317. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  318. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  319. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/create_recipe.py +0 -0
  320. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/create_recipes.py +0 -0
  321. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  322. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  323. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  324. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_curve.py +0 -0
  325. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  326. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  327. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  328. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  329. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  330. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  331. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  332. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  333. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  334. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  335. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  336. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  337. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  338. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  339. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  340. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  341. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  342. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  343. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/runsheet/__init__.py +0 -0
  344. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  345. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  346. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/time_series/__init__.py +0 -0
  347. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/time_series/ingest_dataset_measurements.py +0 -0
  348. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/triggers/__init__.py +0 -0
  349. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/triggers/run_trigger.py +0 -0
  350. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/uploader/__init__.py +0 -0
  351. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  352. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  353. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/user/__init__.py +0 -0
  354. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/api/user/get_current_user_info.py +0 -0
  355. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/async_batch.py +0 -0
  356. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/async_batch_processor.py +0 -0
  357. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/async_batch_t.py +0 -0
  358. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/async_jobs.py +0 -0
  359. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/async_jobs_t.py +0 -0
  360. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/auth_retrieval.py +0 -0
  361. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/auth_retrieval_t.py +0 -0
  362. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/base.py +0 -0
  363. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/base_t.py +0 -0
  364. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/calculations.py +0 -0
  365. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/calculations_t.py +0 -0
  366. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/chemical_structure.py +0 -0
  367. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/chemical_structure_t.py +0 -0
  368. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/client_config.py +0 -0
  369. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/client_config_t.py +0 -0
  370. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/condition_match.py +0 -0
  371. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/condition_match_t.py +0 -0
  372. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/curves.py +0 -0
  373. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/curves_t.py +0 -0
  374. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/data.py +0 -0
  375. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/data_t.py +0 -0
  376. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/dataset_measurements.py +0 -0
  377. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/dataset_measurements_t.py +0 -0
  378. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/entity.py +0 -0
  379. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/entity_t.py +0 -0
  380. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/experiment_groups.py +0 -0
  381. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/experiment_groups_t.py +0 -0
  382. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/exports.py +0 -0
  383. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/exports_t.py +0 -0
  384. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/field_values.py +0 -0
  385. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/field_values_t.py +0 -0
  386. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/fields.py +0 -0
  387. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/fields_t.py +0 -0
  388. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/generic_upload.py +0 -0
  389. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/generic_upload_t.py +0 -0
  390. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/id_source.py +0 -0
  391. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/id_source_t.py +0 -0
  392. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/identifier.py +0 -0
  393. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/identifier_t.py +0 -0
  394. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/input_attributes.py +0 -0
  395. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/input_attributes_t.py +0 -0
  396. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/inputs.py +0 -0
  397. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/inputs_t.py +0 -0
  398. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/integration_server.py +0 -0
  399. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/integration_server_t.py +0 -0
  400. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/integration_session.py +0 -0
  401. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/integration_session_t.py +0 -0
  402. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/integrations.py +0 -0
  403. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/integrations_t.py +0 -0
  404. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/job_definition.py +0 -0
  405. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/job_definition_t.py +0 -0
  406. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/ml_reports.py +0 -0
  407. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/ml_reports_t.py +0 -0
  408. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/notices.py +0 -0
  409. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/notices_t.py +0 -0
  410. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/notifications.py +0 -0
  411. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/notifications_t.py +0 -0
  412. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/outputs.py +0 -0
  413. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/outputs_t.py +0 -0
  414. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/overrides.py +0 -0
  415. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/overrides_t.py +0 -0
  416. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/permissions.py +0 -0
  417. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/permissions_t.py +0 -0
  418. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/phases.py +0 -0
  419. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/phases_t.py +0 -0
  420. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/post_base.py +0 -0
  421. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/post_base_t.py +0 -0
  422. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/queued_job.py +0 -0
  423. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/queued_job_t.py +0 -0
  424. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_identifiers.py +0 -0
  425. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_identifiers_t.py +0 -0
  426. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_inputs.py +0 -0
  427. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_inputs_t.py +0 -0
  428. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_links.py +0 -0
  429. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_links_t.py +0 -0
  430. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_metadata.py +0 -0
  431. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_metadata_t.py +0 -0
  432. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_output_metadata.py +0 -0
  433. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_output_metadata_t.py +0 -0
  434. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_step_relationships.py +0 -0
  435. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_step_relationships_t.py +0 -0
  436. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_tags.py +0 -0
  437. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_tags_t.py +0 -0
  438. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_workflow_step_types.py +0 -0
  439. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  440. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_workflow_steps.py +0 -0
  441. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  442. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipes.py +0 -0
  443. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/recipes_t.py +0 -0
  444. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/request_headers.py +0 -0
  445. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/request_headers_t.py +0 -0
  446. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/response.py +0 -0
  447. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/response_t.py +0 -0
  448. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/runsheet.py +0 -0
  449. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/runsheet_format.py +0 -0
  450. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/runsheet_format_t.py +0 -0
  451. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/runsheet_t.py +0 -0
  452. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/secret_retrieval.py +0 -0
  453. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/secret_retrieval_t.py +0 -0
  454. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/sockets.py +0 -0
  455. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/sockets_t.py +0 -0
  456. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/specs.py +0 -0
  457. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/specs_t.py +0 -0
  458. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/step_relationships.py +0 -0
  459. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/step_relationships_t.py +0 -0
  460. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/units.py +0 -0
  461. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/units_t.py +0 -0
  462. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/uploader.py +0 -0
  463. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/uploader_t.py +0 -0
  464. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/users.py +0 -0
  465. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/users_t.py +0 -0
  466. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/webhook.py +0 -0
  467. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/webhook_job.py +0 -0
  468. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/webhook_job_t.py +0 -0
  469. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/webhook_t.py +0 -0
  470. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/workflows.py +0 -0
  471. {uncountablepythonsdk-0.0.191 → uncountablepythonsdk-0.0.193}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.191
3
+ Version: 0.0.193
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.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.191
3
+ Version: 0.0.193
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
@@ -57,11 +57,13 @@ examples/integration-server/jobs/materials_auto/example_scale_connection.py
57
57
  examples/integration-server/jobs/materials_auto/example_wh.py
58
58
  examples/integration-server/jobs/materials_auto/profile.yaml
59
59
  pkgs/__init__.py
60
+ pkgs/codeowners.py
60
61
  pkgs/py.typed
61
62
  pkgs/argument_parser/__init__.py
62
63
  pkgs/argument_parser/cached_parser.py
63
64
  pkgs/argument_parser/case_convert.py
64
65
  pkgs/argument_parser/field_name_resolution.py
66
+ pkgs/argument_parser/parse_fallback.py
65
67
  pkgs/argument_parser/parser_base.py
66
68
  pkgs/argument_parser/parser_builder.py
67
69
  pkgs/argument_parser/parser_cache.py
@@ -111,6 +113,7 @@ pkgs/type_spec/config.py
111
113
  pkgs/type_spec/cross_output_links.py
112
114
  pkgs/type_spec/emit_io_ts.py
113
115
  pkgs/type_spec/emit_open_api.py
116
+ pkgs/type_spec/emit_open_api_examples.py
114
117
  pkgs/type_spec/emit_open_api_util.py
115
118
  pkgs/type_spec/emit_python.py
116
119
  pkgs/type_spec/emit_scss.py
@@ -143,6 +146,7 @@ uncountable/core/async_batch.py
143
146
  uncountable/core/client.py
144
147
  uncountable/core/environment.py
145
148
  uncountable/core/file_upload.py
149
+ uncountable/core/tls.py
146
150
  uncountable/core/types.py
147
151
  uncountable/core/query/__init__.py
148
152
  uncountable/core/query/builder.py
@@ -176,6 +180,8 @@ uncountable/integration/executors/script_executor.py
176
180
  uncountable/integration/http_server/__init__.py
177
181
  uncountable/integration/http_server/types.py
178
182
  uncountable/integration/queue_runner/__init__.py
183
+ uncountable/integration/queue_runner/command_handlers.py
184
+ uncountable/integration/queue_runner/job_dispatcher.py
179
185
  uncountable/integration/queue_runner/job_process.py
180
186
  uncountable/integration/queue_runner/job_runner.py
181
187
  uncountable/integration/queue_runner/job_scheduler.py
@@ -262,6 +268,8 @@ uncountable/types/listing.py
262
268
  uncountable/types/listing_t.py
263
269
  uncountable/types/ml_reports.py
264
270
  uncountable/types/ml_reports_t.py
271
+ uncountable/types/notebook_files.py
272
+ uncountable/types/notebook_files_t.py
265
273
  uncountable/types/notices.py
266
274
  uncountable/types/notices_t.py
267
275
  uncountable/types/notifications.py
@@ -56,6 +56,7 @@
56
56
  "pkgs/argument_parser/cached_parser.py",
57
57
  "pkgs/argument_parser/case_convert.py",
58
58
  "pkgs/argument_parser/field_name_resolution.py",
59
+ "pkgs/argument_parser/parse_fallback.py",
59
60
  "pkgs/argument_parser/parser_base.py",
60
61
  "pkgs/argument_parser/parser_builder.py",
61
62
  "pkgs/argument_parser/parser_cache.py",
@@ -64,6 +65,7 @@
64
65
  "pkgs/argument_parser/parser_inner.py",
65
66
  "pkgs/argument_parser/parser_options.py",
66
67
  "pkgs/argument_parser/type_predicates.py",
68
+ "pkgs/codeowners.py",
67
69
  "pkgs/filesystem_utils/__init__.py",
68
70
  "pkgs/filesystem_utils/_blob_session.py",
69
71
  "pkgs/filesystem_utils/_file_share_session.py",
@@ -110,6 +112,7 @@
110
112
  "pkgs/type_spec/cross_output_links.py",
111
113
  "pkgs/type_spec/emit_io_ts.py",
112
114
  "pkgs/type_spec/emit_open_api.py",
115
+ "pkgs/type_spec/emit_open_api_examples.py",
113
116
  "pkgs/type_spec/emit_open_api_util.py",
114
117
  "pkgs/type_spec/emit_python.py",
115
118
  "pkgs/type_spec/emit_scss.py",
@@ -143,6 +146,7 @@
143
146
  "uncountable/core/query/column.py",
144
147
  "uncountable/core/query/row.py",
145
148
  "uncountable/core/query/types.py",
149
+ "uncountable/core/tls.py",
146
150
  "uncountable/core/types.py",
147
151
  "uncountable/integration/__init__.py",
148
152
  "uncountable/integration/cli.py",
@@ -162,6 +166,7 @@
162
166
  "uncountable/integration/job_queue.py",
163
167
  "uncountable/integration/ownership_lock.py",
164
168
  "uncountable/integration/queue_runner/__init__.py",
169
+ "uncountable/integration/queue_runner/command_handlers.py",
165
170
  "uncountable/integration/queue_runner/command_server/__init__.py",
166
171
  "uncountable/integration/queue_runner/command_server/command_client.py",
167
172
  "uncountable/integration/queue_runner/command_server/command_server.py",
@@ -180,6 +185,7 @@
180
185
  "uncountable/integration/queue_runner/datastore/factory.py",
181
186
  "uncountable/integration/queue_runner/datastore/interface.py",
182
187
  "uncountable/integration/queue_runner/datastore/model.py",
188
+ "uncountable/integration/queue_runner/job_dispatcher.py",
183
189
  "uncountable/integration/queue_runner/job_process.py",
184
190
  "uncountable/integration/queue_runner/job_runner.py",
185
191
  "uncountable/integration/queue_runner/job_scheduler.py",
@@ -390,6 +396,8 @@
390
396
  "uncountable/types/listing_t.py",
391
397
  "uncountable/types/ml_reports.py",
392
398
  "uncountable/types/ml_reports_t.py",
399
+ "uncountable/types/notebook_files.py",
400
+ "uncountable/types/notebook_files_t.py",
393
401
  "uncountable/types/notices.py",
394
402
  "uncountable/types/notices_t.py",
395
403
  "uncountable/types/notifications.py",
@@ -0,0 +1,26 @@
1
+ import dataclasses
2
+ import inspect
3
+ import typing
4
+ from collections.abc import Callable, Mapping
5
+
6
+ from .parser_function_type import ParserFunction
7
+
8
+
9
+ @dataclasses.dataclass(kw_only=True, frozen=True)
10
+ class DataclassParseFallback:
11
+ legacy_key: str
12
+ legacy_parser: ParserFunction[object]
13
+ convert: Callable[[typing.Any], object]
14
+
15
+ def applies(self, *, value: Mapping[str, object], field_raw_value: object) -> bool:
16
+ return (
17
+ field_raw_value is dataclasses.MISSING or field_raw_value is None
18
+ ) and value.get(self.legacy_key) is not None
19
+
20
+ def parse(self, value: Mapping[str, object]) -> object:
21
+ return self.convert(self.legacy_parser(value[self.legacy_key]))
22
+
23
+
24
+ def parse_fallback_legacy_type(convert: Callable[..., object]) -> typing.Any:
25
+ legacy_parameter = next(iter(inspect.signature(convert).parameters))
26
+ return typing.get_type_hints(convert, include_extras=True)[legacy_parameter]
@@ -15,6 +15,7 @@ import dateutil.parser
15
15
  from pkgs.serialization import (
16
16
  MissingSentryType,
17
17
  OpaqueKey,
18
+ SerialClassDataInspector,
18
19
  UnknownBrand,
19
20
  get_serial_class_data,
20
21
  get_serial_union_data,
@@ -22,6 +23,7 @@ from pkgs.serialization import (
22
23
 
23
24
  from .case_convert import camel_to_snake_case, snake_to_camel_case
24
25
  from .field_name_resolution import resolve_serialized_field_name
26
+ from .parse_fallback import DataclassParseFallback, parse_fallback_legacy_type
25
27
  from .parser_error import (
26
28
  ParserEnumError,
27
29
  ParserError,
@@ -255,6 +257,39 @@ def _build_parser_for_type_alias(
255
257
  return build_parser_inner(alias.__value__, context, merged_alias_map)
256
258
 
257
259
 
260
+ def _build_parser_for_dict(
261
+ *,
262
+ key_type: typing.Any,
263
+ value_type: typing.Any,
264
+ context: ParserContext,
265
+ type_var_map: dict[typing.TypeVar, type],
266
+ ) -> ParserFunction[T]:
267
+ k_inner_parser = build_parser_inner(
268
+ key_type,
269
+ context,
270
+ type_var_map,
271
+ )
272
+
273
+ def key_parser(value: typing.Any) -> object:
274
+ inner = k_inner_parser(value)
275
+ if (
276
+ isinstance(inner, str)
277
+ # enum keys and OpaqueData's would also have string value types,
278
+ # but their explicit type is not a string, thus shouldn't be converted
279
+ and key_type is str
280
+ and context.options.is_api_encoding
281
+ ):
282
+ return camel_to_snake_case(value)
283
+ return inner
284
+
285
+ v_parser = build_parser_inner(value_type, context, type_var_map)
286
+
287
+ def parse_dict(value: typing.Any) -> typing.Any:
288
+ return {key_parser(k): v_parser(v) for k, v in value.items()}
289
+
290
+ return parse_dict
291
+
292
+
258
293
  def _build_parser_for_collection(
259
294
  *,
260
295
  parsed_type: type[T]
@@ -289,6 +324,32 @@ def _build_parser_for_collection(
289
324
  return parse
290
325
 
291
326
 
327
+ # first parse ints to decimal to allow scientific notation and decimals
328
+ # e.g. (1) 1e4 => 1000, (2) 3.0 => 3
329
+ def _parse_int(value: typing.Any) -> int:
330
+ if isinstance(value, str):
331
+ assert "_" not in value, "numbers with underscores not considered integers"
332
+
333
+ dec_value = Decimal(value)
334
+ int_value = int(dec_value)
335
+ assert int_value == dec_value, (
336
+ f"value ({value}) cannot be parsed to int without discarding precision"
337
+ )
338
+ return int_value
339
+
340
+
341
+ def _parse_str(value: typing.Any) -> str:
342
+ if isinstance(value, str):
343
+ return value
344
+ if isinstance(value, (Decimal, float, int)):
345
+ return str(value)
346
+ raise ParserError(
347
+ f"Invalid string value: {type(value)}: {value}",
348
+ value=value,
349
+ expected_type=str,
350
+ )
351
+
352
+
292
353
  def build_parser_inner(
293
354
  parsed_type: type[T]
294
355
  | typing.TypeVar
@@ -437,53 +498,20 @@ def build_parser_inner(
437
498
  "Dict types only support two arguments for now",
438
499
  expected_type=parsed_type,
439
500
  )
440
- k_inner_parser = build_parser_inner(
441
- args[0],
442
- context,
443
- type_var_map,
501
+ key_type, value_type = args
502
+ return _build_parser_for_dict(
503
+ key_type=key_type,
504
+ value_type=value_type,
505
+ context=context,
506
+ type_var_map=type_var_map,
444
507
  )
445
508
 
446
- def key_parser(value: typing.Any) -> object:
447
- inner = k_inner_parser(value)
448
- if (
449
- isinstance(inner, str)
450
- # enum keys and OpaqueData's would also have string value types,
451
- # but their explicit type is not a string, thus shouldn't be converted
452
- and args[0] is str
453
- and context.options.is_api_encoding
454
- ):
455
- return camel_to_snake_case(value)
456
- return inner
457
-
458
- v_parser = build_parser_inner(args[1], context, type_var_map)
459
-
460
- def parse_dict(value: typing.Any) -> typing.Any:
461
- return origin((key_parser(k), v_parser(v)) for k, v in value.items())
462
-
463
- return parse_dict
464
-
465
509
  if origin == typing.Literal:
466
510
  valid_values: set[T] = set(typing.get_args(parsed_type))
467
511
  return lambda value: _invoke_membership_parser(valid_values, value)
468
512
 
469
513
  if parsed_type is int:
470
- # first parse ints to decimal to allow scientific notation and decimals
471
- # e.g. (1) 1e4 => 1000, (2) 3.0 => 3
472
-
473
- def parse_int(value: typing.Any) -> int:
474
- if isinstance(value, str):
475
- assert "_" not in value, (
476
- "numbers with underscores not considered integers"
477
- )
478
-
479
- dec_value = Decimal(value)
480
- int_value = int(dec_value)
481
- assert int_value == dec_value, (
482
- f"value ({value}) cannot be parsed to int without discarding precision"
483
- )
484
- return int_value
485
-
486
- return parse_int # type: ignore[return-value]
514
+ return _parse_int # type: ignore[return-value]
487
515
 
488
516
  if parsed_type is datetime.datetime:
489
517
 
@@ -511,19 +539,7 @@ def build_parser_inner(
511
539
  # MyPy: It's unclear why `parsed_type in (str, OpaqueKey)` is flagged as invalid
512
540
  # Thus an or statement is used instead, which isn't flagged as invalid.
513
541
  if parsed_type is str or parsed_type is OpaqueKey:
514
-
515
- def parse_str(value: typing.Any) -> str:
516
- if isinstance(value, str):
517
- return value
518
- if isinstance(value, (Decimal, float, int)):
519
- return str(value)
520
- raise ParserError(
521
- f"Invalid string value: {type(value)}: {value}",
522
- value=value,
523
- expected_type=str,
524
- )
525
-
526
- return parse_str # type: ignore[return-value]
542
+ return _parse_str # type: ignore[return-value]
527
543
 
528
544
  if parsed_type in (float, Decimal):
529
545
  numeric_type: type[Decimal | float] = (
@@ -636,6 +652,7 @@ def _build_parser_dataclass(
636
652
  ] = []
637
653
 
638
654
  serial_class_data = get_serial_class_data(parsed_type)
655
+ dc_parse_fallbacks: dict[str, DataclassParseFallback] = {}
639
656
 
640
657
  def parse(value: typing.Any) -> typing.Any:
641
658
  # Use an exact type match to prevent base/derived class mismatches
@@ -656,10 +673,17 @@ def _build_parser_dataclass(
656
673
  serialized_field_name,
657
674
  dataclasses.MISSING,
658
675
  )
676
+ parse_fallback = dc_parse_fallbacks.get(field.name)
659
677
  if context.options.strict_property_parsing:
660
678
  all_allowed_field_names.add(serialized_field_name)
679
+ if parse_fallback is not None:
680
+ all_allowed_field_names.add(parse_fallback.legacy_key)
661
681
  field_value: typing.Any
662
- if field_raw_value == dataclasses.MISSING:
682
+ if parse_fallback is not None and parse_fallback.applies(
683
+ value=value, field_raw_value=field_raw_value
684
+ ):
685
+ field_value = parse_fallback.parse(value)
686
+ elif field_raw_value == dataclasses.MISSING:
663
687
  if serial_class_data.has_parse_require(field.name):
664
688
  raise ParserError(
665
689
  "missing-required-field", field_name=field.name
@@ -726,4 +750,42 @@ def _build_parser_dataclass(
726
750
  build_parser_inner(field_type_hint, context, type_var_map),
727
751
  ))
728
752
 
753
+ dc_parse_fallbacks.update(
754
+ _build_dataclass_parse_fallbacks(
755
+ parsed_type=parsed_type,
756
+ serial_class_data=serial_class_data,
757
+ context=context,
758
+ type_var_map=type_var_map,
759
+ )
760
+ )
761
+
729
762
  return parser_function
763
+
764
+
765
+ def _build_dataclass_parse_fallbacks(
766
+ *,
767
+ parsed_type: type[DataclassT],
768
+ serial_class_data: SerialClassDataInspector[DataclassT],
769
+ context: ParserContext,
770
+ type_var_map: dict[typing.TypeVar, type],
771
+ ) -> dict[str, DataclassParseFallback]:
772
+ field_names = {field.name for field in dataclasses.fields(parsed_type)}
773
+ dc_parse_fallbacks: dict[str, DataclassParseFallback] = {}
774
+ for field_name, parse_fallback in serial_class_data.get_parse_fallbacks().items():
775
+ assert field_name in field_names, (
776
+ f"parse fallback for {field_name!r}, which is not a field of {parsed_type}"
777
+ )
778
+ dc_parse_fallbacks[field_name] = DataclassParseFallback(
779
+ legacy_key=resolve_serialized_field_name(
780
+ serial_class_data=serial_class_data,
781
+ field_name=parse_fallback.legacy_field,
782
+ source_encoding=context.options.encoding,
783
+ ),
784
+ legacy_parser=build_parser_inner(
785
+ parse_fallback_legacy_type(parse_fallback.convert),
786
+ context,
787
+ type_var_map,
788
+ ),
789
+ convert=parse_fallback.convert,
790
+ )
791
+ return dc_parse_fallbacks
@@ -0,0 +1,157 @@
1
+ import re
2
+ from collections.abc import Iterable, Mapping
3
+ from dataclasses import dataclass
4
+ from functools import cached_property
5
+ from itertools import chain
6
+
7
+ GLOB_CHARS = "*?["
8
+ TEAM_OWNER_PREFIX = "@uncountableinc/"
9
+
10
+
11
+ def generate_team_username(team_slug: str) -> str:
12
+ return f"{TEAM_OWNER_PREFIX}{team_slug}"
13
+
14
+
15
+ def _glob_regex(pattern: str) -> re.Pattern[str]:
16
+ directory_pattern = pattern.endswith("/**")
17
+ normalized_pattern = pattern[:-3] if directory_pattern else pattern
18
+ regex_parts: list[str] = []
19
+ index = 0
20
+ while index < len(normalized_pattern):
21
+ dotfile_guard = (
22
+ "(?!\\.)" if index == 0 or normalized_pattern[index - 1] == "/" else ""
23
+ )
24
+ if normalized_pattern.startswith("**/", index):
25
+ regex_parts.append("(?:(?!\\.)[^/]+/)*")
26
+ index += 3
27
+ elif normalized_pattern.startswith("**", index):
28
+ regex_parts.append(".*")
29
+ index += 2
30
+ elif normalized_pattern[index] == "*":
31
+ regex_parts.append(f"{dotfile_guard}[^/]*")
32
+ index += 1
33
+ elif normalized_pattern[index] == "?":
34
+ regex_parts.append(f"{dotfile_guard}[^/]")
35
+ index += 1
36
+ elif normalized_pattern[index] == "[":
37
+ closing_index = normalized_pattern.find("]", index + 1)
38
+ if closing_index == -1:
39
+ regex_parts.append(r"\[")
40
+ index += 1
41
+ else:
42
+ character_class = normalized_pattern[index + 1 : closing_index]
43
+ if character_class.startswith("!"):
44
+ character_class = f"^{character_class[1:]}"
45
+ regex_parts.append(f"{dotfile_guard}[{character_class}]")
46
+ index = closing_index + 1
47
+ else:
48
+ regex_parts.append(re.escape(normalized_pattern[index]))
49
+ index += 1
50
+ suffix = "(?:/(?!\\.)[^/]+)*" if directory_pattern else ""
51
+ return re.compile(f"^{''.join(regex_parts)}{suffix}$")
52
+
53
+
54
+ @dataclass(kw_only=True)
55
+ class CodeownerRule:
56
+ owners: list[str]
57
+ glob: str
58
+
59
+ @cached_property
60
+ def normalized_globs(self) -> list[str]:
61
+ normalized_glob = self.glob.strip("/")
62
+
63
+ # /path/to/file should the file /path/to/file
64
+ globs = [normalized_glob]
65
+
66
+ # /path/to/file should also match files in subdirectory
67
+ # /path/to/file/foo
68
+ # heuristic: treat as directory if no wildcard and last path part has no dot
69
+ last_part = normalized_glob.split("/")[-1]
70
+ if (
71
+ "*" not in normalized_glob
72
+ and "?" not in normalized_glob
73
+ and "." not in last_part
74
+ ):
75
+ globs.append(f"{normalized_glob}/**")
76
+
77
+ return globs
78
+
79
+ @cached_property
80
+ def matches_everything(self) -> bool:
81
+ return "*" in self.normalized_globs
82
+
83
+ @cached_property
84
+ def _compiled_matchers(self) -> list[re.Pattern[str]]:
85
+ return [_glob_regex(pattern) for pattern in self.normalized_globs]
86
+
87
+ def check_path(self, path: str) -> bool:
88
+ if self.matches_everything:
89
+ return True
90
+ return any(pattern.match(path) for pattern in self._compiled_matchers)
91
+
92
+
93
+ def clean_line(line: str) -> str:
94
+ return line.strip().split("#", 1)[0]
95
+
96
+
97
+ def _rules_from_lines(lines: Iterable[str]) -> list[CodeownerRule]:
98
+ rules: list[CodeownerRule] = []
99
+ for raw_line in lines:
100
+ line = clean_line(raw_line)
101
+ parts = line.split()
102
+ if len(parts) > 1:
103
+ rules.append(CodeownerRule(glob=parts[0], owners=parts[1:]))
104
+ return rules
105
+
106
+
107
+ def get_codeowner_rules(codeowners_path: str) -> list[CodeownerRule]:
108
+ with open(codeowners_path, encoding="utf-8") as codeowners_file:
109
+ return _rules_from_lines(codeowners_file)
110
+
111
+
112
+ def get_codeowner_rules_from_text(text: str) -> list[CodeownerRule]:
113
+ return _rules_from_lines(text.splitlines())
114
+
115
+
116
+ def last_matching_rule(rules: list[CodeownerRule], path: str) -> CodeownerRule | None:
117
+ """The rule that owns `path` under CODEOWNERS last-match-wins precedence."""
118
+ matching_rules = [rule for rule in rules if rule.check_path(path)]
119
+ return matching_rules[-1] if matching_rules else None
120
+
121
+
122
+ def get_owners_for_file(rules: list[CodeownerRule], path: str) -> list[str]:
123
+ rule = last_matching_rule(rules, path)
124
+ return rule.owners if rule is not None else []
125
+
126
+
127
+ def evaluate_codeowner_rules(rules: list[CodeownerRule], files: list[str]) -> set[str]:
128
+ return set(chain.from_iterable(get_owners_for_file(rules, file) for file in files))
129
+
130
+
131
+ def get_owners(codeowners_path: str, files: list[str]) -> set[str]:
132
+ return evaluate_codeowner_rules(get_codeowner_rules(codeowners_path), files)
133
+
134
+
135
+ def get_codeowner_team_slugs(*, rules: list[CodeownerRule]) -> set[str]:
136
+ return {
137
+ owner.removeprefix(TEAM_OWNER_PREFIX)
138
+ for rule in rules
139
+ for owner in rule.owners
140
+ if owner.startswith(TEAM_OWNER_PREFIX)
141
+ }
142
+
143
+
144
+ def get_codeowner_team_slugs_for_files(
145
+ *,
146
+ files: list[str],
147
+ codeowner_rules: list[CodeownerRule],
148
+ all_teams_lookup: Mapping[str, object],
149
+ ) -> list[str]:
150
+ if len(files) == 0:
151
+ return []
152
+ codeowners = evaluate_codeowner_rules(codeowner_rules, files)
153
+ return [
154
+ slug
155
+ for slug in all_teams_lookup
156
+ if generate_team_username(team_slug=slug) in codeowners
157
+ ]
@@ -12,6 +12,7 @@ from .serial_alias import (
12
12
  serial_alias_annotation as serial_alias_annotation,
13
13
  )
14
14
  from .serial_class import (
15
+ ParseFallback as ParseFallback,
15
16
  SerialClassDataInspector as SerialClassDataInspector,
16
17
  get_serial_class_data as get_serial_class_data,
17
18
  get_serial_string_enum_data as get_serial_string_enum_data,
@@ -3,11 +3,18 @@ from __future__ import annotations
3
3
  import dataclasses
4
4
  from collections.abc import Callable
5
5
  from enum import StrEnum
6
- from typing import Any, TypeVar, cast
6
+ from typing import Any, Generic, TypeVar, cast
7
7
 
8
8
  from .annotation import SerialBase, SerialInspector, SerialType
9
9
 
10
10
  ClassT = TypeVar("ClassT")
11
+ LegacyT = TypeVar("LegacyT")
12
+
13
+
14
+ @dataclasses.dataclass(kw_only=True, frozen=True)
15
+ class ParseFallback(Generic[LegacyT]):
16
+ legacy_field: str
17
+ convert: Callable[[LegacyT], object]
11
18
 
12
19
 
13
20
  @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
@@ -17,6 +24,9 @@ class _SerialClassData(SerialBase):
17
24
  to_string_values: set[str] = dataclasses.field(default_factory=set)
18
25
  parse_require: set[str] = dataclasses.field(default_factory=set)
19
26
  emit_api_overrides: dict[str, str] = dataclasses.field(default_factory=dict)
27
+ parse_fallbacks: dict[str, ParseFallback[Any]] = dataclasses.field(
28
+ default_factory=dict
29
+ )
20
30
  named_type_path: str | None = None
21
31
 
22
32
 
@@ -30,6 +40,7 @@ def serial_class(
30
40
  to_string_values: set[str] | None = None,
31
41
  parse_require: set[str] | None = None,
32
42
  emit_api_overrides: dict[str, str] | None = None,
43
+ parse_fallbacks: dict[str, ParseFallback[Any]] | None = None,
33
44
  named_type_path: str | None = None,
34
45
  is_dynamic_allowed: bool = False,
35
46
  ) -> Callable[[ClassT], ClassT]:
@@ -59,6 +70,12 @@ def serial_class(
59
70
  storage encoding are unaffected. Replaces the default camelCase
60
71
  conversion. Cannot be combined with `unconverted_keys` for the
61
72
  same field; doing so raises at parse and serialize time.
73
+ @param parse_fallbacks
74
+ Maps Python field name -> a legacy field that the parser reads when
75
+ the input omits the field or sets it to null. The parser parses the
76
+ legacy value with the type of the first parameter of `convert`, and
77
+ stores the result of `convert` in the field. The legacy field is not
78
+ part of the type, so serialization never writes it.
62
79
  @param named_type_path
63
80
  The type_spec type-path to this type. This applies only to named types.
64
81
  """
@@ -70,6 +87,7 @@ def serial_class(
70
87
  to_string_values=to_string_values or set(),
71
88
  parse_require=parse_require or set(),
72
89
  emit_api_overrides=emit_api_overrides or {},
90
+ parse_fallbacks=parse_fallbacks or {},
73
91
  named_type_path=named_type_path,
74
92
  from_decorator=True,
75
93
  is_dynamic_allowed=is_dynamic_allowed,
@@ -103,6 +121,9 @@ class SerialClassDataInspector(SerialInspector[ClassT]):
103
121
  def get_emit_api_override(self, key: str) -> str | None:
104
122
  return self.current.emit_api_overrides.get(key)
105
123
 
124
+ def get_parse_fallbacks(self) -> dict[str, ParseFallback[Any]]:
125
+ return self.current.parse_fallbacks
126
+
106
127
 
107
128
  def get_merged_serial_class_data(
108
129
  type_class: SerialType[Any],
@@ -136,6 +157,10 @@ def get_merged_serial_class_data(
136
157
  **curr_base_class_data.emit_api_overrides,
137
158
  **base_class_data.emit_api_overrides,
138
159
  },
160
+ parse_fallbacks={
161
+ **curr_base_class_data.parse_fallbacks,
162
+ **base_class_data.parse_fallbacks,
163
+ },
139
164
  )
140
165
  return base_class_data
141
166