UncountablePythonSDK 0.0.190__tar.gz → 0.0.192__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 (467) hide show
  1. {uncountablepythonsdk-0.0.190/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.192}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/SOURCES.txt +7 -0
  4. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/scm_file_list.json +7 -0
  5. uncountablepythonsdk-0.0.192/pkgs/argument_parser/parse_fallback.py +26 -0
  6. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_inner.py +116 -54
  7. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/__init__.py +1 -0
  8. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_class.py +26 -1
  9. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/builder.py +61 -18
  10. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/builder_types.py +6 -0
  11. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_io_ts.py +1 -1
  12. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_open_api.py +29 -32
  13. uncountablepythonsdk-0.0.192/pkgs/type_spec/emit_open_api_examples.py +221 -0
  14. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_python.py +17 -81
  15. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_typescript_util.py +27 -8
  16. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/parts/base.ts.prepart +6 -1
  17. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/client.py +4 -1
  18. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/file_upload.py +5 -3
  19. uncountablepythonsdk-0.0.192/uncountable/core/tls.py +34 -0
  20. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/cli.py +2 -0
  21. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/job.py +47 -30
  22. uncountablepythonsdk-0.0.192/uncountable/integration/job_queue.py +14 -0
  23. uncountablepythonsdk-0.0.192/uncountable/integration/ownership_lock.py +77 -0
  24. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/command_client.py +2 -0
  25. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/command_server.py +2 -0
  26. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +1 -0
  27. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +4 -4
  28. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +2 -0
  29. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/types.py +1 -0
  30. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +14 -7
  31. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/interface.py +6 -1
  32. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/job_scheduler.py +66 -23
  33. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/worker.py +8 -0
  34. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/scheduler.py +86 -57
  35. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/telemetry.py +13 -3
  36. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_server/entrypoint.py +17 -5
  37. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/__init__.py +2 -0
  38. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/listing/fetch_listing.py +2 -1
  39. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/notebooks/get_notebook_content.py +15 -1
  40. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/client_base.py +5 -2
  41. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/entity_t.py +2 -0
  42. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/listing.py +2 -0
  43. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/listing_t.py +18 -0
  44. uncountablepythonsdk-0.0.192/uncountable/types/notebook_files.py +10 -0
  45. uncountablepythonsdk-0.0.192/uncountable/types/notebook_files_t.py +64 -0
  46. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/.github/workflows/documentation.yml +0 -0
  47. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/.github/workflows/publish.yml +0 -0
  48. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/.gitignore +0 -0
  49. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/README.md +0 -0
  50. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  51. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  52. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  53. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/.flowmarkignore +0 -0
  54. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/.gitignore +0 -0
  55. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/conf.py +0 -0
  56. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/index.md +0 -0
  57. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/add_file_to_folder.md +0 -0
  58. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/create_ingredient.md +0 -0
  59. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/create_output.md +0 -0
  60. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/index.md +0 -0
  61. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/integration_examples/upload_file.md +0 -0
  62. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/justfile +0 -0
  63. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/requirements.txt +0 -0
  64. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/android-chrome-192x192.png +0 -0
  65. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/android-chrome-512x512.png +0 -0
  66. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/apple-touch-icon.png +0 -0
  67. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/browserconfig.xml +0 -0
  68. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/favicon-16x16.png +0 -0
  69. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/favicon-32x32.png +0 -0
  70. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/manifest.json +0 -0
  71. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/mstile-150x150.png +0 -0
  72. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  73. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/docs/static/logo_blue.png +0 -0
  74. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/async_batch.py +0 -0
  75. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/async_batch_large_parse.py +0 -0
  76. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/basic_auth.py +0 -0
  77. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/create_entity.py +0 -0
  78. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/create_ingredient_sdk.py +0 -0
  79. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/download_files.py +0 -0
  80. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/edit_recipe_inputs.py +0 -0
  81. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  82. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  83. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  84. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_http_get.py +0 -0
  85. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  86. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  87. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  88. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  89. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_scale_connection.py +0 -0
  90. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  91. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  92. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/integration-server/pyproject.toml +0 -0
  93. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/invoke_uploader.py +0 -0
  94. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/oauth.py +0 -0
  95. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/set_input_pdf_attribute.py +0 -0
  96. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/set_recipe_metadata_file.py +0 -0
  97. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/set_recipe_output_file_sdk.py +0 -0
  98. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/stream_dataset_measurements.py +0 -0
  99. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/examples/upload_files.py +0 -0
  100. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/__init__.py +0 -0
  101. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/cached_parser.py +0 -0
  103. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/case_convert.py +0 -0
  104. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/field_name_resolution.py +0 -0
  105. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_base.py +0 -0
  106. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_builder.py +0 -0
  107. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_cache.py +0 -0
  108. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_error.py +0 -0
  109. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_function_type.py +0 -0
  110. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/parser_options.py +0 -0
  111. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/argument_parser/type_predicates.py +0 -0
  112. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/__init__.py +0 -0
  113. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_blob_session.py +0 -0
  114. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  115. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  116. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_local_session.py +0 -0
  117. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_s3_session.py +0 -0
  118. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
  119. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  120. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  121. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  122. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/py.typed +0 -0
  123. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/annotation.py +0 -0
  124. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/missing_sentry.py +0 -0
  125. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/opaque_key.py +0 -0
  126. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_alias.py +0 -0
  127. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_generic.py +0 -0
  128. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/serial_union.py +0 -0
  129. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/unknown.py +0 -0
  130. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/usage.py +0 -0
  131. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization/yaml.py +0 -0
  132. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  134. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  135. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/dataclasses.py +0 -0
  136. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/reuse_containers.py +0 -0
  137. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/serialization_helpers.py +0 -0
  138. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/serialize_for_api_encoding.py +0 -0
  139. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/serialization_util/source_encoding_serializer.py +0 -0
  140. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/strenum_compat/__init__.py +0 -0
  141. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/strenum_compat/strenum_compat.py +0 -0
  142. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/AGENTS.md +0 -0
  143. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/CLAUDE.md +0 -0
  144. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/__main__.py +0 -0
  146. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  148. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
  149. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  150. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/config.py +0 -0
  151. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/cross_output_links.py +0 -0
  152. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_open_api_util.py +0 -0
  153. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_scss.py +0 -0
  154. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/emit_typescript.py +0 -0
  155. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/load_types.py +0 -0
  156. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  157. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/open_api_util.py +0 -0
  158. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/parts/base.py.prepart +0 -0
  159. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/test.py +0 -0
  160. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/type_info/__main__.py +0 -0
  161. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  162. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  164. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/util.py +0 -0
  165. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/__init__.py +0 -0
  166. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/__main__.py +0 -0
  167. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  168. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  169. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pkgs/type_spec/value_spec/types.py +0 -0
  170. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/pyproject.toml +0 -0
  171. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/setup.cfg +0 -0
  172. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/__init__.py +0 -0
  174. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/async_batch.py +0 -0
  175. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/environment.py +0 -0
  176. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/__init__.py +0 -0
  177. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/builder.py +0 -0
  178. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/column.py +0 -0
  179. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/row.py +0 -0
  180. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/query/types.py +0 -0
  181. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/core/types.py +0 -0
  182. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/__init__.py +0 -0
  183. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/construct_client.py +0 -0
  184. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/cron.py +0 -0
  185. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/db/__init__.py +0 -0
  186. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/db/connect.py +0 -0
  187. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/db/session.py +0 -0
  188. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/entrypoint.py +0 -0
  189. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/__init__.py +0 -0
  190. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/executors.py +0 -0
  191. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  192. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/executors/script_executor.py +0 -0
  193. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/http_server/__init__.py +0 -0
  194. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/http_server/types.py +0 -0
  195. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/__init__.py +0 -0
  196. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  198. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  200. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
  201. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  202. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
  203. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  204. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
  205. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  206. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/job_process.py +0 -0
  207. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/job_runner.py +0 -0
  208. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  209. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/queue_runner/types.py +0 -0
  210. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/request_context.py +0 -0
  211. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/scan_profiles.py +0 -0
  212. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
  214. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  215. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/server.py +0 -0
  216. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/service.py +0 -0
  217. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/service_runner.py +0 -0
  218. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_bootstrap.py +0 -0
  219. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_entity.py +0 -0
  220. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/integration/webhook_server/gunicorn_config.py +0 -0
  221. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/py.typed +0 -0
  222. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/__init__.py +0 -0
  223. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/batch/__init__.py +0 -0
  224. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/batch/execute_batch.py +0 -0
  225. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  226. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/chemical/__init__.py +0 -0
  227. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  228. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  229. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  230. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
  231. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/__init__.py +0 -0
  232. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/add_entity_comment.py +0 -0
  233. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_entities.py +0 -0
  234. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_entity.py +0 -0
  235. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
  236. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  237. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/export_entities.py +0 -0
  238. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/get_entities_data.py +0 -0
  239. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  240. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/list_aggregate.py +0 -0
  241. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/list_entities.py +0 -0
  242. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/lock_entity.py +0 -0
  243. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/lookup_entity.py +0 -0
  244. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  245. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_barcode.py +0 -0
  246. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
  247. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  248. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/set_values.py +0 -0
  249. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  250. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/entity/unlock_entity.py +0 -0
  251. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/equipment/__init__.py +0 -0
  252. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  253. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/field_options/__init__.py +0 -0
  254. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  255. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/file_folders/__init__.py +0 -0
  256. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  257. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  258. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/files/__init__.py +0 -0
  259. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/files/download_file.py +0 -0
  260. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/id_source/__init__.py +0 -0
  261. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/id_source/list_id_source.py +0 -0
  262. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/id_source/match_id_source.py +0 -0
  263. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/input_groups/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  265. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/__init__.py +0 -0
  266. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/create_inputs.py +0 -0
  267. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/get_input_data.py +0 -0
  268. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/get_input_names.py +0 -0
  269. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  270. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  271. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_input_category.py +0 -0
  272. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  273. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  274. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/__init__.py +0 -0
  275. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  276. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/push_notification.py +0 -0
  277. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  278. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/listing/__init__.py +0 -0
  279. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/listing/export_listing.py +0 -0
  280. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/material_families/__init__.py +0 -0
  281. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  282. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/__init__.py +0 -0
  283. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/get_analyze_results.py +0 -0
  284. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/get_suggest_results.py +0 -0
  285. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/ml/submit_async_job.py +0 -0
  286. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/notebooks/__init__.py +0 -0
  287. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  288. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/output_parameters/__init__.py +0 -0
  289. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  290. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/__init__.py +0 -0
  291. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/get_output_data.py +0 -0
  292. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/get_output_names.py +0 -0
  293. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  294. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  295. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  296. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/permissions/__init__.py +0 -0
  297. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  298. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  299. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/project/__init__.py +0 -0
  300. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/project/get_projects.py +0 -0
  301. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/project/get_projects_data.py +0 -0
  302. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/__init__.py +0 -0
  303. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  304. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
  305. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  306. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  307. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  308. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/__init__.py +0 -0
  309. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  310. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  311. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  312. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  313. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  314. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  315. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  316. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/create_recipe.py +0 -0
  317. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/create_recipes.py +0 -0
  318. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  319. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  320. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  321. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_curve.py +0 -0
  322. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  323. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  324. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  325. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  326. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  327. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  328. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  329. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  330. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  331. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  332. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  333. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  334. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  335. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  336. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  337. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  338. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  339. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  340. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/runsheet/__init__.py +0 -0
  341. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  342. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  343. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/time_series/__init__.py +0 -0
  344. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/time_series/ingest_dataset_measurements.py +0 -0
  345. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/triggers/__init__.py +0 -0
  346. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/triggers/run_trigger.py +0 -0
  347. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/uploader/__init__.py +0 -0
  348. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  349. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  350. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/user/__init__.py +0 -0
  351. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/api/user/get_current_user_info.py +0 -0
  352. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_batch.py +0 -0
  353. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_batch_processor.py +0 -0
  354. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_batch_t.py +0 -0
  355. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_jobs.py +0 -0
  356. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/async_jobs_t.py +0 -0
  357. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/auth_retrieval.py +0 -0
  358. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/auth_retrieval_t.py +0 -0
  359. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/base.py +0 -0
  360. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/base_t.py +0 -0
  361. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/calculations.py +0 -0
  362. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/calculations_t.py +0 -0
  363. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/chemical_structure.py +0 -0
  364. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/chemical_structure_t.py +0 -0
  365. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/client_config.py +0 -0
  366. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/client_config_t.py +0 -0
  367. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/condition_match.py +0 -0
  368. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/condition_match_t.py +0 -0
  369. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/curves.py +0 -0
  370. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/curves_t.py +0 -0
  371. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/data.py +0 -0
  372. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/data_t.py +0 -0
  373. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/dataset_measurements.py +0 -0
  374. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/dataset_measurements_t.py +0 -0
  375. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/entity.py +0 -0
  376. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/experiment_groups.py +0 -0
  377. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/experiment_groups_t.py +0 -0
  378. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/exports.py +0 -0
  379. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/exports_t.py +0 -0
  380. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/field_values.py +0 -0
  381. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/field_values_t.py +0 -0
  382. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/fields.py +0 -0
  383. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/fields_t.py +0 -0
  384. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/generic_upload.py +0 -0
  385. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/generic_upload_t.py +0 -0
  386. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/id_source.py +0 -0
  387. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/id_source_t.py +0 -0
  388. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/identifier.py +0 -0
  389. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/identifier_t.py +0 -0
  390. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/input_attributes.py +0 -0
  391. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/input_attributes_t.py +0 -0
  392. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/inputs.py +0 -0
  393. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/inputs_t.py +0 -0
  394. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_server.py +0 -0
  395. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_server_t.py +0 -0
  396. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_session.py +0 -0
  397. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integration_session_t.py +0 -0
  398. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integrations.py +0 -0
  399. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/integrations_t.py +0 -0
  400. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/job_definition.py +0 -0
  401. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/job_definition_t.py +0 -0
  402. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/ml_reports.py +0 -0
  403. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/ml_reports_t.py +0 -0
  404. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notices.py +0 -0
  405. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notices_t.py +0 -0
  406. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notifications.py +0 -0
  407. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/notifications_t.py +0 -0
  408. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/outputs.py +0 -0
  409. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/outputs_t.py +0 -0
  410. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/overrides.py +0 -0
  411. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/overrides_t.py +0 -0
  412. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/permissions.py +0 -0
  413. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/permissions_t.py +0 -0
  414. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/phases.py +0 -0
  415. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/phases_t.py +0 -0
  416. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/post_base.py +0 -0
  417. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/post_base_t.py +0 -0
  418. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/queued_job.py +0 -0
  419. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/queued_job_t.py +0 -0
  420. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_identifiers.py +0 -0
  421. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_identifiers_t.py +0 -0
  422. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_inputs.py +0 -0
  423. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_inputs_t.py +0 -0
  424. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_links.py +0 -0
  425. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_links_t.py +0 -0
  426. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_metadata.py +0 -0
  427. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_metadata_t.py +0 -0
  428. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_output_metadata.py +0 -0
  429. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_output_metadata_t.py +0 -0
  430. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_step_relationships.py +0 -0
  431. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_step_relationships_t.py +0 -0
  432. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_tags.py +0 -0
  433. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_tags_t.py +0 -0
  434. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_step_types.py +0 -0
  435. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  436. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_steps.py +0 -0
  437. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  438. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipes.py +0 -0
  439. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/recipes_t.py +0 -0
  440. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/request_headers.py +0 -0
  441. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/request_headers_t.py +0 -0
  442. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/response.py +0 -0
  443. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/response_t.py +0 -0
  444. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet.py +0 -0
  445. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet_format.py +0 -0
  446. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet_format_t.py +0 -0
  447. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/runsheet_t.py +0 -0
  448. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/secret_retrieval.py +0 -0
  449. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/secret_retrieval_t.py +0 -0
  450. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/sockets.py +0 -0
  451. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/sockets_t.py +0 -0
  452. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/specs.py +0 -0
  453. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/specs_t.py +0 -0
  454. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/step_relationships.py +0 -0
  455. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/step_relationships_t.py +0 -0
  456. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/units.py +0 -0
  457. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/units_t.py +0 -0
  458. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/uploader.py +0 -0
  459. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/uploader_t.py +0 -0
  460. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/users.py +0 -0
  461. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/users_t.py +0 -0
  462. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook.py +0 -0
  463. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook_job.py +0 -0
  464. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook_job_t.py +0 -0
  465. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/webhook_t.py +0 -0
  466. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/uncountable/types/workflows.py +0 -0
  467. {uncountablepythonsdk-0.0.190 → uncountablepythonsdk-0.0.192}/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.190
