UncountablePythonSDK 0.0.29__py3-none-any.whl → 0.0.31__py3-none-any.whl

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 (90) hide show
  1. {UncountablePythonSDK-0.0.29.dist-info → UncountablePythonSDK-0.0.31.dist-info}/METADATA +4 -4
  2. {UncountablePythonSDK-0.0.29.dist-info → UncountablePythonSDK-0.0.31.dist-info}/RECORD +38 -86
  3. {UncountablePythonSDK-0.0.29.dist-info → UncountablePythonSDK-0.0.31.dist-info}/top_level.txt +0 -1
  4. docs/conf.py +9 -4
  5. docs/requirements.txt +5 -5
  6. examples/async_batch.py +2 -3
  7. examples/create_entity.py +4 -7
  8. examples/upload_files.py +1 -1
  9. pkgs/argument_parser/case_convert.py +4 -3
  10. pkgs/serialization/serial_class.py +31 -37
  11. pkgs/type_spec/emit_python.py +0 -1
  12. pkgs/type_spec/type_info/emit_type_info.py +14 -6
  13. uncountable/__init__.py +1 -2
  14. uncountable/core/__init__.py +10 -3
  15. uncountable/core/async_batch.py +1 -1
  16. uncountable/core/client.py +27 -17
  17. uncountable/core/file_upload.py +3 -5
  18. uncountable/core/types.py +1 -1
  19. uncountable/integration/construct_client.py +1 -1
  20. uncountable/integration/cron.py +4 -2
  21. uncountable/integration/db/connect.py +1 -1
  22. uncountable/integration/entrypoint.py +4 -5
  23. uncountable/integration/executors/script_executor.py +11 -5
  24. uncountable/integration/job.py +5 -8
  25. uncountable/integration/server.py +5 -5
  26. uncountable/types/__init__.py +8 -0
  27. uncountable/types/api/entity/list_entities.py +7 -0
  28. uncountable/types/api/inputs/set_intermediate_type.py +43 -0
  29. uncountable/types/api/recipes/add_recipe_to_project.py +35 -0
  30. uncountable/types/api/recipes/associate_recipe_as_input.py +1 -0
  31. uncountable/types/api/recipes/edit_recipe_inputs.py +27 -1
  32. uncountable/types/api/recipes/remove_recipe_from_project.py +35 -0
  33. uncountable/types/api/recipes/set_recipe_outputs.py +2 -0
  34. uncountable/types/async_batch_processor.py +0 -1
  35. uncountable/types/client_base.py +72 -0
  36. uncountable/types/inputs.py +1 -0
  37. uncountable/types/recipes.py +21 -0
  38. examples/recipe-import/importer.py +0 -39
  39. type_spec/external/api/batch/execute_batch.yaml +0 -56
  40. type_spec/external/api/batch/execute_batch_load_async.yaml +0 -18
  41. type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -33
  42. type_spec/external/api/entity/create_entities.yaml +0 -45
  43. type_spec/external/api/entity/create_entity.yaml +0 -51
  44. type_spec/external/api/entity/get_entities_data.yaml +0 -29
  45. type_spec/external/api/entity/list_entities.yaml +0 -52
  46. type_spec/external/api/entity/lock_entity.yaml +0 -21
  47. type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
  48. type_spec/external/api/entity/set_values.yaml +0 -18
  49. type_spec/external/api/entity/transition_entity_phase.yaml +0 -44
  50. type_spec/external/api/entity/unlock_entity.yaml +0 -18
  51. type_spec/external/api/field_options/upsert_field_options.yaml +0 -37
  52. type_spec/external/api/id_source/list_id_source.yaml +0 -35
  53. type_spec/external/api/id_source/match_id_source.yaml +0 -32
  54. type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
  55. type_spec/external/api/inputs/create_inputs.yaml +0 -48
  56. type_spec/external/api/inputs/get_input_data.yaml +0 -95
  57. type_spec/external/api/inputs/get_input_names.yaml +0 -38
  58. type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
  59. type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
  60. type_spec/external/api/inputs/set_input_category.yaml +0 -23
  61. type_spec/external/api/inputs/set_input_subcategories.yaml +0 -23
  62. type_spec/external/api/material_families/update_entity_material_families.yaml +0 -33
  63. type_spec/external/api/outputs/get_output_data.yaml +0 -92
  64. type_spec/external/api/outputs/get_output_names.yaml +0 -35
  65. type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
  66. type_spec/external/api/permissions/set_core_permissions.yaml +0 -69
  67. type_spec/external/api/project/get_projects.yaml +0 -42
  68. type_spec/external/api/project/get_projects_data.yaml +0 -50
  69. type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -25
  70. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
  71. type_spec/external/api/recipes/archive_recipes.yaml +0 -20
  72. type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -19
  73. type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -19
  74. type_spec/external/api/recipes/create_recipe.yaml +0 -42
  75. type_spec/external/api/recipes/create_recipes.yaml +0 -47
  76. type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -16
  77. type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -85
  78. type_spec/external/api/recipes/get_curve.yaml +0 -21
  79. type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
  80. type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
  81. type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
  82. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
  83. type_spec/external/api/recipes/get_recipes_data.yaml +0 -244
  84. type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -42
  85. type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -20
  86. type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
  87. type_spec/external/api/recipes/set_recipe_tags.yaml +0 -62
  88. type_spec/external/api/recipes/unarchive_recipes.yaml +0 -17
  89. type_spec/external/api/triggers/run_trigger.yaml +0 -18
  90. {UncountablePythonSDK-0.0.29.dist-info → UncountablePythonSDK-0.0.31.dist-info}/WHEEL +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.29
3
+ Version: 0.0.31
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
@@ -27,9 +27,9 @@ Requires-Dist: PyYAML ==6.*
27
27
  Provides-Extra: test
28
28
  Requires-Dist: mypy ==1.* ; extra == 'test'
29
29
  Requires-Dist: ruff ==0.* ; extra == 'test'
30
- Requires-Dist: pytest ==7.* ; extra == 'test'
31
- Requires-Dist: coverage[toml] ==6.* ; extra == 'test'
32
- Requires-Dist: pytest-cov ==4.* ; extra == 'test'
30
+ Requires-Dist: pytest ==8.* ; extra == 'test'
31
+ Requires-Dist: coverage[toml] ==7.* ; extra == 'test'
32
+ Requires-Dist: pytest-cov ==5.* ; extra == 'test'
33
33
  Requires-Dist: pytest-xdist ==3.* ; extra == 'test'
34
34
 
35
35
  # Uncountable Python SDK
@@ -1,9 +1,9 @@
1
1
  docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
2
- docs/conf.py,sha256=_NTPzzM_NS92AWqpYdlNKQlTc-IEolfYYKLLHm6lFAk,1700
2
+ docs/conf.py,sha256=YF5J-9g_Wg8wXmyHsGaE8xYlDEzqocNl3UWUmP0CwBg,1702
3
3
  docs/index.md,sha256=eEdirX_Ds6ICTRtIS5iT4irCquHcQyKN7E4M5QP9T8A,257
