@@ -20,26 +20,7 @@ class List(SkelModule):
2020 handler = "list"
2121 accessRights = ("add" , "edit" , "view" , "delete" , "manage" )
2222
23- def viewSkel (self , * args , ** kwargs ) -> SkeletonInstance :
24- """
25- Retrieve a new instance of a :class:`viur.core.skeleton.SkeletonInstance` that is used by the application
26- for viewing an existing entry from the list.
27-
28- The default is a Skeleton instance returned by :func:`~baseSkel`.
29-
30- This SkeletonInstance can be post-processed (just returning a subskel or manually removing single bones) - which
31- is the recommended way to ensure a given user cannot see certain fields. A Jinja-Template may choose not to
32- display certain bones, but if the json or xml render is attached (or the user can use the vi or admin render)
33- he could still see all values. This also prevents the user from filtering by these bones, so no binary search
34- is possible.
35-
36- .. seealso:: :func:`addSkel`, :func:`editSkel`, :func:`~baseSkel`
37-
38- :return: Returns a Skeleton instance for viewing an entry.
39- """
40- return self .skel (bones_from_request = True , ** kwargs )
41-
42- def addSkel (self , * args , ** kwargs ) -> SkeletonInstance :
23+ def addSkel (self , ** kwargs ) -> SkeletonInstance :
4324 """
4425 Retrieve a new instance of a :class:`viur.core.skeleton.Skeleton` that is used by the application
4526 for adding an entry to the list.
@@ -55,26 +36,9 @@ def addSkel(self, *args, **kwargs) -> SkeletonInstance:
5536
5637 :return: Returns a Skeleton instance for adding an entry.
5738 """
58- return self .baseSkel (* args , ** kwargs )
59-
60- def editSkel (self , * args , ** kwargs ) -> SkeletonInstance :
61- """
62- Retrieve a new instance of a :class:`viur.core.skeleton.Skeleton` that is used by the application
63- for editing an existing entry from the list.
64-
65- The default is a Skeleton instance returned by :func:`~baseSkel`.
66-
67- Like in :func:`viewSkel`, the skeleton can be post-processed. Bones that are being removed aren't visible
68- and cannot be set, but it's also possible to just set a bone to readOnly (revealing it's value to the user,
69- but preventing any modification.
70-
71- .. seealso:: :func:`viewSkel`, :func:`editSkel`, :func:`~baseSkel`
72-
73- :return: Returns a Skeleton instance for editing an entry.
74- """
75- return self .baseSkel (* args , ** kwargs )
39+ return self .skel (** kwargs )
7640
77- def cloneSkel (self , * args , * *kwargs ) -> SkeletonInstance :
41+ def cloneSkel (self , ** kwargs ) -> SkeletonInstance :
7842 """
7943 Retrieve a new instance of a :class:`viur.core.skeleton.Skeleton` that is used by the application
8044 for cloning an existing entry from the list.
@@ -89,7 +53,7 @@ def cloneSkel(self, *args, **kwargs) -> SkeletonInstance:
8953
9054 :return: Returns a SkeletonInstance for editing an entry.
9155 """
92- return self .baseSkel ( * args , ** kwargs )
56+ return self .skel ( ** kwargs )
9357
9458 ## External exposed functions
9559
@@ -110,7 +74,7 @@ def preview(self, *args, **kwargs) -> t.Any:
11074 if not self .canPreview ():
11175 raise errors .Unauthorized ()
11276
113- skel = self .viewSkel ()
77+ skel = self .viewSkel (allow_client_defined = utils . string . is_prefix ( self . render . kind , "json" ) )
11478 skel .fromClient (kwargs )
11579
11680 return self .render .view (skel )
@@ -126,7 +90,7 @@ def structure(self, action: t.Optional[str] = "view") -> t.Any:
12690 # FIXME: In ViUR > 3.7 this could also become dynamic (ActionSkel paradigm).
12791 match action :
12892 case "view" :
129- skel = self .viewSkel ()
93+ skel = self .viewSkel (allow_client_defined = utils . string . is_prefix ( self . render . kind , "json" ) )
13094 if not self .canView (skel ):
13195 raise errors .Unauthorized ()
13296
@@ -168,7 +132,7 @@ def view(self, key: db.Key | int | str, *args, **kwargs) -> t.Any:
168132 :raises: :exc:`viur.core.errors.NotFound`, when no entry with the given *key* was found.
169133 :raises: :exc:`viur.core.errors.Unauthorized`, if the current user does not have the required permissions.
170134 """
171- skel = self .viewSkel ()
135+ skel = self .viewSkel (allow_client_defined = utils . string . is_prefix ( self . render . kind , "json" ) )
172136 if not skel .read (key ):
173137 raise errors .NotFound ()
174138
@@ -195,8 +159,10 @@ def list(self, *args, **kwargs) -> t.Any:
195159
196160 :raises: :exc:`viur.core.errors.Unauthorized`, if the current user does not have the required permissions.
197161 """
162+ skel = self .viewSkel (allow_client_defined = utils .string .is_prefix (self .render .kind , "json" ))
163+
198164 # The general access control is made via self.listFilter()
199- if not (query := self .listFilter (self . viewSkel () .all ().mergeExternalFilter (kwargs ))):
165+ if not (query := self .listFilter (skel .all ().mergeExternalFilter (kwargs ))):
200166 raise errors .Unauthorized ()
201167
202168 self ._apply_default_order (query )
@@ -323,10 +289,13 @@ def index(self, *args, **kwargs) -> t.Any:
323289 :return: The rendered entity or list.
324290 """
325291 if args and args [0 ]:
292+ skel = self .viewSkel (
293+ allow_client_defined = utils .string .is_prefix (self .render .kind , "json" ),
294+ _excludeFromAccessLog = True ,
295+ )
296+
326297 # We probably have a Database or SEO-Key here
327- seoKey = str (args [0 ]).lower ()
328- skel = self .viewSkel ().all (_excludeFromAccessLog = True ).filter ("viur.viurActiveSeoKeys =" , seoKey ).getSkel ()
329- if skel :
298+ if skel := skel .all ().filter ("viur.viurActiveSeoKeys =" , str (args [0 ]).lower ()).getSkel ():
330299 db .currentDbAccessLog .get (set ()).add (skel ["key" ])
331300 if not self .canView (skel ):
332301 raise errors .Forbidden ()
0 commit comments