UncountablePythonSDK 0.0.43__tar.gz → 0.0.45__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of UncountablePythonSDK might be problematic. Click here for more details.

Files changed (249) hide show
  1. {uncountablepythonsdk-0.0.43/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.45}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/filesystem_utils/_sftp_session.py +1 -1
  4. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/filesystem_utils/file_type_utils.py +1 -1
  5. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/emit_python.py +8 -0
  6. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/core/async_batch.py +14 -0
  7. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/cron.py +13 -1
  8. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/executors/generic_upload_executor.py +12 -10
  9. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/job.py +3 -6
  10. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/job_definition.py +1 -0
  11. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/job_definition_t.py +7 -0
  12. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_links_t.py +1 -1
  13. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/.github/workflows/documentation.yml +0 -0
  14. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/.github/workflows/publish.yml +0 -0
  15. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/.gitignore +0 -0
  16. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/README.md +0 -0
  17. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
  18. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  19. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  20. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  21. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/.gitignore +0 -0
  22. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/conf.py +0 -0
  23. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/index.md +0 -0
  24. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/justfile +0 -0
  25. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/quickstart.md +0 -0
  26. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/requirements.txt +0 -0
  27. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/android-chrome-192x192.png +0 -0
  28. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/android-chrome-512x512.png +0 -0
  29. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/apple-touch-icon.png +0 -0
  30. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/browserconfig.xml +0 -0
  31. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/favicon-16x16.png +0 -0
  32. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/favicon-32x32.png +0 -0
  33. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/manifest.json +0 -0
  34. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/mstile-150x150.png +0 -0
  35. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  36. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/docs/static/logo_blue.png +0 -0
  37. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/examples/async_batch.py +0 -0
  38. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/examples/create_entity.py +0 -0
  39. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/examples/edit_recipe_inputs.py +0 -0
  40. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/examples/invoke_uploader.py +0 -0
  41. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/examples/upload_files.py +0 -0
  42. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/__init__.py +0 -0
  43. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/argument_parser/__init__.py +0 -0
  44. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/argument_parser/_is_enum.py +0 -0
  45. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  46. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/argument_parser/argument_parser.py +0 -0
  47. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/argument_parser/case_convert.py +0 -0
  48. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/filesystem_utils/__init__.py +0 -0
  49. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  50. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/filesystem_utils/_local_session.py +0 -0
  51. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  52. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization/__init__.py +0 -0
  53. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization/missing_sentry.py +0 -0
  54. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization/opaque_key.py +0 -0
  55. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization/serial_class.py +0 -0
  56. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization/serial_union.py +0 -0
  57. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization/yaml.py +0 -0
  58. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization_util/__init__.py +0 -0
  59. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  60. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  61. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/serialization_util/serialization_helpers.py +0 -0
  62. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/strenum_compat/__init__.py +0 -0
  63. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/strenum_compat/strenum_compat.py +0 -0
  64. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/__init__.py +0 -0
  65. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/__main__.py +0 -0
  66. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  68. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  69. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/builder.py +0 -0
  70. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/config.py +0 -0
  71. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/emit_io_ts.py +0 -0
  72. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/emit_open_api.py +0 -0
  73. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/emit_open_api_util.py +0 -0
  74. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/emit_typescript.py +0 -0
  75. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/emit_typescript_util.py +0 -0
  76. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/load_types.py +0 -0
  77. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/open_api_util.py +0 -0
  78. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/parts/base.py.prepart +0 -0
  79. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  80. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/test.py +0 -0
  81. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/type_info/__main__.py +0 -0
  82. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  83. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/util.py +0 -0
  84. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/value_spec/__init__.py +0 -0
  85. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/value_spec/__main__.py +0 -0
  86. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  87. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  88. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pkgs/type_spec/value_spec/types.py +0 -0
  89. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/pyproject.toml +0 -0
  90. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/setup.cfg +0 -0
  91. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/__init__.py +0 -0
  92. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/core/__init__.py +0 -0
  93. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/core/client.py +0 -0
  94. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/core/file_upload.py +0 -0
  95. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/core/types.py +0 -0
  96. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/__init__.py +0 -0
  97. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/construct_client.py +0 -0
  98. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/db/__init__.py +0 -0
  99. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/db/connect.py +0 -0
  100. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/entrypoint.py +0 -0
  101. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/executors/__init__.py +0 -0
  102. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/executors/executors.py +0 -0
  103. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/executors/script_executor.py +0 -0
  104. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  105. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  106. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/integration/server.py +0 -0
  107. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/py.typed +0 -0
  108. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/__init__.py +0 -0
  109. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/__init__.py +0 -0
  110. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/batch/__init__.py +0 -0
  111. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/batch/execute_batch.py +0 -0
  112. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  113. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/chemical/__init__.py +0 -0
  114. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  115. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/create_entities.py +0 -0
  117. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/create_entity.py +0 -0
  118. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/get_entities_data.py +0 -0
  119. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/list_entities.py +0 -0
  120. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/lock_entity.py +0 -0
  121. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  122. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/set_values.py +0 -0
  123. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  124. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/entity/unlock_entity.py +0 -0
  125. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/equipment/__init__.py +0 -0
  126. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  127. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/field_options/__init__.py +0 -0
  128. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  129. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/id_source/__init__.py +0 -0
  130. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/id_source/list_id_source.py +0 -0
  131. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/id_source/match_id_source.py +0 -0
  132. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/input_groups/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  134. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/__init__.py +0 -0
  135. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/create_inputs.py +0 -0
  136. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/get_input_data.py +0 -0
  137. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/get_input_names.py +0 -0
  138. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  139. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  140. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/set_input_category.py +0 -0
  141. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  142. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  143. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/material_families/__init__.py +0 -0
  144. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  145. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/outputs/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/outputs/get_output_data.py +0 -0
  147. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/outputs/get_output_names.py +0 -0
  148. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  149. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/permissions/__init__.py +0 -0
  150. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  151. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/project/__init__.py +0 -0
  152. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/project/get_projects.py +0 -0
  153. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/project/get_projects_data.py +0 -0
  154. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipe_links/__init__.py +0 -0
  155. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  156. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  157. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  159. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/__init__.py +0 -0
  160. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  161. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  162. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  163. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  164. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/create_recipe.py +0 -0
  165. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/create_recipes.py +0 -0
  166. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  167. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  168. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/get_curve.py +0 -0
  169. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  170. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  171. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  172. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  173. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  174. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  175. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  176. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  177. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  178. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  179. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  180. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  181. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  182. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  183. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/triggers/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/triggers/run_trigger.py +0 -0
  185. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/uploader/__init__.py +0 -0
  186. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  187. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/async_batch.py +0 -0
  188. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/async_batch_processor.py +0 -0
  189. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/async_batch_t.py +0 -0
  190. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/base.py +0 -0
  191. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/base_t.py +0 -0
  192. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/calculations.py +0 -0
  193. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/calculations_t.py +0 -0
  194. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/chemical_structure.py +0 -0
  195. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/chemical_structure_t.py +0 -0
  196. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/client_base.py +0 -0
  197. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/curves.py +0 -0
  198. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/curves_t.py +0 -0
  199. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/entity.py +0 -0
  200. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/entity_t.py +0 -0
  201. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/experiment_groups.py +0 -0
  202. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/experiment_groups_t.py +0 -0
  203. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/field_values.py +0 -0
  204. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/field_values_t.py +0 -0
  205. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/fields.py +0 -0
  206. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/fields_t.py +0 -0
  207. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/generic_upload.py +0 -0
  208. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/generic_upload_t.py +0 -0
  209. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/id_source.py +0 -0
  210. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/id_source_t.py +0 -0
  211. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/identifier.py +0 -0
  212. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/identifier_t.py +0 -0
  213. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/input_attributes.py +0 -0
  214. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/input_attributes_t.py +0 -0
  215. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/inputs.py +0 -0
  216. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/inputs_t.py +0 -0
  217. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/outputs.py +0 -0
  218. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/outputs_t.py +0 -0
  219. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/permissions.py +0 -0
  220. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/permissions_t.py +0 -0
  221. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/phases.py +0 -0
  222. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/phases_t.py +0 -0
  223. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/post_base.py +0 -0
  224. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/post_base_t.py +0 -0
  225. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_identifiers.py +0 -0
  226. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_identifiers_t.py +0 -0
  227. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_inputs.py +0 -0
  228. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_inputs_t.py +0 -0
  229. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_links.py +0 -0
  230. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_metadata.py +0 -0
  231. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_metadata_t.py +0 -0
  232. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_output_metadata.py +0 -0
  233. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_output_metadata_t.py +0 -0
  234. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_tags.py +0 -0
  235. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_tags_t.py +0 -0
  236. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_workflow_steps.py +0 -0
  237. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  238. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipes.py +0 -0
  239. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/recipes_t.py +0 -0
  240. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/response.py +0 -0
  241. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/response_t.py +0 -0
  242. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/secret_retrieval.py +0 -0
  243. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/secret_retrieval_t.py +0 -0
  244. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/units.py +0 -0
  245. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/units_t.py +0 -0
  246. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/users.py +0 -0
  247. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/users_t.py +0 -0
  248. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/workflows.py +0 -0
  249. {uncountablepythonsdk-0.0.43 → uncountablepythonsdk-0.0.45}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.43