4
4
  docs/justfile,sha256=cvNcpb-ByPOF2aCrFlg3DDZBoYMx5W8xGdr13m9HcnI,215
5
5
  docs/quickstart.md,sha256=3GuJ0MB1O5kjlsrgAmdSkDq0rYqATrYy-tzEHDy8H-c,422
6
- docs/requirements.txt,sha256=jNFoVqyOwGZ4GToYiyoVeFFIzJTmXMLYbv5h2FU5Sr4,139
6
+ docs/requirements.txt,sha256=NnB0-jOOufUvD3q1csl7WvQ8oHOD-5emqp_SWUXExI0,138
7
7
  docs/static/logo_blue.png,sha256=SyYpMTVhhBbhF5Wl8lWaVwz-_p1MIR6dW6bVhufQRME,46708
8
8
  docs/static/favicons/android-chrome-192x192.png,sha256=XoF-AhD55JlSBDGsEPJKfT_VeXT-awhwKyZnxLhrwvk,1369
9
9
  docs/static/favicons/android-chrome-512x512.png,sha256=1S4xwY9YtJQ5ifFsZ-DOzssoyBYs0t9uwdOUmYx0Xso,3888
@@ -14,20 +14,19 @@ docs/static/favicons/favicon-32x32.png,sha256=U4UU652zGnSeU3P9kUqxPeEnVf6zhtdNdN
14
14
  docs/static/favicons/manifest.json,sha256=6q_3nZkcg_x0xut4eE-xpdeMY1TydwiZIcbXlLAq9X8,437
15
15
  docs/static/favicons/mstile-150x150.png,sha256=eAK4QdEofhdLtfmjuPTpnX3MJqYnvGXsHYUjlcQekyY,1035
16
16
  docs/static/favicons/safari-pinned-tab.svg,sha256=S84fRnz0ZxLnQrKtmmFZytiRyu1xLtMR_RVy5jmwU7k,1926
17
- examples/async_batch.py,sha256=wpf_3P547375vTIO4pKv5vw6WCkUnzqvw_S3idfhjvM,1122
18
- examples/create_entity.py,sha256=j5dUB46_awRIsyiExE4sy4NqA9-wobAV41InQiLDgu4,601
19
- examples/upload_files.py,sha256=ZsMChgOioraVHv207YREpivAOf4dq3IxGIBoROoDX_4,482
20
- examples/recipe-import/importer.py,sha256=baD71xuNibxDTe3bGHsMEIZEf9Xtb-IumBNpCEV0RZU,1134
17
+ examples/async_batch.py,sha256=CffQ8O9drJ-Mdd6S5DnMIOBsHv5aVkTZrD3l3xBnB4s,1094
18
+ examples/create_entity.py,sha256=noZdtJ5f9Wfiob3zUH-8bDVbrCPJnFtXFk_W9pSjvUA,664
19
+ examples/upload_files.py,sha256=tUfKFqiqwnw08OL5Y8_e4j5pSRhp94cFex8XTuVa_ig,487
21
20
  pkgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
21
  pkgs/argument_parser/__init__.py,sha256=CsQ6QoPKSLLRVl-z6URAmPkiUL9ZPZoV4rJHgy_-RjA,385
23
22
  pkgs/argument_parser/_is_enum.py,sha256=Gw6jJa8nBwYGqXwwCZbSnWL8Rvr5alkg5lSVAqXtOZM,257
24
23
  pkgs/argument_parser/_is_namedtuple.py,sha256=Rjc1bKanIPPogl3qG5JPBxglG1TqWYOo1nxxhBASQWY,265
25
24
  pkgs/argument_parser/argument_parser.py,sha256=eqw4ge9Sh9z35Vztq_dUQUvVMluo7YgnmMjHNMhrhVw,15937
26
- pkgs/argument_parser/case_convert.py,sha256=J9wahIE-P95LvTqn4M4gDUx_RXeiW2SRo9i_1bz1E6A,558
25
+ pkgs/argument_parser/case_convert.py,sha256=NuJLJUJRbyVb6_Slen4uqaStEHbcOS1d-hBBfDrrw-c,605
27
26
  pkgs/serialization/__init__.py,sha256=quvXMSl1szddLTr4Yxo9KA9oBMoeX7qGpFkkAplFBbY,603
28
27
  pkgs/serialization/missing_sentry.py,sha256=aM_9KxbCk9dVvXvcOKgkIQBqFWvLhv8QlIUCiuFEXMo,806
29
28
  pkgs/serialization/opaque_key.py,sha256=FIfXEE0DA1U8R_taFbQ1RCoTSgehrPjP06-qvo-GeNQ,177
30
- pkgs/serialization/serial_class.py,sha256=19UIvz2XPT4k1uXtScyjVfdhfvpehZOcjV6Z27p_VFQ,5193
29
+ pkgs/serialization/serial_class.py,sha256=r0hrQdIbJA_X0W0_jKEVrxi_JzVRT9qHCjsUgGu3cCI,5290
31
30
  pkgs/serialization_util/__init__.py,sha256=4vX5j1pvd1NkznSVqwWqunVyOvQtLCgVuwRjVwDk7qg,447
32
31
  pkgs/serialization_util/_get_type_for_serialization.py,sha256=dW5_W9MFd6wgWfW5qlWork-GBb-QFLtiOZkjk2Zqn2M,1177
33
32
  pkgs/serialization_util/serialization_helpers.py,sha256=koyGyvdlEmGFK1BUiHtM2gTzAyHygbe1JpKLdZ-Aw84,5124
@@ -40,7 +39,7 @@ pkgs/type_spec/config.py,sha256=INfEiDcUsZFUKasHprsE6i33siPB0RnfmTKOsWcGnQ8,5043
40
39
  pkgs/type_spec/emit_io_ts.py,sha256=Ghd8XYqyNYldHQDepwa9GLfHXcoi48ztBw84K28ETic,5707
41
40
  pkgs/type_spec/emit_open_api.py,sha256=rAxfPVsqJU7ass76dPhImgPao6AW6xyz-rMaQDhSp1I,23822
42
41
  pkgs/type_spec/emit_open_api_util.py,sha256=XAA6zH59aZWLVl0BvKAICXXl4sdBqx01QAtv5oB0bMI,2266
43
- pkgs/type_spec/emit_python.py,sha256=1Ei2PaqRs1qeQj5LWYfcRUHyzEoMI3DhDzomXmhX_-A,44139
42
+ pkgs/type_spec/emit_python.py,sha256=vuVgyts9zfEgRMTGsI6LKejMnq9_lxLxawjxoz4p7DE,44098
44
43
  pkgs/type_spec/emit_typescript.py,sha256=4hpCJwiDf-v8LJaNFVfFtf8zvtG73YNPFwwa_5NuffI,17729
45
44
  pkgs/type_spec/emit_typescript_util.py,sha256=93FzJnpYse4PKFzgdw4DGV4zFTi5tF4WR-CIi7cW498,873
