TypeDAL 3.14.3__py3-none-any.whl → 3.15.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.

Potentially problematic release.


This version of TypeDAL might be problematic. Click here for more details.

typedal/__about__.py CHANGED
@@ -5,4 +5,4 @@ This file contains the Version info for this package.
5
5
  # SPDX-FileCopyrightText: 2023-present Robin van der Noord <robinvandernoord@gmail.com>
6
6
  #
7
7
  # SPDX-License-Identifier: MIT
8
- __version__ = "3.14.3"
8
+ __version__ = "3.15.1"
typedal/core.py CHANGED
@@ -120,7 +120,8 @@ OnQuery: typing.TypeAlias = typing.Optional[
120
120
  ]
121
121
  ]
122
122
 
123
- To_Type = typing.TypeVar("To_Type", type[Any], Type[Any], str)
123
+ # To_Type = typing.TypeVar("To_Type", type[Any], Type[Any], str)
124
+ To_Type = typing.TypeVar("To_Type")
124
125
 
125
126
 
126
127
  class Relationship(typing.Generic[To_Type]):
@@ -201,6 +202,7 @@ class Relationship(typing.Generic[To_Type]):
201
202
  Get the table this relationship is bound to.
202
203
  """
203
204
  table = self.table # can be a string because db wasn't available yet
205
+
204
206
  if isinstance(table, str):
205
207
  if mapped := db._class_map.get(table):
206
208
  # yay
@@ -249,7 +251,9 @@ class Relationship(typing.Generic[To_Type]):
249
251
  return None
250
252
 
251
253
 
252
- def relationship(_type: To_Type, condition: Condition = None, join: JOIN_OPTIONS = None, on: OnQuery = None) -> To_Type:
254
+ def relationship(
255
+ _type: typing.Type[To_Type], condition: Condition = None, join: JOIN_OPTIONS = None, on: OnQuery = None
256
+ ) -> To_Type:
253
257
  """
254
258
  Define a relationship to another table, when its id is not stored in the current table.
255
259
 
@@ -584,7 +588,9 @@ class TypeDAL(pydal.DAL): # type: ignore
584
588
  # by now, all relationships should be instances!
585
589
  relationships=typing.cast(dict[str, Relationship[Any]], relationships),
586
590
  )
591
+ # map both name and rname:
587
592
  self._class_map[str(table)] = cls
593
+ self._class_map[table._rname] = cls
588
594
  cls.__on_define__(self)
589
595
  else:
590
596
  warnings.warn("db.define used without inheriting TypedTable. This could lead to strange problems!")
@@ -713,7 +719,7 @@ class TypeDAL(pydal.DAL): # type: ignore
713
719
  table class matches the input name.
714
720
 
715
721
  Args:
716
- table_name: The name of the table to retrieve the mapped class for.
722
+ table_name: The rname of the table to retrieve the mapped class for.
717
723
 
718
724
  Returns:
719
725
  The mapped table class if it exists, otherwise None.
@@ -2434,7 +2440,7 @@ class QueryBuilder(typing.Generic[T_MetaInstance]):
2434
2440
 
2435
2441
  def where(
2436
2442
  self,
2437
- *queries_or_lambdas: Query | typing.Callable[[Type[T_MetaInstance]], Query],
2443
+ *queries_or_lambdas: Query | typing.Callable[[Type[T_MetaInstance]], Query] | dict,
2438
2444
  **filters: Any,
2439
2445
  ) -> "QueryBuilder[T_MetaInstance]":
