UncountablePythonSDK 0.0.39__py3-none-any.whl → 0.0.40__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 (127) hide show
  1. {UncountablePythonSDK-0.0.39.dist-info → UncountablePythonSDK-0.0.40.dist-info}/METADATA +1 -1
  2. UncountablePythonSDK-0.0.40.dist-info/RECORD +222 -0
  3. {UncountablePythonSDK-0.0.39.dist-info → UncountablePythonSDK-0.0.40.dist-info}/WHEEL +1 -1
  4. pkgs/type_spec/emit_python.py +40 -7
  5. pkgs/type_spec/type_info/emit_type_info.py +1 -1
  6. uncountable/types/__init__.py +29 -29
  7. uncountable/types/api/batch/execute_batch.py +1 -1
  8. uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  9. uncountable/types/api/chemical/convert_chemical_formats.py +1 -1
  10. uncountable/types/api/entity/create_entities.py +3 -3
  11. uncountable/types/api/entity/create_entity.py +3 -3
  12. uncountable/types/api/entity/get_entities_data.py +3 -3
  13. uncountable/types/api/entity/list_entities.py +2 -2
  14. uncountable/types/api/entity/lock_entity.py +3 -3
  15. uncountable/types/api/entity/resolve_entity_ids.py +2 -2
  16. uncountable/types/api/entity/set_values.py +3 -3
  17. uncountable/types/api/entity/transition_entity_phase.py +3 -3
  18. uncountable/types/api/entity/unlock_entity.py +3 -3
  19. uncountable/types/api/equipment/associate_equipment_input.py +3 -3
  20. uncountable/types/api/field_options/upsert_field_options.py +1 -1
  21. uncountable/types/api/id_source/list_id_source.py +2 -2
  22. uncountable/types/api/id_source/match_id_source.py +2 -2
  23. uncountable/types/api/input_groups/get_input_group_names.py +1 -1
  24. uncountable/types/api/inputs/create_inputs.py +3 -3
  25. uncountable/types/api/inputs/get_input_data.py +2 -2
  26. uncountable/types/api/inputs/get_input_names.py +1 -1
  27. uncountable/types/api/inputs/get_inputs_data.py +2 -2
  28. uncountable/types/api/inputs/set_input_attribute_values.py +2 -2
  29. uncountable/types/api/inputs/set_input_category.py +2 -2
  30. uncountable/types/api/inputs/set_input_subcategories.py +3 -3
  31. uncountable/types/api/inputs/set_intermediate_type.py +1 -1
  32. uncountable/types/api/material_families/update_entity_material_families.py +5 -5
  33. uncountable/types/api/outputs/get_output_data.py +2 -2
  34. uncountable/types/api/outputs/get_output_names.py +1 -1
  35. uncountable/types/api/outputs/resolve_output_conditions.py +1 -1
  36. uncountable/types/api/permissions/set_core_permissions.py +3 -3
  37. uncountable/types/api/project/get_projects.py +2 -2
  38. uncountable/types/api/project/get_projects_data.py +4 -4
  39. uncountable/types/api/recipe_links/create_recipe_link.py +3 -3
  40. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -3
  41. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +1 -1
  42. uncountable/types/api/recipes/add_recipe_to_project.py +1 -1
  43. uncountable/types/api/recipes/archive_recipes.py +1 -1
  44. uncountable/types/api/recipes/associate_recipe_as_input.py +2 -2
  45. uncountable/types/api/recipes/associate_recipe_as_lot.py +2 -2
  46. uncountable/types/api/recipes/create_recipe.py +4 -4
  47. uncountable/types/api/recipes/create_recipes.py +2 -2
  48. uncountable/types/api/recipes/disassociate_recipe_as_input.py +2 -2
  49. uncountable/types/api/recipes/edit_recipe_inputs.py +3 -3
  50. uncountable/types/api/recipes/get_curve.py +2 -2
  51. uncountable/types/api/recipes/get_recipe_calculations.py +2 -2
  52. uncountable/types/api/recipes/get_recipe_links.py +2 -2
  53. uncountable/types/api/recipes/get_recipe_names.py +1 -1
  54. uncountable/types/api/recipes/get_recipe_output_metadata.py +2 -2
  55. uncountable/types/api/recipes/get_recipes_data.py +7 -7
  56. uncountable/types/api/recipes/lock_recipes.py +1 -1
  57. uncountable/types/api/recipes/remove_recipe_from_project.py +1 -1
  58. uncountable/types/api/recipes/set_recipe_inputs.py +1 -1
  59. uncountable/types/api/recipes/set_recipe_metadata.py +2 -2
  60. uncountable/types/api/recipes/set_recipe_output_annotations.py +2 -2
  61. uncountable/types/api/recipes/set_recipe_outputs.py +3 -3
  62. uncountable/types/api/recipes/set_recipe_tags.py +2 -2
  63. uncountable/types/api/recipes/unarchive_recipes.py +1 -1
  64. uncountable/types/api/recipes/unlock_recipes.py +1 -1
  65. uncountable/types/api/triggers/run_trigger.py +2 -2
  66. uncountable/types/async_batch.py +5 -53
  67. uncountable/types/async_batch_processor.py +6 -6
  68. uncountable/types/async_batch_t.py +59 -0
  69. uncountable/types/base.py +4 -78
  70. uncountable/types/base_t.py +85 -0
  71. uncountable/types/calculations.py +2 -17
  72. uncountable/types/calculations_t.py +23 -0
  73. uncountable/types/chemical_structure.py +2 -21
  74. uncountable/types/chemical_structure_t.py +27 -0
  75. uncountable/types/client_base.py +12 -12
  76. uncountable/types/curves.py +4 -41
  77. uncountable/types/curves_t.py +47 -0
  78. uncountable/types/entity.py +3 -268
  79. uncountable/types/entity_t.py +274 -0
  80. uncountable/types/experiment_groups.py +2 -17
  81. uncountable/types/experiment_groups_t.py +23 -0
  82. uncountable/types/field_values.py +5 -59
  83. uncountable/types/field_values_t.py +65 -0
  84. uncountable/types/fields.py +2 -18
  85. uncountable/types/fields_t.py +24 -0
  86. uncountable/types/id_source.py +6 -43
  87. uncountable/types/id_source_t.py +49 -0
  88. uncountable/types/identifier.py +5 -48
  89. uncountable/types/identifier_t.py +54 -0
  90. uncountable/types/input_attributes.py +2 -23
  91. uncountable/types/input_attributes_t.py +29 -0
  92. uncountable/types/inputs.py +4 -56
  93. uncountable/types/inputs_t.py +62 -0
  94. uncountable/types/outputs.py +2 -20
  95. uncountable/types/outputs_t.py +26 -0
  96. uncountable/types/permissions.py +2 -40
  97. uncountable/types/permissions_t.py +46 -0
  98. uncountable/types/phases.py +2 -17
  99. uncountable/types/phases_t.py +23 -0
  100. uncountable/types/post_base.py +2 -24
  101. uncountable/types/post_base_t.py +30 -0
  102. uncountable/types/recipe_identifiers.py +6 -56
  103. uncountable/types/recipe_identifiers_t.py +62 -0
  104. uncountable/types/recipe_inputs.py +3 -24
  105. uncountable/types/recipe_inputs_t.py +30 -0
  106. uncountable/types/recipe_links.py +3 -44
  107. uncountable/types/recipe_links_t.py +50 -0
  108. uncountable/types/recipe_metadata.py +4 -46
  109. uncountable/types/recipe_metadata_t.py +52 -0
  110. uncountable/types/recipe_output_metadata.py +2 -18
  111. uncountable/types/recipe_output_metadata_t.py +24 -0
  112. uncountable/types/recipe_tags.py +2 -17
  113. uncountable/types/recipe_tags_t.py +23 -0
  114. uncountable/types/recipe_workflow_steps.py +8 -82
  115. uncountable/types/recipe_workflow_steps_t.py +88 -0
  116. uncountable/types/recipes.py +2 -15
  117. uncountable/types/recipes_t.py +21 -0
  118. uncountable/types/response.py +2 -19
  119. uncountable/types/response_t.py +25 -0
  120. uncountable/types/units.py +2 -17
  121. uncountable/types/units_t.py +23 -0
  122. uncountable/types/users.py +2 -18
  123. uncountable/types/users_t.py +24 -0
  124. uncountable/types/workflows.py +3 -26
  125. uncountable/types/workflows_t.py +32 -0
  126. UncountablePythonSDK-0.0.39.dist-info/RECORD +0 -193
  127. {UncountablePythonSDK-0.0.39.dist-info → UncountablePythonSDK-0.0.40.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,59 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from dataclasses import dataclass
12
+ from pkgs.serialization import serial_class
13
+ from . import base_t
14
+
15
+ __all__: list[str] = [
16
+ "AsyncBatchActionReturn",
17
+ "AsyncBatchRequest",
18
+ "AsyncBatchRequestPath",
19
+ "QueuedAsyncBatchRequest",
20
+ ]
21
+
22
+
23
+ # DO NOT MODIFY -- This file is generated by type_spec
24
+ class AsyncBatchRequestPath(StrEnum):
25
+ CREATE_RECIPE = "recipes/create_recipe"
26
+ SET_RECIPE_METADATA = "recipes/set_recipe_metadata"
27
+ SET_RECIPE_TAGS = "recipes/set_recipe_tags"
28
+ EDIT_RECIPE_INPUTS = "recipes/edit_recipe_inputs"
29
+ ARCHIVE_RECIPES = "recipes/archive"
30
+ LOCK_RECIPES = "recipes/lock_recipes"
31
+ UNLOCK_RECIPES = "recipes/unlock_recipes"
32
+ ASSOCIATE_EQUIPMENT_INPUT = "equipment/associate_equipment_input"
33
+
34
+
35
+ # DO NOT MODIFY -- This file is generated by type_spec
36
+ @serial_class(
37
+ unconverted_values={"data"},
38
+ )
39
+ @dataclass(kw_only=True)
40
+ class AsyncBatchRequest:
41
+ path: AsyncBatchRequestPath
42
+ data: base_t.JsonValue
43
+ batch_reference: str
44
+ depends_on: typing.Optional[list[str]] = None
45
+
46
+
47
+ # DO NOT MODIFY -- This file is generated by type_spec
48
+ @dataclass(kw_only=True)
49
+ class AsyncBatchActionReturn:
50
+ modification_made: bool
51
+ result_id: typing.Optional[base_t.ObjectId] = None
52
+
53
+
54
+ # DO NOT MODIFY -- This file is generated by type_spec
55
+ @dataclass(kw_only=True, frozen=True, eq=True)
56
+ class QueuedAsyncBatchRequest:
57
+ path: AsyncBatchRequestPath
58
+ batch_reference: str
59
+ # DO NOT MODIFY -- This file is generated by type_spec
uncountable/types/base.py CHANGED
@@ -1,85 +1,11 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
-
11
- __all__: list[str] = [
12
- "JsonScalar",
13
- "JsonValue",
14
- "ObjectId",
15
- ]
16
5
  # DO NOT MODIFY -- This file is generated by type_spec
17
- # === START section from base.prepart.py ===
18
- """
19
- Types that type_spec will use in the emitted files.
20
- """
21
- from typing import Union, Any, TYPE_CHECKING
22
- from collections.abc import Mapping, Sequence
23
-
24
- # These two are part of the core output, thus don't duplicate here
25
- # from decimal import Decimal
26
- # import datetime
27
-
28
- # Decimal/datetime are included as this list includes JSON serializable objects
29
- # It is preferred to use ExtJsonScalar and leave JsonScalar as deprecated, as
30
- # a type that we intend on migrating.
31
- JsonScalar = Union[str, float, bool, Decimal, None, datetime.datetime, datetime.date]
32
- ExtJsonScalar = JsonScalar
33
-
34
- # PureJsonScalar/PureJsonValue should be used in places where the type
35
- # is expected to already serialized and not expecting any high-order types.
36
- # this type is fully representable in the JSON format, and in JavaScript
37
- PureJsonScalar = Union[str, float, bool, None]
38
-
39
- # Regular expressions for identifying ref names and IDs. Ref names should be
40
- # using this regular expression as a constriant in the database.
41
- REF_NAME_REGEX = r"^[a-zA-Z0-9_/-]+$"
42
- # Does not support nonpositive integers at the moment.
43
- ID_REGEX = r"[1-9][0-9]{0,20}"
44
-
45
-
46
- if TYPE_CHECKING:
47
- JsonValue = Union[JsonScalar, Mapping[str, "JsonValue"], Sequence["JsonValue"]]
48
- ExtJsonValue = JsonValue
49
- PureJsonValue = Union[
50
- PureJsonScalar,
51
- Mapping[str, "PureJsonValue"],
52
- Sequence["PureJsonValue"]
53
- ]
54
- else:
55
- JsonValue = Union[JsonScalar, dict[str, Any], list[Any]]
56
- ExtJsonValue = JsonValue
57
- PureJsonValue = Union[PureJsonScalar, dict[str, Any], list[Any]]
58
-
59
- ObjectId = int
60
-
61
-
62
- def is_pure_json_value(value: ExtJsonValue) -> bool:
63
- """
64
- Checks if the runtime type of value is a PureJsonValue.
65
- """
66
- if value is None:
67
- return True
68
- if isinstance(value, (int, float, bool, str)):
69
- return True
70
-
71
- if isinstance(value, list):
72
- for item in value:
73
- if not is_pure_json_value(item):
74
- return False
75
- return True
76
-
77
- if isinstance(value, dict):
78
- for key, item in value.items():
79
- if not is_pure_json_value(key) or not is_pure_json_value(item):
80
- return False
81
- return True
6
+ # Kept only for SDK backwards compatibility
82
7
 
83
- return False
84
- # === END section from base.prepart.py ===
8
+ from .base_t import JsonScalar as JsonScalar
9
+ from .base_t import JsonValue as JsonValue
10
+ from .base_t import ObjectId as ObjectId
85
11
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,85 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+
11
+ __all__: list[str] = [
12
+ "JsonScalar",
13
+ "JsonValue",
14
+ "ObjectId",
15
+ ]
16
+ # DO NOT MODIFY -- This file is generated by type_spec
17
+ # === START section from base.prepart.py ===
18
+ """
19
+ Types that type_spec will use in the emitted files.
20
+ """
21
+ from typing import Union, Any, TYPE_CHECKING
22
+ from collections.abc import Mapping, Sequence
23
+
24
+ # These two are part of the core output, thus don't duplicate here
25
+ # from decimal import Decimal
26
+ # import datetime
27
+
28
+ # Decimal/datetime are included as this list includes JSON serializable objects
29
+ # It is preferred to use ExtJsonScalar and leave JsonScalar as deprecated, as
30
+ # a type that we intend on migrating.
31
+ JsonScalar = Union[str, float, bool, Decimal, None, datetime.datetime, datetime.date]
32
+ ExtJsonScalar = JsonScalar
33
+
34
+ # PureJsonScalar/PureJsonValue should be used in places where the type
35
+ # is expected to already serialized and not expecting any high-order types.
36
+ # this type is fully representable in the JSON format, and in JavaScript
37
+ PureJsonScalar = Union[str, float, bool, None]
38
+
39
+ # Regular expressions for identifying ref names and IDs. Ref names should be
40
+ # using this regular expression as a constriant in the database.
41
+ REF_NAME_REGEX = r"^[a-zA-Z0-9_/-]+$"
42
+ # Does not support nonpositive integers at the moment.
43
+ ID_REGEX = r"[1-9][0-9]{0,20}"
44
+
45
+
46
+ if TYPE_CHECKING:
47
+ JsonValue = Union[JsonScalar, Mapping[str, "JsonValue"], Sequence["JsonValue"]]
48
+ ExtJsonValue = JsonValue
49
+ PureJsonValue = Union[
50
+ PureJsonScalar,
51
+ Mapping[str, "PureJsonValue"],
52
+ Sequence["PureJsonValue"]
53
+ ]
54
+ else:
55
+ JsonValue = Union[JsonScalar, dict[str, Any], list[Any]]
56
+ ExtJsonValue = JsonValue
57
+ PureJsonValue = Union[PureJsonScalar, dict[str, Any], list[Any]]
58
+
59
+ ObjectId = int
60
+
61
+
62
+ def is_pure_json_value(value: ExtJsonValue) -> bool:
63
+ """
64
+ Checks if the runtime type of value is a PureJsonValue.
65
+ """
66
+ if value is None:
67
+ return True
68
+ if isinstance(value, (int, float, bool, str)):
69
+ return True
70
+
71
+ if isinstance(value, list):
72
+ for item in value:
73
+ if not is_pure_json_value(item):
74
+ return False
75
+ return True
76
+
77
+ if isinstance(value, dict):
78
+ for key, item in value.items():
79
+ if not is_pure_json_value(key) or not is_pure_json_value(item):
80
+ return False
81
+ return True
82
+
83
+ return False
84
+ # === END section from base.prepart.py ===
85
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,23 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
11
- from . import base as base_t
12
-
13
- __all__: list[str] = [
14
- "Calculation",
15
- ]
16
-
17
-
18
5
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
20
- class Calculation:
21
- id: base_t.ObjectId
22
- name: str
6
+ # Kept only for SDK backwards compatibility
7
+ from .calculations_t import Calculation as Calculation
23
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,23 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from . import base_t
12
+
13
+ __all__: list[str] = [
14
+ "Calculation",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @dataclass(kw_only=True)
20
+ class Calculation:
21
+ id: base_t.ObjectId
22
+ name: str
23
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,27 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
11
- from pkgs.serialization import serial_class
12
-
13
- __all__: list[str] = [
14
- "ChemicalStructure",
15
- ]
16
-
17
-
18
5
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @serial_class(
20
- to_string_values={"molecular_weight"},
21
- )
22
- @dataclass(kw_only=True)
23
- class ChemicalStructure:
24
- ketcher_file: typing.Optional[str] = None
25
- gross_formula: typing.Optional[str] = None
26
- molecular_weight: typing.Optional[Decimal] = None
6
+ # Kept only for SDK backwards compatibility
7
+ from .chemical_structure_t import ChemicalStructure as ChemicalStructure
27
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,27 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from pkgs.serialization import serial_class
12
+
13
+ __all__: list[str] = [
14
+ "ChemicalStructure",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @serial_class(
20
+ to_string_values={"molecular_weight"},
21
+ )
22
+ @dataclass(kw_only=True)
23
+ class ChemicalStructure:
24
+ ketcher_file: typing.Optional[str] = None
25
+ gross_formula: typing.Optional[str] = None
26
+ molecular_weight: typing.Optional[Decimal] = None
27
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -14,8 +14,8 @@ import uncountable.types.api.recipes.archive_recipes as archive_recipes_t
14
14
  import uncountable.types.api.equipment.associate_equipment_input as associate_equipment_input_t
15
15
  import uncountable.types.api.recipes.associate_recipe_as_input as associate_recipe_as_input_t
16
16
  import uncountable.types.api.recipes.associate_recipe_as_lot as associate_recipe_as_lot_t
17
- from uncountable.types import async_batch as async_batch_t
18
- from uncountable.types import base as base_t
17
+ from uncountable.types import async_batch_t
18
+ from uncountable.types import base_t
19
19
  import uncountable.types.api.chemical.convert_chemical_formats as convert_chemical_formats_t
20
20
  import uncountable.types.api.entity.create_entities as create_entities_t
21
21
  import uncountable.types.api.entity.create_entity as create_entity_t
@@ -25,10 +25,10 @@ import uncountable.types.api.recipe_links.create_recipe_link as create_recipe_li
25
25
  import uncountable.types.api.recipes.create_recipes as create_recipes_t
26
26
  import uncountable.types.api.recipes.disassociate_recipe_as_input as disassociate_recipe_as_input_t
27
27
  import uncountable.types.api.recipes.edit_recipe_inputs as edit_recipe_inputs_t
28
- from uncountable.types import entity as entity_t
28
+ from uncountable.types import entity_t
29
29
  import uncountable.types.api.batch.execute_batch as execute_batch_t
30
30
  import uncountable.types.api.batch.execute_batch_load_async as execute_batch_load_async_t
31
- from uncountable.types import field_values as field_values_t
31
+ from uncountable.types import field_values_t
32
32
  import uncountable.types.api.recipes.get_curve as get_curve_t
33
33
  import uncountable.types.api.entity.get_entities_data as get_entities_data_t
34
34
  import uncountable.types.api.inputs.get_input_data as get_input_data_t
@@ -45,19 +45,19 @@ import uncountable.types.api.recipe_metadata.get_recipe_metadata_data as get_rec
45
45
  import uncountable.types.api.recipes.get_recipe_names as get_recipe_names_t
46
46
  import uncountable.types.api.recipes.get_recipe_output_metadata as get_recipe_output_metadata_t
47
47
  import uncountable.types.api.recipes.get_recipes_data as get_recipes_data_t
48
- from uncountable.types import id_source as id_source_t
49
- from uncountable.types import identifier as identifier_t
48
+ from uncountable.types import id_source_t
49
+ from uncountable.types import identifier_t
50
50
  import uncountable.types.api.entity.list_entities as list_entities_t
51
51
  import uncountable.types.api.id_source.list_id_source as list_id_source_t
52
52
  import uncountable.types.api.entity.lock_entity as lock_entity_t
53
53
  import uncountable.types.api.recipes.lock_recipes as lock_recipes_t
54
54
  import uncountable.types.api.id_source.match_id_source as match_id_source_t
55
- from uncountable.types import permissions as permissions_t
56
- from uncountable.types import post_base as post_base_t
57
- from uncountable.types import recipe_identifiers as recipe_identifiers_t
58
- from uncountable.types import recipe_links as recipe_links_t
59
- from uncountable.types import recipe_metadata as recipe_metadata_t
60
- from uncountable.types import recipe_workflow_steps as recipe_workflow_steps_t
55
+ from uncountable.types import permissions_t
56
+ from uncountable.types import post_base_t
57
+ from uncountable.types import recipe_identifiers_t
58
+ from uncountable.types import recipe_links_t
59
+ from uncountable.types import recipe_metadata_t
60
+ from uncountable.types import recipe_workflow_steps_t
61
61
  import uncountable.types.api.recipes.remove_recipe_from_project as remove_recipe_from_project_t
62
62
  import uncountable.types.api.recipe_links.remove_recipe_link as remove_recipe_link_t
63
63
  import uncountable.types.api.entity.resolve_entity_ids as resolve_entity_ids_t
@@ -1,47 +1,10 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
12
- from pkgs.serialization import serial_class
13
- from . import base as base_t
14
-
15
- __all__: list[str] = [
16
- "Curve",
17
- "CurveAxisType",
18
- "CurveValue",
19
- ]
20
-
21
-
22
- # DO NOT MODIFY -- This file is generated by type_spec
23
- class CurveAxisType(StrEnum):
24
- NUMERIC = "numeric"
25
- TIMESTAMP = "timestamp"
26
-
27
-
28
- # DO NOT MODIFY -- This file is generated by type_spec
29
- @dataclass(kw_only=True)
30
- class Curve:
31
- id: base_t.ObjectId
32
- x_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC], typing.Literal[CurveAxisType.TIMESTAMP]]
33
- x_values: list[CurveValue]
34
- y_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC]]
35
- y_values: list[CurveValue]
36
-
37
-
38
5
  # DO NOT MODIFY -- This file is generated by type_spec