46
45
  pkgs/type_spec/load_types.py,sha256=xEHwdB_miR3vNs161Oy1luafE0VC-yk9-utAyCJmbEo,3629
@@ -53,88 +52,37 @@ pkgs/type_spec/actions_registry/emit_typescript.py,sha256=ben0W7qwaVCzLO-t3NEJPP
53
52
  pkgs/type_spec/parts/base.py.prepart,sha256=wGNoDyQnLolHRZGRwHQX5TrPfKnu558NXCocYvqyroc,2174
54
53
  pkgs/type_spec/parts/base.ts.prepart,sha256=2FJJvpg2olCcavxj0nbYWdwKl6KeScour2JjSvN42l8,1001
55
54
  pkgs/type_spec/type_info/__main__.py,sha256=pmVjVqXyVh8vKTNCTFgz80Sg74C5BKToP3E6GS-X_So,857
56
- pkgs/type_spec/type_info/emit_type_info.py,sha256=nk1pKa0drccGvzPKSpub3GVctsbu70reh3_yhhJzKAo,12052
55
+ pkgs/type_spec/type_info/emit_type_info.py,sha256=S3K5_VHbhwR0A7ZiJ5Qed2zjkici-J2ZdVKPDpc2OrI,12362
57
56
  pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
58
57
  pkgs/type_spec/value_spec/__main__.py,sha256=-9L5pXYx02plnTetqNknaUZPieLRtzbyWdZDT6B-cWA,8294
59
58
  pkgs/type_spec/value_spec/convert_type.py,sha256=SAYyEV6orQJJbkXSE4hhtOQJ2vKUXJCKPeYPrB8G9oA,2272
60
59
  pkgs/type_spec/value_spec/emit_python.py,sha256=rjg6LIGYdaagrZ19XpDfW_Z7LPNwCMDceBje5dsMFbw,6959
61
60
  pkgs/type_spec/value_spec/types.py,sha256=a2zxbbCRWepY1l8OtjeCDKgBKFPFHVgV99oP6pTtaro,441
