Dekoratoren

class Decore

Objekt der Klasse Decore ist die Hauptklasse des Frameworks. Sie ist für die Registrierung der Elemente zuständig und stellt die API zur Verfügung.

app(title, desc=None, allow_guest=True)

Eine Funktion zum eröffnen einer GUI-Dashboard-Anwendung. Sie wird als „Decorator“ verwendet.

Parameter:
title : str

Der Titel der App.

allow_guest : bool

Gibt an, ob der Gastzugang (Anonynus) erlaubt ist. Der Wert True erlaubt den automatischen Login als Gast. Der Wert False verweigert das senden der Metadaten an das Frontend und verweist auf die Login-Seite.

@decore.app(title='My App', allow_guest=False)
def main():
    pass
base(icon=None, title=None, desc=None, role=0, model=<Model: Decore_model>, private=False, stretch=False, navigation: ~typing.Literal['hide', 'main-top', 'main-bottom'] = 'main-top')

Eine Funktion zum registrieren einer Basis in der GUI-Dashboard-Anwendung. Sie wird als „Decorator“ verwendet.

Die Basis ist das Trägerelement für die Ansicht und die Vorlage für die Datenquelle im Frontend.

Parameter:
icon : str

Das Symbol der Basis.

title : str

Der Titel der Basis.

desc : str

Die Beschreibung der Basis.

model : Model

Das Datenmodell der Basis.

@decore.base(icon='mdi-account', title='Person', desc='A basis for managing personal data', model=Person)
class Person_base:
    pass
view(parent_id=None, icon=None, title=None, desc=None, role=0, type: 'blank' | 'table' = 'table', fields=[], filters=[], query={}, pag_type: 'client' = 'client', pag_recs=16)

Eine Funktion zur Registrierung einer Ansicht. Sie wird als „Decorator“ verwendet.

Eine Ansicht ist ein Container für die Anzeige von Daten.

Parameter:
parent_id : str

Die ID des übergeordneten Elements. Nur zu setzen, wenn die Ansicht in einer anderen Basis gerendert werden soll.

icon : str

Das Symbol der Ansicht.

title : str

Der Titel der Ansicht.

desc : str

Die Beschreibung der Ansicht.

type : Literal['table']

Gibt an wie die Datensätze angezeigt werden. Der Wert table stellt die Datensätze in einer Tabelle dar.

fields : list

Die Felder, die in der Ansicht angezeigt werden.

filters : list

Die Filter, die in der Ansicht angezeigt werden.

query : dict

Die Abfrage, die in der Ansicht angezeigt wird.

pag_type : Literal['client']

Wählt die Methode wie die Datensätze der View geladen werden. Der Wert client lädt alle Datensätze auf einmal und überlässt den Seitenaufbau dem Frontend.

pag_recs : int

Gibt an wieviele Datensätze auf einer Seite der Ansicht angezeigt werden sollen. 16 ist die Standardeinstellung.

@decore.view(icon='mdi-account', title='Person', desc='A view for managing personal data', type='table', fields=[Person.id, Person.name, Person.age], filters=[Person.name, Person.age], query={'name__eq': 'Kemo'}, pag_type='client', pag_recs=16)
def person_view():
    pass
dialog(parent_id=None, icon=None, title=None, desc=None, role=0, type: 'standard' = 'standard', display: 'modal' | 'draw-half' | 'draw-full' = 'draw-half', activator: 'empty' | 'first' | 'last' | 'default' | 'context' | 'click' = 'none')

Eine Funktion zur Registrierung eines Dialogs. Sie wird als „Decorator“ verwendet.

Der Dialog ist das Trägerelement für Widgets

Parameter:
parent_id : str

Die ID des übergeordneten Elements. Nur zu setzen, wenn der Dialog in einer Ansicht einer anderen Basis gerendert werden soll.

icon : str

Das Symbol des Dialogs.

title : str

Der Titel des Dialogs.

desc : str

Die Beschreibung des Dialogs.

type : Literal['standard']

Gibt an wie der Dialog die Widgets darstellen wird. Der Wert standard stellt die untergeordneten Widgets und Sub-Widgets untereinander dar.

display : Literal['modal', 'draw-half', 'draw-full']

Der Anzeigetyp des Dialogs. Standardwert ist draw-half.

activator : Literal['none', 'default', 'context', 'click']

Der Aktivatortyp des Dialogs. Über den Wert none wird der Dialog sofort beim OnLoad Ereignis der View angezeigt. Der Wert default stellt den Dialog im Top-Menu der View dar. Der Wert context stellt den Dialog im Kontextmenü eines Items der View dar. Der Wert click zeigt den Dialog dann an wenn man einen Datensatz anklickt.

