industrial-model 0.1.28__tar.gz → 0.1.29__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {industrial_model-0.1.28 → industrial_model-0.1.29}/PKG-INFO +1 -1
  2. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/models/entities.py +52 -0
  3. {industrial_model-0.1.28 → industrial_model-0.1.29}/pyproject.toml +1 -1
  4. {industrial_model-0.1.28 → industrial_model-0.1.29}/.gitignore +0 -0
  5. {industrial_model-0.1.28 → industrial_model-0.1.29}/README.md +0 -0
  6. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/__init__.py +0 -0
  7. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/__init__.py +0 -0
  8. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/aggregation_mapper.py +0 -0
  9. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/filter_mapper.py +0 -0
  10. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/models.py +0 -0
  11. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/optimizer.py +0 -0
  12. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/query_mapper.py +0 -0
  13. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/query_result_mapper.py +0 -0
  14. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/search_mapper.py +0 -0
  15. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/sort_mapper.py +0 -0
  16. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/upsert_mapper.py +0 -0
  17. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/utils.py +0 -0
  18. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/cognite_adapters/view_mapper.py +0 -0
  19. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/config.py +0 -0
  20. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/constants.py +0 -0
  21. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/engines/__init__.py +0 -0
  22. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/engines/async_engine.py +0 -0
  23. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/engines/engine.py +0 -0
  24. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/models/__init__.py +0 -0
  25. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/models/base.py +0 -0
  26. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/models/schemas.py +0 -0
  27. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/py.typed +0 -0
  28. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/queries/__init__.py +0 -0
  29. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/queries/models.py +0 -0
  30. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/queries/params.py +0 -0
  31. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/queries/utils.py +0 -0
  32. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/statements/__init__.py +0 -0
  33. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/statements/expressions.py +0 -0
  34. {industrial_model-0.1.28 → industrial_model-0.1.29}/industrial_model/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: industrial-model
3
- Version: 0.1.28
3
+ Version: 0.1.29
4
4
  Summary: Industrial Model ORM
5
5
  Author-email: Lucas Alves <lucasrosaalves@gmail.com>
6
6
  Classifier: Programming Language :: Python
@@ -1,4 +1,5 @@
1
1
  from abc import abstractmethod
2
+ from datetime import date, datetime
2
3
  from typing import (
3
4
  Any,
4
5
  ClassVar,
@@ -10,6 +11,8 @@ from typing import (
10
11
 
11
12
  from pydantic import PrivateAttr
12
13
 
14
+ from industrial_model.statements import Column
15
+
13
16
  from .base import DBModelMetaclass, RootModel
14
17
 
15
18
 
@@ -45,6 +48,7 @@ class ViewInstanceConfig(TypedDict, total=False):
45
48
  view_external_id: str | None
46
49
  instance_spaces: list[str] | None
47
50
  instance_spaces_prefix: str | None
51
+ view_code: str | None
48
52
 
49
53
 
50
54
  class ViewInstance(InstanceId, metaclass=DBModelMetaclass):
@@ -56,6 +60,54 @@ class ViewInstance(InstanceId, metaclass=DBModelMetaclass):
56
60
  def get_view_external_id(cls) -> str:
57
61
  return cls.view_config.get("view_external_id") or cls.__name__
58
62
 
63
+ def generate_model_id(
64
+ self,
65
+ fields: list[str] | list[Column] | list[Any],
66
+ view_code_as_prefix: bool = True,
67
+ separator: str = "-",
68
+ ) -> str:
69
+ if not fields:
70
+ raise ValueError("Fields list cannot be empty")
71
+ field_values = self._get_field_values(fields)
72
+
73
+ view_code = self.view_config.get("view_code")
74
+
75
+ result = separator.join(field_values)
76
+ return (
77
+ f"{view_code}{separator}{result}"
78
+ if view_code_as_prefix and view_code
79
+ else result
80
+ )
81
+
82
+ def _get_field_values(
83
+ self, fields: list[str] | list[Column] | list[Any]
84
+ ) -> list[str]:
85
+ field_values: list[str] = []
86
+ for field in fields:
87
+ if not isinstance(field, str | Column):
88
+ field_type = type(field).__name__
89
+ raise TypeError(
90
+ f"Expected field to be a string or Column, got {field_type}"
91
+ )
92
+ field_name = self.get_field_name(
93
+ field.property if isinstance(field, Column) else field
94
+ )
95
+ if field_name is None:
96
+ raise ValueError(f"Field {field} not found in the model")
97
+ field_entry = getattr(self, field_name)
98
+
99
+ field_entry_str = ""
100
+ if isinstance(field_entry, str):
101
+ field_entry_str = field_entry
102
+ elif isinstance(field_entry, date | datetime):
103
+ field_entry_str = field_entry.isoformat()
104
+ elif isinstance(field_entry, InstanceId):
105
+ field_entry_str = field_entry.external_id
106
+ else:
107
+ field_entry_str = str(field_entry)
108
+ field_values.append(field_entry_str.replace(" ", ""))
109
+ return field_values
110
+
59
111
 
60
112
  class WritableViewInstance(ViewInstance):
61
113
  @abstractmethod
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "industrial-model"
3
- version = "0.1.28"
3
+ version = "0.1.29"
4
4
  description = "Industrial Model ORM"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"