62
- type_spec/external/api/batch/execute_batch.yaml,sha256=gpdSev3sLEC_cMVSZdj-9bc_XDFDqdPdOII9Ojme2N8,1170
63
- type_spec/external/api/batch/execute_batch_load_async.yaml,sha256=gcn51NWLiSvlytz8k3_pDOVJLCGfdivKJPG4I9Q8CZc,435
64
- type_spec/external/api/chemical/convert_chemical_formats.yaml,sha256=EidTxMCRs-ko5yMFDptJPyAEWYZVruP41OG3cwyBLQQ,1069
65
- type_spec/external/api/entity/create_entities.yaml,sha256=RKjmb_iY4dVHf3aQUCU-OrlbTLLsCkULQ9uEfa8BMFY,1506
66
- type_spec/external/api/entity/create_entity.yaml,sha256=Orz-3RZsNy5cWXlA3BKVQDYGnGGXlCXOtsOxDSm_nRY,1701
67
- type_spec/external/api/entity/get_entities_data.yaml,sha256=3XujG7bOpuBQlfFrYtG3L4fBk7LsmdSekmP9iU0zjF0,796
68
- type_spec/external/api/entity/list_entities.yaml,sha256=l3QtxIRyDzXrSKsa1PNY7fHYRG7yx0Lf_bFEQMQ67n8,1868
69
- type_spec/external/api/entity/lock_entity.yaml,sha256=jjTlsjbOgiW3qpN7HBn_1OsMKFxAQiE-5mlEjgD2Xic,598
70
- type_spec/external/api/entity/resolve_entity_ids.yaml,sha256=Zf3OhAohwLJO7wWj0e-sK5lhIsXlD8A5Bu3OGjY4-tA,732
71
- type_spec/external/api/entity/set_values.yaml,sha256=_UDxSk09Ke0KDABt8ldOScC2CLrbAhBPArZvno5iD4I,422
72
- type_spec/external/api/entity/transition_entity_phase.yaml,sha256=2JyaP-5Kn75mnBMy58plJsbQnVH2ildcMWcy6nRD6yY,1013
73
- type_spec/external/api/entity/unlock_entity.yaml,sha256=EFmmrhbJSKGqyLdEA0fw0Dk9WaHN8TbEcfAh6eYE0ps,475
74
- type_spec/external/api/field_options/upsert_field_options.yaml,sha256=21aW5jnNwJUX_dMwNpwbij1bRN72PrbOesDi6Xqv22U,1246
75
- type_spec/external/api/id_source/list_id_source.yaml,sha256=V0KfzWGBwBkErKCMGhI8w7ZVbw98zaPuUWQxTfpsONU,1090
76
- type_spec/external/api/id_source/match_id_source.yaml,sha256=j4jDdmElYyY_ZLJQrx66ddy4JYV_9GMWQNi0G8SwY08,837
77
- type_spec/external/api/input_groups/get_input_group_names.yaml,sha256=LYgnm2Or7ZWCzDGjl53Y1PcHvej8G7Mpp5H96Z4UZCg,913
78
- type_spec/external/api/inputs/create_inputs.yaml,sha256=pX8jatpve4iJxK7kYw7SBlQXlVHJVfLDCOrDdpn8Gsw,1561
79
- type_spec/external/api/inputs/get_input_data.yaml,sha256=sQdju--rKG0-kKgT9MHYbX5JMPmVIFXPHVKchyrykp8,3895
80
- type_spec/external/api/inputs/get_input_names.yaml,sha256=b_kLmhe-H06J73cUrVg-O2m5K6Uj9WjC6XIUUdiObpU,1592
81
- type_spec/external/api/inputs/get_inputs_data.yaml,sha256=9wKwnOXC_KokThWnz5Me5RzIcGlxffwcKJtgFow-kvU,2368
82
- type_spec/external/api/inputs/set_input_attribute_values.yaml,sha256=RpOtVIWBlOp_Nd5Xp67IaQmCzGnLkNwFKQDi4WD8oX4,1021
83
- type_spec/external/api/inputs/set_input_category.yaml,sha256=2zcDYw_WzBfzFNkhfDDer45MgRxGnzOBLFicDWrvN80,676
84
- type_spec/external/api/inputs/set_input_subcategories.yaml,sha256=xbydzqVHIktslueosU3dJxdAu4a8uc5jQc5Cccdw7i8,682
85
- type_spec/external/api/material_families/update_entity_material_families.yaml,sha256=2WjU7XycTHEaZ2YA_FhwzndVN-PqWsyPCJhBE1WRKvQ,1231
86
- type_spec/external/api/outputs/get_output_data.yaml,sha256=D-xr8u1SfYUGtXG1fcAi8V44d5rVg48LtOK5BhCDXr4,3556
87
- type_spec/external/api/outputs/get_output_names.yaml,sha256=p-3ubOjEFNjV746zpAkXurCu0yVUvonDssJKk48ueVM,1404
88
- type_spec/external/api/outputs/resolve_output_conditions.yaml,sha256=lGrG6XPGiQtHx24GccPcO18xxAoMynTSC_2WwxCjFrc,1640
89
- type_spec/external/api/permissions/set_core_permissions.yaml,sha256=SDM_3FE-ur00dv6Na9HlaJBIvSPgnfqRieGDKnBR1UY,1632
90
- type_spec/external/api/project/get_projects.yaml,sha256=pQXGGPHenmFWYUuzEmZ-ORf0_d6lpQkTrXXMRrEqvDI,1676
91
- type_spec/external/api/project/get_projects_data.yaml,sha256=9Ns-KOP1qVhBaqMRCsEG6960V5mJW16TD0qRsTHznjQ,2051
92
- type_spec/external/api/recipe_links/create_recipe_link.yaml,sha256=7b2p7Ei4LnQXqccHsOVAfYyNK4WXm0n1IqxPG-qQDh0,941
93
- type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml,sha256=3C7lCYWI1yX57lhcxU7kPPx-K6DI18CXGxQredSf-lA,1829
94
- type_spec/external/api/recipes/archive_recipes.yaml,sha256=Oe-NIFwERiG1DwgzsWj3ouKVdnRDTelrgqE5b9Bt_vQ,515
95
- type_spec/external/api/recipes/associate_recipe_as_input.yaml,sha256=7t0jto37RyLjl63-GK3mLC2uFiX1gd8vPwTwnobxkeI,654
96
- type_spec/external/api/recipes/associate_recipe_as_lot.yaml,sha256=8wzeJg5njt4qG2kavA6Jpo9PkWE6rIbuA4IPNdhcwEg,605
97
- type_spec/external/api/recipes/create_recipe.yaml,sha256=L9McbFT0fxQc8G1oepWVMbPBc3w_9HSjfhmorIWQDNc,1442
98
- type_spec/external/api/recipes/create_recipes.yaml,sha256=eXMlXRpB5TFt1mUTECBa4aAIG3KrxYT2mJ5vxmZ9Q3A,1503
99
- type_spec/external/api/recipes/disassociate_recipe_as_input.yaml,sha256=qTKQCNBNwLnbr22DQVLA6b80BdBhwnDbX1c4KoCKUm8,477
100
- type_spec/external/api/recipes/edit_recipe_inputs.yaml,sha256=ljewBw77ucvl_m_KWmSJp-nVQGvVG6cb7xVOgPIlueU,2573
101
- type_spec/external/api/recipes/get_curve.yaml,sha256=zQpPwOYqojY-YwmTjbqoGtUxpYm3vne2sYpglWbPnpw,779
102
- type_spec/external/api/recipes/get_recipe_calculations.yaml,sha256=ZE7PzfWrjS7TiO4q7iyCwEj5In8GwO6fFIYGqUlTEXo,1240
103
- type_spec/external/api/recipes/get_recipe_links.yaml,sha256=Vwm0OVWl3VvDaI7chY_oZQqD8xZ1u09iFWKkZKn1ITo,766
104
- type_spec/external/api/recipes/get_recipe_names.yaml,sha256=4tqcVj-xLeEu0lhdm8NpLYmAvfkmq08GZ0Mr59I5nLI,896
105
- type_spec/external/api/recipes/get_recipe_output_metadata.yaml,sha256=YImW94JXVKR6Wz_7R7sRbhD9Ul51Ba-j-x9vJB__AAU,1216
106
- type_spec/external/api/recipes/get_recipes_data.yaml,sha256=F1CkFOtQroweYvURkw4wJx0X3UvSl3mmz87r-MIxfto,11632
107
- type_spec/external/api/recipes/set_recipe_inputs.yaml,sha256=MvnHuzI9JKfkYZb-pC4jeE7FRpGeacJKXd5_GImsDiY,1747
108
- type_spec/external/api/recipes/set_recipe_metadata.yaml,sha256=5N9AIY9x3pZhDXyzpM__e7pyKNTI2RS7OeBmwmj5nEs,585
109
- type_spec/external/api/recipes/set_recipe_outputs.yaml,sha256=Oe8XGYXbPNmrbEDXk3qucfS1L3P9TnXI5cxaNAl6x5A,1875
110
- type_spec/external/api/recipes/set_recipe_tags.yaml,sha256=IrdkbryxZjNy8n4aMNLRTYbm27cRDfXxItk_kFgDaMM,1399
111
- type_spec/external/api/recipes/unarchive_recipes.yaml,sha256=m9WwmTHtIMVQOmX7CpbKbnuPsnTVII-4Jr9JffxMUXg,393
112
- type_spec/external/api/triggers/run_trigger.yaml,sha256=c8xDV3bQRjcRRDG4Y7kdQmMMu1fj3ae5eUi-Sdbsi54,405
113
- uncountable/__init__.py,sha256=281cC2hs8pbrD0jVKMol-tbWSh7Zcsc8oRT42dKteyE,102
61
+ uncountable/__init__.py,sha256=8l8XWNCKsu7TG94c-xa2KHpDegvxDC2FyQISdWC763Y,89
114
62
  uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- uncountable/core/__init__.py,sha256=J0CeeztqyJe7klvHM-8fwSivN1sud6xZThOdaThnQrU,314
116
- uncountable/core/async_batch.py,sha256=0cRmCr6Z9sNxZyfY9Dl8wlCA4anISVZuHGgBegHhUbc,749
117
- uncountable/core/client.py,sha256=J_J9zEfSpWRx4RBSl2gIDqtUpC7ca1hpEvbHVfe7_jQ,9045
118
- uncountable/core/file_upload.py,sha256=YWOay69i_-sNGBNnwzKb3bY3OMaV4lRsdVZZK-ScXVc,2829
119
- uncountable/core/types.py,sha256=zM_FqVT41qqZAhXxKSK_kQccArfw6B_p2qMYBRKJHqE,332
63
+ uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,341
64
+ uncountable/core/async_batch.py,sha256=Zo02TICZ7AK81Qa02NQ8fp8uaijQph1FEta28K3cKb0,749
65
+ uncountable/core/client.py,sha256=79pqKjYuoTzKnPWLMST1jS9Gcn4nxtOzWC-VaM67QgY,9401
66
+ uncountable/core/file_upload.py,sha256=t4cutIFB5rNN2qVCx3H0HotSjCSJSxis2_QBarDuXyc,2833
67
+ uncountable/core/types.py,sha256=s2CjqYJpsmbC7xMwxxT7kJ_V9bwokrjjWVVjpMcQpKI,333
120
68
  uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