@decore.dialog(icon='mdi-account', title='Person', desc='A dialog for managing personal data', type='standard', display='drawer', activator='default-menu')
def person_dialog():
    pass
widget(parent_id=None, icon=None, title=None, desc=None, role=0, type: 'default' | 'info' | 'form' | 'table' = 'default', layout='cera', fields=[])

Eine Funktion zur Registrierung eines Widgets. Sie wird als „Decorator“ verwendet.

Ein Widget dient zur Darstellung und Interaktion mit dem Datensatz. Es erhält die Daten, die der Dialog-Aktivator vorgibt. Der Wert none übergibt den letzten Datensatz der Datenbanktabelle. Der Wert default übergibt einen nur mit Default-Werten gefüllten Datensatz. Beim Wert context übergibt es den Datensatz, der im Kontextmenü der Ansicht ausgewählt wurde. Und click übergibt den Datensatz, der angeklickt wurde.

Widgets, welche aus einer fremden Basis einem Dialog zugeordnet werden, ergänzen die relationalen Felder eines Default-Items der fremden Datenquelle mit den Daten des aktivierten Items. (Der Satz ist Scheiße zu verstehen, aber er trifft genau das, was es tut). In der Sample Anwendung verwende ich das beim Zuweisen von „Contracts“ zu einer „Person“.

Es gibt aber auch Widgets, die mehrere Datensätze darstellen können, wie im Beispiel davor werden hier auch die Relationen verwendet, um nur Daten abzubilden, die etwas mit dem gewählten Item zu tun haben.

Parameter:
parent_id : str

Die ID des übergeordneten Elements. Nur zu setzen, wenn das Widget in einem Dialog einer anderen Basis gerendert werden soll.

icon : str

Das Symbol des Widgets.

title : str

Der Titel des Widgets.

desc : str

Die Beschreibung des Widgets.

type : Literal['default', 'info', 'form', 'table']

Gibt an wie das Widget die Daten darstellen wird. Standardwert ist default.

fields : list

Die Felder, die in dem Widget angezeigt werden.

@decore.widget(icon='mdi-account', title='Person', desc='A widget for managing personal data', type='form', layout='cera', fields=[Person.name, Person.age])
def person_widget():
    pass
action(parent_id=None, icon=None, title=None, desc=None, role=0, type: 'standard' | 'submit' = 'standard', activator: 'default' | 'context' | 'click' = 'none', errors=True)

Eine Funktion zur Registrierung einer Aktion. Sie wird als „Decorator“ verwendet.

Eine Aktion ist die tatsächliche Interaktion zwischen dem Benutzer und dem Backend.

Parameter:
parent_id : str

Die ID des übergeordneten Elements. Nur zu setzen, wenn die Aktion in einem Widget einer anderen Basis gerendert werden soll.

icon : str

Das Symbol der Aktion.

title : str

Der Titel der Aktion.

desc : str

Die Beschreibung der Aktion.

type : Literal['standard', 'submit']

Gibt an was die Aktion kann. Standardwert ist standard.

activator : Literal['default', 'context', 'click']

Gib an, wie die Aktion ausgelöst wird.

errors : bool

Gibt an, ob die Aktion Validierungsfehler zurückgeben kann. Standardwert ist True. (Im Augenblick wirkt sich das nur auf den Typen submit aus.)

@decore.action(icon='mdi-account', title='Person', desc='A action for managing personal data', type='submit')
def sample_action(item, **kwargs):
    pass

Die Aktionen durchlaufen ein Modul, welches die erhaltenen Daten aufbereitet und als Keyword-Parameter an die dekorierte Funktion übergibt. Es ist alles in den kwargs zu finden und man macht sich diese einfach verfügbar. Der Parameter item ist ein Beispiel dafür und repräsentiert den vom Frontend zurückgegebenen Datensatz. Um herauszufinden, was alles noch in den kwargs steckt, bitte den Debugger benutzen.

function(type: 'shot' | 'work' = 'shot')

Eine Funktion zur Registrierung einer Funktion in der übergeordneten Base. Sie wird als „Decorator“ verwendet.

Eine Funktion wird direkt nach der Zusammenstellung des Metadaten-Pool ausgeführt. Mit Funktionen kann man die Logik erweitern, Dinge vorbereiten oder Hintergrundaufgaben erledigen. Sie agieren als Instanzmethoden der Basis und erhalten damit den objektorientierten Ansatz.

Parameter:
type : Literal['shot', 'work']

Gibt an wie eine Funktion ausgeführt wird. Mit dem Wert shot wird sie nur einmal ausgeführt. Der Wert work wird in einem Thread ausgeführt und kann somit Schleifen abarbeiten die niemals enden bis der Main-Thread endet.

@decore.function(type='shot')
def sample_function(self):
    pass