django-camomilla-cms 6.1.2__py2.py3-none-any.whl → 6.1.4__py2.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.
camomilla/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "6.1.2"
1
+ __version__ = "6.1.4"
2
2
 
3
3
 
4
4
  def get_core_apps():
camomilla/models/menu.py CHANGED
@@ -17,6 +17,18 @@ from structured.fields import StructuredJSONField
17
17
  from camomilla.models.page import UrlNode, AbstractPage
18
18
  from typing import Optional, Union, Callable, List
19
19
  from django.db.models.base import Model as DjangoModel
20
+ from typing_extensions import Annotated
21
+ from structured.pydantic.fields.serializer import FieldSerializer
22
+ from rest_framework import serializers
23
+
24
+
25
+ class AbstractPageMinimalSerializer(serializers.Serializer):
26
+ def to_representation(self, instance):
27
+ return {
28
+ "id": instance.id,
29
+ "name": instance.__str__(),
30
+ "model": f"{instance._meta.app_label}.{instance._meta.model_name}",
31
+ }
20
32
 
21
33
 
22
34
  class LinkTypes(str, Enum):
@@ -28,7 +40,7 @@ class MenuNodeLink(BaseModel):
28
40
  link_type: LinkTypes = LinkTypes.static
29
41
  static: str = None
30
42
  content_type: ContentType = None
31
- page: AbstractPage = None
43
+ page: Annotated[AbstractPage, FieldSerializer(AbstractPageMinimalSerializer)] = None
32
44
  url_node: UrlNode = None
33
45
 
34
46
  @model_serializer(mode="wrap", when_used="json")
camomilla/models/page.py CHANGED
@@ -343,7 +343,7 @@ class AbstractPage(SeoMixin, MetaMixin, models.Model, metaclass=PageBase):
343
343
  def childs(self) -> models.Manager:
344
344
  if hasattr(self._page_meta, "child_page_field"):
345
345
  return getattr(self, self._page_meta.child_page_field)
346
- return getattr(self, PAGE_CHILD_RELATED_NAME % self.model_info, self.objects.none())
346
+ return getattr(self, PAGE_CHILD_RELATED_NAME % self.model_info, self.__class__.objects.none())
347
347
 
348
348
  @property
349
349
  def parent(self) -> models.Model:
@@ -2,12 +2,14 @@ from rest_framework import serializers
2
2
  from camomilla.models import UrlNode
3
3
  from camomilla.serializers.validators import UniquePermalinkValidator
4
4
  from typing import TYPE_CHECKING
5
+ from structured.contrib.restframework import StructuredModelSerializer
6
+
5
7
 
6
8
  if TYPE_CHECKING:
7
9
  from camomilla.models.page import AbstractPage
8
10
 
9
11
 