2440
2446
  """
@@ -2453,20 +2459,28 @@ class QueryBuilder(typing.Generic[T_MetaInstance]):
2453
2459
  new_query = self.query
2454
2460
  table = self.model._ensure_table_defined()
2455
2461
 
2456
- for field, value in filters.items():
2457
- new_query &= table[field] == value
2462
+ queries_or_lambdas = (
2463
+ *queries_or_lambdas,
2464
+ filters,
2465
+ )
2458
2466
 
2459
2467
  subquery: DummyQuery | Query = DummyQuery()
2460
- for query_or_lambda in queries_or_lambdas:
2461
- if isinstance(query_or_lambda, _Query):
2462
- subquery |= typing.cast(Query, query_or_lambda)
2463
- elif callable(query_or_lambda):
2464
- if result := query_or_lambda(self.model):
2468
+ for query_part in queries_or_lambdas:
2469
+ if isinstance(query_part, _Query):
2470
+ subquery |= typing.cast(Query, query_part)
2471
+ elif callable(query_part):
2472
+ if result := query_part(self.model):
2465
2473
  subquery |= result
2466
- elif isinstance(query_or_lambda, (Field, _Field)) or is_typed_field(query_or_lambda):
2467
- subquery |= typing.cast(Query, query_or_lambda != None)
2474
+ elif isinstance(query_part, (Field, _Field)) or is_typed_field(query_part):
2475
+ subquery |= typing.cast(Query, query_part != None)
2476
+ elif isinstance(query_part, dict):
2477
+ subsubquery = DummyQuery()
2478
+ for field, value in query_part.items():
2479
+ subsubquery &= table[field] == value
2480
+ if subsubquery:
2481
+ subquery |= subsubquery
2468
2482
  else:
2469
- raise ValueError(f"Unexpected query type ({type(query_or_lambda)}).")
2483
+ raise ValueError(f"Unexpected query type ({type(query_part)}).")
2470
2484
 
2471
2485
  if subquery:
2472
2486
  new_query &= subquery
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: TypeDAL
3
- Version: 3.14.3
3
+ Version: 3.15.1
4
4
  Summary: Typing support for PyDAL
5
5
  Project-URL: Documentation, https://typedal.readthedocs.io/
6
6
  Project-URL: Issues, https://github.com/trialandsuccess/TypeDAL/issues
@@ -1,9 +1,9 @@
1
- typedal/__about__.py,sha256=Ybj7WLRqCZenUAKsMy7nfQIS_YJfO5wEBBmLNUtp7wQ,207
1
+ typedal/__about__.py,sha256=Xso865lLoa6uJvYh9ngF2KTTM3rcjIC6XYtR4N1ioLk,207
2
2
  typedal/__init__.py,sha256=Y6LT5UE3HrfWND_drJddYFbDjfnvqQER8MxZiEREFGw,366
3
3
  typedal/caching.py,sha256=6YUzUMpan56nSy3D-Jl0FS-8V4LbTnpRSoDJHj6yPYo,11782
4
4
  typedal/cli.py,sha256=SnWceLPDd-t90VPHAV9O3RR7JZtpVniT55TqtrRv3VM,19255
5
5
  typedal/config.py,sha256=0qy1zrTUdtmXPM9jHzFnSR1DJsqGJqcdG6pvhzKQHe0,11625
6
- typedal/core.py,sha256=GYNX7aGaqaPWZUYTxiNDAswQi7jeP87qAlYk1OzCO5g,108942
6
+ typedal/core.py,sha256=kC6CBUPExNAytOUggcPb1jIv_X1LrHayCEAkcT80GjY,109332
7
7
  typedal/fields.py,sha256=oOmTonXG-g4Lpj5_gSr8GJ-EZIEqO435Fm8-MS_cmoc,7356
8
8
  typedal/for_py4web.py,sha256=KIIu8XgnAfRQCJfZCra79k8SInOHiFuLDKUv3hzTJng,1908
9
9
  typedal/for_web2py.py,sha256=xn7zo6ImsmTkH6LacbjLQl2oqyBvP0zLqRxEJvMQk1w,1929
@@ -13,7 +13,7 @@ typedal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  typedal/types.py,sha256=1FIgv1s0be0E8r5Wd9E1nvDvK4ETV8u2NlfI7_P6UUY,6752
14
14
  typedal/web2py_py4web_shared.py,sha256=VK9T8P5UwVLvfNBsY4q79ANcABv-jX76YKADt1Zz_co,1539
15
15
  typedal/serializers/as_json.py,sha256=3JZlFhPrdvZVFAmH7P5DUAz8-TIk-br0F1CjKG3PFDM,2246
16
- typedal-3.14.3.dist-info/METADATA,sha256=Zuxsdy0jCzjUwGvkxIRtIJNfxpxL03J_2QAOlFHr1bk,10461
17
- typedal-3.14.3.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
18
- typedal-3.14.3.dist-info/entry_points.txt,sha256=m1wqcc_10rHWPdlQ71zEkmJDADUAnZtn7Jac_6mbyUc,44
19
- typedal-3.14.3.dist-info/RECORD,,
16
+ typedal-3.15.1.dist-info/METADATA,sha256=-pJVFoXvP9KrqiyAvXxDkhqQ3hE7eVRLdtcgMNNEis4,10461
17
+ typedal-3.15.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
18
+ typedal-3.15.1.dist-info/entry_points.txt,sha256=m1wqcc_10rHWPdlQ71zEkmJDADUAnZtn7Jac_6mbyUc,44
19
+ typedal-3.15.1.dist-info/RECORD,,