UncountablePythonSDK 0.0.110__py3-none-any.whl → 0.0.112__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 (136) hide show
  1. docs/conf.py +2 -2
  2. docs/justfile +1 -1
  3. examples/create_ingredient_sdk.py +34 -0
  4. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
  5. examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
  6. examples/integration-server/pyproject.toml +2 -2
  7. pkgs/argument_parser/argument_parser.py +9 -6
  8. pkgs/type_spec/builder.py +19 -2
  9. pkgs/type_spec/emit_python.py +9 -3
  10. pkgs/type_spec/emit_typescript_util.py +16 -1
  11. pkgs/type_spec/parts/base.py.prepart +4 -0
  12. pkgs/type_spec/type_info/emit_type_info.py +12 -3
  13. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  14. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
  15. pkgs/type_spec/value_spec/convert_type.py +13 -0
  16. uncountable/core/client.py +7 -4
  17. uncountable/integration/executors/generic_upload_executor.py +3 -2
  18. uncountable/integration/job.py +24 -1
  19. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
  20. uncountable/integration/scheduler.py +4 -3
  21. uncountable/types/__init__.py +4 -0
  22. uncountable/types/api/batch/execute_batch.py +4 -4
  23. uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  24. uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
  25. uncountable/types/api/condition_parameters/__init__.py +1 -0
  26. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  27. uncountable/types/api/entity/create_entities.py +3 -3
  28. uncountable/types/api/entity/create_entity.py +3 -3
  29. uncountable/types/api/entity/create_or_update_entity.py +3 -2
  30. uncountable/types/api/entity/get_entities_data.py +3 -3
  31. uncountable/types/api/entity/grant_entity_permissions.py +3 -2
  32. uncountable/types/api/entity/list_entities.py +4 -4
  33. uncountable/types/api/entity/lock_entity.py +3 -2
  34. uncountable/types/api/entity/lookup_entity.py +5 -5
  35. uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  36. uncountable/types/api/entity/set_entity_field_values.py +3 -2
  37. uncountable/types/api/entity/set_values.py +3 -2
  38. uncountable/types/api/entity/transition_entity_phase.py +5 -4
  39. uncountable/types/api/entity/unlock_entity.py +3 -2
  40. uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  41. uncountable/types/api/field_options/upsert_field_options.py +4 -3
  42. uncountable/types/api/files/download_file.py +4 -3
  43. uncountable/types/api/id_source/list_id_source.py +3 -3
  44. uncountable/types/api/id_source/match_id_source.py +3 -3
  45. uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  46. uncountable/types/api/inputs/create_inputs.py +6 -4
  47. uncountable/types/api/inputs/get_input_data.py +6 -6
  48. uncountable/types/api/inputs/get_input_names.py +3 -3
  49. uncountable/types/api/inputs/get_inputs_data.py +6 -6
  50. uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  51. uncountable/types/api/inputs/set_input_category.py +3 -2
  52. uncountable/types/api/inputs/set_input_subcategories.py +3 -2
  53. uncountable/types/api/inputs/set_intermediate_type.py +3 -2
  54. uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  55. uncountable/types/api/outputs/get_output_data.py +6 -6
  56. uncountable/types/api/outputs/get_output_names.py +3 -3
  57. uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  58. uncountable/types/api/permissions/set_core_permissions.py +7 -6
  59. uncountable/types/api/project/get_projects.py +3 -3
  60. uncountable/types/api/project/get_projects_data.py +3 -3
  61. uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
  62. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
  63. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  64. uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
  65. uncountable/types/api/recipes/add_time_series_data.py +4 -3
  66. uncountable/types/api/recipes/archive_recipes.py +3 -2
  67. uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
  68. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
  69. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
  70. uncountable/types/api/recipes/create_recipe.py +2 -2
  71. uncountable/types/api/recipes/create_recipes.py +4 -4
  72. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
  73. uncountable/types/api/recipes/edit_recipe_inputs.py +18 -16
  74. uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  75. uncountable/types/api/recipes/get_curve.py +2 -2
  76. uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  77. uncountable/types/api/recipes/get_recipe_links.py +2 -2
  78. uncountable/types/api/recipes/get_recipe_names.py +3 -3
  79. uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  80. uncountable/types/api/recipes/get_recipes_data.py +11 -11
  81. uncountable/types/api/recipes/lock_recipes.py +4 -3
  82. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
  83. uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  84. uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
  85. uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  86. uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  87. uncountable/types/api/recipes/set_recipe_outputs.py +4 -4
  88. uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  89. uncountable/types/api/recipes/unarchive_recipes.py +3 -2
  90. uncountable/types/api/recipes/unlock_recipes.py +3 -2
  91. uncountable/types/api/runsheet/__init__.py +1 -0
  92. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  93. uncountable/types/api/triggers/run_trigger.py +3 -2
  94. uncountable/types/api/uploader/invoke_uploader.py +2 -2
  95. uncountable/types/async_batch_processor.py +74 -0
  96. uncountable/types/async_batch_t.py +7 -5
  97. uncountable/types/auth_retrieval_t.py +4 -3
  98. uncountable/types/base_t.py +4 -0
  99. uncountable/types/calculations_t.py +1 -1
  100. uncountable/types/chemical_structure_t.py +2 -1
  101. uncountable/types/client_base.py +48 -0
  102. uncountable/types/client_config_t.py +2 -1
  103. uncountable/types/curves_t.py +2 -2
  104. uncountable/types/data_t.py +22 -21
  105. uncountable/types/entity_t.py +9 -3
  106. uncountable/types/experiment_groups_t.py +1 -1
  107. uncountable/types/field_values_t.py +20 -20
  108. uncountable/types/fields_t.py +1 -1
  109. uncountable/types/generic_upload_t.py +7 -6
  110. uncountable/types/id_source_t.py +5 -4
  111. uncountable/types/identifier_t.py +3 -3
  112. uncountable/types/input_attributes_t.py +1 -1
  113. uncountable/types/inputs_t.py +1 -1
  114. uncountable/types/integration_server_t.py +2 -1
  115. uncountable/types/job_definition_t.py +14 -13
  116. uncountable/types/outputs_t.py +1 -1
  117. uncountable/types/overrides_t.py +3 -2
  118. uncountable/types/phases_t.py +1 -1
  119. uncountable/types/queued_job_t.py +7 -7
  120. uncountable/types/recipe_identifiers_t.py +3 -3
  121. uncountable/types/recipe_links_t.py +1 -1
  122. uncountable/types/recipe_metadata_t.py +3 -3
  123. uncountable/types/recipe_output_metadata_t.py +1 -1
  124. uncountable/types/recipe_tags_t.py +1 -1
  125. uncountable/types/recipe_workflow_steps_t.py +5 -4
  126. uncountable/types/recipes_t.py +2 -1
  127. uncountable/types/response_t.py +2 -1
  128. uncountable/types/secret_retrieval_t.py +4 -3
  129. uncountable/types/units_t.py +1 -1
  130. uncountable/types/users_t.py +1 -1
  131. uncountable/types/webhook_job_t.py +4 -3
  132. uncountable/types/workflows_t.py +2 -2
  133. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/METADATA +2 -1
  134. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/RECORD +136 -128
  135. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/WHEEL +1 -1
  136. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from pkgs.serialization import serial_union_annotation
