From 4424c1302ad1b61f24a8a6a5f9f8eaa4336b2037 Mon Sep 17 00:00:00 2001 From: Sven Eberth Date: Wed, 13 Mar 2019 13:50:31 +0100 Subject: [PATCH 1/3] declared pathToKey as exposed and use the current renderer, added collectSkelData to json renderer --- prototypes/tree.py | 5 +++-- render/html/default.py | 11 ++++------- render/json/default.py | 23 +++++++++++++++++++++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/prototypes/tree.py b/prototypes/tree.py index dd050b0..99e4aa7 100644 --- a/prototypes/tree.py +++ b/prototypes/tree.py @@ -146,8 +146,9 @@ def fixTxn( nodeKey, newRepoKey ): ## Internal exposed functions + @exposed @internalExposed - def pathToKey( self, key ): + def pathToKey( self, key, *args, **kwargs ): """ Returns the recursively expanded path through the Tree from the root-node to the given *key*. @@ -180,7 +181,7 @@ def pathToKey( self, key ): res.append( self.render.collectSkelData( nodeSkel ) ) - return( res[ : : -1 ] ) + return self.render.view( res[ : : -1 ] ) def ensureOwnUserRootNode( self ): """ diff --git a/render/html/default.py b/render/html/default.py index 62cb8a6..70afaa8 100644 --- a/render/html/default.py +++ b/render/html/default.py @@ -350,8 +350,6 @@ def renderBoneValue(self, bone, skel, key): else: return None else: - #logging.error("RETURNING") - #logging.error((skel[key])) return skel[key] return None @@ -367,7 +365,6 @@ def collectSkelData(self, skel): :returns: A dictionary or list of dictionaries. :rtype: dict | list """ - #logging.error("collectSkelData %s", skel) if isinstance(skel, list): return [self.collectSkelData(x) for x in skel] res = {} @@ -514,7 +511,7 @@ def editItemSuccess(self, skel, tpl = None, params = None, *args, **kwargs): template = self.getEnv().get_template( self.getTemplateFileName( tpl ) ) res = self.collectSkelData( skel ) return template.render(skel=res, params=params, **kwargs) - + def deleteSuccess(self, skel, tpl = None, params = None, *args, **kwargs): """ Renders a page, informing that the entry has been successfully deleted. @@ -540,7 +537,7 @@ def deleteSuccess(self, skel, tpl = None, params = None, *args, **kwargs): template = self.getEnv().get_template( self.getTemplateFileName( tpl ) ) return template.render(params=params, **kwargs) - + def list( self, skellist, tpl=None, params=None, **kwargs ): """ Renders a list of entries. @@ -571,7 +568,7 @@ def list( self, skellist, tpl=None, params=None, **kwargs ): for skel in skellist: resList.append( self.collectSkelData(skel) ) return template.render(skellist=SkelListWrapper(resList, skellist), params=params, **kwargs) - + def listRootNodes(self, repos, tpl=None, params=None, **kwargs ): """ Renders a list of available repositories. @@ -628,7 +625,7 @@ def view( self, skel, tpl=None, params=None, **kwargs ): else: res = skel return template.render(skel=res, params=params, **kwargs) - + ## Extended functionality for the Tree-Application ## def listRootNodeContents( self, subdirs, entries, tpl=None, params=None, **kwargs): diff --git a/render/json/default.py b/render/json/default.py index d24941c..c50194c 100644 --- a/render/json/default.py +++ b/render/json/default.py @@ -220,6 +220,25 @@ def renderEntry(self, skel, actionName, params = None): def view(self, skel, action="view", params = None, *args, **kwargs): return self.renderEntry(skel, action, params) + def collectSkelData(self, skel): + """ + Prepares values of one :class:`server.db.skeleton.Skeleton` or a list of skeletons for output. + + :param skel: Skeleton which contents will be processed. + :type skel: server.db.skeleton.Skeleton + + :returns: A dictionary or list of dictionaries. + :rtype: dict | list + """ + if isinstance(skel, list): + return [self.collectSkelData(x) for x in skel] + res = {} + for key, bone in skel.items(): + val = self.renderBoneValue(bone, skel, key) + res[key] = val + + return res + def add(self, skel, action = "add", params = None, **kwargs): return self.renderEntry(skel, action, params) @@ -249,10 +268,10 @@ def list(self, skellist, action = "list", params=None, **kwargs): def editItemSuccess(self, skel, params=None, **kwargs): return self.renderEntry(skel, "editSuccess", params) - + def addItemSuccess(self, skel, params=None, **kwargs): return self.renderEntry(skel, "addSuccess", params) - + def addDirSuccess(self, rootNode, path, dirname, params=None, *args, **kwargs): return json.dumps("OKAY") From 78b9806d44dc80d270230294376a42f9980b8244 Mon Sep 17 00:00:00 2001 From: Sven Eberth Date: Mon, 25 Mar 2019 12:53:34 +0100 Subject: [PATCH 2/3] added permissons check --- prototypes/tree.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/prototypes/tree.py b/prototypes/tree.py index 99e4aa7..919fab8 100644 --- a/prototypes/tree.py +++ b/prototypes/tree.py @@ -179,6 +179,9 @@ def pathToKey( self, key, *args, **kwargs ): if not nodeSkel.fromDB( parentdir ): break + if not self.canView( "node", nodeSkel ): + continue + res.append( self.render.collectSkelData( nodeSkel ) ) return self.render.view( res[ : : -1 ] ) From 201d931e5dc2bc7b5b40f621400e34009f204b24 Mon Sep 17 00:00:00 2001 From: Jan Max Meyer Date: Mon, 1 Apr 2019 13:01:15 +0200 Subject: [PATCH 3/3] Made changes to fullfill maintainer's objections --- prototypes/tree.py | 32 ++++++++++++++++---------------- render/json/default.py | 19 ------------------- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/prototypes/tree.py b/prototypes/tree.py index 223b5f5..1e9d5ab 100644 --- a/prototypes/tree.py +++ b/prototypes/tree.py @@ -4,7 +4,7 @@ from server.prototypes import BasicApplication from server.bones import baseBone, keyBone, numericBone -from server.skeleton import Skeleton, skeletonByKind +from server.skeleton import Skeleton, SkelList, skeletonByKind from server.tasks import callDeferred from datetime import datetime @@ -148,9 +148,9 @@ def fixTxn( nodeKey, newRepoKey ): @exposed @internalExposed - def pathToKey( self, key, *args, **kwargs ): + def pathToKey(self, key, *args, **kwargs): """ - Returns the recursively expanded path through the Tree from the root-node to the given *key*. + Returns the recursively expanded path through the Tree from the root-node to te given *key*. :param key: URL-safe key of the destination node. :type key: str @@ -159,32 +159,32 @@ def pathToKey( self, key, *args, **kwargs ): given node key. :rtype: dict """ - nodeSkel = self.viewNodeSkel() + skel = self.viewNodeSkel() - if not nodeSkel.fromDB( key ): + if not skel.fromDB(key): raise errors.NotFound() - if not self.canList( "node", key ): + if not self.canList("node", key): raise errors.Unauthorized() - res = [ self.render.collectSkelData( nodeSkel ) ] + res = SkelList(skel) + res.append(skel.getValuesCache()) - for x in range(0,99): - if not nodeSkel["parentdir"]: + for x in range(0, 99): + if not skel["parentdir"]: break - parentdir = nodeSkel["parentdir"] - - nodeSkel = self.viewNodeSkel() - if not nodeSkel.fromDB( parentdir ): + parentdir = skel["parentdir"] + skel = self.viewNodeSkel() + if not skel.fromDB(parentdir): break - if not self.canView( "node", nodeSkel ): + if not self.canView("node", skel): continue - res.append( self.render.collectSkelData( nodeSkel ) ) + res.insert(0, skel.getValuesCache()) - return self.render.view( res[ : : -1 ] ) + return self.render.list(res) def ensureOwnUserRootNode( self ): """ diff --git a/render/json/default.py b/render/json/default.py index c50194c..83b2969 100644 --- a/render/json/default.py +++ b/render/json/default.py @@ -220,25 +220,6 @@ def renderEntry(self, skel, actionName, params = None): def view(self, skel, action="view", params = None, *args, **kwargs): return self.renderEntry(skel, action, params) - def collectSkelData(self, skel): - """ - Prepares values of one :class:`server.db.skeleton.Skeleton` or a list of skeletons for output. - - :param skel: Skeleton which contents will be processed. - :type skel: server.db.skeleton.Skeleton - - :returns: A dictionary or list of dictionaries. - :rtype: dict | list - """ - if isinstance(skel, list): - return [self.collectSkelData(x) for x in skel] - res = {} - for key, bone in skel.items(): - val = self.renderBoneValue(bone, skel, key) - res[key] = val - - return res - def add(self, skel, action = "add", params = None, **kwargs): return self.renderEntry(skel, action, params)