Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Entwicklungsumgebung Weitere Entwicklungswerkzeuge

Weitere Entwicklungswerkzeuge

erstellt von Veit Schiele zuletzt verändert: 19.07.2010 16:22 © Veit Schiele 2007–2010

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=ipzope

Rufen 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.debug

Anschließ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.policy

Anschließend kann es wie der reguläre Zope-Testrunner aufgerufen werden:

$ ./bin/roadrunner -s vs.policy
Artikelaktionen