3
+ Version: 0.0.192
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.190
3
+ Version: 0.0.192
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
@@ -62,6 +62,7 @@ pkgs/argument_parser/__init__.py
62
62
  pkgs/argument_parser/cached_parser.py
63
63
  pkgs/argument_parser/case_convert.py
64
64
  pkgs/argument_parser/field_name_resolution.py
65
+ pkgs/argument_parser/parse_fallback.py
65
66
  pkgs/argument_parser/parser_base.py
66
67
  pkgs/argument_parser/parser_builder.py
67
68
  pkgs/argument_parser/parser_cache.py
@@ -111,6 +112,7 @@ pkgs/type_spec/config.py
111
112
  pkgs/type_spec/cross_output_links.py
112
113
  pkgs/type_spec/emit_io_ts.py
113
114
  pkgs/type_spec/emit_open_api.py
115
+ pkgs/type_spec/emit_open_api_examples.py
114
116
  pkgs/type_spec/emit_open_api_util.py
115
117
  pkgs/type_spec/emit_python.py
116
118
  pkgs/type_spec/emit_scss.py
@@ -143,6 +145,7 @@ uncountable/core/async_batch.py
143
145
  uncountable/core/client.py
144
146
  uncountable/core/environment.py
145
147
  uncountable/core/file_upload.py
