20120628¶
Noch permissions¶
Ich fange an klar zu sehen für die workflows im Kalender. Beim Programmieren kam aber noch ein Design-Fehler zutage: ich kann Aktionen wie Print und Post nicht vom Model aus mit permission handler versehen. Das brauchen wir noch.
Das Folgende ist eigentlich teilweise schon wieder veraltet. Bei Gelegenheit muss ich mal ordentliche Doku schreiben…
Also noch mal eine Operation unter Vollnarkose. Noch mal der Versuch eines Überblicks.
Permission handler sind namenlose Funktionen, die in
lino.utils.perms.make_permission_handler()
erzeugt werden.
Das sind die Dinger, die optimal laufen müssen
(also möglichst wenig unnütze Dinge nachprüfen),
weil sie oft aufgerufen werden.
Permission handler werden beim Server-Start
lino.core.kernel.load_workflows()
einmalig erzeugt.
Die Option required ist (wenn definiert) ein dict mit den keys user_level und/oder user_groups. Kann definiert sein:
Auf dem Actor (der Tabelle):
required
,change_required
,delete_required
,create_required
Auf einer Aktion:
required
required
Auf einem Layout-Panel:
Permission handler sitzen an folgenden Stellen:
lino.ui.extjs3.ext_elems.Container.allow_read
wird beim Instanzieren des Containers generiert (was erst beim ersten get_handle des Elements stattfindet, z.B. beim Generieren der lino*.js)Actor.allow_read Container Action.allow
get_view_permission wird benutzt zum Generieren des JS-Codes. Da ist also normalerweise kein spezieller Record gemeint, also obj ist None.
Kleinkram¶
Übersetzungen Tx25
moved lino.tools and lino.core.coretools to a single module
lino.core.modeltools
.Worked on documentation. Updated tutorials. New
Miscellaneous optimizations “pour Joël qui va peut-être trouver le temps de se lancer dans Lino”.
Bugfix: Lino didn’t add a PhantomRow in slave grids without detail layout.
Worked on
lino.apps.presto
.
Lazy object returned unexpected type.¶
This error can come when you have lino.Lino.languages
set to only ['en']
, and when the application module uses
Django’s pgettext_lazy function
which is needed when you need to specify a context
for a translation message.
Sander van Leeuwen fortunately found and reported a workaround on stackoverflow.com
E.g. in lino.modlib.courses
we have a line:
add('50', pgettext_lazy("courses","Failed"),"failed") # nicht bestanden
Sander’s workaround is to always pass unicode strings to pgettext_lazy():
add('50', pgettext_lazy(u"courses",u"Failed"),"failed") # nicht bestanden