muffin-rest 5.1.3__py3-none-any.whl → 5.1.5__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.
@@ -2,13 +2,14 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  import operator
5
- from typing import Any, Callable, Optional, Tuple, Type, Union, cast
6
- from warnings import warn
5
+ from typing import Any, Callable, Tuple, Type, Union, cast
7
6
 
8
7
  from peewee import Field, ModelSelect
9
8
 
10
9
  from muffin_rest.filters import Filter, Filters
11
10
 
11
+ from .utils import get_model_field_by_name
12
+
12
13
 
13
14
  class PWFilter(Filter):
14
15
  """Support Peewee."""
@@ -53,8 +54,6 @@ class PWFilters(Filters):
53
54
 
54
55
  handler = cast(PWRESTHandler, self.handler)
55
56
  if isinstance(obj, PWFilter):
56
- if obj.field is None:
57
- obj.field = get_model_field_by_name(handler, obj.name)
58
57
  return obj
59
58
 
60
59
  if isinstance(obj, Field):
@@ -71,22 +70,3 @@ class PWFilters(Filters):
71
70
  if schema_field is None and field:
72
71
  schema_field = handler.meta.Schema._declared_fields.get(field.name)
73
72
  return self.MUTATE_CLASS(name, field=field, schema_field=schema_field, **meta)
74
-
75
-
76
- def get_model_field_by_name(handler, name) -> Optional[Field]:
77
- """Get model field by name."""
78
- fields = handler.meta.model._meta.fields
79
- candidate = fields.get(name)
80
- if candidate:
81
- return candidate
82
-
83
- for field in fields.values():
84
- if field.column_name == name:
85
- return field
86
-
87
- warn(
88
- f"{handler.__qualname__} {handler.meta.model} has no field {name}",
89
- category=RuntimeWarning,
90
- stacklevel=5,
91
- )
92
- return None
@@ -8,6 +8,8 @@ from peewee import Field
8
8
 
9
9
  from muffin_rest.sorting import Sort, Sorting
10
10
 
11
+ from .utils import get_model_field_by_name
12
+
11
13
  if TYPE_CHECKING:
12
14
  from .types import TVCollection
13
15
 
@@ -15,9 +17,7 @@ if TYPE_CHECKING:
15
17
  class PWSort(Sort):
16
18
  """Sorter for Peewee."""
17
19
 
18
- async def apply(
19
- self, collection: TVCollection, *, desc: bool = False, **_
20
- ) -> TVCollection:
20
+ async def apply(self, collection: TVCollection, *, desc: bool = False, **_) -> TVCollection:
21
21
  """Sort the collection."""
22
22
  return collection.order_by_extend(self.field if not desc else self.field.desc())
23
23
 
@@ -39,14 +39,15 @@ class PWSorting(Sorting):
39
39
  return obj
40
40
 
41
41
  handler = cast(PWRESTHandler, self.handler)
42
- model_meta = handler.meta.model._meta # type: ignore[]
43
42
 
44
43
  if isinstance(obj, Field):
45
44
  name, field = obj.name, obj
46
45
 
47
46
  else:
48
47
  name = obj
49
- field = meta.pop("field", model_meta.fields.get(name))
48
+ field = meta.pop("field", None) or name
49
+ if isinstance(field, str):
50
+ field = get_model_field_by_name(handler, field, stacklevel=6)
50
51
 
51
52
  if field:
52
53
  sort = self.MUTATE_CLASS(name, field=field, **meta)
@@ -0,0 +1,27 @@
1
+ """Support filters for Peewee ORM."""
2
+ from __future__ import annotations
3
+
4
+ from typing import TYPE_CHECKING, Optional
5
+ from warnings import warn
6
+
7
+ if TYPE_CHECKING:
8
+ from peewee import Field
9
+
10
+
11
+ def get_model_field_by_name(handler, name: str, stacklevel=5) -> Optional[Field]:
12
+ """Get model field by name."""
13
+ fields = handler.meta.model._meta.fields
14
+ candidate = fields.get(name)
15
+ if candidate:
16
+ return candidate
17
+
18
+ for field in fields.values():
19
+ if field.column_name == name:
20
+ return field
21
+
22
+ warn(
23
+ f"{handler.__qualname__} {handler.meta.model} has no field {name}",
24
+ category=RuntimeWarning,
25
+ stacklevel=stacklevel,
26
+ )
27
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: muffin-rest
3
- Version: 5.1.3
3
+ Version: 5.1.5
4
4
  Summary: The package provides enhanced support for writing REST APIs with Muffin framework
