Pour aller plus loin

Comprendre une directive ZCML

L'une des explications sur une directive ci-dessus vous parait floue, ou bien une directive fournie par un composant de tierce partie n'est pas correctement documentée ? Voici la méthode pour pister la définition d'une directive ZCML quelconque.

La directive est exposée à partir d'un namespace, il vous faudra donc trouver un fichier meta.zcml dans lequel est définie cette directive.

En supposant que la directive s'appelle foo et qu'elle est exposée par le namespace http://namespace.mydomain.tld/bar, il vous faudra trouver, à l'aide des commandes shell find et grep un fichier meta.zcml dans lequel figure quelque-chose comme ceci :

namespace="http://namespace.mydomain.tld/bar"
...
name="foo"

Si vous ne le trouvez pas, c'est que vous avez mal cherché, car il se trouve forcément quelque part dans l'un des packages de votre projet.

Vous trouverez donc (si, si !) un fichier meta.zcml qui contiendra quelque chose comme ceci :

<configure
   xmlns="http://namespaces.zope.org/zope"
   xmlns:meta="http://namespaces.zope.org/meta"
   >
   ...
   <meta:directives namespace="http://namespace.mydomain.tld/bar">
      ...
      <meta:directive
         name="foo"
         schema="bar.zcml.IFooDirective"
         handler="bar.zcml.foo" />
      ...
   </meta:directives>
   ...
</configure>

Ce qui signifie que les attributs de l'élément de configuration <foo ...> sont définis dans la classe bar.zcml.IFooDirective et que l'élément sera traité par la fonction bar.zcml.foo.

La classe bar.zcml.IFooDirective est une interface (sous-classant zope.interface.Interface) et ses attributs sont définis par des objets des modules zope.configuration.fields ou de zope.schema et sont généralement abondament commentés.

Le handler bar.zcml.foo prend pour paramètres un objet implémentant zope.configuration.interfaces.IConfigurationContext ainsi que l'ensemble des attributs de l'émément <foo ..>.

Le reste, c'est la lecture du code Python, généralement assez facile, qui vous l'apprendra.

Autres ressources

Pour aller plus loin, cet article de blog explique en détails comment faire sa propre directive ZCML.

Quelques composants simples pour Zope et Plone qui exposent leur propre vocabulaire ZCML :

  • collective.monkeypatcher permet d'effectuer des monkey patches Python d'une façon documentée et rationnelle.
  • archetypes.configure évite la fastidieuse déclaration de types en Python dans les packages fournissant des types de contenus Archetypes

Table des matières

Sujet précédent

Les directives ZCML

Sujet suivant

Utiliser la ZCA avec Grok

Cette page


blog comments powered by Disqus