ormlambda 2.9.0__py3-none-any.whl → 2.10.0__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.
@@ -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 ForeignKey, Table
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=None,
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=(self._model,), **kwargs))
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,30 @@ 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 select[TValue, TFlavour, *Ts](self, selector: Optional[Callable[[T], tuple[TValue, *Ts]]] = lambda: None, *, flavour: Optional[Type[TFlavour]] = None, by: JoinType = JoinType.INNER_JOIN):
187
+ def join[*FKTables](
188
+ self,
189
+ table: Optional[T] = None,
190
+ relation: Optional[WhereCondition[T, *FKTables]] = None,
191
+ join_type: Optional[JoinType] = None,
192
+ ) -> IStatements_two_generic[T, *FKTables, MySQLConnection]:
193
+ if isinstance(table, type) and issubclass(table, Table):
194
+ joins = ((table, relation, join_type),)
195
+ else:
196
+ if any(len(x) != 3 for x in table):
197
+ raise ValueError("Each tuple inside of 'join' method must contain the referenced table, relation between columns and join type")
198
+ joins = table
199
+
200
+ new_tables: list[Type[Table]] = [self._model]
201
+
202
+ for table, where, by in joins:
203
+ new_tables.append(table)
204
+ join_query = JoinSelector[T, type(table)](self._model, table, by=by, where=where)
205
+ self._query_list["join"].append(join_query)
206
+ self._models = new_tables
207
+ return self
208
+
209
+ @override
210
+ 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
211
  if len(inspect.signature(selector).parameters) == 0:
193
212
  # 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
213
  result = self.select(selector=lambda x: (x,), flavour=flavour, by=by)
@@ -197,19 +216,28 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
197
216
  if flavour:
198
217
  return result
199
218
  return () if not result else result[0]
200
- select = Select[T](self._model, lambda_query=selector, by=by, alias=False)
219
+
220
+ joins = self._query_list.pop("join", None)
221
+ select = Select[T, *Ts](
222
+ self._models,
223
+ lambda_query=selector,
224
+ by=by,
225
+ alias=False,
226
+ joins=joins,
227
+ )
201
228
  self._query_list["select"].append(select)
202
229
 
203
- query: str = self._build()
230
+ self._query: str = self._build()
231
+
204
232
  if flavour:
205
- result = self._return_flavour(query, flavour, select)
206
- if issubclass(flavour, tuple) and isinstance(selector(self._model), property):
233
+ result = self._return_flavour(self.query, flavour, select, **kwargs)
234
+ if issubclass(flavour, tuple) and isinstance(selector(*self._models), property):
207
235
  return tuple([x[0] for x in result])
208
236
  return result
209
- return self._return_model(select, query)
237
+ return self._return_model(select, self.query)
210
238
 
211
239
  @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):
240
+ 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
241
  self.limit(1)
214
242
  if len(inspect.signature(selector).parameters) == 0:
215
243
  response = self.select(selector=lambda x: (x,), flavour=flavour, by=by)
@@ -226,11 +254,11 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
226
254
  return tuple([res[0] for res in response])
227
255
 
228
256
  @override
229
- def group_by[*Ts](self, column: str | Callable[[T], Any]) -> IStatements_two_generic[T, MySQLConnection]:
257
+ def group_by(self, column: str | Callable[[T, *Ts], Any]):
230
258
  if isinstance(column, str):
231
- groupby = GroupBy[T, tuple[*Ts]](self._model, lambda x: column)
259
+ groupby = GroupBy[T, tuple[*Ts]](self._models, lambda x: column)
232
260
  else:
233
- groupby = GroupBy[T, tuple[*Ts]](self._model, column)
261
+ groupby = GroupBy[T, tuple[*Ts]](self._models, column)
234
262
  # Only can be one LIMIT SQL parameter. We only use the last LimitQuery
235
263
  self._query_list["group by"].append(groupby)
236
264
  return self
@@ -240,26 +268,21 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
240
268
  def _build(self) -> str:
241
269
  query_list: list[str] = []
242
270
  for x in self.__order__:
243
- sub_query: Optional[list[IQuery]] = self._query_list.get(x, None)
271
+ if len(self._query_list) == 0:
272
+ break
273
+
274
+ sub_query: Optional[list[IQuery]] = self._query_list.pop(x, None)
244
275
  if sub_query is None:
245
276
  continue
246
277
 
247
278
  if isinstance(sub_query[0], WhereCondition):
248
279
  query_ = self.__build_where_clause(sub_query)
249
280
 
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
281
  elif isinstance((select := sub_query[0]), Select):
259
282
  query_: str = ""
260
283
  where_joins = self.__create_necessary_inner_join()
261
284
  if where_joins:
262
- select._fk_relationship.update(where_joins)
285
+ select._joins.update(where_joins)
263
286
  query_ = select.query
264
287
 
265
288
  else:
