Erstellen eines local command-Templates
Die Python-Skripte zum Erstellen eines local commands-Templates entsprechen weitgehend denen eines normalen ZopeSkel-Templates. Wenn wir uns die Portlet-Klasse in zopeskel/localcommands/archetype.py genauer anschauen, stellen wir fest, dass sie von ArchetypeSubTemplate abgeleitet wird und diese wiederum von ZopeSkelLocalTemplate:
import os from templer.core.vars import var from templer.localcommands import TemplerLocalTemplate from Cheetah.Template import Template as cheetah_template class ArchetypeSubTemplate(TemplerLocalTemplate): use_cheetah = True parent_templates = ['archetype'] class ContentType(ArchetypeSubTemplate): _template_dir = 'templates/archetype/contenttype' summary = "A content type skeleton" …
- use_cheetah
- Für local commands muss der Wert auf True gesetzt werden.
- parent_templates
- Liste der ZopeSkel-Templates, die dieses local command-Template aufrufen können.
- _template_dir
- Verzeichnis mit den Template-Dateien.
- summary
- Zusammenfassende Beschreibung des Templates.
Die anschließend folgende pre-Methode ermittelt die Variablen contenttype_classname, contenttype_classname, contenttype_classname, contenttype_name und add_permission_name des übergeordneten Pakets.
Auch die Template-Struktur entspricht weitgehend der von normalen ZopeSkel-Templates mit dem Unterschied, dass alle Dateien mit _insert enden. Betrachten wir uns z.B. das portlet-Template genauer, entdecken wir folgende Struktur:
$ tree ~/.buildout/eggs/templer.plone.localcommands-1.0b1-py2.7.egg/templer/plone/localcommands/templates/archetype/contenttype/ /home/veit/.buildout/eggs/templer.plone.localcommands-1.0b1-py2.7.egg/templer/plone/localcommands/templates/archetype/contenttype/ ├── config.py_insert ├── content │ ├── configure.zcml_insert │ └── +content_class_filename+.py_tmpl ├── interfaces │ ├── +content_class_filename+.py_tmpl │ └── __init__.py_insert ├── profiles │ └── default │ ├── factorytool.xml_insert │ ├── rolemap.xml_insert │ ├── types │ │ └── +types_xml_filename+.xml_tmpl │ └── types.xml_insert └── README.txt_insert 5 directories, 10 files
Die mit _tmpl endenden Dateien werden wie normale ZopeSkel-Templates behandelt. Speziell für local command-Templates sind die auf _insert endenden Dateien. Der Inhalt dieser Dateien wird in die korrespondierenden Dateien des bereits bestehenden Projekts eingefügt. Schauen wir uns nun z.B. profiles/default/rolemap.xml_insert genauer an:
#<?xml version="1.0"?> #<rolemap> # <permissions> # <!-- -*- extra stuff goes here -*- --> <permission name="$add_permission_name" acquire="False"> <role name="Manager" /> <role name="Contributor" /> </permission> # </permissions> #</rolemap>
- Existiert in dem Projekt bereits eine Datei profiles/default/rolemap.xml, dann werden nur die Zeilen hinzugefügt, die nicht mit # beginnen.
- Existiert noch keine profiles/default/rolemap.xml-Datei, wird die Datei aus dem Template ohne die mit # beginnenden Zeilen geschrieben.