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.
- ormlambda/__init__.py +11 -9
- ormlambda/caster/__init__.py +3 -0
- ormlambda/caster/base_caster.py +69 -0
- ormlambda/caster/caster.py +48 -0
- ormlambda/caster/interfaces/ICaster.py +26 -0
- ormlambda/caster/interfaces/__init__.py +1 -0
- ormlambda/common/__init__.py +1 -1
- ormlambda/common/abstract_classes/__init__.py +3 -3
- ormlambda/common/abstract_classes/decomposition_query.py +117 -319
- ormlambda/common/abstract_classes/non_query_base.py +1 -1
- ormlambda/common/enums/condition_types.py +2 -1
- ormlambda/common/enums/join_type.py +4 -1
- ormlambda/common/errors/__init__.py +15 -2
- ormlambda/common/global_checker.py +28 -0
- ormlambda/common/interfaces/ICustomAlias.py +4 -1
- ormlambda/common/interfaces/IDecompositionQuery.py +9 -34
- ormlambda/common/interfaces/IJoinSelector.py +21 -0
- ormlambda/common/interfaces/__init__.py +4 -6
- ormlambda/components/__init__.py +4 -0
- ormlambda/components/insert/abstract_insert.py +1 -1
- ormlambda/components/select/ISelect.py +17 -0
- ormlambda/components/select/__init__.py +1 -0
- ormlambda/components/update/abstract_update.py +4 -4
- ormlambda/components/upsert/abstract_upsert.py +1 -1
- ormlambda/databases/__init__.py +5 -0
- ormlambda/databases/my_sql/__init__.py +3 -1
- ormlambda/databases/my_sql/caster/__init__.py +1 -0
- ormlambda/databases/my_sql/caster/caster.py +38 -0
- ormlambda/databases/my_sql/caster/read.py +39 -0
- ormlambda/databases/my_sql/caster/types/__init__.py +8 -0
- ormlambda/databases/my_sql/caster/types/bytes.py +31 -0
- ormlambda/databases/my_sql/caster/types/datetime.py +34 -0
- ormlambda/databases/my_sql/caster/types/float.py +31 -0
- ormlambda/databases/my_sql/caster/types/int.py +31 -0
- ormlambda/databases/my_sql/caster/types/iterable.py +31 -0
- ormlambda/databases/my_sql/caster/types/none.py +30 -0
- ormlambda/databases/my_sql/caster/types/point.py +43 -0
- ormlambda/databases/my_sql/caster/types/string.py +31 -0
- ormlambda/databases/my_sql/caster/write.py +37 -0
- ormlambda/databases/my_sql/clauses/ST_AsText.py +36 -0
- ormlambda/databases/my_sql/clauses/ST_Contains.py +31 -0
- ormlambda/databases/my_sql/clauses/__init__.py +6 -4
- ormlambda/databases/my_sql/clauses/alias.py +24 -21
- ormlambda/databases/my_sql/clauses/count.py +32 -28
- ormlambda/databases/my_sql/clauses/create_database.py +3 -4
- ormlambda/databases/my_sql/clauses/delete.py +10 -10
- ormlambda/databases/my_sql/clauses/drop_database.py +3 -5
- ormlambda/databases/my_sql/clauses/drop_table.py +3 -3
- ormlambda/databases/my_sql/clauses/group_by.py +4 -7
- ormlambda/databases/my_sql/clauses/insert.py +33 -19
- ormlambda/databases/my_sql/clauses/joins.py +66 -59
- ormlambda/databases/my_sql/clauses/limit.py +1 -1
- ormlambda/databases/my_sql/clauses/offset.py +1 -1
- ormlambda/databases/my_sql/clauses/order.py +36 -23
- ormlambda/databases/my_sql/clauses/select.py +25 -36
- ormlambda/databases/my_sql/clauses/update.py +38 -13
- ormlambda/databases/my_sql/clauses/upsert.py +2 -2
- ormlambda/databases/my_sql/clauses/where.py +45 -0
- ormlambda/databases/my_sql/functions/concat.py +24 -27
- ormlambda/databases/my_sql/functions/max.py +32 -28
- ormlambda/databases/my_sql/functions/min.py +32 -28
- ormlambda/databases/my_sql/functions/sum.py +32 -28
- ormlambda/databases/my_sql/join_context.py +75 -0
- ormlambda/databases/my_sql/repository/__init__.py +1 -0
- ormlambda/databases/my_sql/{repository.py → repository/repository.py} +114 -74
- ormlambda/databases/my_sql/statements.py +249 -153
- ormlambda/engine/__init__.py +0 -0
- ormlambda/engine/template.py +47 -0
- ormlambda/model/__init__.py +0 -0
- ormlambda/model/base_model.py +37 -0
- ormlambda/repository/__init__.py +2 -0
- ormlambda/repository/base_repository.py +14 -0
- ormlambda/repository/interfaces/IDatabaseConnection.py +12 -0
- ormlambda/{common → repository}/interfaces/IRepositoryBase.py +6 -5
- ormlambda/repository/interfaces/__init__.py +2 -0
- ormlambda/sql/__init__.py +3 -0
- ormlambda/sql/clause_info/__init__.py +3 -0
- ormlambda/sql/clause_info/clause_info.py +434 -0
- ormlambda/sql/clause_info/clause_info_context.py +87 -0
- ormlambda/sql/clause_info/interface/IAggregate.py +10 -0
- ormlambda/sql/clause_info/interface/__init__.py +1 -0
- ormlambda/sql/column.py +126 -0
- ormlambda/sql/comparer.py +156 -0
- ormlambda/sql/foreign_key.py +115 -0
- ormlambda/sql/interfaces/__init__.py +0 -0
- ormlambda/sql/table/__init__.py +1 -0
- ormlambda/{utils → sql/table}/fields.py +6 -5
- ormlambda/{utils → sql/table}/table_constructor.py +43 -91
- ormlambda/sql/types.py +25 -0
- ormlambda/statements/__init__.py +2 -0
- ormlambda/statements/base_statement.py +129 -0
- ormlambda/statements/interfaces/IStatements.py +331 -0
- ormlambda/statements/interfaces/__init__.py +1 -0
- ormlambda/statements/types.py +51 -0
- ormlambda/utils/__init__.py +1 -3
- ormlambda/utils/module_tree/__init__.py +1 -0
- ormlambda/utils/module_tree/dynamic_module.py +20 -14
- {ormlambda-2.11.2.dist-info → ormlambda-3.7.1.dist-info}/METADATA +132 -68
- ormlambda-3.7.1.dist-info/RECORD +117 -0
- ormlambda/common/abstract_classes/abstract_model.py +0 -115
- ormlambda/common/interfaces/IAggregate.py +0 -10
- ormlambda/common/interfaces/IStatements.py +0 -348
- ormlambda/components/where/__init__.py +0 -1
- ormlambda/components/where/abstract_where.py +0 -15
- ormlambda/databases/my_sql/clauses/where_condition.py +0 -222
- ormlambda/model_base.py +0 -36
- ormlambda/utils/column.py +0 -105
- ormlambda/utils/foreign_key.py +0 -81
- ormlambda/utils/lambda_disassembler/__init__.py +0 -4
- ormlambda/utils/lambda_disassembler/dis_types.py +0 -133
- ormlambda/utils/lambda_disassembler/disassembler.py +0 -69
- ormlambda/utils/lambda_disassembler/dtypes.py +0 -103
- ormlambda/utils/lambda_disassembler/name_of.py +0 -41
- ormlambda/utils/lambda_disassembler/nested_element.py +0 -44
- ormlambda/utils/lambda_disassembler/tree_instruction.py +0 -145
- ormlambda-2.11.2.dist-info/RECORD +0 -81
- /ormlambda/{utils → sql}/dtypes.py +0 -0
- {ormlambda-2.11.2.dist-info → ormlambda-3.7.1.dist-info}/LICENSE +0 -0
- {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
|
-
|
10
|
-
from .
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
from .
|
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,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
|
ormlambda/common/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
from .global_checker import GlobalChecker as GlobalChecker
|
@@ -1,3 +1,3 @@
|
|
1
|
-
from .non_query_base import NonQueryBase
|
2
|
-
from .
|
3
|
-
from .
|
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
|