Traduire un package Plone 3

Posté le 15/02/2008 sous zope plone3

Je n'ai pas creusé plus que ça, mais apparemment il y a de beaux conflits entre zope.i18n et PlacelessTranslationService. Du coup, tant que l'on veut ajouter des traductions à un domaine non existant, se servir de zope.i18n ne pose pas de problème. Par contre, si l'on désire ajouter des traductions au domaine plone par exemple, ça ce complique.

Le seul moyen que j'ai pu trouver après quelques heures d'introspection est d'enregistrer un .po qui se trouve hors du répertoire locales (si vous le mettez dedans, ça casse tout) lors de l'initialisation du paquet. Cela donne un bout de code horrible qui me ferais presque honte... Voyez plutôt le contenu de mon __init__.py:

def initialize(context):
    """Initializer called when used as a Zope 2 product."""
    context._ProductContext__app.Control_Panel.TranslationService._load_i18n_dir(os.path.dirname(__file__)+'/i18n')

Alors, oui, c'est dégueulasse, mais ça marche.

Utiliser zope.sendmail dans Zope 2

Posté le 11/02/2008 sous zope

Depuis que les sources de Zope3 sont incluse dans Zope2, il est vraiment dommage de ne pas utiliser au maximum ces possibilités.

Entre autre, il existe un package assez peu connu zope.sendmail qui permet d'envoyer des mails de façon asynchrone. Les mails sont stockés dans une mailbox puis envoyés par un thread séparé de Zope.

L'inconvénient de ce package est que tout est configurable, mais uniquement via du zcml. Le TODO indique que, oui, ça serait bien qu'un jour cela soit dans le zope.conf, mais en attendant...

Finalement, depuis qu'on a tendance à utiliser buildout (parce que quand même, ça arrache) il était super simple de créer une petite recette qui installe un bout de zcml dans le répertoire qui vas bien.

Le résultat est iw.recipe.sendmail. Simple, et efficace.

Un autre petit paquet, iw.mailhost, permet de patcher les produits MailHost et SecureMailHost afin d'utiliser zope.sendmail en lieu et place de smtplib. Il suffit de le placer dans un répertoire inclus dans le sys.path pour qu'il soit importé par le zcml généré par iw.recipe.sendmail

A noter que ceci a été éprouvé sous OSX, Linux et Windows. Enjoy !

Utiliser zope avec virtualenv

Posté le 17/10/2007 sous zope python

Virtualenv permets de créer un environement python indépendant de celui du système. C'est assez pratique lorsque l'on veut avoir plusieurs versions d'une même librairie.

Il est possible de l'utiliser avec Zope. C'est même très simple...

On install virtualenv avec easy_install:

~$ easy_install virtualenv

On s'extrait un Zope:

~$ tar xvzf Zope-2.X.X-final.tgz
~$ mv Zope-X.X.X-final myenv

On créer un virtualenv dans l'arborescence du Zope:

~$ virtualenv myenv
New python executable in myenv/bin/python
Installing setuptools......................done.
~$ source bin/activate
(myenv)$ which python
/home/gawel/myenv/bin/python

On utilise le python de l'environnement pour installer le Zope:

(myenv)~$ cd myenv
(myenv)~/myenv$ ./configure --with-python=bin/python

Using Python interpreter at bin/python

Configuring Zope installation

  - Zope top-level binary directory will be /opt/Zope-2.9.
  - Makefile written.

  Next, run make.

On le compile:

(myenv)~/myenv% make && make inplace

On peut ensuite créer des instances comme d'habitude. Ces instances utiliserons notre virtualenv.