13
+ from . import base_t
13
14
  from . import identifier_t
14
15
 
15
16
  __all__: list[str] = [
@@ -34,7 +35,7 @@ class RecipeWorkflowStepIdentifierType(StrEnum):
34
35
  @serial_class(
35
36
  named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierBase",
36
37
  )
37
- @dataclasses.dataclass(kw_only=True)
38
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
38
39
  class RecipeWorkflowStepIdentifierBase:
39
40
  type: RecipeWorkflowStepIdentifierType
40
41
 
@@ -44,7 +45,7 @@ class RecipeWorkflowStepIdentifierBase:
44
45
  named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierDefault",
45
46
  parse_require={"type"},
46
47
  )
47
- @dataclasses.dataclass(kw_only=True)
48
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
48
49
  class RecipeWorkflowStepIdentifierDefault(RecipeWorkflowStepIdentifierBase):
49
50
  type: typing.Literal[RecipeWorkflowStepIdentifierType.DEFAULT] = RecipeWorkflowStepIdentifierType.DEFAULT
50
51
 
@@ -60,7 +61,7 @@ class RecipeWorkflowStepPosition(StrEnum):
60
61
  named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierWorkflowStep",
61
62
  parse_require={"type"},
62
63
  )
63
- @dataclasses.dataclass(kw_only=True)
64
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
64
65
  class RecipeWorkflowStepIdentifierWorkflowStep(RecipeWorkflowStepIdentifierBase):
