ormlambda 2.11.2__py3-none-any.whl → 3.7.1__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.
Files changed (119) hide show
  1. ormlambda/__init__.py +11 -9
  2. ormlambda/caster/__init__.py +3 -0
  3. ormlambda/caster/base_caster.py +69 -0
  4. ormlambda/caster/caster.py +48 -0
  5. ormlambda/caster/interfaces/ICaster.py +26 -0
  6. ormlambda/caster/interfaces/__init__.py +1 -0
  7. ormlambda/common/__init__.py +1 -1
  8. ormlambda/common/abstract_classes/__init__.py +3 -3
  9. ormlambda/common/abstract_classes/decomposition_query.py +117 -319
  10. ormlambda/common/abstract_classes/non_query_base.py +1 -1
  11. ormlambda/common/enums/condition_types.py +2 -1
  12. ormlambda/common/enums/join_type.py +4 -1
  13. ormlambda/common/errors/__init__.py +15 -2
  14. ormlambda/common/global_checker.py +28 -0
  15. ormlambda/common/interfaces/ICustomAlias.py +4 -1
  16. ormlambda/common/interfaces/IDecompositionQuery.py +9 -34
  17. ormlambda/common/interfaces/IJoinSelector.py +21 -0
  18. ormlambda/common/interfaces/__init__.py +4 -6
  19. ormlambda/components/__init__.py +4 -0
  20. ormlambda/components/insert/abstract_insert.py +1 -1
  21. ormlambda/components/select/ISelect.py +17 -0
  22. ormlambda/components/select/__init__.py +1 -0
  23. ormlambda/components/update/abstract_update.py +4 -4
  24. ormlambda/components/upsert/abstract_upsert.py +1 -1
  25. ormlambda/databases/__init__.py +5 -0
  26. ormlambda/databases/my_sql/__init__.py +3 -1
  27. ormlambda/databases/my_sql/caster/__init__.py +1 -0
  28. ormlambda/databases/my_sql/caster/caster.py +38 -0
  29. ormlambda/databases/my_sql/caster/read.py +39 -0
  30. ormlambda/databases/my_sql/caster/types/__init__.py +8 -0
  31. ormlambda/databases/my_sql/caster/types/bytes.py +31 -0
  32. ormlambda/databases/my_sql/caster/types/datetime.py +34 -0
  33. ormlambda/databases/my_sql/caster/types/float.py +31 -0
  34. ormlambda/databases/my_sql/caster/types/int.py +31 -0
  35. ormlambda/databases/my_sql/caster/types/iterable.py +31 -0
  36. ormlambda/databases/my_sql/caster/types/none.py +30 -0
  37. ormlambda/databases/my_sql/caster/types/point.py +43 -0
  38. ormlambda/databases/my_sql/caster/types/string.py +31 -0
  39. ormlambda/databases/my_sql/caster/write.py +37 -0
  40. ormlambda/databases/my_sql/clauses/ST_AsText.py +36 -0
  41. ormlambda/databases/my_sql/clauses/ST_Contains.py +31 -0
  42. ormlambda/databases/my_sql/clauses/__init__.py +6 -4
  43. ormlambda/databases/my_sql/clauses/alias.py +24 -21
  44. ormlambda/databases/my_sql/clauses/count.py +32 -28
  45. ormlambda/databases/my_sql/clauses/create_database.py +3 -4
  46. ormlambda/databases/my_sql/clauses/delete.py +10 -10
  47. ormlambda/databases/my_sql/clauses/drop_database.py +3 -5
  48. ormlambda/databases/my_sql/clauses/drop_table.py +3 -3
  49. ormlambda/databases/my_sql/clauses/group_by.py +4 -7
  50. ormlambda/databases/my_sql/clauses/insert.py +33 -19
  51. ormlambda/databases/my_sql/clauses/joins.py +66 -59
  52. ormlambda/databases/my_sql/clauses/limit.py +1 -1
  53. ormlambda/databases/my_sql/clauses/offset.py +1 -1
  54. ormlambda/databases/my_sql/clauses/order.py +36 -23
  55. ormlambda/databases/my_sql/clauses/select.py +25 -36
  56. ormlambda/databases/my_sql/clauses/update.py +38 -13
  57. ormlambda/databases/my_sql/clauses/upsert.py +2 -2
  58. ormlambda/databases/my_sql/clauses/where.py +45 -0
  59. ormlambda/databases/my_sql/functions/concat.py +24 -27
  60. ormlambda/databases/my_sql/functions/max.py +32 -28
  61. ormlambda/databases/my_sql/functions/min.py +32 -28
  62. ormlambda/databases/my_sql/functions/sum.py +32 -28
  63. ormlambda/databases/my_sql/join_context.py +75 -0
  64. ormlambda/databases/my_sql/repository/__init__.py +1 -0
  65. ormlambda/databases/my_sql/{repository.py → repository/repository.py} +114 -74
  66. ormlambda/databases/my_sql/statements.py +249 -153
  67. ormlambda/engine/__init__.py +0 -0
  68. ormlambda/engine/template.py +47 -0
  69. ormlambda/model/__init__.py +0 -0
  70. ormlambda/model/base_model.py +37 -0
  71. ormlambda/repository/__init__.py +2 -0
  72. ormlambda/repository/base_repository.py +14 -0
  73. ormlambda/repository/interfaces/IDatabaseConnection.py +12 -0
  74. ormlambda/{common → repository}/interfaces/IRepositoryBase.py +6 -5
  75. ormlambda/repository/interfaces/__init__.py +2 -0
  76. ormlambda/sql/__init__.py +3 -0
  77. ormlambda/sql/clause_info/__init__.py +3 -0
  78. ormlambda/sql/clause_info/clause_info.py +434 -0
  79. ormlambda/sql/clause_info/clause_info_context.py +87 -0
  80. ormlambda/sql/clause_info/interface/IAggregate.py +10 -0
  81. ormlambda/sql/clause_info/interface/__init__.py +1 -0
  82. ormlambda/sql/column.py +126 -0
  83. ormlambda/sql/comparer.py +156 -0
  84. ormlambda/sql/foreign_key.py +115 -0
  85. ormlambda/sql/interfaces/__init__.py +0 -0
  86. ormlambda/sql/table/__init__.py +1 -0
  87. ormlambda/{utils → sql/table}/fields.py +6 -5
  88. ormlambda/{utils → sql/table}/table_constructor.py +43 -91
  89. ormlambda/sql/types.py +25 -0
  90. ormlambda/statements/__init__.py +2 -0
  91. ormlambda/statements/base_statement.py +129 -0
  92. ormlambda/statements/interfaces/IStatements.py +331 -0
  93. ormlambda/statements/interfaces/__init__.py +1 -0
  94. ormlambda/statements/types.py +51 -0
  95. ormlambda/utils/__init__.py +1 -3
  96. ormlambda/utils/module_tree/__init__.py +1 -0
  97. ormlambda/utils/module_tree/dynamic_module.py +20 -14
  98. {ormlambda-2.11.2.dist-info → ormlambda-3.7.1.dist-info}/METADATA +132 -68
  99. ormlambda-3.7.1.dist-info/RECORD +117 -0
  100. ormlambda/common/abstract_classes/abstract_model.py +0 -115
  101. ormlambda/common/interfaces/IAggregate.py +0 -10
  102. ormlambda/common/interfaces/IStatements.py +0 -348
  103. ormlambda/components/where/__init__.py +0 -1
  104. ormlambda/components/where/abstract_where.py +0 -15
  105. ormlambda/databases/my_sql/clauses/where_condition.py +0 -222
  106. ormlambda/model_base.py +0 -36
  107. ormlambda/utils/column.py +0 -105
  108. ormlambda/utils/foreign_key.py +0 -81
  109. ormlambda/utils/lambda_disassembler/__init__.py +0 -4
  110. ormlambda/utils/lambda_disassembler/dis_types.py +0 -133
  111. ormlambda/utils/lambda_disassembler/disassembler.py +0 -69
  112. ormlambda/utils/lambda_disassembler/dtypes.py +0 -103
  113. ormlambda/utils/lambda_disassembler/name_of.py +0 -41
  114. ormlambda/utils/lambda_disassembler/nested_element.py +0 -44
  115. ormlambda/utils/lambda_disassembler/tree_instruction.py +0 -145
  116. ormlambda-2.11.2.dist-info/RECORD +0 -81
  117. /ormlambda/{utils → sql}/dtypes.py +0 -0
  118. {ormlambda-2.11.2.dist-info → ormlambda-3.7.1.dist-info}/LICENSE +0 -0
  119. {ormlambda-2.11.2.dist-info → ormlambda-3.7.1.dist-info}/WHEEL +0 -0