148
+ uncountable/core/tls.py
146
149
  uncountable/core/types.py
147
150
  uncountable/core/query/__init__.py
148
151
  uncountable/core/query/builder.py
@@ -155,6 +158,8 @@ uncountable/integration/construct_client.py
155
158
  uncountable/integration/cron.py
156
159
  uncountable/integration/entrypoint.py
157
160
  uncountable/integration/job.py
161
+ uncountable/integration/job_queue.py
162
+ uncountable/integration/ownership_lock.py
158
163
  uncountable/integration/request_context.py
159
164
  uncountable/integration/scan_profiles.py
160
165
  uncountable/integration/scheduler.py
@@ -260,6 +265,8 @@ uncountable/types/listing.py
260
265
  uncountable/types/listing_t.py
261
266
  uncountable/types/ml_reports.py
262
267
  uncountable/types/ml_reports_t.py
268
+ uncountable/types/notebook_files.py
269
+ uncountable/types/notebook_files_t.py
263
270
  uncountable/types/notices.py
264
271
  uncountable/types/notices_t.py
265
272
  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",
@@ -110,6 +111,7 @@
110
111
  "pkgs/type_spec/cross_output_links.py",
111
112
  "pkgs/type_spec/emit_io_ts.py",
112
113
  "pkgs/type_spec/emit_open_api.py",
