core.module

Module Contents

Classes

Method

Abstraction wrapper for any public available method.

Module

This is the root module prototype that serves a minimal module in the ViUR system without any other bindings.

class core.module.Method(func)

Abstraction wrapper for any public available method.

Parameters:

func (Callable) –

classmethod ensure(func)

Ensures the provided func parameter is either a Method already, or turns it into a Method. This is done to avoid stacking Method objects, which may create unwanted results.

Parameters:

func (Callable | Method) –

Return type:

Method

__get__(obj, objtype=None)

This binds the Method to an object.

To do it, the Method instance is copied and equipped with the individual _instance member.

__call__(*args, **kwargs)

Calls the method with given args and kwargs.

Prepares and filters argument values from args and kwargs regarding self._func’s signature and type annotations, if present.

Method objects normally wrap functions which are externally exposed. Therefore, any arguments passed from the client are str-values, and are automatically parsed when equipped with type-annotations.

This preparation of arguments therefore inspects the target function as follows - incoming values are parsed to their particular type, if type annotations are present - parameters in *args and **kwargs are being checked against their signature; only relevant values are being

passed, anything else is thrown away.

  • execution of guard configurations from @skey and @access, if present

describe()

Describes the Method with a

Return type:

dict

register(target, name, language=None)

Registers the Method under name and eventually some customized SEO-name for the provided language

Parameters:
  • target (dict) –

  • name (str) –

  • language (str | None) –

class core.module.Module(moduleName, modulePath, *args, **kwargs)

This is the root module prototype that serves a minimal module in the ViUR system without any other bindings.

Parameters:
  • moduleName (str) –

  • modulePath (str) –

handler: str | Callable

This is the module’s handler, respectively its type. Use the @property-decorator in specific Modules to construct the handler’s value dynamically. A module without a handler setting cannot be described, so cannot be handled by admin-tools.

accessRights: tuple[str]

If set, a tuple of access rights (like add, edit, delete) that this module supports.

These will be prefixed on instance startup with the actual module name (becoming file-add, file-edit etc) and registered in conf.user.access_rights so these will be available on the access bone in user/add or user/edit.

roles: dict

Allows to specify role settings for a module.

Defaults to no role definition, which ignores the module entirely in the role-system. In this case, access rights can still be set individually on the user’s access bone.

A “*” wildcard can either be used as key or as value to allow for “all roles”, or “all rights”.

# Example
roles = {
    "*": "view",                # Any role may only "view"
    "editor": ("add", "edit"),  # Role "editor" may "add" or "edit", but not "delete"
    "admin": "*",               # Role "admin" can do everything
}
seo_language_map: dict[str:str]

The module name is the first part of a URL. SEO-identifiers have to be set as class-attribute seoLanguageMap of type dict[str, str] in the module. It maps a language to the according identifier.

modules/myorders.py
from viur.core.prototypes import List

class MyOrders(List):
    seo_language_map = {
        "de": "bestellungen",
        "en": "orders",
    }

By default the module would be available under /myorders, the lowercase module name. With the defined seoLanguageMap, it will become available as /de/bestellungen and /en/orders.

Great, this part is now user and robot friendly :)

adminInfo: dict[str, Any] | Callable

This is a dict holding the information necessary for the Vi/Admin to handle this module.

name: str

Human-readable module name that will be shown in the admin tool.

handler: str (list, tree or singleton):

Allows to override the handler provided by the module. Set this only when really necessary, otherwise it can be left out and is automatically injected by the Module’s prototype.

icon: str

(Optional) Either the Shoelace icon library name or a path relative to the project’s deploy folder (e.g. /static/icons/viur.svg) for the icon used in the admin tool for this module.

columns: List[str]

(Optional) List of columns (bone names) that are displayed by default. Used only by the List handler.

filter: Dict[str, str]

(Optional) Dictionary of additional parameters that will be send along when fetching entities from the server. Can be used to filter the entities being displayed on the client-side.

display: str (“default”, “hidden” or “group”)

(Optional) “hidden” will hide the module in the admin tool’s main bar. (itwill not be accessible directly, however it’s registered with the frontend so it can be used in a relational bone). “group” will show this module in the main bar, but it will not be clickable. Clicking it will just try to expand it (assuming there are additional views defined).

preview: Union[str, Dict[str, str]]

(Optional) A url that will be opened in a new tab and is expected to display the entity selected in the table. Can be “/{{module}}/view/{{key}}”, with {{module}} and {{key}} getting replaced as needed. If more than one preview-url is needed, supply a dictionary where the key is the URL and the value the description shown to the user.

views: List[Dict[str, t.Any]]

(Optional) List of nested adminInfo like dictionaries. Used to define additional views on the module. Useful f.e. for an order module, where you want separate list of “payed orders”, “unpayed orders”, “orders waiting for shipment”, etc. If such views are defined, the top-level entry in the menu bar will expand if clicked, revealing these additional filters.

actions: List[str]

(Optional) List of actions supported by this modules. Actions can be defined by the frontend (like “add”, “edit”, “delete” or “preview”); it can be an action defined by a plugin loaded by the frontend; or it can be a so called “server side action” (see “customActions” below)

customActions: Dict[str, dict]

(Optional) A mapping of names of server-defined actions that can be used in the actions list above to their definition dictionary. See …. for more details.

disabledActions: List[str, dict]

(Optional) A list of disabled actions. The frontend will inject default actions like add or edit even if they’re not listed in actions. Listing them here will prevent that. It’s up to the frontend to decide if that action won’t be visible at all or it’s button just being disabled.

sortIndex: int

(Optional) Defines the order in which the modules will appear in the main bar in ascrending order.

indexedBones: List[str]

(Optional) List of bones, for which an (composite?) index exists in this view. This allows the fronted to signal the user that a given list can be sorted or filtered by this bone. If no additional filters are enforced by the listFilter and filter is not set, this should be all bones which are marked as indexed.

changeInvalidates: List[str]

(Optional) A list of module-names which depend on the entities handled from this module. This allows the frontend to invalidate any caches in these depended modules if the data in this module changes. Example: This module may be a list-module handling the file_rootNode entities for the file module, so a edit/add/deletion action on this module should be reflected in the rootNode-selector in the file-module itself. In this case, this property should be set to ["file"].

moduleGroup: str

(Optional) If set, should be a key of a moduleGroup defined in …. .

editViews: Dict[str, t.Any]

(Optional) If set, will embed another list-widget in the edit forms for a given entity. See …. for more details.

If this is a function, it must take no parameters and return the dictionary as shown above. This can be used to customize the appearance of the Vi/Admin to individual users.

_update_methods()

Internal function to update methods and submodules. This function should only be called when member attributes are dynamically modified by the module.

describe()

Meta description of this module.

Return type:

dict | None

register(target, render)

Registers this module’s public functions to a given resolver. This function is executed on start-up, and can be sub-classed.

Parameters:
  • target (dict) –

  • render (object) –