65
66
  type: typing.Literal[RecipeWorkflowStepIdentifierType.WORKFLOW_STEP] = RecipeWorkflowStepIdentifierType.WORKFLOW_STEP
66
67
  workflow_step_key: identifier_t.IdentifierKey
@@ -72,7 +73,7 @@ class RecipeWorkflowStepIdentifierWorkflowStep(RecipeWorkflowStepIdentifierBase)
72
73
  named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierKey",
73
74
  parse_require={"type"},
74
75
  )
75
- @dataclasses.dataclass(kw_only=True)
76
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
76
77
  class RecipeWorkflowStepIdentifierKey:
77
78
  type: typing.Literal[RecipeWorkflowStepIdentifierType.IDENTIFIER_KEY] = RecipeWorkflowStepIdentifierType.IDENTIFIER_KEY
78
79
  recipe_workflow_step_key: identifier_t.IdentifierKey
@@ -8,6 +8,7 @@ import datetime # noqa: F401
8
8
  from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
+ from . import base_t
11
12
 
12
13
  __all__: list[str] = [
13
14
  "RecipeAttributeFormatting",
@@ -18,7 +19,7 @@ __all__: list[str] = [
18
19
  @serial_class(
19
20
  named_type_path="sdk.recipes.RecipeAttributeFormatting",
20
21
  )
21
- @dataclasses.dataclass(kw_only=True)
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
22
23
  class RecipeAttributeFormatting:
23
24
  background_color: str
24
25
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -8,6 +8,7 @@ import datetime # noqa: F401
8
8
  from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
+ from . import base_t
11
12
 
12
13
  __all__: list[str] = [
13
14
  "Response",
@@ -19,7 +20,7 @@ __all__: list[str] = [
19
20
  named_type_path="sdk.response.Response",
20
21
  parse_require={"status"},
21
22
  )
22
- @dataclasses.dataclass(kw_only=True)
23
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
23
24
  class Response:
24
25
  status: typing.Literal["ok"] = "ok"
25
26
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from pkgs.serialization import serial_union_annotation
13
+ from . import base_t
13
14
 
14
15
  __all__: list[str] = [
15
16
  "SecretRetrieval",
@@ -24,7 +25,7 @@ __all__: list[str] = [
24
25
  @serial_class(
25
26
  named_type_path="sdk.secret_retrieval.SecretRetrievalBase",
26
27
  )
27
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
28
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
28
29
  class SecretRetrievalBase:
29
30
  type: SecretRetrievalType
30
31
 
@@ -40,7 +41,7 @@ class SecretRetrievalType(StrEnum):
40
41
  named_type_path="sdk.secret_retrieval.SecretRetrievalEnv",
41
42
  parse_require={"type"},
42
43
  )
43
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
44
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
44
45
  class SecretRetrievalEnv(SecretRetrievalBase):
45
46
  type: typing.Literal[SecretRetrievalType.ENV] = SecretRetrievalType.ENV
46
47
  env_key: str
@@ -51,7 +52,7 @@ class SecretRetrievalEnv(SecretRetrievalBase):
51
52
  named_type_path="sdk.secret_retrieval.SecretRetrievalAWS",
52
53
  parse_require={"type"},
53
54
  )
54
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
55
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
55
56
  class SecretRetrievalAWS(SecretRetrievalBase):
56
57
  type: typing.Literal[SecretRetrievalType.AWS] = SecretRetrievalType.AWS
57
58
  secret_name: str
@@ -19,7 +19,7 @@ __all__: list[str] = [
19
19
  @serial_class(
20
20
  named_type_path="sdk.units.SimpleUnit",
21
21
  )
22
- @dataclasses.dataclass(kw_only=True)
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
23
23
  class SimpleUnit:
24
24
  unit_id: base_t.ObjectId
25
25
  name: str
@@ -19,7 +19,7 @@ __all__: list[str] = [
19
19
  @serial_class(
20
20
  named_type_path="sdk.users.SimpleUser",
21
21
  )
22
- @dataclasses.dataclass(kw_only=True)
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
23
23
  class SimpleUser:
24
24
  user_id: base_t.ObjectId
25
25
  display_name: str
@@ -23,7 +23,7 @@ __all__: list[str] = [
23
23
  named_type_path="sdk.webhook_job.WebhookEventPayload",
24
24
  unconverted_values={"data"},
25
25
  )
26
- @dataclasses.dataclass(kw_only=True)
26
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
27
27
  class WebhookEventPayload:
28
28
  data: dict[str, base_t.JsonValue]
29
29
 
@@ -32,7 +32,7 @@ class WebhookEventPayload:
32
32
  @serial_class(
33
33
  named_type_path="sdk.webhook_job.WebhookEventBody",
34
34
  )
35
- @dataclasses.dataclass(kw_only=True)
35
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
36
36
  class WebhookEventBody(WebhookEventPayload):
37
37
  event_id: str
38
38
 
@@ -41,7 +41,8 @@ class WebhookEventBody(WebhookEventPayload):
41
41
  @serial_class(
42
42
  named_type_path="sdk.webhook_job.RunsheetWebhookPayload",
43
43
  )
44
- @dataclasses.dataclass(kw_only=True)
44
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
45
45
  class RunsheetWebhookPayload:
46
46
  entities: list[entity_t.Entity]
47
+ async_job_id: base_t.ObjectId
47
48
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -20,7 +20,7 @@ __all__: list[str] = [
20
20
  @serial_class(
21
21
  named_type_path="sdk.workflows.SimpleWorkflowStep",
22
22
  )
23
- @dataclasses.dataclass(kw_only=True)
23
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
24
24
  class SimpleWorkflowStep:
25
25
  workflow_step_id: base_t.ObjectId
26
26
  name: str | None
@@ -30,7 +30,7 @@ class SimpleWorkflowStep:
30
30
  @serial_class(
31
31
  named_type_path="sdk.workflows.SimpleWorkflow",
32
32
  )
33
- @dataclasses.dataclass(kw_only=True)
33
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
34
34
  class SimpleWorkflow:
35
35
  workflow_id: base_t.ObjectId
36
36
  name: str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.110
3
+ Version: 0.0.112
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
@@ -39,6 +39,7 @@ Requires-Dist: grpcio==1.67.1
39
39
  Requires-Dist: protobuf>=4.21.1
40
40
  Requires-Dist: azure-storage-blob==12.*
41
41
  Requires-Dist: boto3-stubs[essential,ses]==1.*
42
+ Requires-Dist: msgspec==0.19.*
42
43
  Provides-Extra: test
43
44
  Requires-Dist: mypy==1.*; extra == "test"
44
45
  Requires-Dist: ruff==0.*; extra == "test"