- uncountable/integration/construct_client.py,sha256=r6M5pnIO0fKcjf5d_AREPtWZ6AkWgcjkdu_jHQEYlT8,1084
122
- uncountable/integration/cron.py,sha256=TIPqMPMSMtMJTu4aXwLf6QY-OLrpmyITLDp48UIr4Ok,919
123
- uncountable/integration/entrypoint.py,sha256=sPtUeKJEivf0iqY-H4LHWhyeUHMZK_U4CrDj1Kw8Ld0,1395
124
- uncountable/integration/job.py,sha256=5QuCjeze9vtEirntP9P9hDD3LVrBn5pApDWh2IZeEiY,817
125
- uncountable/integration/server.py,sha256=DSYflR8tIo20Kixt4AmQI6nOP_BHeTGUiq7iFKaf31s,3342
69
+ uncountable/integration/construct_client.py,sha256=N3K-wck7teqvHTrOh0N2bGF3u6kyuwQvgo7gsKLihQ0,1077
70
+ uncountable/integration/cron.py,sha256=DNnMkeLYi70U-3wrcDAX382FgEGq16KL6xy-6OBv5Us,938
71
+ uncountable/integration/entrypoint.py,sha256=MNXl9xv0N03V3_0vplckWlUio2CDFJ0jsjM8uvY1dTE,1404
72
+ uncountable/integration/job.py,sha256=u4Vhm9l5KUvex7I7R_ysBHjmm1BBB1KvnjRvZvFkOig,807
73
+ uncountable/integration/server.py,sha256=5Wh80VyfgUUHA5NiFGn9LjS4KJ9zJz3QbNTLLKhFAso,3342
126
74
  uncountable/integration/types.py,sha256=n9idu2_qHOA5CQdE6NK8HS6aZ8ugTZKTfTTnm4sy8tI,2066
127
75
  uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
- uncountable/integration/db/connect.py,sha256=iI9e8a2hfbFP-dvH0MGLsrG-RpM0dHKCL-oCLkah9hs,181
76
+ uncountable/integration/db/connect.py,sha256=YtQHJ1DBGPhxKFRCfiXqohOYUceKSxMVOJ88aPI48Ug,181
129
77
  uncountable/integration/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
- uncountable/integration/executors/script_executor.py,sha256=6oMPAFe0PUdqt76e8jMi4vXszGVsVHLULob7Qbl3o38,816
131
- uncountable/types/__init__.py,sha256=ziCs6fh_WzMhHPGwFi7xCdFQoNT6PBzZyfrMANEm8g0,6816
78
+ uncountable/integration/executors/script_executor.py,sha256=hM8E-aU8zyM6ZcBtqAqInKZ_BF93RLqEA0dU7y5FhWQ,841
79
+ uncountable/types/__init__.py,sha256=0UllKeQhqDy1AD5UH6tMPx0QqIuW7KFlVe1SnJkD3ro,7197
132
80
  uncountable/types/async_batch.py,sha256=aWiul1fK3-cXaCESUUJ_92FF-NuuwxSjn9n3jC9vY5o,1618
133
- uncountable/types/async_batch_processor.py,sha256=jwN5BOcBSejce0RqNOYWW3sZIv5Oj2Aip1dbzAgGh6A,6117
81
+ uncountable/types/async_batch_processor.py,sha256=eNXKPOh-sCiarPvreLDEu4XbieWLe_5KXmiY984eZ5I,6083
134
82
  uncountable/types/base.py,sha256=w3BRf8SAvYPlKrcJtJcQ_WhCU3A9zy0VuRTRWRFKVUA,2709
135
83
  uncountable/types/calculations.py,sha256=16J-KKMp-I8ZQUkYNmKCHfAn6DGb99cFinALcDIdGHY,562
136
84
  uncountable/types/chemical_structure.py,sha256=zQKl53DGtQQONIUHFXuwjWLQaG7FPZY7x6SBSOzkGV0,758
137
- uncountable/types/client_base.py,sha256=RRf9_k0U4PBYrdKGu0YEZa_cWxImwyg6fayqj6yISPY,55671
85
+ uncountable/types/client_base.py,sha256=UpIXr8JvrOuA9TNHeU1paqTNiE4KHsSpzA6RCAS7bO8,58694
138
86
  uncountable/types/curves.py,sha256=qYyRntMmFNonEwTrGhquMLbgMqjyP1moQflNTP0FMec,1308
139
87
  uncountable/types/entity.py,sha256=NjMZrqBwQ7sZe_oUuJqy9IEG7dWZmFMkQQXJ0_odcnA,11637
140
88
  uncountable/types/experiment_groups.py,sha256=ZBEk06F4n98Jz3oEA09WaDmw5rqPs7iVAm_Ysr4gc_o,599
@@ -143,7 +91,7 @@ uncountable/types/fields.py,sha256=eGtZ6axTYGFxLmPAyri2LwlcR4SZ2sX2c6QDX0ybKz0,5
143
91
  uncountable/types/id_source.py,sha256=Y3suURq3L1SahZ2oHPD986SU0l3Ik-ZzH38aQKgc1Fg,1341
144
92
  uncountable/types/identifier.py,sha256=94-O3H_qNrA48tf3srwPwdu8HURkLl7_-88kUnwElZg,1455
145
93
  uncountable/types/input_attributes.py,sha256=u-JABoZ-Ij1Ynq5g6MxOgRdQeYbM7OnGP2q_N7KuVdw,826
146
- uncountable/types/inputs.py,sha256=q7fNGaSKIk3R6uXCEhSQpiHvXu82YcK3oZHDI7bxE88,1597
94
+ uncountable/types/inputs.py,sha256=KoJGGxvwqQy8Eiw5X6PVUsEHQABYMtCj40PwtECDeIc,1617
147
95
  uncountable/types/outputs.py,sha256=hSUlu41sisYKIZpPrj1G1DRfKm6hsKNcd1eNKFYb-4w,671
148
96
  uncountable/types/permissions.py,sha256=VVLnukQ4RbApFdE0sgWDZxnrRCV6gOtXxq6yM5GxQlk,1620
149
97
  uncountable/types/phases.py,sha256=eaqwQlSRC2Ug7YFL0gqLbg3wDDHeRvBOhcABG7khW8c,550
@@ -155,6 +103,7 @@ uncountable/types/recipe_metadata.py,sha256=cebGg_lJzqZzGnKnDgmuQFrw4Xhoz6HEiGM6
155
103
  uncountable/types/recipe_output_metadata.py,sha256=XJA8R1r4NTzyR_DhMkmH4ZtYD-vqpvBMji9Be8OcFmo,613
156
104
  uncountable/types/recipe_tags.py,sha256=lYpksHAxXCcIjZKR7JoZOTH2cBSovwxZaHwjZy_yqiQ,581
157
105
  uncountable/types/recipe_workflow_steps.py,sha256=LmyFwWWwJv30vuaQ4qtd0hzDdeJaIxHQZqwRb1Wi_6A,2626
106
+ uncountable/types/recipes.py,sha256=tY8MNmQiky94eIFOxSLyflXVno3pfDygxJ6WPqJlyDU,549
158
107
  uncountable/types/response.py,sha256=ZI0CG7ZxBM2k5_W-6mNMU3UlB0p1i-0nrwOvsMaS-vU,620
159
108
  uncountable/types/units.py,sha256=_kZ7KkXIbRiY2fOdkTsbJBpWRah5TCC2WWiG05e-1DA,565
160
109
  uncountable/types/users.py,sha256=SUjNHBDcImKnnE7IN096Wfr1fmjNjCkQ7yQgKUPffz8,588
