core.prototypes.tree
¶
Module Contents¶
Classes¶
Tree is a ViUR BasicApplication. |
Attributes¶
- class core.prototypes.tree.TreeSkel¶
Bases:
viur.core.skeleton.Skeleton
- parententry¶
- parentrepo¶
- sortindex¶
- classmethod preProcessSerializedData(cls, skelValues, entity)¶
- classmethod refresh(cls, skelValues)¶
- class core.prototypes.tree.Tree(moduleName, modulePath, *args, **kwargs)¶
Bases:
viur.core.prototypes.BasicApplication
Tree is a ViUR BasicApplication.
In this application, entries are hold in directories, which can be nested. Data in a Tree application always consists of nodes (=directories) and leafs (=files).
- Variables
kindName (str) – Name of the kind of data entities that are managed by the application. This information is used to bind a specific
server.skeleton.Skeleton
-class to the application. For more information, refer to the function_resolveSkel()
. In difference to the other ViUR BasicApplication, the kindName in Trees evolve into the kindNames kindName + “node” and kindName + “leaf”, because information can be stored in different kinds.adminInfo (dict | callable) – todo short info on how to use adminInfo.
- accessRights = ['add', 'edit', 'view', 'delete']¶
- nodeSkelCls¶
- leafSkelCls¶
- adminInfo(self)¶
- _checkSkelType(self, skelType: str)¶
- _resolveSkelCls(self, skelType: str, *args, **kwargs)¶
Retrieve the generally associated
server.skeleton.Skeleton
that is used by the application.This is either be defined by the member variable kindName or by a Skeleton named like the application class in lower-case order.
If this behavior is not wanted, it can be definitely overridden by defining module-specific
viewSkel()
,:func:addSkel, oreditSkel()
functions, or by overriding this function in general.- Returns
Returns a Skeleton instance that matches the application.
- Return type
server.skeleton.Skeleton
- viewSkel(self, skelType: str, *args, **kwargs)¶
Retrieve a new instance of a
server.skeleton.Skeleton
that is used by the application for viewing an existing entry from the list.The default is a Skeleton instance returned by
_resolveSkel()
.See also
addSkel()
,editSkel()
,_resolveSkel()
- Returns
Returns a Skeleton instance for viewing an entry.
- Return type
server.skeleton.Skeleton
- addSkel(self, skelType: str, *args, **kwargs)¶
Retrieve a new instance of a
server.skeleton.Skeleton
that is used by the application for adding an entry to the list.The default is a Skeleton instance returned by
_resolveSkel()
.See also
viewSkel()
,editSkel()
,_resolveSkel()
- Returns
Returns a Skeleton instance for adding an entry.
- Return type
server.skeleton.Skeleton
- editSkel(self, skelType: str, *args, **kwargs)¶
Retrieve a new instance of a
server.skeleton.Skeleton
that is used by the application for editing an existing entry from the list.The default is a Skeleton instance returned by
_resolveSkel()
.See also
viewSkel()
,editSkel()
,_resolveSkel()
- Returns
Returns a Skeleton instance for editing an entry.
- Return type
server.skeleton.Skeleton
- ensureOwnModuleRootNode(self)¶
Ensures, that general root-node for the current module exists. If no root-node exists yet, it will be created.
- Returns
The entity of the root-node.
- Return type
server.db.Entity
- getAvailableRootNodes(self, *args, **kwargs)¶
Default function for providing a list of root node items. This list is requested by several module-internal functions and must be overridden by a custom functionality. The default stub for this function returns an empty list. An example implementation could be the following: .. code-block:: python
- Parameters
args – Can be used in custom implementations.
kwargs – Can be used in custom implementations.
- Returns
Returns a list of dicts which must provide a “key” and a “name” entry with respective information.
- Return type
list of dict
- getRootNode(self, entryKey: viur.core.db.KeyClass) viur.core.skeleton.Skeleton ¶
Returns the root-node for a given child.
- Parameters
entryKey (str) – URL-Safe key of the child entry
- Returns
The entity of the root-node.
- Return type
server.db.Entity
- updateParentRepo(self, parentNode: str, newRepoKey: str, depth: int = 0)¶
Recursively fixes the parentrepo key after a move operation.
This will delete all entries which are children of nodeKey, except key nodeKey.
- Parameters
parentNode – URL-safe key of the node which children should be fixed.
newNode – URL-safe key of the new repository.
depth – Safety level depth preventing infinitive loops.
- pathToKey(self, key: viur.core.db.KeyClass)¶
Returns the recursively expanded path through the Tree from the root-node to a requested node. :param key: Key of the destination node. :returns: An nested dictionary with information about all nodes in the path from root to the requested node.
- listRootNodes(self, *args, **kwargs)¶
Renders a list of all available repositories for the current user using the modules default renderer.
- Returns
The rendered representation of the available root-nodes.
- Return type
str
- list(self, skelType, *args, **kwargs)¶
Prepares and renders a list of entries.
All supplied parameters are interpreted as filters for the elements displayed.
Unlike other ViUR BasicApplications, the access control in this function is performed by calling the function
listFilter()
, which updates the query-filter to match only elements which the user is allowed to see.See also
listFilter()
,server.db.mergeExternalFilter()
- Returns
The rendered list objects for the matching entries.
- Raises
server.errors.Unauthorized
, if the current user does not have the required permissions.
- structure(self, skelType: str, *args, **kwargs)¶
- Returns
Returns the structure of our skeleton as used in list/view. Values are the defaultValues set in each bone.
- Raises
viur.core.errors.NotAcceptable
, when an incorrect skelType is provided.- Raises
viur.core.errors.Unauthorized
, if the current user does not have the required permissions.
- view(self, skelType, key, *args, **kwargs)¶
Prepares and renders a single entry for viewing.
The entry is fetched by its key and its skelType. The function performs several access control checks on the requested entity before it is rendered.
- Returns
The rendered representation of the requested entity.
- Parameters
skelType (str) – May either be “node” or “leaf”.
node (str) – URL-safe key of the parent.
- Raises
server.errors.NotAcceptable
, when an incorrect skelType is provided.- Raises
server.errors.NotFound
, when no entry with the given key was found.- Raises
server.errors.Unauthorized
, if the current user does not have the required permissions.
- add(self, skelType, node, *args, **kwargs)¶
Add a new entry with the given parent node, and render the entry, eventually with error notes on incorrect data. Data is taken by any other arguments in kwargs.
The function performs several access control checks on the requested entity before it is added.
- Parameters
skelType (str) – Defines the type of the new entry and may either be “node” or “leaf”.
node (str) – URL-safe key of the parent.
- Returns
The rendered, added object of the entry, eventually with error hints.
- Raises
server.errors.NotAcceptable
, when no valid skelType was provided.- Raises
server.errors.NotFound
, when no valid node was found.- Raises
server.errors.Unauthorized
, if the current user does not have the required permissions.- Raises
server.errors.PreconditionFailed
, if the skey could not be verified.
- edit(self, skelType, key, *args, **kwargs)¶
Modify an existing entry, and render the entry, eventually with error notes on incorrect data. Data is taken by any other arguments in kwargs.
The function performs several access control checks on the requested entity before it is added.
See also
- Parameters
skelType (str) – Defines the type of the entry that should be modified and may either be “node” or “leaf”.
key (str) – URL-safe key of the item to be edited.
- Returns
The rendered, modified object of the entry, eventually with error hints.
- Raises
server.errors.NotAcceptable
, when no valid skelType was provided.- Raises
server.errors.NotFound
, when no valid node was found.- Raises
server.errors.Unauthorized
, if the current user does not have the required permissions.- Raises
server.errors.PreconditionFailed
, if the skey could not be verified.
- delete(self, skelType, key, *args, **kwargs)¶
Deletes an entry or an directory (including its contents).
The function runs several access control checks on the data before it is deleted.
See also
- Parameters
skelType (str) – Defines the type of the entry that should be deleted and may either be “node” or “leaf”.
key (str) – URL-safe key of the item to be deleted.
- Returns
The rendered, deleted object of the entry.
- Raises
server.errors.NotFound
, when no entry with the given key was found.- Raises
server.errors.Unauthorized
, if the current user does not have the required permissions.- Raises
server.errors.PreconditionFailed
, if the skey could not be verified.
- deleteRecursive(self, nodeKey)¶
Recursively processes a delete request.
This will delete all entries which are children of nodeKey, except key nodeKey.
- Parameters
key (str) – URL-safe key of the node which children should be deleted.
- move(self, skelType: str, key: str, parentNode: str, *args, **kwargs) str ¶
Move a node (including its contents) or a leaf to another node.
See also
- Parameters
skelType – Defines the type of the entry that should be moved and may either be “node” or “leaf”.
key – URL-safe key of the item to be moved.
parentNode – URL-safe key of the destination node, which must be a node.
- Returns
The rendered, edited object of the entry.
- Raises
viur.core.errors.NotFound
, when no entry with the given key was found.- Raises
viur.core.errors.Unauthorized
, if the current user does not have the required permissions.- Raises
viur.core.errors.PreconditionFailed
, if the skey could not be verified.
- listFilter(self, filter)¶
Access control function on item listing.
This function is invoked by the
list()
renderer and the related Jinja2 fetching function, and is used to modify the provided filter parameter to match only items that the current user is allowed to see.- Parameters
filter (
server.db.Query
) – Query which should be altered.- Returns
The altered filter, or None if access is not granted.
- canView(self, skelType: str, skel: viur.core.skeleton.Skeleton) bool ¶
Checks if the current user can view the given entry. Should be identical to what’s allowed by listFilter. By default, meth:listFilter is used to determine what’s allowed and whats not; but this method can be overridden for performance improvements (to eliminate that additional database access). :param skel: The entry we check for :return: True if the current session is authorized to view that entry, False otherwise
- canAdd(self, skelType: str, parentNodeSkel: Optional[viur.core.skeleton.SkeletonInstance])¶
Access control function for adding permission.
Checks if the current user has the permission to add a new entry.
The default behavior is: - If no user is logged in, adding is generally refused. - If the user has “root” access, adding is generally allowed. - If the user has the modules “add” permission (module-add) enabled, adding is allowed.
It should be overridden for a module-specific behavior.
See also
- Returns
True, if adding entries is allowed, False otherwise.
- Return type
bool
- canEdit(self, skelType: str, skel)¶
Access control function for modification permission.
Checks if the current user has the permission to edit an entry.
The default behavior is: - If no user is logged in, editing is generally refused. - If the user has “root” access, editing is generally allowed. - If the user has the modules “edit” permission (module-edit) enabled, editing is allowed.
It should be overridden for a module-specific behavior.
See also
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that should be edited.- Returns
True, if editing entries is allowed, False otherwise.
- Return type
bool
- canDelete(self, skelType: str, skel)¶
Access control function for delete permission.
Checks if the current user has the permission to delete an entry.
The default behavior is: - If no user is logged in, deleting is generally refused. - If the user has “root” access, deleting is generally allowed. - If the user has the modules “deleting” permission (module-delete) enabled, deleting is allowed.
It should be overridden for a module-specific behavior.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that should be deleted.
See also
- Returns
True, if deleting entries is allowed, False otherwise.
- Return type
bool
- canMove(self, skelType: str, node: str, destNode: str) bool ¶
Access control function for moving permission.
Checks if the current user has the permission to move an entry.
The default behavior is: - If no user is logged in, deleting is generally refused. - If the user has “root” access, deleting is generally allowed. - If the user has the modules “edit” permission (module-edit) enabled, moving is allowed.
It should be overridden for a module-specific behavior.
- Parameters
skelType – Defines the type of the node that shall be deleted.
node – URL-safe key of the node to be moved.
node – URL-safe key of the node where node should be moved to.
See also
- Returns
True, if deleting entries is allowed, False otherwise.
- onAdd(self, skel)¶
Hook function that is called before adding an entry.
It can be overridden for a module-specific behavior.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that is going to be added.
- onAdded(self, skel)¶
Hook function that is called after adding an entry.
It should be overridden for a module-specific behavior. The default is writing a log entry.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that has been added.
- onEdit(self, skel)¶
Hook function that is called before editing an entry.
It can be overridden for a module-specific behavior.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that is going to be edited.
See also
- onEdited(self, skel)¶
Hook function that is called after modifying an entry.
It should be overridden for a module-specific behavior. The default is writing a log entry.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that has been modified.
- onView(self, skel)¶
Hook function that is called when viewing an entry.
It should be overridden for a module-specific behavior. The default is doing nothing.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that is viewed.
See also
- onDelete(self, skel)¶
Hook function that is called before deleting an entry.
It can be overridden for a module-specific behavior.
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that is going to be deleted.
See also
- onDeleted(self, skel)¶
Hook function that is called after deleting an entry.
It should be overridden for a module-specific behavior. The default is writing a log entry.
..warning: Saving the skeleton again will undo the deletion (if the skeleton was a leaf or a node with no children).
- Parameters
skel (
server.skeleton.Skeleton
) – The Skeleton that has been deleted.
See also
- core.prototypes.tree.vi = True¶
- core.prototypes.tree.admin = True¶