5
5
  Home-page: https://github.com/klen/muffin-rest
6
6
  License: MIT
@@ -12,13 +12,14 @@ muffin_rest/mongo/utils.py,sha256=RZdAiKaTsgaFz8WbIPI_sjjVDsF_VmPu5Agzp5mpbvY,39
12
12
  muffin_rest/openapi.py,sha256=XNhU4EffbKvFKr1HMCqFM-ZrukPqLyZwm3aJe2dNs40,8770
13
13
  muffin_rest/options.py,sha256=PcrGY1qq3exgOdeJp8tYYC2V83c5vVMQrARgUkxrNTM,1927
14
14
  muffin_rest/peewee/__init__.py,sha256=94DSj_ftT6fbPksHlBv40AH2HWaiZommUFOMN2jd9a4,129
15
- muffin_rest/peewee/filters.py,sha256=0GqqUdlXBvflG7c7kYYwdQlJMapzvucggoL4rklAYGo,2895
15
+ muffin_rest/peewee/filters.py,sha256=I_oZa18j0hi0CnVM-U5IpkwkKZ24NYdx9XkdlDiFYZI,2315
16
16
  muffin_rest/peewee/handler.py,sha256=ipIcOmCgHpqWJevWHm9xxZ2GsZPUV7dc9QCmu7bvaLM,5325
17
17
  muffin_rest/peewee/openapi.py,sha256=ZZuh7nJVuK9cTJqtOJ_XASe9iJgter-xIjj9YJ8xszI,1111
18
18
  muffin_rest/peewee/options.py,sha256=02E8yOXHaHl0smKV8qI6er7YS3IcuroDPl7GR_YuLjo,1489
19
19
  muffin_rest/peewee/schemas.py,sha256=GYex652UOBoFBvpkqDupBe8kXJHIEBF2diZPjE-BXj4,1076
20
- muffin_rest/peewee/sorting.py,sha256=cRZntyUqWKMFY0LEKX0RtjV-LbxYHuVzLih_tQMW-Nk,1780
20
+ muffin_rest/peewee/sorting.py,sha256=7in0ICivfZbfNIacA3eo9o5cKdwNJZFp1Vl5mIqvQyk,1848
21
21
  muffin_rest/peewee/types.py,sha256=cgCXhpGHkImKwudA1lulZHz5oJswHH168AiW5MhZRCM,155
22
+ muffin_rest/peewee/utils.py,sha256=wXeneVE1IZl1ROnY28re73H62Y1_tEmoEQYzPhuOyBI,702
22
23
  muffin_rest/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
24
  muffin_rest/redoc.html,sha256=GtuHIMvTuSi8Ro6bgI-G8VB94AljMyfjcZseqtBmGCY,559
24
25
  muffin_rest/sorting.py,sha256=x-3UE9MMV7RzmNDTIgsM1RDVd42mPeq03LbkaaKuM4g,2803
@@ -29,7 +30,7 @@ muffin_rest/sqlalchemy/types.py,sha256=JnIw44XJ2ClWzOv-mTUrvFw1JPxAlvdX_jf7r4zau
29
30
  muffin_rest/swagger.html,sha256=2uGLu_KpkYf925KnDKHBJmV9pm6OHn5C3BWScESsUS8,1736
30
31
  muffin_rest/types.py,sha256=vy55ShzMcvs9zXjFpdjWlagv09dMrcmxb2-U4hTL3NM,521
31
32
  muffin_rest/utils.py,sha256=-nf6WCGFlVoOcBT-n6eiIpbZSmPY8ynm2UlMelgmn8o,2059
32
- muffin_rest-5.1.3.dist-info/LICENSE,sha256=xHPkOZhjyKBMOwXpWn9IB_BVLjrrMxv2M9slKkHj2hM,1082
33
- muffin_rest-5.1.3.dist-info/METADATA,sha256=-49Io5O-Bg23hrwQmuzDG4FvSnUPtyFy4zFGwzulXoA,4126
34
- muffin_rest-5.1.3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
35
- muffin_rest-5.1.3.dist-info/RECORD,,
33
+ muffin_rest-5.1.5.dist-info/LICENSE,sha256=xHPkOZhjyKBMOwXpWn9IB_BVLjrrMxv2M9slKkHj2hM,1082
34
+ muffin_rest-5.1.5.dist-info/METADATA,sha256=3PctsieZjB1spGYPjeyzz8QpkATgGE0t44yztujeQHA,4126
35
+ muffin_rest-5.1.5.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
36
+ muffin_rest-5.1.5.dist-info/RECORD,,