@@ -169,7 +118,7 @@ uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8A
169
118
  uncountable/types/api/entity/create_entities.py,sha256=vzo5hS1qcmjQdfyCMarSu8MRcRGSiholOVSCfjXlA1k,1703
170
119
  uncountable/types/api/entity/create_entity.py,sha256=ausozCQ3qPM9YUQ87bOTCKOm-zkhn4CSLJr9jLc9n2U,1873
171
120
  uncountable/types/api/entity/get_entities_data.py,sha256=XjrJGZucIn1TYUlDLRnRA0JTQw-vXHIAT-m0H9hk37A,1170
172
- uncountable/types/api/entity/list_entities.py,sha256=_bIIZJj3N0E6YiHgqzfCOKxD1fQW6biWJQMp5wIVbBw,1514
121
+ uncountable/types/api/entity/list_entities.py,sha256=Bd_Ppy2bzWve8RbplyMkEHkg07CxEIskeiTdb9Ntlfo,1673
173
122
  uncountable/types/api/entity/lock_entity.py,sha256=SbRaKDbJfoPD9uVYiGlnrsPF_HZ_6m0hPAlalZwGyag,1029
174
123
  uncountable/types/api/entity/resolve_entity_ids.py,sha256=AidGpPmI9ATDv0E7vd9LDOl3n3beGxUlRojh5uZrkl4,1086
175
124
  uncountable/types/api/entity/set_values.py,sha256=LcYrKQm5ItYLK1Vx7rRq5i6jkMLDhfEBhF0FD1GowQs,958
@@ -190,6 +139,7 @@ uncountable/types/api/inputs/get_inputs_data.py,sha256=sqZ6xEjzQqRQYMaKXLGWR8WPh
190
139
  uncountable/types/api/inputs/set_input_attribute_values.py,sha256=yvWgIVzl818ewhUA4v3ldSBfmZKngdWTtFn7fqk-dOE,1341
191
140
  uncountable/types/api/inputs/set_input_category.py,sha256=ymjMoIiWTtygwI67aVgcw6FyjWW31zBxZb78-YTNs1Y,967
192
141
  uncountable/types/api/inputs/set_input_subcategories.py,sha256=hRS1FcFWPaenO_08Ihtfy_v7MUbpiFefdK2AMv16HaI,1004
142
+ uncountable/types/api/inputs/set_intermediate_type.py,sha256=tbN3vJ0559eMKZh0kXio1nI1zxWKhZy4bZRI2LOVlGc,1109
193
143
  uncountable/types/api/material_families/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
194
144
  uncountable/types/api/material_families/update_entity_material_families.py,sha256=h-vkua57yCNSO6P1akIxmmaFdwzOXPxm2s3Xt6x1c7c,1396
195
145
  uncountable/types/api/outputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
@@ -206,27 +156,29 @@ uncountable/types/api/recipe_links/create_recipe_link.py,sha256=1Ok6XMGFKBIPV-uR
206
156
  uncountable/types/api/recipe_metadata/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
207
157
  uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py,sha256=el6Pn5XqExX66ZEEHM8CHPxnyXSMZPdfdvLBz86sAVY,1267
208
158
  uncountable/types/api/recipes/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
159
+ uncountable/types/api/recipes/add_recipe_to_project.py,sha256=YSVxZ_tDBsyNlxCiqHF2E8pQXRjfq46X6QwoZmkbWWk,867
209
160
  uncountable/types/api/recipes/archive_recipes.py,sha256=XFCqBa90bG4Tpxu6fhUqzl7PWlY35bbzOmJf5EOviRM,852
210
- uncountable/types/api/recipes/associate_recipe_as_input.py,sha256=88a2lirEgrodyyE6og0oYtkGAWih2uJCZRmy45kTBow,976
161
+ uncountable/types/api/recipes/associate_recipe_as_input.py,sha256=Kd0ySjIL4TZKR0QVVjlIUwUSjefZ6VmVw82HV-Yofbg,1027
211
162
  uncountable/types/api/recipes/associate_recipe_as_lot.py,sha256=bTYjbnY3B7GKz4MV4UGn7vPjaqMkAfUTio8872d4iws,955
212
163
  uncountable/types/api/recipes/create_recipe.py,sha256=jizKdsc761zrJXOi0xlmge7-Z9QlzRQdbLNtUoVLQCI,1420
213
164
  uncountable/types/api/recipes/create_recipes.py,sha256=qwIYa8hfcjY7_VOFt9lxmVtJ-HOJqQN3GDNSbZsRCZU,1544
214
165
  uncountable/types/api/recipes/disassociate_recipe_as_input.py,sha256=L25fpiK1Y5PByPVVgsZy9t4podz3xSSLIwKHj8CUrSg,913
215
- uncountable/types/api/recipes/edit_recipe_inputs.py,sha256=pTw606AgLhb-oJjfj1WPyEcJ4B0tgZsvEKeqP5VZ1gY,3281
166
+ uncountable/types/api/recipes/edit_recipe_inputs.py,sha256=I0o-LKBjjNryQqwKM4g6jdy6YtX7P2Ga2lKzXU_RuRk,4153
216
167
  uncountable/types/api/recipes/get_curve.py,sha256=UIWfpqtU5sQokaxwYfQFNFl6HMyzWEF_Sjd8UMz0U88,939
217
168
  uncountable/types/api/recipes/get_recipe_calculations.py,sha256=eQmkdZzCEuq8S2f_kf_7GPvDLX1pTnY1CRmkK0SkMCI,1472
218
169
  uncountable/types/api/recipes/get_recipe_links.py,sha256=hk5dfQjv7yU2r-S9b8vwWEJLPHqU0-M6SFiTLMR3fVk,985
219
170
  uncountable/types/api/recipes/get_recipe_names.py,sha256=uCpXZq5oWjr9a_Vf-yYPaVS72XOlLHgAlju6KHeQ3UA,986
220
171
  uncountable/types/api/recipes/get_recipe_output_metadata.py,sha256=L9s2ykPP4pd02Pc98LDisY8bgV8CToS6t6fXKTWqGRw,1464
221
172
  uncountable/types/api/recipes/get_recipes_data.py,sha256=TbJo4pkp5ePgbeH1oldThpq9jWLDYRUbrYMAv8T_LsI,5518
173
+ uncountable/types/api/recipes/remove_recipe_from_project.py,sha256=cr-VnqgBNek_WInmJln0UBn1GHMNQtRw3gsFTY_G91M,872
222
174
  uncountable/types/api/recipes/set_recipe_inputs.py,sha256=lFVfv-o_O5wHuMZdH63qlG4exFTlJM078oSAtb3XNxA,1426
223
175
  uncountable/types/api/recipes/set_recipe_metadata.py,sha256=Ba6ttd1JuS_Ypt-KpckSviWtOcQ-OTdTEJiaSYyoQL8,933