3
+ Version: 0.0.45
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.43
3
+ Version: 0.0.45
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
@@ -63,7 +63,7 @@ class SFTPSession(FileSystemSession):
63
63
  super().__init__()
64
64
  self.host: str = sftp_config.ip
65
65
  self.username: str = sftp_config.username
66
- self.key_file: str | paramiko.AgentKey | None = (
66
+ self.key_file: str | paramiko.RSAKey | None = (
67
67
  sftp_config.pem_path
68
68
  if sftp_config.pem_path is not None
69
69
  else sftp_config.pem_key
@@ -55,7 +55,7 @@ class FileSystemSFTPConfig:
55
55
  ip: str
56
56
  username: str
57
57
  pem_path: str | None
58
- pem_key: paramiko.AgentKey | None = None
58
+ pem_key: paramiko.RSAKey | None = None
59
59
  password: str | None = None
60
60
  valid_extensions: Optional[tuple[str]] = None
61
61
  recursive: bool = True
@@ -719,6 +719,14 @@ def _emit_properties(
719
719
  default = "None"
720
720
  elif prop.has_default:
721
721
  default = _emit_value(ctx, prop.spec_type, prop.default)
722
+ if (
723
+ isinstance(prop.spec_type, builder.SpecTypeInstance)
724
+ and (
725
+ prop.spec_type.defn_type.is_base_type(builder.BaseTypeName.s_list)
726
+ )
727
+ and default == "[]"
728
+ ):
729
+ default = "dataclasses.field(default_factory=list)"
722
730
  class_out.write(f"{INDENT * num_indent}{py_name}: {ref_type}")
723
731
  if default:
724
732
  class_out.write(f" = {default}")
@@ -4,9 +4,14 @@ from uncountable.types.async_batch import AsyncBatchRequest
4
4
  from uncountable.types.async_batch_processor import AsyncBatchProcessorBase
5
5
 
6
6
 
7
+ class AsyncBatchSubmissionError(BaseException):
8
+ pass
9
+
10
+
7
11
  class AsyncBatchProcessor(AsyncBatchProcessorBase):
8
12
  _client: Client
9
13
  _queue: list[AsyncBatchRequest]
14
+ _submitted_job_ids: list[base_t.ObjectId]
10
15
 
11
16
  def __init__(self, *, client: Client) -> None:
12
17
  super().__init__()
@@ -16,7 +21,16 @@ class AsyncBatchProcessor(AsyncBatchProcessorBase):
16
21
  def _enqueue(self, req: async_batch_t.AsyncBatchRequest) -> None:
17
22
  self._queue.append(req)
18
23
 
24
+ def current_queue_size(self) -> int:
25
+ return len(self._queue)
26
+
19
27
  def send(self) -> base_t.ObjectId:
28
+ if len(self._queue) == 0:
29
+ raise AsyncBatchSubmissionError("queue is empty")
20
30
  job_id = self._client.execute_batch_load_async(requests=self._queue).job_id
31
+ self._submitted_job_ids.append(job_id)
21
32
  self._queue = []
22
33
  return job_id
34
+
35
+ def get_submitted_job_ids(self) -> list[base_t.ObjectId]:
36
+ return self._submitted_job_ids
@@ -1,6 +1,7 @@
1
1
  from dataclasses import dataclass
2
2
 
3
3
  from pkgs.argument_parser import CachedParser
4
+ from uncountable.core.async_batch import AsyncBatchProcessor
4
5
  from uncountable.integration.construct_client import construct_uncountable_client
5
6
  from uncountable.integration.executors.executors import resolve_executor
6
7
  from uncountable.integration.job import CronJobArguments, JobLogger
@@ -18,9 +19,12 @@ cron_args_parser = CachedParser(CronJobArgs)
18
19
 
19
20
  def cron_job_executor(**kwargs: dict) -> None:
20
21
  args_passed = cron_args_parser.parse_storage(kwargs)
22
+ client = construct_uncountable_client(profile_meta=args_passed.profile_metadata)
23
+ batch_processor = AsyncBatchProcessor(client=client)
21
24
  args = CronJobArguments(
22
25
  job_definition=args_passed.definition,
23
- client=construct_uncountable_client(profile_meta=args_passed.profile_metadata),
26
+ client=client,
27
+ batch_processor=batch_processor,
24
28
  profile_metadata=args_passed.profile_metadata,
25
29
  logger=JobLogger(
26
30
  profile_metadata=args_passed.profile_metadata,
@@ -33,3 +37,11 @@ def cron_job_executor(**kwargs: dict) -> None:
33
37
  print(f"running job {args_passed.definition.name}")
34
38
 
35
39
  job.run(args=args)
40
+
41
+ if batch_processor.current_queue_size() != 0:
42
+ batch_processor.send()
43
+
44
+ print(f"completed job {args_passed.definition.name}")
45
+ submitted_batch_job_ids = batch_processor.get_submitted_job_ids()
46
+ if len(submitted_batch_job_ids) != 0:
47
+ print("submitted batch jobs", submitted_batch_job_ids)
@@ -2,7 +2,8 @@ import io
2
2
  import os
3
3
  import re
4
4
  from datetime import datetime, timezone
5
- from tempfile import NamedTemporaryFile
5
+
6
+ import paramiko
6
7
 
7
8
  from pkgs.filesystem_utils import (
8
9
  FileObjectData,
@@ -15,7 +16,7 @@ from pkgs.filesystem_utils import (
15
16
  from pkgs.filesystem_utils.filesystem_session import FileSystemSession
16
17
  from uncountable.core.async_batch import AsyncBatchProcessor
17
18
  from uncountable.core.file_upload import DataFileUpload, FileUpload
18
- from uncountable.integration.job import Job, JobArguments, JobLogger, JobResult
19
+ from uncountable.integration.job import Job, JobArguments, JobLogger
19
20
  from uncountable.integration.secret_retrieval import retrieve_secret
20
21
  from uncountable.types.generic_upload_t import (
21
22
  GenericRemoteDirectoryScope,
@@ -24,6 +25,7 @@ from uncountable.types.generic_upload_t import (
24
25
  from uncountable.types.job_definition_t import (
25
26
  GenericUploadDataSource,
26
27
  GenericUploadDataSourceSFTP,
28
+ JobResult,
27
29
  )
28
30
 
29
31
 
@@ -176,14 +178,14 @@ class GenericUploadJob(Job):
176
178
  pem_secret = retrieve_secret(
177
179
  self.data_source.pem_secret, profile_metadata=args.profile_metadata
178
180
  )
179
- with NamedTemporaryFile() as pem_file:
180
- pem_file.write(pem_secret.encode())
181
- sftp_config = FileSystemSFTPConfig(
182
- ip=self.data_source.host,
183
- username=self.data_source.username,
184
- pem_path=pem_file.name,
185
- )
186
- return SFTPSession(sftp_config=sftp_config)
181
+ pem_key = paramiko.RSAKey.from_private_key(io.StringIO(pem_secret))
182
+ sftp_config = FileSystemSFTPConfig(
183
+ ip=self.data_source.host,
184
+ username=self.data_source.username,
185
+ pem_path=None,
186
+ pem_key=pem_key,
187
+ )
188
+ return SFTPSession(sftp_config=sftp_config)
187
189
 
188
190
  def run(self, args: JobArguments) -> JobResult:
189
191
  client = args.client
@@ -1,8 +1,9 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from dataclasses import dataclass
3
3
 
4
+ from uncountable.core.async_batch import AsyncBatchProcessor
4
5
  from uncountable.core.client import Client
5
- from uncountable.types.job_definition_t import JobDefinition, ProfileMetadata
6
+ from uncountable.types.job_definition_t import JobDefinition, JobResult, ProfileMetadata
6
7
 
7
8
 
8
9
  class JobLogger:
@@ -25,6 +26,7 @@ class JobArgumentsBase:
25
26
  job_definition: JobDefinition
26
27
  profile_metadata: ProfileMetadata
27
28
  client: Client
29
+ batch_processor: AsyncBatchProcessor
28
30
  logger: JobLogger
29
31
 
30
32
 
@@ -37,11 +39,6 @@ class CronJobArguments(JobArgumentsBase):
37
39
  JobArguments = CronJobArguments
38
40
 
39
41
 
40
- @dataclass
41
- class JobResult:
42
- success: bool
43
-
44
-
45
42
  class Job(ABC):
46
43
  _unc_job_registered: bool = False
47
44
 
@@ -23,4 +23,5 @@ from .job_definition_t import AuthRetrievalEnv as AuthRetrievalEnv
23
23
  from .job_definition_t import AuthRetrieval as AuthRetrieval
24
24
  from .job_definition_t import ProfileDefinition as ProfileDefinition
25
25
  from .job_definition_t import ProfileMetadata as ProfileMetadata
26
+ from .job_definition_t import JobResult as JobResult
26
27
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -32,6 +32,7 @@ __all__: list[str] = [
32
32
  "JobExecutorGenericUpload",
33
33
  "JobExecutorScript",
34
34
  "JobExecutorType",
35
+ "JobResult",
35
36
  "ProfileDefinition",
36
37
  "ProfileMetadata",
37
38
  ]
@@ -200,4 +201,10 @@ class ProfileMetadata:
200
201
  name: str
201
202
  base_url: str
202
203
  auth_retrieval: AuthRetrieval
204
+
205
+
206
+ # DO NOT MODIFY -- This file is generated by type_spec
207
+ @dataclasses.dataclass(kw_only=True)
208
+ class JobResult:
209
+ success: bool
203
210
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -46,5 +46,5 @@ class RecipeLink:
46
46
  recipe_id_from: base_t.ObjectId
47
47
  recipe_id_to: base_t.ObjectId
48
48
  link_type: str
49
- name: str
49
+ name: typing.Optional[str]
50
50
  # DO NOT MODIFY -- This file is generated by type_spec