ormlambda 2.9.0__py3-none-any.whl → 2.9.4__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/common/abstract_classes/abstract_model.py +25 -11
- ormlambda/common/abstract_classes/decomposition_query.py +106 -91
- ormlambda/common/errors/__init__.py +3 -0
- ormlambda/common/interfaces/ICustomAlias.py +4 -0
- ormlambda/common/interfaces/IDecompositionQuery.py +5 -1
- ormlambda/common/interfaces/IRepositoryBase.py +1 -1
- ormlambda/common/interfaces/IStatements.py +97 -42
- ormlambda/databases/my_sql/clauses/alias.py +31 -0
- ormlambda/databases/my_sql/clauses/group_by.py +2 -2
- ormlambda/databases/my_sql/clauses/joins.py +39 -1
- ormlambda/databases/my_sql/clauses/select.py +12 -9
- ormlambda/databases/my_sql/repository.py +36 -25
- ormlambda/databases/my_sql/statements.py +52 -37
- ormlambda/model_base.py +3 -3
- {ormlambda-2.9.0.dist-info → ormlambda-2.9.4.dist-info}/METADATA +1 -1
- {ormlambda-2.9.0.dist-info → ormlambda-2.9.4.dist-info}/RECORD +18 -15
- {ormlambda-2.9.0.dist-info → ormlambda-2.9.4.dist-info}/LICENSE +0 -0
- {ormlambda-2.9.0.dist-info → ormlambda-2.9.4.dist-info}/WHEEL +0 -0
@@ -4,6 +4,7 @@ import inspect
|
|
4
4
|
from mysql.connector import MySQLConnection, errors, errorcode
|
5
5
|
import functools
|
6
6
|
|
7
|
+
|
7
8
|
if TYPE_CHECKING:
|
8
9
|
from ormlambda import Table
|
9
10
|
from ormlambda.components.where.abstract_where import AbstractWhere
|
@@ -13,6 +14,8 @@ if TYPE_CHECKING:
|
|
13
14
|
from ormlambda.common.interfaces import IAggregate
|
14
15
|
from ormlambda.common.interfaces.IStatements import WhereTypes
|
15
16
|
|
17
|
+
from ormlambda.utils.foreign_key import ForeignKey
|
18
|
+
|
16
19
|
from ormlambda import AbstractSQLStatements
|
17
20
|
from .clauses import DeleteQuery
|
18
21
|
from .clauses import InsertQuery
|
@@ -29,7 +32,7 @@ from .clauses import Count
|
|
29
32
|
from .clauses import GroupBy
|
30
33
|
|
31
34
|
|
32
|
-
from ormlambda.utils import
|
35
|
+
from ormlambda.utils import Table
|
33
36
|
from ormlambda.common.enums import JoinType
|
34
37
|
from . import functions as func
|
35
38
|
|
@@ -46,8 +49,8 @@ def clear_list(f: Callable[..., Any]):
|
|
46
49
|
return wrapper
|
47
50
|
|
48
51
|
|
49
|
-
class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
50
|
-
def __init__(self, model: T, repository: IRepositoryBase[MySQLConnection]) -> None:
|
52
|
+
class MySQLStatements[T: Table, *Ts](AbstractSQLStatements[T, *Ts, MySQLConnection]):
|
53
|
+
def __init__(self, model: tuple[T, *Ts], repository: IRepositoryBase[MySQLConnection]) -> None:
|
51
54
|
super().__init__(model, repository=repository)
|
52
55
|
|
53
56
|
@property
|
@@ -141,24 +144,17 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
|
141
144
|
self,
|
142
145
|
selection: Callable[[T], tuple] = lambda x: "*",
|
143
146
|
alias=True,
|
144
|
-
alias_name=
|
147
|
+
alias_name="count",
|
145
148
|
) -> IQuery:
|
146
149
|
return Count[T](self._model, selection, alias=alias, alias_name=alias_name)
|
147
150
|
|
148
|
-
@override
|
149
|
-
def join(self, table_left: Table, table_right: Table, *, by: str) -> IStatements_two_generic[T, MySQLConnection]:
|
150
|
-
where = ForeignKey.MAPPED[table_left.__table_name__][table_right.__table_name__]
|
151
|
-
join_query = JoinSelector[table_left, Table](table_left, table_right, JoinType(by), where=where)
|
152
|
-
self._query_list["join"].append(join_query)
|
153
|
-
return self
|
154
|
-
|
155
151
|
@override
|
156
152
|
def where(self, conditions: WhereTypes = lambda: None, **kwargs) -> IStatements_two_generic[T, MySQLConnection]:
|
157
153
|
# FIXME [x]: I've wrapped self._model into tuple to pass it instance attr. Idk if it's correct
|
158
154
|
|
159
155
|
if isinstance(conditions, Iterable):
|
160
156
|
for x in conditions:
|
161
|
-
self._query_list["where"].append(WhereCondition[T](function=x, instances=
|
157
|
+
self._query_list["where"].append(WhereCondition[T](function=x, instances=self._models, **kwargs))
|
162
158
|
return self
|
163
159
|
|
164
160
|
where_query = WhereCondition[T](function=conditions, instances=(self._model,), **kwargs)
|
@@ -188,7 +184,19 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
|
188
184
|
return func.Sum[T](self._model, column=column, alias=alias, alias_name=alias_name)
|
189
185
|
|
190
186
|
@override
|
191
|
-
def
|
187
|
+
def join[*FKTables](self, joins) -> IStatements_two_generic[T, *FKTables, MySQLConnection]:
|
188
|
+
if not isinstance(joins[0], tuple):
|
189
|
+
joins = (joins,)
|
190
|
+
new_tables: list[Type[Table]] = [self._model]
|
191
|
+
for table, where in joins:
|
192
|
+
new_tables.append(table)
|
193
|
+
join_query = JoinSelector[T, type(table)](self._model, table, by=JoinType.INNER_JOIN, where=where)
|
194
|
+
self._query_list["join"].append(join_query)
|
195
|
+
self._models = new_tables
|
196
|
+
return self
|
197
|
+
|
198
|
+
@override
|
199
|
+
def select[TValue, TFlavour, *Ts](self, selector: Optional[Callable[[T, *Ts], tuple[TValue, *Ts]]] = lambda: None, *, flavour: Optional[Type[TFlavour]] = None, by: JoinType = JoinType.INNER_JOIN, **kwargs):
|
192
200
|
if len(inspect.signature(selector).parameters) == 0:
|
193
201
|
# COMMENT: if we do not specify any lambda function we assumed the user want to retreive only elements of the Model itself avoiding other models
|
194
202
|
result = self.select(selector=lambda x: (x,), flavour=flavour, by=by)
|
@@ -197,19 +205,28 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
|
197
205
|
if flavour:
|
198
206
|
return result
|
199
207
|
return () if not result else result[0]
|
200
|
-
|
208
|
+
|
209
|
+
joins = self._query_list.pop("join", None)
|
210
|
+
select = Select[T, *Ts](
|
211
|
+
self._models,
|
212
|
+
lambda_query=selector,
|
213
|
+
by=by,
|
214
|
+
alias=False,
|
215
|
+
joins=joins,
|
216
|
+
)
|
201
217
|
self._query_list["select"].append(select)
|
202
218
|
|
203
|
-
|
219
|
+
self._query: str = self._build()
|
220
|
+
|
204
221
|
if flavour:
|
205
|
-
result = self._return_flavour(query, flavour, select)
|
206
|
-
if issubclass(flavour, tuple) and isinstance(selector(self.
|
222
|
+
result = self._return_flavour(self.query, flavour, select, **kwargs)
|
223
|
+
if issubclass(flavour, tuple) and isinstance(selector(*self._models), property):
|
207
224
|
return tuple([x[0] for x in result])
|
208
225
|
return result
|
209
|
-
return self._return_model(select, query)
|
226
|
+
return self._return_model(select, self.query)
|
210
227
|
|
211
228
|
@override
|
212
|
-
def select_one[TValue, TFlavour, *Ts](self, selector: Optional[Callable[[T], tuple[TValue, *Ts]]] = lambda: None, *, flavour: Optional[Type[TFlavour]] = None, by: JoinType = JoinType.INNER_JOIN):
|
229
|
+
def select_one[TValue, TFlavour, *Ts](self, selector: Optional[Callable[[T, *Ts], tuple[TValue, *Ts]]] = lambda: None, *, flavour: Optional[Type[TFlavour]] = None, by: JoinType = JoinType.INNER_JOIN):
|
213
230
|
self.limit(1)
|
214
231
|
if len(inspect.signature(selector).parameters) == 0:
|
215
232
|
response = self.select(selector=lambda x: (x,), flavour=flavour, by=by)
|
@@ -226,11 +243,11 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
|
226
243
|
return tuple([res[0] for res in response])
|
227
244
|
|
228
245
|
@override
|
229
|
-
def group_by
|
246
|
+
def group_by(self, column: str | Callable[[T, *Ts], Any]):
|
230
247
|
if isinstance(column, str):
|
231
|
-
groupby = GroupBy[T, tuple[*Ts]](self.
|
248
|
+
groupby = GroupBy[T, tuple[*Ts]](self._models, lambda x: column)
|
232
249
|
else:
|
233
|
-
groupby = GroupBy[T, tuple[*Ts]](self.
|
250
|
+
groupby = GroupBy[T, tuple[*Ts]](self._models, column)
|
234
251
|
# Only can be one LIMIT SQL parameter. We only use the last LimitQuery
|
235
252
|
self._query_list["group by"].append(groupby)
|
236
253
|
return self
|
@@ -240,26 +257,21 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
|
240
257
|
def _build(self) -> str:
|
241
258
|
query_list: list[str] = []
|
242
259
|
for x in self.__order__:
|
243
|
-
|
260
|
+
if len(self._query_list) == 0:
|
261
|
+
break
|
262
|
+
|
263
|
+
sub_query: Optional[list[IQuery]] = self._query_list.pop(x, None)
|
244
264
|
if sub_query is None:
|
245
265
|
continue
|
246
266
|
|
247
267
|
if isinstance(sub_query[0], WhereCondition):
|
248
268
|
query_ = self.__build_where_clause(sub_query)
|
249
269
|
|
250
|
-
# we must check if any join already exists on query string
|
251
|
-
elif isinstance(sub_query[0], JoinSelector):
|
252
|
-
select_query: str = self._query_list["select"][0].query
|
253
|
-
query_ = ""
|
254
|
-
for join in sub_query:
|
255
|
-
if join.query not in select_query:
|
256
|
-
query_ += f"\n{join.query}"
|
257
|
-
|
258
270
|
elif isinstance((select := sub_query[0]), Select):
|
259
271
|
query_: str = ""
|
260
272
|
where_joins = self.__create_necessary_inner_join()
|
261
273
|
if where_joins:
|
262
|
-
select.
|
274
|
+
select._joins.update(where_joins)
|
263
275
|
query_ = select.query
|
264
276
|
|
265
277
|
else:
|
@@ -277,18 +289,21 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
|
|
277
289
|
query += f" {and_} ({clause})"
|
278
290
|
return query
|
279
291
|
|
280
|
-
def __create_necessary_inner_join(self) -> Optional[set[
|
292
|
+
def __create_necessary_inner_join(self) -> Optional[set[JoinSelector]]:
|
281
293
|
# When we applied filters in any table that we wont select any column, we need to add manually all neccessary joins to achieve positive result.
|
282
294
|
if "where" not in self._query_list:
|
283
295
|
return None
|
284
296
|
|
285
|
-
res = []
|
286
297
|
for where in self._query_list["where"]:
|
287
298
|
where: AbstractWhere
|
288
299
|
|
289
300
|
tables = where.get_involved_tables()
|
290
301
|
|
291
302
|
if tables:
|
292
|
-
[
|
293
|
-
|
294
|
-
|
303
|
+
# FIXME [ ]: Refactor to avoid copy and paste the same code of the '_add_fk_relationship' method
|
304
|
+
joins = []
|
305
|
+
for ltable, rtable in tables:
|
306
|
+
lambda_relationship = ForeignKey.MAPPED[ltable.__table_name__].referenced_tables[rtable.__table_name__].relationship
|
307
|
+
joins.append(JoinSelector(ltable, rtable, JoinType.INNER_JOIN, where=lambda_relationship))
|
308
|
+
return set(joins)
|
309
|
+
return None
|
ormlambda/model_base.py
CHANGED
@@ -10,20 +10,20 @@ from .databases.my_sql import MySQLStatements, MySQLRepository
|
|
10
10
|
# endregion
|
11
11
|
|
12
12
|
|
13
|
-
class BaseModel[T: Type[Table]]:
|
13
|
+
class BaseModel[T: Type[Table], *Ts]:
|
14
14
|
"""
|
15
15
|
Class to select the correct AbstractSQLStatements class depends on the repository.
|
16
16
|
|
17
17
|
Contiene los metodos necesarios para hacer consultas a una tabla
|
18
18
|
"""
|
19
19
|
|
20
|
-
statements_dicc: dict[Type[IRepositoryBase], Type[AbstractSQLStatements[T, IRepositoryBase]]] = {
|
20
|
+
statements_dicc: dict[Type[IRepositoryBase], Type[AbstractSQLStatements[T, *Ts, IRepositoryBase]]] = {
|
21
21
|
MySQLRepository: MySQLStatements,
|
22
22
|
}
|
23
23
|
|
24
24
|
# region Constructor
|
25
25
|
|
26
|
-
def __new__[TRepo](cls, model: T, repository: IRepositoryBase[TRepo]) -> IStatements_two_generic[T, TRepo]:
|
26
|
+
def __new__[TRepo](cls, model: tuple[T, *Ts], repository: IRepositoryBase[TRepo]) -> IStatements_two_generic[T, *Ts, TRepo]:
|
27
27
|
if repository is None:
|
28
28
|
raise ValueError("`None` cannot be passed to the `repository` attribute when calling the `BaseModel` class")
|
29
29
|
cls: AbstractSQLStatements[T, TRepo] = cls.statements_dicc.get(type(repository), None)
|
@@ -1,19 +1,21 @@
|
|
1
1
|
ormlambda/__init__.py,sha256=lWQxjf2cQ2bXenNaDpoy2Bar6imiPlzc4nK0hkIYhC0,723
|
2
2
|
ormlambda/common/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
3
3
|
ormlambda/common/abstract_classes/__init__.py,sha256=tk2J4Mn_nD-1ZjtMVBE5FH7KR_8ppN_1Kx1s6c38GjM,167
|
4
|
-
ormlambda/common/abstract_classes/abstract_model.py,sha256=
|
5
|
-
ormlambda/common/abstract_classes/decomposition_query.py,sha256=
|
4
|
+
ormlambda/common/abstract_classes/abstract_model.py,sha256=xmpr7_Hn5r1bRG2UtOKdhlZgXUqgFGuTTXsmm4LqmEI,5100
|
5
|
+
ormlambda/common/abstract_classes/decomposition_query.py,sha256=vX4H-QLGo7mEuDgyXuKSd_1RySywN3fSislrmU4M-No,13791
|
6
6
|
ormlambda/common/abstract_classes/non_query_base.py,sha256=5jhvyT7OZaJxlGp9XMP3vQ4ei5QQZBn-fFtJnD640mE,980
|
7
7
|
ormlambda/common/abstract_classes/query_base.py,sha256=6qUFPwsVx45kUW3b66pHiSyjhcH4mzbdkddlGeUnG7c,266
|
8
8
|
ormlambda/common/enums/__init__.py,sha256=4lVKCHi1JalwgNzjsAXqX-C54NJEH83y2v5baMO8fN4,103
|
9
9
|
ormlambda/common/enums/condition_types.py,sha256=mDPMrtzZu4IYv3-q5Zw4NNgwUoNAx4lih5SIDFRn1Qo,309
|
10
10
|
ormlambda/common/enums/join_type.py,sha256=7LEhE34bzYOwJxe8yxPJo_EjQpGylgClAPX1Wt3z4n4,292
|
11
|
+
ormlambda/common/errors/__init__.py,sha256=cWFOYuAauXxzYyGKVP97Uy0EIim5D8ewoTyK-hXkonY,184
|
11
12
|
ormlambda/common/interfaces/IAggregate.py,sha256=i9zZIYrstP2oolUYqR-udeQQl7M0NwSzrr-VUL0b5HI,271
|
12
|
-
ormlambda/common/interfaces/
|
13
|
+
ormlambda/common/interfaces/ICustomAlias.py,sha256=_4r8ew9trUY_DJWdYUZXhJCe_I62HUr7ZdsmW6Ln98M,121
|
14
|
+
ormlambda/common/interfaces/IDecompositionQuery.py,sha256=7B4cnbJbyESk8GltS1A8wCXr56T_6kZJNIij66CcvPA,1447
|
13
15
|
ormlambda/common/interfaces/INonQueryCommand.py,sha256=7CjLW4sKqkR5zUIGvhRXOtzTs6vypJW1a9EJHlgCw2c,260
|
14
16
|
ormlambda/common/interfaces/IQueryCommand.py,sha256=hfzCosK4-n8RJIb2PYs8b0qU3TNmfYluZXBf47KxxKs,331
|
15
|
-
ormlambda/common/interfaces/IRepositoryBase.py,sha256=
|
16
|
-
ormlambda/common/interfaces/IStatements.py,sha256=
|
17
|
+
ormlambda/common/interfaces/IRepositoryBase.py,sha256=M4pD4t6tXo5WaRhwu2vsza1FoAj2S-rEJKjPfKeSRn0,1134
|
18
|
+
ormlambda/common/interfaces/IStatements.py,sha256=RQpOy3REjRf9SV9kDo0ohEzfkzkVBxD_gSiM-Dii5-Y,12821
|
17
19
|
ormlambda/common/interfaces/__init__.py,sha256=00ca9a-u_A8DzyEyxPfBMxfqLKFzzUgJaeNmoRitAbA,360
|
18
20
|
ormlambda/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
21
|
ormlambda/components/delete/IDelete.py,sha256=06ZEdbKBxsHSwsGMBu0E1om4WJjojZAm-L3b95eQrcc,139
|
@@ -33,18 +35,19 @@ ormlambda/components/where/abstract_where.py,sha256=93tIJBC81OUUVV6il7mISibBwqJe
|
|
33
35
|
ormlambda/databases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
36
|
ormlambda/databases/my_sql/__init__.py,sha256=3PbOp4WqxJzFOSRwBozqyNtQi25cLLdiJFPDzEnSI70,115
|
35
37
|
ormlambda/databases/my_sql/clauses/__init__.py,sha256=F7p---sNQBefi_dgydV6Wp1YuOwDzvSQOdbcjWtBi2k,767
|
38
|
+
ormlambda/databases/my_sql/clauses/alias.py,sha256=yRBEJ1IlL7j8ZozjR-4jtQNkJZDweu-1VNLJEOyA4o8,887
|
36
39
|
ormlambda/databases/my_sql/clauses/count.py,sha256=UFJD-ELp-xvOyPbvYX37GvRZsP8M_axambnI7_h91yA,1177
|
37
40
|
ormlambda/databases/my_sql/clauses/create_database.py,sha256=WnWaAuhxeE71NZKXW37WZ-msRqjum7TFCSRK1IGdSTE,1279
|
38
41
|
ormlambda/databases/my_sql/clauses/delete.py,sha256=nUKNQgwF5YUfzk2icWpecYjrGk5DeXpp7eiwtWCf_3c,1924
|
39
42
|
ormlambda/databases/my_sql/clauses/drop_database.py,sha256=nMM0YUbcH0D9X3bU70Uc6S_dsIrAZy-IrYuIKrQZNrg,505
|
40
43
|
ormlambda/databases/my_sql/clauses/drop_table.py,sha256=meX4e-pVPQ7UwlPSHV5e9HHRblI1BlkLSc7ssl8WUiI,592
|
41
|
-
ormlambda/databases/my_sql/clauses/group_by.py,sha256=
|
44
|
+
ormlambda/databases/my_sql/clauses/group_by.py,sha256=k2idhaHOfLFwc6XNwhai6LMoAySp6efBTsWCOBVzsc8,1052
|
42
45
|
ormlambda/databases/my_sql/clauses/insert.py,sha256=mnOy62U4go0Ub6tmmgn8DRRWvPN12WRE5lqpCNbyR70,3136
|
43
|
-
ormlambda/databases/my_sql/clauses/joins.py,sha256=
|
46
|
+
ormlambda/databases/my_sql/clauses/joins.py,sha256=2SHRAah4FDzYwCDfpqz9SLU0cFH20mL-epP_FCPgBxM,4402
|
44
47
|
ormlambda/databases/my_sql/clauses/limit.py,sha256=a4lI8FVRKpfXwBQTXdkbVtlQkmzcjE20ymiCy1IaSc4,391
|
45
48
|
ormlambda/databases/my_sql/clauses/offset.py,sha256=81170JhsQndjKlDfQj1ll-tiYHQbW8SuU4IE3mhQF7Y,395
|
46
49
|
ormlambda/databases/my_sql/clauses/order.py,sha256=XTMtR5ObAJxq8eTHp392rykQD991ecJ95dyXXLUpgeU,1680
|
47
|
-
ormlambda/databases/my_sql/clauses/select.py,sha256=
|
50
|
+
ormlambda/databases/my_sql/clauses/select.py,sha256=q-rJWbYtfgKEGf-OOH3ToGY90KXGzH3FnKHTc0xsAbM,1962
|
48
51
|
ormlambda/databases/my_sql/clauses/update.py,sha256=d2nSLiGe8OUk0ASgGxchit_1DL-Yg8U-DUtBbgpfkto,1571
|
49
52
|
ormlambda/databases/my_sql/clauses/upsert.py,sha256=eW2pQ4ax-GKuXiaWKoSRSS1GrHuILJBsmj83ADbBQ34,1951
|
50
53
|
ormlambda/databases/my_sql/clauses/where_condition.py,sha256=UgU5vnTqFAx91wKwnECpww5tETDZ9F7IdC_SiZOgZhI,8336
|
@@ -53,9 +56,9 @@ ormlambda/databases/my_sql/functions/concat.py,sha256=cZztl5eSATpYMKVKfyPbul6Ooc
|
|
53
56
|
ormlambda/databases/my_sql/functions/max.py,sha256=zrO_RBKsHhyokEmSpPI6Yg5OY6Jf4GGp2RveBJdOuuA,1190
|
54
57
|
ormlambda/databases/my_sql/functions/min.py,sha256=SEVuUdIJNz9zM5za1kLTWalFkhErjsjyBb8SU8n0F94,1190
|
55
58
|
ormlambda/databases/my_sql/functions/sum.py,sha256=akKYr2dI8TZS5MDvybfHn_idhPOvEH0cj6mDRQIHe-M,1188
|
56
|
-
ormlambda/databases/my_sql/repository.py,sha256=
|
57
|
-
ormlambda/databases/my_sql/statements.py,sha256=
|
58
|
-
ormlambda/model_base.py,sha256=
|
59
|
+
ormlambda/databases/my_sql/repository.py,sha256=6qrP-JC4tvUxin3ixGKBeuqvU9cl9mkjNCdwjWZQA9Y,9059
|
60
|
+
ormlambda/databases/my_sql/statements.py,sha256=h7tcyCnGaT2nvWyGhfepLTfgn8bMi5f_Bi_09jOfZm4,12455
|
61
|
+
ormlambda/model_base.py,sha256=_UGTnin-yUi9ecT-28YY6TniIPdrje-jMFD3QXyZD6c,1243
|
59
62
|
ormlambda/utils/__init__.py,sha256=ywMdWqmA2jHj19-W-S04yfaYF5hv4IZ1lZDq0B8Jnjs,142
|
60
63
|
ormlambda/utils/column.py,sha256=SqbX8N63_RwXNrMXuVMOpatDw--aLc47o3kG1sEXhNs,3413
|
61
64
|
ormlambda/utils/dtypes.py,sha256=Ji4QOyKD0n9bKe7yXIIduy9uEX5BaXolQSIsx0NXYJY,7843
|
@@ -72,7 +75,7 @@ ormlambda/utils/module_tree/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
72
75
|
ormlambda/utils/module_tree/dfs_traversal.py,sha256=lSF03G63XtJFLp03ueAmsHMBvhUkjptDbK3IugXm8iU,1425
|
73
76
|
ormlambda/utils/module_tree/dynamic_module.py,sha256=zwvjU3U2cz6H2CDp9Gncs5D5bSAyfITNa2SDqFDl8rw,8551
|
74
77
|
ormlambda/utils/table_constructor.py,sha256=ch1geCSJIQnnv_D_uzfYk6do533kjtZyeCIh2t0_dkU,10863
|
75
|
-
ormlambda-2.9.
|
76
|
-
ormlambda-2.9.
|
77
|
-
ormlambda-2.9.
|
78
|
-
ormlambda-2.9.
|
78
|
+
ormlambda-2.9.4.dist-info/LICENSE,sha256=xBprFw8GJLdHMOoUqDk0427EvjIcbEREvXXVFULuuXU,1080
|
79
|
+
ormlambda-2.9.4.dist-info/METADATA,sha256=URSNrN9Sg-EsXEJ-XI7iBDBXmB-V7rTCX1jvysybIb8,8461
|
80
|
+
ormlambda-2.9.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
81
|
+
ormlambda-2.9.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|