224
- uncountable/types/api/recipes/set_recipe_outputs.py,sha256=QYq39TNchQ80ET1C77OE9fwhbu_HmIoEDmrQJHkkCu0,1609
176
+ uncountable/types/api/recipes/set_recipe_outputs.py,sha256=VfUL59O21qPrgD7qQ9t5OVSGcGZ2r17lW_yEzuUkrtw,1722
225
177
  uncountable/types/api/recipes/set_recipe_tags.py,sha256=U710hgq9-t6QZGRB-ZGHskpt4iXwYEjIRb67eh3P518,2453
226
178
  uncountable/types/api/recipes/unarchive_recipes.py,sha256=WcwFYbBsX2SKXnoBQ8locnRn7Bj1rHdtrURQVOfqgfU,814
227
179
  uncountable/types/api/triggers/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
228
180
  uncountable/types/api/triggers/run_trigger.py,sha256=9m9M8-nlGB_sAU2Qm2lWugp4h4Osqj6QpjNfU8osd1U,901
229
- UncountablePythonSDK-0.0.29.dist-info/METADATA,sha256=AeSTcRIslBwKBr4qNGQlB55U9idSy18wek0K02w1Rvg,1577
230
- UncountablePythonSDK-0.0.29.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
231
- UncountablePythonSDK-0.0.29.dist-info/top_level.txt,sha256=HaMiBnH1wA7SG9-RVHIJPBH3l8X5gee2jUf-77Nz-Dk,41
232
- UncountablePythonSDK-0.0.29.dist-info/RECORD,,
181
+ UncountablePythonSDK-0.0.31.dist-info/METADATA,sha256=jaFYbK371JiK653-RWGnpqIWCo1Ql0gQRJ4B9_0L4EQ,1577
182
+ UncountablePythonSDK-0.0.31.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
183
+ UncountablePythonSDK-0.0.31.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
184
+ UncountablePythonSDK-0.0.31.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  docs
2
2
  examples
3
3
  pkgs
4
- type_spec
5
4
  uncountable
docs/conf.py CHANGED
@@ -7,7 +7,6 @@
7
7
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
8
8
 
9
9
  from datetime import date
10
- import uncountable
11
10
 
12
11
  project = "Uncountable SDK"
13
12
  copyright = f"{date.today().year}, Uncountable Inc"