114
+ "pkgs/type_spec/emit_open_api_examples.py",
113
115
  "pkgs/type_spec/emit_open_api_util.py",
114
116
  "pkgs/type_spec/emit_python.py",
115
117
  "pkgs/type_spec/emit_scss.py",
@@ -143,6 +145,7 @@
143
145
  "uncountable/core/query/column.py",
144
146
  "uncountable/core/query/row.py",
145
147
  "uncountable/core/query/types.py",
148
+ "uncountable/core/tls.py",
146
149
  "uncountable/core/types.py",
147
150
  "uncountable/integration/__init__.py",
148
151
  "uncountable/integration/cli.py",
@@ -159,6 +162,8 @@
159
162
  "uncountable/integration/http_server/__init__.py",
160
163
  "uncountable/integration/http_server/types.py",
161
164
  "uncountable/integration/job.py",
165
+ "uncountable/integration/job_queue.py",
166
+ "uncountable/integration/ownership_lock.py",
162
167
  "uncountable/integration/queue_runner/__init__.py",
163
168
  "uncountable/integration/queue_runner/command_server/__init__.py",
164
169
  "uncountable/integration/queue_runner/command_server/command_client.py",
@@ -388,6 +393,8 @@
388
393
  "uncountable/types/listing_t.py",
389
394
  "uncountable/types/ml_reports.py",
