Weitere Entwicklungswerkzeuge
Wollen wir weitere Entwicklungswerkzeuge in einem Buildout-Projekt installieren, geben wir diese einfach in der buildout.cfg-Datei an. Folgende Entwicklungswerkzeuge können die Arbeit deutlich vereinfachen:
- DocFinderTab
Produkt, das alle Klassen und Methoden eines Objekts im Zope Management Interface (ZMI) auflistet.
DocFinderTab kann direkt als Egg in der Instanz angegeben werden:
[buildout] … eggs = Products.DocFinderTab- Clouseau
- Ajax-basierte Zope-/Python-Shell, die zopectl debug vergleichbar ist.
- DeadlockDebugger
Für entsprechende Prozesse wird Debugging möglich, indem ein Traceback aller laufenden Pythonprozesse sowohl zum Eventlog als auch zum Browser geschickt wird.
Die beiden Entwicklungswerkzeuge lassen sich einfach angeben mit:
[buildout] … eggs = z3c.deadlockdebugger [productdistros] recipe = plone.recipe.distros urls = http://plone.org/products/clouseau/releases/0.8.1/clouseau-0-8-1.zip nested-packages = version-suffix-packages =- PDBDebugMode
PDBDebugMode erlaubt sog. post-mortem-Debugging für exceptions im Debug-Modus, d.h., bei einem Fehler wird der Debugger aufgerufen, der den Traceback ausgibt.
PDBDebugMode kann direkt als Egg in der Instanz angegeben werden:
[instance] debug-mode = on eggs = Products.PDBDebugMode- IPython
Python-Shell, die Ihnen u.a. folgende Vorteile bietet:
- Objekt-Introseption
- Code- Introspektion
- Dokumentation-Introspektion (mit %pdoc)
- Eingabehistorie, persistent auch über Sessions hinweg.
Zur Installation fügen Sie bitte folgendes in Ihrer buildout.cfg-Datei hinzu:
[buildout] _ parts = _ zopepy ipzope _ [ipzope] recipe = zc.recipe.egg eggs = ipython ${instance:eggs} initialization = import sys, os os.environ["SOFTWARE_HOME"] = "${zope2:location}/lib/python" os.environ["INSTANCE_HOME"] = "${instance:location}" sys.argv[1:1] = "-p zope".split() extra-paths = ${zope2:location}/lib/python scripts = ipython=ipzopeRufen Sie dann zunächst das buildout-Skript auf. Anschließend können Sie dann die IPython-Sell aufrufen:
$ ./bin/buildout $ ./bin/ipzope
Beim ersten Aufruf von ipzope wird ein neues IPython-Profil in Ihrem Home-Verzeichnis erstellt. In linuxischen Betriebssystemen finden Sie das entsprechende Verzeichnis unter $HOME/.ipython, in Windows unter %userprofile%\_ipython. In dieses Verzeichnis sollten das Profil aus https://svn.plone.org/svn/collective/dotipython/trunk/ipy_profile_zope.py legen.
Vergessen Sie bitte nicht, Ihre Änderungen zu speichern:
utils.commit()
Und falls auch andere auf der Zope-Instanz arbeiten, sollten Sie gelegentlich die Änderungen übernehmen mit:
utils.sync()
Die IPython-Session beenden können Sie mit Ctrl-d
- ipdb
Python-Debugger, der viele Vorteile von IPython nutzt, z.B. automatische Vervollständigung.
Zum Installieren fügen Sie in Ihrer buildout.cfg-Datei folgendes hinzu:
[buildout] _ eggs = _ iw.debug _ [instance] _ zcml = iw.debugAnschließend wird das Buildout-Skript aufgerufen und die Instanz im Vordergrund gestartet:
$ ./bin/buildout $ ./bin/instance fg
Nun kann der URL eines jeden Objekts der Plone-Site /ipdb angehängt werden um eine IPython-Shell zu erhalten. In dieser können wir dann ipdb aufrufen:
import ipdb; ipdb.set_trace()
Anmerkung: Wenn in Ihrem Code an irgendeiner Stelle ein ipdb oder pdb Code enthalten ist, erhalten Sie die Exception BdbQuit.
Mit ll erhalten Sie eine Liste der lokalen Variablen. So erhalten Sie z.B. mit context` das Objekt auf dem Sie ipdb aufgerufen haben.
- roadrunner
Testrunner, der die testgetriebene Entwicklung deutlich beschleunigen kann.
roadrunner läd vorab das Standard-Zope- und Plone-Environment für PloneTestCase. zur Installation wird einfach folgendes in die buildout.cfg-Datei eingetragen:
[buildout] parts = … roadrunner [roadrunner] recipe = roadrunner:plone packages-under-test = vs.policyAnschließend kann es wie der reguläre Zope-Testrunner aufgerufen werden:
$ ./bin/roadrunner -s vs.policy

