@@ -20,26 +20,7 @@ class List(SkelModule):
20
20
handler = "list"
21
21
accessRights = ("add" , "edit" , "view" , "delete" , "manage" )
22
22
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 :
43
24
"""
44
25
Retrieve a new instance of a :class:`viur.core.skeleton.Skeleton` that is used by the application
45
26
for adding an entry to the list.
@@ -55,26 +36,9 @@ def addSkel(self, *args, **kwargs) -> SkeletonInstance:
55
36
56
37
:return: Returns a Skeleton instance for adding an entry.
57
38
"""
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 )
76
40
77
- def cloneSkel (self , * args , * *kwargs ) -> SkeletonInstance :
41
+ def cloneSkel (self , ** kwargs ) -> SkeletonInstance :
78
42
"""
79
43
Retrieve a new instance of a :class:`viur.core.skeleton.Skeleton` that is used by the application
80
44
for cloning an existing entry from the list.
@@ -89,7 +53,7 @@ def cloneSkel(self, *args, **kwargs) -> SkeletonInstance:
89
53
90
54
:return: Returns a SkeletonInstance for editing an entry.
91
55
"""
92
- return self .baseSkel ( * args , ** kwargs )
56
+ return self .skel ( ** kwargs )
93
57
94
58
## External exposed functions
95
59
@@ -110,7 +74,7 @@ def preview(self, *args, **kwargs) -> t.Any:
110
74
if not self .canPreview ():
111
75
raise errors .Unauthorized ()
112
76
113
- skel = self .viewSkel ()
77
+ skel = self .viewSkel (allow_client_defined = utils . string . is_prefix ( self . render . kind , "json" ) )
114
78
skel .fromClient (kwargs )
115
79
116
80
return self .render .view (skel )
@@ -126,7 +90,7 @@ def structure(self, action: t.Optional[str] = "view") -> t.Any:
126
90
# FIXME: In ViUR > 3.7 this could also become dynamic (ActionSkel paradigm).
127
91
match action :
128
92
case "view" :
129
- skel = self .viewSkel ()
93
+ skel = self .viewSkel (allow_client_defined = utils . string . is_prefix ( self . render . kind , "json" ) )
130
94
if not self .canView (skel ):
131
95
raise errors .Unauthorized ()
132
96
@@ -168,7 +132,7 @@ def view(self, key: db.Key | int | str, *args, **kwargs) -> t.Any:
168
132
:raises: :exc:`viur.core.errors.NotFound`, when no entry with the given *key* was found.
169
133
:raises: :exc:`viur.core.errors.Unauthorized`, if the current user does not have the required permissions.
170
134
"""
171
- skel = self .viewSkel ()
135
+ skel = self .viewSkel (allow_client_defined = utils . string . is_prefix ( self . render . kind , "json" ) )
172
136
if not skel .read (key ):
173
137
raise errors .NotFound ()
174
138
@@ -195,8 +159,10 @@ def list(self, *args, **kwargs) -> t.Any:
195
159
196
160
:raises: :exc:`viur.core.errors.Unauthorized`, if the current user does not have the required permissions.
197
161
"""
162
+ skel = self .viewSkel (allow_client_defined = utils .string .is_prefix (self .render .kind , "json" ))
163
+
198
164
# 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 ))):
200
166
raise errors .Unauthorized ()
201
167
202
168
self ._apply_default_order (query )
@@ -323,10 +289,13 @@ def index(self, *args, **kwargs) -> t.Any:
323
289
:return: The rendered entity or list.
324
290
"""
325
291
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
+
326
297
# 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 ():
330
299
db .currentDbAccessLog .get (set ()).add (skel ["key" ])
331
300
if not self .canView (skel ):
332
301
raise errors .Forbidden ()
0 commit comments