390
395
  "uncountable/types/ml_reports_t.py",
396
+ "uncountable/types/notebook_files.py",
397
+ "uncountable/types/notebook_files_t.py",
391
398
  "uncountable/types/notices.py",
392
399
  "uncountable/types/notices_t.py",
393
400
  "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
@@ -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
 
@@ -17,11 +17,12 @@ import regex
17
17
  from pkgs.serialization import Usage
18
18
 
19
19
  from . import util
20
- from .builder_types import CrossOutputPaths
20
+ from .builder_types import CrossOutputPaths, PythonParseFallback
21
21
  from .non_discriminated_union_exceptions import NON_DISCRIMINATED_UNION_EXCEPTIONS
22
22
  from .util import parse_type_str
23
23
 
24
24
  RawDict = dict[Any, Any]
25
+ PYTHON_PARSE_FALLBACK_KEYS = {"legacy_property", "convert"}
25
26
  EndpointKey = str
26
27
  RE_TYPESCRIPT_ENUM_MEMBER_NAME = regex.compile(
27
28
  r"^[$_\p{ID_Start}][$\p{ID_Continue}\u200c\u200d]*$"
@@ -312,6 +313,13 @@ def unwrap_literal_type(stype: SpecType) -> SpecTypeLiteralWrapper | None:
312
313
  return None
313
314
 
314
315
 
316
+ def serialized_literal_value(*, literal: SpecTypeLiteralWrapper) -> str:
317
+ if isinstance(literal.value_type, SpecTypeDefnStringEnum):
318
+ assert isinstance(literal.value, str)
319
+ return literal.value_type.values[literal.value].value
320
+ return str(literal.value)
321
+
322
+
315
323
  class SpecTypeDefn(SpecType):
316
324
  """
317
325
  Base for type definitions. Do not instantiate this directly, use a derived class.
@@ -582,7 +590,7 @@ class SpecTypeDefnObject(SpecTypeDefn):
582
590
  self.properties: dict[str, SpecProperty] | None = None
583
591
  self._kw_only: bool = True
584
592
  self.desc: str | None = None
585
- self.python_post_init: str | None = None
593
+ self.python_parse_fallbacks: dict[str, PythonParseFallback] = {}
586
594
 
587
595
  def is_value_converted(self) -> bool:
588
596
  if self.base and not self.base.is_value_converted():
@@ -615,7 +623,7 @@ class SpecTypeDefnObject(SpecTypeDefn):
615
623
  "name_case",
616
624
  "hashable",
617
625
  "kw_only",
618
- "python_post_init",
626
+ "python_parse_fallbacks",
619
627
  ],
620
628
  )
621
629
  type_base = builder.parse_type(self.namespace, data["type"], scope=self)
@@ -652,17 +660,47 @@ class SpecTypeDefnObject(SpecTypeDefn):
652
660
  self._kw_only = data.get("kw_only", True)
653
661
  self.desc = data.get("desc", None)
654
662
 
655
- python_post_init = data.get("python_post_init")
656
- if python_post_init is not None:
657
- assert isinstance(python_post_init, str)
658
- python_prepart = builder.preparts["python"].get(self.namespace.name, "")
659
- python_post_init_def_prefix = f"def {python_post_init}"
663
+ python_parse_fallbacks = data.get("python_parse_fallbacks")
664
+ if python_parse_fallbacks is not None:
665
+ self.python_parse_fallbacks = self._process_python_parse_fallbacks(
666
+ builder, python_parse_fallbacks
667
+ )
668
+
669
+ def _process_python_parse_fallbacks(
670
+ self, builder: SpecBuilder, data: object
671
+ ) -> dict[str, PythonParseFallback]:
672
+ builder.ensure(
673
+ isinstance(data, dict),
674
+ "python_parse_fallbacks: expected a mapping of property name to fallback",
675
+ )
676
+ assert isinstance(data, dict)
677
+ property_names = set(self.properties or {})
678
+ parse_fallbacks: dict[str, PythonParseFallback] = {}
679
+ for property_name, fallback_data in data.items():
680
+ builder.ensure(
681
+ property_name in property_names,
682
+ f"python_parse_fallbacks: {property_name} is not a property of this type",
683
+ )
660
684
  builder.ensure(
661
- f"{python_post_init_def_prefix}(" in python_prepart
662
- or f"{python_post_init_def_prefix}[" in python_prepart,
663
- f"python_post_init: the {self.namespace.name} python prepart file must define {python_post_init}",
685
+ isinstance(fallback_data, dict)
686
+ and set(fallback_data.keys()) == PYTHON_PARSE_FALLBACK_KEYS,
687
+ f"python_parse_fallbacks: {property_name} needs exactly the keys {sorted(PYTHON_PARSE_FALLBACK_KEYS)}",
664
688
  )
665
- self.python_post_init = python_post_init
689
+ legacy_property = fallback_data["legacy_property"]
690
+ convert = fallback_data["convert"]
691
+ builder.ensure(
692
+ isinstance(legacy_property, str) and isinstance(convert, str),
693
+ f"python_parse_fallbacks: {property_name} legacy_property and convert must be strings",
694
+ )
695
+ builder.ensure_python_prepart_function(
696
+ namespace_name=self.namespace.name,
697
+ function_name=convert,
698
+ option_name="python_parse_fallbacks",
699
+ )
700
+ parse_fallbacks[property_name] = PythonParseFallback(
701
+ legacy_property=legacy_property, convert=convert
702
+ )
703
+ return parse_fallbacks
666
704
 
667
705
  def is_kw_only(self) -> bool:
668
706
  return self._kw_only
@@ -758,12 +796,7 @@ class SpecTypeDefnUnion(SpecTypeDefn):
758
796
  prop_type = unwrap_literal_type(discriminator_type.spec_type)
759
797
  assert prop_type is not None
760
798
  assert prop_type.is_value_to_string()
761
- value_type = prop_type.value_type
762
- if isinstance(value_type, SpecTypeDefnStringEnum):
763
- assert isinstance(prop_type.value, str)
764
- discriminant = value_type.values[prop_type.value].value
765
- else:
766
- discriminant = str(prop_type.value)
799
+ discriminant = serialized_literal_value(literal=prop_type)
767
800
  assert discriminant not in self.discriminator_map, (
768
801
  f"duplicated-discriminant, {discriminant} in {sub_type}"
769
802
  )
@@ -1741,6 +1774,16 @@ class SpecBuilder:
1741
1774
  print(msg)
1742
1775
  raise BuilderError()
1743
1776
 
1777
+ def ensure_python_prepart_function(
1778
+ self, *, namespace_name: str, function_name: str, option_name: str
1779
+ ) -> None:
1780
+ python_prepart = self.preparts["python"].get(namespace_name, "")
1781
+ def_prefix = f"def {function_name}"
1782
+ self.ensure(
1783
+ f"{def_prefix}(" in python_prepart or f"{def_prefix}[" in python_prepart,
1784
+ f"{option_name}: the {namespace_name} python prepart file must define {function_name}",
1785
+ )
1786
+
1744
1787
  def prescan(self, namespace_path: str, data: RawDict) -> None:
1745
1788
  assert namespace_path not in self.namespaces
1746
1789
  namespace = SpecNamespace(namespace_path)
@@ -7,3 +7,9 @@ class CrossOutputPaths:
7
7
  typescript_types_output: str
8
8
  typescript_routes_output_by_endpoint: dict[str, str]
9
9
  typespec_files_input: list[str]
10
+
11
+
12
+ @dataclass(kw_only=True, frozen=True)
13
+ class PythonParseFallback:
14
+ legacy_property: str
15
+ convert: str
@@ -73,7 +73,7 @@ def _emit_type_io_ts_impl(ctx: EmitTypescriptContext, stype: builder.SpecType) -
73
73
  missable_lines = []
74
74
  for prop in stype.properties.values():
75
75
  ref_type = refer_to_io_ts(ctx, prop.spec_type)
76
- prop_name = ts_property_name(prop, stype.name_case)
76
+ prop_name = ts_property_name(prop)
77
77
  if prop.extant == builder.PropertyExtant.missing:
78
78
  # Unlike optional below, missing does not imply null is possible. They
79
79
  # treated distinctly.