39
- @serial_class(
40
- to_string_values={"quantity"},
41
- )
42
- @dataclass(kw_only=True)
43
- class CurveValue:
44
- index: int
45
- quantity: typing.Optional[Decimal] = None
46
- quantity_timestamp: typing.Optional[datetime.datetime] = None
6
+ # Kept only for SDK backwards compatibility
7
+ from .curves_t import CurveAxisType as CurveAxisType
8
+ from .curves_t import Curve as Curve
9
+ from .curves_t import CurveValue as CurveValue
47
10
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,47 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from dataclasses import dataclass
12
+ from pkgs.serialization import serial_class
13
+ from . import base_t
14
+
15
+ __all__: list[str] = [
16
+ "Curve",
17
+ "CurveAxisType",
18
+ "CurveValue",
19
+ ]
20
+
21
+
22
+ # DO NOT MODIFY -- This file is generated by type_spec
23
+ class CurveAxisType(StrEnum):
24
+ NUMERIC = "numeric"
25
+ TIMESTAMP = "timestamp"
26
+
27
+
28
+ # DO NOT MODIFY -- This file is generated by type_spec
29
+ @dataclass(kw_only=True)
30
+ class Curve:
31
+ id: base_t.ObjectId
32
+ x_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC], typing.Literal[CurveAxisType.TIMESTAMP]]
33
+ x_values: list[CurveValue]
34
+ y_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC]]
35
+ y_values: list[CurveValue]
36
+
37
+
38
+ # DO NOT MODIFY -- This file is generated by type_spec
39
+ @serial_class(
40
+ to_string_values={"quantity"},
41
+ )
42
+ @dataclass(kw_only=True)
43
+ class CurveValue:
44
+ index: int
45
+ quantity: typing.Optional[Decimal] = None
46
+ quantity_timestamp: typing.Optional[datetime.datetime] = None
47
+ # DO NOT MODIFY -- This file is generated by type_spec