10
- class AbstractPageMixin(serializers.ModelSerializer):
12
+ class AbstractPageMixin(StructuredModelSerializer, serializers.ModelSerializer):
11
13
  """
12
14
  This mixin is needed to serialize AbstractPage models.
13
15
  It provides permalink validation and some extra fields serialization.
@@ -1 +1 @@
1
- __version__ = "6.1.2"
1
+ __version__ = "6.1.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-camomilla-cms
3
- Version: 6.1.2
3
+ Version: 6.1.4
4
4
  Summary: Django powered cms
5
5
  Author-email: Lotrèk <dimmitutto@lotrek.it>
6
6
  License: MIT
@@ -11,13 +11,13 @@ Classifier: Framework :: Django
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: Programming Language :: Python
13
13
  Classifier: Programming Language :: Python :: 3
14
- Requires-Python: <=3.13,>=3.8
14
+ Requires-Python: <=3.13,>=3.9
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
17
  Requires-Dist: django-modeltranslation<=0.18.12,>=0.18.7
18
18
  Requires-Dist: djsuperadmin<1.0.0,>=0.9
19
19
  Requires-Dist: djangorestframework<=3.14.0,>=3.10.0
20
- Requires-Dist: django-structured-json-field>=0.4.2
20
+ Requires-Dist: django-structured-json-field>=1.1.1
21
21
  Requires-Dist: Pillow>=10.0.0
22
22
  Requires-Dist: django-admin-interface<1.0.0,>=0.26.0
23
23
  Requires-Dist: django-ckeditor<7.0.0,>=5.7.1
@@ -1,4 +1,4 @@
1
- camomilla/__init__.py,sha256=lKyI3sUjmiwMaYiRT9eNAQ1r1YJS3WfosCE2Xi0aq4M,243
1
+ camomilla/__init__.py,sha256=_e972NJVuSoS9uhtizioaade6GDYyEUfJcitCrE429g,243
2
2
  camomilla/apps.py,sha256=eUwb9ynyiRAc5OXgt7ZsAdhsCOnPCpNdIFYMheNeN-o,532
3
3
  camomilla/authentication.py,sha256=jz6tQT4PPEu-_JLox1LZrOy7EiWBb9MWaObK63MJGus,855
4
4
  camomilla/context_processors.py,sha256=cGowjDZ-oDGYn1j2Pj5QDGCqnzXAOdOwp5dmzin_FTc,165
@@ -27,8 +27,8 @@ camomilla/models/__init__.py,sha256=y7Q34AGhQ1weJUKWb6XjiyUbwRnJeylOBGMErU0wqYg,
27
27
  camomilla/models/article.py,sha256=LgkZgRsubtDV6NwBz8E2bIgKD6H3I-1QLAxEan5TYYs,1139
28
28
  camomilla/models/content.py,sha256=mIgtifb_WMIt58we5u6qWZemHvuDN1zZaBeCyzHL78A,956
29
29
  camomilla/models/media.py,sha256=pD-qldiHDOOHgux4lsivQLBcOJJrRx3a4Bg8ODNx7r0,6852
30
- camomilla/models/menu.py,sha256=OsoYKxY-08M3LjXxsnR47IuEI-DPf2IS6mi2ZWWCm9Y,3780
31
- camomilla/models/page.py,sha256=uRX2Kbu62J6luSZYYPu7rR6IZ4nWV7_6xHx6otFDeP8,19997
30
+ camomilla/models/menu.py,sha256=SSIjnrGreDqN7sfh4LSu2Ek6d-DPv8Dt7fAOZoGIQN4,4268
31
+ camomilla/models/page.py,sha256=ihxY4r_yKL_yE7DJM-U-BDuHzukMmXc2Bk8hTuVrwoA,20007
32
32
  camomilla/models/mixins/__init__.py,sha256=c2NixqvrIX4E9WGRqQbylXlqBWDXEqN9mzs_dpB0hFQ,1248
33
33
  camomilla/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  camomilla/openapi/schema.py,sha256=C22dhKjaJ2DTK4KWFjyMJXiwe8NLy7ZTW5d-I1dqZ7g,2546
@@ -53,7 +53,7 @@ camomilla/serializers/mixins/language.py,sha256=VukEvPzTpKQfwB-z_RtoNIJ43N3OEgfj
53
53
  camomilla/serializers/mixins/nesting.py,sha256=gCEU2UE_Y8e4VRnvT0AExFgwTfJm_jnSqa6l2SwZ3Mg,1432
54
54
  camomilla/serializers/mixins/optimize.py,sha256=zAtbtk6kfGq9FnapqI8tVYOuMKd1IkHbAV6LffL61Z4,3845
55
55
  camomilla/serializers/mixins/ordering.py,sha256=rXQOz47_U4IsMT6IBhySghcmJWMZgpPWHovDcZQG88k,1172
56
- camomilla/serializers/mixins/page.py,sha256=Ida7dY9MQTv747_dpPGpo6u3iL5GX87z4zeVct-C36s,2132
56
+ camomilla/serializers/mixins/page.py,sha256=-8f70L0yVJyR_06fOFlxKxKnwvJUkBJqW38-SjwYekI,2231
57
57
  camomilla/serializers/mixins/translation.py,sha256=Om2UT2EB4Xvp8SrIEvraY0kJXR9H54AsYBr9DKjsay8,4323
58
58
  camomilla/storages/__init__.py,sha256=ytGgX59Ar8vFfYz7eV8z-j5yO_5FqxdZM25iyLnJuSA,131
59
59
  camomilla/storages/default.py,sha256=GNzvV_JZpXMcfTkyXjw5CfK8EIBi3o-NXYBO0KAxD5M,351
@@ -73,7 +73,7 @@ camomilla/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
73
73
  camomilla/templatetags/camomilla_filters.py,sha256=35x0-cWrRHeLhqypSLlJzEFY_fQDcRHiwZQpFgIsspE,692
74
74
  camomilla/templatetags/menus.py,sha256=7fc4f9DDqtqG6wNb5_Q0km-fq0mqvGnbpR21qO1TJUw,960
75
75
  camomilla/templatetags/model_extras.py,sha256=6WfVDYP_OfuVJd3cNGNA55Wj9uWdrbfOZQ0ua9Xt_vc,2257
76
- camomilla/theme/__init__.py,sha256=YN8byPcjyQjphqvazTEzWioECzFuTCnjb_LQ7d7T_gw,22
76
+ camomilla/theme/__init__.py,sha256=EYwTVFPyFoL0qRFRa0edvPWfX2ajYnM9APdhVxj3rU4,22
77
77
  camomilla/theme/apps.py,sha256=Ue2H80fbFgxkQyHeU2H0fWs9Y6d-EnHYv4zz824FSRk,1066
78
78
  camomilla/theme/admin/__init__.py,sha256=TALAZaE-gWshSeGc6yy7VahdX5UfeCeoOE9Q5kJCEpM,2270
79
79
  camomilla/theme/admin/pages.py,sha256=HHi8dxjqffjMQGIRpOVNgQZhtKSSx3pFIctbqoZ9J2I,2614
@@ -109,7 +109,7 @@ camomilla/views/mixins/optimize.py,sha256=Y-jMYmScLeY7ZnDS1K9o8aXSgTGc5RrYUh66r5
109
109
  camomilla/views/mixins/ordering.py,sha256=mh7fqPyVCVJh84Nl2pYFQouzGxa-ANF3Wqv0pCb7OVU,4779
110
110
  camomilla/views/mixins/pagination.py,sha256=0haXRJNFrawCRSe4kNd4EWHsuhBAjdeqCklGJ3SD2gw,5950
111
111
  camomilla/views/mixins/permissions.py,sha256=TPmR3Hoa3BjeJu9rCE_7lpLOAupue4WI42C21HTo6X4,200
112
- django_camomilla_cms-6.1.2.dist-info/licenses/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
112
+ django_camomilla_cms-6.1.4.dist-info/licenses/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
113
113
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
114
  tests/test_admin_page_form.py,sha256=DRJxekEKeYMCf9q62ax7iBeJGhEP2NZ8o02krZBR_DA,1971
115
115
  tests/test_api.py,sha256=t03EFDezGgm4UJl8RIVvnTUkAGTB6ptm0G2lHBQ7ljc,1833
@@ -130,7 +130,7 @@ tests/fixtures/__init__.py,sha256=ixyA6ZsmYbiKEsjQGOGoG4KyJmwWrf-qeoQjQG3J66U,42
130
130
  tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
131
  tests/utils/api.py,sha256=TYcDXeILHtBwzwG0acwPFmiqMZnlF9VnLB0Ydhg55vA,865
132
132
  tests/utils/media.py,sha256=-cnrQzzVuhNSb5rT5xMUs5f3yYpBnS0fVGDcjgsb8lw,291
133
- django_camomilla_cms-6.1.2.dist-info/METADATA,sha256=CPRn1GWY9A-AV0Js_ciDIanALSfx1ClooNDuB47U-Sw,5652
134
- django_camomilla_cms-6.1.2.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
135
- django_camomilla_cms-6.1.2.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
136
- django_camomilla_cms-6.1.2.dist-info/RECORD,,
133
+ django_camomilla_cms-6.1.4.dist-info/METADATA,sha256=x30vUkA5zxm0eY9plcflZzK8e3LqBx7odwLC59UOMI4,5652
134
+ django_camomilla_cms-6.1.4.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
135
+ django_camomilla_cms-6.1.4.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
136
+ django_camomilla_cms-6.1.4.dist-info/RECORD,,