@@ -277,18 +300,21 @@ class MySQLStatements[T: Table](AbstractSQLStatements[T, MySQLConnection]):
277
300
  query += f" {and_} ({clause})"
278
301
  return query
279
302
 
280
- def __create_necessary_inner_join(self) -> Optional[set[tuple[Type[Table], Type[Table]]]]:
303
+ def __create_necessary_inner_join(self) -> Optional[set[JoinSelector]]:
281
304
  # 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
305
  if "where" not in self._query_list:
283
306
  return None
284
307
 
285
- res = []
286
308
  for where in self._query_list["where"]:
287
309
  where: AbstractWhere
288
310
 
289
311
  tables = where.get_involved_tables()
290
312
 
291
313
  if tables:
292
- [res.append(x) for x in tables]
293
-
294
- return set(res)
314
+ # FIXME [ ]: Refactor to avoid copy and paste the same code of the '_add_fk_relationship' method
315
+ joins = []
316
+ for ltable, rtable in tables:
317
+ lambda_relationship = ForeignKey.MAPPED[ltable.__table_name__].referenced_tables[rtable.__table_name__].relationship
318
+ joins.append(JoinSelector(ltable, rtable, JoinType.INNER_JOIN, where=lambda_relationship))
319
+ return set(joins)
320
+ 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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ormlambda
3
- Version: 2.9.0
3
+ Version: 2.10.0
4
4
  Summary: ORM designed to interact with the database (currently with MySQL) using lambda functions and nested functions
5
5
  Author: p-hzamora
6
6
  Author-email: p.hzamora@icloud.com
@@ -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=W7E3DDeFeQbnBX0ccLqmhUX3dCHHDCADK3bT2wyPEtk,4618
5
- ormlambda/common/abstract_classes/decomposition_query.py,sha256=0k1cTFftZZaRmjuYOEnZ-r7nqljTwcSlz1ZbEElnlbk,12586
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/IDecompositionQuery.py,sha256=dHdCxezbWwy-c4U4po2hQB8f_wa0wGFvA2TKaHBx0Do,1363
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=zGm7tDrFLKj3FMYN-MWI-em3INws27g2yByNYYMx0qk,1126
16
- ormlambda/common/interfaces/IStatements.py,sha256=XJ0hCp7_7wMclPvZmavpdr7unQshOXKZDasgVk6RfwU,10409
17
+ ormlambda/common/interfaces/IRepositoryBase.py,sha256=M4pD4t6tXo5WaRhwu2vsza1FoAj2S-rEJKjPfKeSRn0,1134
18
+ ormlambda/common/interfaces/IStatements.py,sha256=bew7bXGQ2YdT2BKko-RS35_w5qBLgo8FKyaSbr7ijqc,13130
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=xG8YhdaDWBm99EFMkzCsBJNhHOJy5lvXmpaHu3jClro,1042
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=U6JnUvQo7AXyEeK-X1jMvckXefgAB7ugSmJCZhH1XQI,3058
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=o0gjCt8cZfTkMsJwZcCt0XkSeFa2rlKz-0Ymi7XL5xU,1833
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=fj_RcMY6QhANvKRyfAnu6PEfvkrpiBXrlTvmeXUf5Vo,8823
57
- ormlambda/databases/my_sql/statements.py,sha256=ukP8ypxegCnxOuIEH99pNgWVUyOP-ELHD6GzfLEWUx4,12045
58
- ormlambda/model_base.py,sha256=RrAATQWX_bHJ0ZQ5sCHyJKA4NiR7ZJY4I6dqhnGWWAc,1216
59
+ ormlambda/databases/my_sql/repository.py,sha256=6qrP-JC4tvUxin3ixGKBeuqvU9cl9mkjNCdwjWZQA9Y,9059
60
+ ormlambda/databases/my_sql/statements.py,sha256=d__3pLfNObTmlUK8yL-N7fMm4C6hNZhrnCYM0CUEhgQ,12867
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.0.dist-info/LICENSE,sha256=xBprFw8GJLdHMOoUqDk0427EvjIcbEREvXXVFULuuXU,1080
76
- ormlambda-2.9.0.dist-info/METADATA,sha256=t2WNOq0P72brj6Qr1h_PXY0oXRJ85NjY6oYbn7l2REs,8461
77
- ormlambda-2.9.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
78
- ormlambda-2.9.0.dist-info/RECORD,,
78
+ ormlambda-2.10.0.dist-info/LICENSE,sha256=xBprFw8GJLdHMOoUqDk0427EvjIcbEREvXXVFULuuXU,1080
79
+ ormlambda-2.10.0.dist-info/METADATA,sha256=gPWslhcBiUlKHa2OCKwBwbWJUmZ4ObU12Kugr2Onv5M,8462
80
+ ormlambda-2.10.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
81
+ ormlambda-2.10.0.dist-info/RECORD,,