ormlambda/__init__.py CHANGED
@@ -3,18 +3,20 @@ from .common.enums import (
3
3
  JoinType as JoinType,
4
4
  ConditionType as ConditionType,
5
5
  )
6
- from ormlambda.common.interfaces.IStatements import OrderType as OrderType
7
6
  # endregion
8
7
 
9
- from .common.abstract_classes import AbstractSQLStatements as AbstractSQLStatements
10
- from .common.interfaces import IRepositoryBase as IRepositoryBase
11
- from .utils import (
8
+ # region sql
9
+ from .sql import (
12
10
  Table as Table,
13
11
  Column as Column,
14
12
  ForeignKey as ForeignKey,
15
13
  )
16
- from .utils.lambda_disassembler import (
17
- Disassembler as Disassembler,
18
- nameof as nameof,
19
- )
20
- from .model_base import BaseModel as BaseModel # COMMENT: to avoid relative import we need to import BaseModel after import Table,Column, ForeignKey, IRepositoryBase and Disassembler
14
+ # endregion
15
+
16
+ from .repository import BaseRepository as BaseRepository
17
+ from .statements import BaseStatement as BaseStatement
18
+ from .statements.types import OrderType as OrderType
19
+ from .model.base_model import (
20
+ BaseModel as BaseModel,
21
+ ORM as ORM,
22
+ ) # COMMENT: to avoid relative import we need to import BaseModel after import Table,Column, ForeignKey, IRepositoryBase and Disassembler
@@ -0,0 +1,3 @@
1
+ from .base_caster import BaseCaster # noqa: F401
2
+ from .caster import Caster, PLACEHOLDER # noqa: F401
3
+ from .interfaces import ICaster # noqa: F401
@@ -0,0 +1,69 @@
1
+ from typing import Type, Callable, Optional, overload
2
+ import abc
3
+
4
+
5
+ class BaseCaster[TProp, TType](abc.ABC):
6
+ def __init__(self, value: TProp, type_value: TType):
7
+ self._value: TProp = value
8
+ self._type_value: TType = type_value
9
+
10
+ def __repr__(self):
11
+ return f"{BaseCaster.__name__}: [{type(self._value).__name__}] -> [{self.type_to_cast.__name__}]"
12
+
13
+ @overload
14
+ def wildcard_to_select(self, value: str) -> str: ...
15
+ @overload
16
+ def wildcard_to_select(self) -> str: ...
17
+
18
+ @abc.abstractmethod
19
+ def wildcard_to_select(self) -> str: ...
20
+
21
+ @overload
22
+ def wildcard_to_where(self, value: str) -> str: ...
23
+ @overload
24
+ def wildcard_to_where(self) -> str: ...
25
+
26
+ @abc.abstractmethod
27
+ def wildcard_to_where(self) -> str: ...
28
+
29
+ @overload
30
+ def wildcard_to_insert(self, value: str) -> str: ...
31
+ @overload
32
+ def wildcard_to_insert(self) -> str: ...
33
+
34
+ @abc.abstractmethod
35
+ def wildcard_to_insert(self) -> str: ...
36
+
37
+ @property
38
+ @abc.abstractmethod
39
+ def to_database(self) -> Type[TProp]: ...
40
+
41
+ @property
42
+ @abc.abstractmethod
43
+ def from_database(self) -> TProp: ...
44
+
45
+ @property
46
+ @abc.abstractmethod
47
+ def string_data(self) -> str: ...
48
+
49
+ @property
50
+ def value(self) -> TProp:
51
+ return self._value
52
+
53
+ @property
54
+ def value_type(self) -> Type[TProp]:
55
+ return type(self._value)
56
+
57
+ @property
58
+ def type_to_cast(self) -> TType:
59
+ return self._type_value
60
+
61
+ @staticmethod
62
+ def return_value_if_exists[TType, **P](func: Callable[P, Optional[TType]]) -> Callable[P, Optional[TType]]:
63
+ def wrapped(self: "BaseCaster") -> Optional[TType]:
64
+ if self._value is None:
65
+ return None
66
+
67
+ return func(self)
68
+
69
+ return wrapped
@@ -0,0 +1,48 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ from typing import Optional, Type, TYPE_CHECKING, Callable, overload
5
+
6
+ from ormlambda.common.global_checker import GlobalChecker
7
+ from ormlambda.sql.types import ColumnType
8
+ from ormlambda.engine.template import RepositoryTemplateDict
9
+
10
+ if TYPE_CHECKING:
11
+ from ormlambda.caster import BaseCaster
12
+ from ormlambda.repository import IRepositoryBase
13
+
14
+
15
+ PLACEHOLDER: str = "%s"
16
+
17
+
18
+ class Caster[TRepo]:
19
+ def __init__(self, repository: IRepositoryBase):
20
+ self._repository: IRepositoryBase = repository
21
+ self._caster = RepositoryTemplateDict().get(repository).caster
22
+
23
+ @overload
24
+ def for_column[T, TProp](self, column: Callable[[T], TProp], instance: T) -> BaseCaster[TProp, Type[TProp]]: ...
25
+ @overload
26
+ def for_column[T, TProp](self, column: TProp, instance: T) -> BaseCaster[TProp, Type[TProp]]: ...
27
+
28
+ def for_column[T, TProp: ColumnType](self, column: TProp | Callable[[T], TProp], instance: Optional[T]) -> BaseCaster[TProp]:
29
+ if not instance:
30
+ raise ValueError("You must specified an instance variable on the constructor before calling 'for_column' method")
31
+
32
+ if GlobalChecker.is_lambda_function(column):
33
+ column_type = column(type(instance)).dtype
34
+ value = column(instance)
35
+ else:
36
+ column_type = column.dtype
37
+ value = instance[column]
38
+
39
+ return self._caster.cast(value, column_type)
40
+
41
+ @overload
42
+ def for_value[TProp](self, value: TProp) -> BaseCaster[TProp, Type[TProp]]: ...
43
+ @overload
44
+ def for_value[TProp, TType](self, value: TProp, value_type: TType) -> BaseCaster[TProp, TType]: ...
45
+
46
+ def for_value[TProp, TType](self, value: TProp, value_type: Optional[TType] = None) -> BaseCaster[TProp, TType]:
47
+ column_type = value_type if value_type else type(value)
48
+ return self._caster.cast(value, column_type)
@@ -0,0 +1,26 @@
1
+ from __future__ import annotations
2
+ import abc
3
+ from typing import overload, TYPE_CHECKING, Type
4
+
5
+ if TYPE_CHECKING:
6
+ from ormlambda.caster import BaseCaster
7
+ from shapely import Point
8
+ from types import NoneType
9
+ from datetime import datetime
10
+
11
+
12
+ type ValidTypes = Type[str] | Type[int] | Type[float] | Type[Point] | Type[NoneType] | Type[datetime]
13
+
14
+
15
+ class ICaster(abc.ABC):
16
+ @abc.abstractmethod
17
+ @overload
18
+ @classmethod
19
+ def cast[TProp](cls, value: TProp) -> BaseCaster[TProp, Type[TProp]]: ...
20
+ @overload
21
+ @classmethod
22
+ def cast[TProp, TType](cls, value: TProp, type_value: TType) -> BaseCaster[TProp, TType]: ...
23
+
24
+ @classmethod
25
+ @abc.abstractmethod
26
+ def CASTER_SELECTOR(cls) -> dict[ValidTypes, Type[BaseCaster]]: ...
@@ -0,0 +1 @@
1
+ from .ICaster import ICaster # noqa: F401
@@ -1 +1 @@
1
-
1
+ from .global_checker import GlobalChecker as GlobalChecker
@@ -1,3 +1,3 @@
1
- from .non_query_base import NonQueryBase # noqa: F401
2
- from .abstract_model import AbstractSQLStatements # noqa: F401
3
- from .query_base import QueryBase # noqa: F401
1
+ from .non_query_base import NonQueryBase as NonQueryBase
2
+ from .query_base import QueryBase as QueryBase
3
+ from .decomposition_query import DecompositionQueryBase as DecompositionQueryBase