@@ -26,9 +25,15 @@ extensions = [
26
25
  myst_enable_extensions = ["fieldlist", "deflist"]
27
26
 
28
27
  autoapi_dirs = ["../uncountable"]
29
- autoapi_options = [ 'members', 'undoc-members', 'show-inheritance', 'show-module-summary', 'imported-members' ]
30
- autoapi_ignore = ['*integration*']
31
- autodoc_typehints = 'description'
28
+ autoapi_options = [
29
+ "members",
30
+ "undoc-members",
31
+ "show-inheritance",
32
+ "show-module-summary",
33
+ "imported-members",
34
+ ]
35
+ autoapi_ignore = ["*integration*"]
36
+ autodoc_typehints = "description"
32
37
 
33
38
  exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
34
39
 
docs/requirements.txt CHANGED
@@ -1,7 +1,7 @@
1
- furo==2024.1.29
2
- myst-parser==2.0.0
3
- sphinx-autoapi==3.0.0
1
+ furo==2024.5.6
2
+ myst-parser==3.0.1
3
+ sphinx-autoapi==3.1.0
4
4
  sphinx-copybutton==0.5.2
5
- Sphinx==7.2.6
6
- sphinx_design==0.5.0
5
+ Sphinx==7.3.7
6
+ sphinx_design==0.6.0
7
7
  sphinx-favicon==1.0.1
examples/async_batch.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from decimal import Decimal
2
- from uncountable.core import AuthDetailsApiKey, Client
3
- from uncountable.core import AsyncBatchProcessor
2
+
3
+ from uncountable.core import AsyncBatchProcessor, AuthDetailsApiKey, Client
4
4
  from uncountable.types import (
5
5
  recipe_metadata,
6
6
  )
@@ -10,7 +10,6 @@ from uncountable.types.recipe_identifiers import (
10
10
  RecipeIdentifiers,
11
11
  )
12
12
 
13
-
14
13
  client = Client(
15
14
  base_url="https://app.uncountable.com",
16
15
  auth_details=AuthDetailsApiKey(
examples/create_entity.py CHANGED
@@ -1,23 +1,20 @@
1
1
  from uncountable.core import AuthDetailsOAuth, Client
2
+ from uncountable.core.client import ClientConfig
2
3
  from uncountable.types import (
3
4
  entity_t,
4
5
  field_values_t,
5
6
  )
6
7
 
7
-
8
8
  client = Client(
9
9
  base_url="https://app.uncountable.com",
10
- auth_details=AuthDetailsOAuth(
11
- refresh_token="x"
12
- ),
10
+ auth_details=AuthDetailsOAuth(refresh_token="x"),
11
+ config=ClientConfig(allow_insecure_tls=False),
13
12
  )
14
13
  entities = client.create_entity(
15
14
  definition_id=24,
16
15
  entity_type=entity_t.EntityType.LAB_REQUEST,
17
16
  field_values=[
18
- field_values_t.FieldRefNameValue(
19
- field_ref_name="name", value="SDK Lab Request"
20
- ),
17
+ field_values_t.FieldRefNameValue(field_ref_name="name", value="SDK Lab Request"),
21
18
  field_values_t.FieldRefNameValue(field_ref_name="materialFamilyId", value=1),
22
19
  ],
23
20
  )
examples/upload_files.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  from pprint import pprint
3
3
 
4
- from uncountable import AuthDetailsApiKey, Client, MediaFileUpload
4
+ from uncountable.core import AuthDetailsApiKey, Client, MediaFileUpload
5
5
 
6
6
  client = Client(
7
7
  base_url="http://localhost:5000",
@@ -4,9 +4,10 @@ import re
4
4
 
5
5
  @functools.lru_cache(maxsize=500000)
6
6
  def snake_to_camel_case(o: str) -> str:
7
- return "".join([
8
- part.title() if i > 0 else part for i, part in enumerate(o.split("_"))
9
- ])
7
+ tokens = o.split("_")
8
+ if len(tokens) < 2:
9
+ return o
10
+ return "".join([part.title() if i > 0 else part for i, part in enumerate(tokens)])
10
11
 
11
12
 
12
13
  def kebab_to_pascal_case(o: str) -> str:
@@ -16,6 +16,9 @@ class _SerialClassData:
16
16
  parse_require: set[str] = dataclasses.field(default_factory=set)
17
17
 
18
18
 
19
+ EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
20
+
21
+
19
22
  def serial_class(
20
23
  *,
21
24
  unconverted_keys: Optional[set[str]] = None,
@@ -57,58 +60,49 @@ def serial_class(
57
60
 
58
61
 
59
62
  class SerialClassDataInspector:
60
- bases: list[SerialClassDataInspector]
61
-
62
63
  def __init__(
63
- self, bases: list[SerialClassDataInspector], current: _SerialClassData
64
+ self,
65
+ current: _SerialClassData,
64
66
  ) -> None:
65
- self.bases = bases
66
67
  self.current = current
67
68
 
68
69
  def has_unconverted_key(self, key: str) -> bool:
69
- if key in self.current.unconverted_keys:
70
- return True
71
- for base in self.bases:
72
- if base.has_unconverted_key(key):
73
- return True
74
- return False
70
+ return key in self.current.unconverted_keys
75
71
 
76
72
  def has_unconverted_value(self, key: str) -> bool:
77
- if key in self.current.unconverted_values:
78
- return True
79
- for base in self.bases:
80
- if base.has_unconverted_value(key):
81
- return True
82
- return False
73
+ return key in self.current.unconverted_values
83
74
 
84
75
  def has_to_string_value(self, key: str) -> bool:
85
- if key in self.current.to_string_values:
86
- return True
87
- for base in self.bases:
88
- if base.has_to_string_value(key):
89
- return True
90
- return False
76
+ return key in self.current.to_string_values
91
77
 
92
78
  def has_parse_require(self, key: str) -> bool:
93
- if key in self.current.parse_require:
94
- return True
95
- for base in self.bases:
96
- if base.has_parse_require(key):
97
- return True
98
- return False
79
+ return key in self.current.parse_require
99
80
 
100
81
 
101
- def get_serial_class_data(type_class: type[Any]) -> SerialClassDataInspector:
102
- bases = (
103
- [get_serial_class_data(base) for base in type_class.__bases__]
104
- if type_class.__bases__ is not None
105
- else []
106
- )
107
- return SerialClassDataInspector(
108
- bases,
82
+ def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | None:
83
+ base_class_data = (
109
84
  cast(_SerialClassData, type_class.__unc_serial_data)
110
85
  if hasattr(type_class, "__unc_serial_data")
111
- else _SerialClassData(),
86
+ else None
87
+ )
88
+ if type_class.__bases__ is not None:
89
+ for base in type_class.__bases__:
90
+ curr_base_class_data = _get_merged_serial_class_data(base)
91
+ if curr_base_class_data is not None:
92
+ if base_class_data is None:
93
+ base_class_data = _SerialClassData()
94
+ base_class_data.unconverted_keys |= curr_base_class_data.unconverted_keys
95
+ base_class_data.unconverted_values |= (
96
+ curr_base_class_data.unconverted_values
97
+ )
98
+ base_class_data.to_string_values |= curr_base_class_data.to_string_values
99
+ base_class_data.parse_require |= curr_base_class_data.parse_require
100
+ return base_class_data
101
+
102
+
103
+ def get_serial_class_data(type_class: type[Any]) -> SerialClassDataInspector:
104
+ return SerialClassDataInspector(
105
+ _get_merged_serial_class_data(type_class) or EMPTY_SERIAL_CLASS_DATA
112
106
  )
113
107
 
114
108
 
@@ -1194,7 +1194,6 @@ ASYNC_BATCH_PROCESSOR_FILENAME = "async_batch_processor"
1194
1194
  ASYNC_BATCH_PROCESSOR_IMPORTS = [
1195
1195
  "import uuid",
1196
1196
  "from abc import ABC, abstractmethod",
1197
- "from dataclasses import dataclass",
1198
1197
  "from pkgs.serialization_util.serialization_helpers import serialize_for_api",
1199
1198
  ]
1200
1199
 
@@ -247,17 +247,25 @@ def _extract_and_validate_layout(
247
247
  return layout
248
248
 
249
249
 
250
- def _validate_type_ext_info(stype: builder.SpecTypeDefnObject) -> ExtInfoLayout | None:
250
+ def _validate_type_ext_info(
251
+ stype: builder.SpecTypeDefnObject,
252
+ ) -> tuple[ExtInfoLayout | None, Optional[data_t.ExtInfo]]:
251
253
  ext_info = _parse_ext_info(stype.ext_info)
252
254
  if ext_info is None:
253
- return None
255
+ return None, None
256
+
257
+ if ext_info.label_fields is not None:
258
+ assert stype.properties is not None
259
+ for name in ext_info.label_fields:
260
+ prop = stype.properties.get(name)
261
+ assert prop is not None, f"missing-label-field:{name}"
254
262
 
255
263
  if not stype.is_base and isinstance(stype.base, builder.SpecTypeDefnObject):
256
- base_layout = _validate_type_ext_info(stype.base)
264
+ base_layout, _ = _validate_type_ext_info(stype.base)
257
265
  else:
258
266
  base_layout = None
259
267
 
260
- return _extract_and_validate_layout(stype, ext_info, base_layout)
268
+ return _extract_and_validate_layout(stype, ext_info, base_layout), ext_info
261
269
 
262
270
 
263
271
  def _build_map_type(
@@ -270,7 +278,7 @@ def _build_map_type(
270
278
  and not stype.is_base
271
279
  and stype.base is not None
272
280
  ):
273
- _validate_type_ext_info(stype)
281
+ _, ext_info = _validate_type_ext_info(stype)
274
282
 
275
283
  properties: dict[str, MapProperty] = {}
276
284
  map_type = MapTypeObject(
@@ -279,7 +287,7 @@ def _build_map_type(
279
287
  properties=properties,
280
288
  desc=stype.desc,
281
289
  base_type_path=type_path_of(stype.base),
282
- ext_info=_convert_ext_info(stype.ext_info),
290
+ ext_info=serialize_for_api(ext_info),
283
291
  )
284
292
 
285
293
  if stype.properties is not None:
uncountable/__init__.py CHANGED
@@ -1,5 +1,4 @@
1
- from . import types
2
- from . import core
1
+ from . import core, types
3
2
 
4
3
  __all__ = []
5
4
  __all__ += types.__all__
@@ -1,6 +1,13 @@
1
+ from .async_batch import AsyncBatchProcessor
1
2
  from .client import Client
2
- from .types import AuthDetailsApiKey, AuthDetailsOAuth
3
3
  from .file_upload import MediaFileUpload, UploadedFile
4
- from .async_batch import AsyncBatchProcessor
4
+ from .types import AuthDetailsApiKey, AuthDetailsOAuth
5
5
 
6
- __all__: list[str] = ["AuthDetailsApiKey", "AuthDetailsOAuth", "AsyncBatchProcessor", "Client", "MediaFileUpload", "UploadedFile"]
6
+ __all__: list[str] = [
7
+ "AuthDetailsApiKey",
8
+ "AuthDetailsOAuth",
9
+ "AsyncBatchProcessor",
10
+ "Client",
11
+ "MediaFileUpload",
12
+ "UploadedFile",
13
+ ]
@@ -1,7 +1,7 @@
1
1
  from uncountable.core.client import Client
2
+ from uncountable.types import async_batch_t, base_t
2
3
  from uncountable.types.async_batch import AsyncBatchRequest
3
4
  from uncountable.types.async_batch_processor import AsyncBatchProcessorBase
4
- from uncountable.types import async_batch_t, base_t
5
5
 
6
6
 
7
7
  class AsyncBatchProcessor(AsyncBatchProcessorBase):