2008-02-28

extensionselector.py

  2008-02-28 09:53

...

### -*- coding: utf-8 -*- #############################################
#######################################################################
"""Это утилита для поиска фабрик по имени и обратно   

$Id: extensionselector.py 49799 2008-01-04 17:19:01Z pitch $
"""
__author__  = "Uzorin, 2007"
__license__ = "GPL"
__version__ = "$Revision: 49799 $"

from zope import component
from zope.component.interfaces import IFactory
from zope.app.content.interfaces import IContentType
from zope.interface import implements
from zope.app.container.interfaces import IContained
from zope.app.container.contained import Contained
from persistent import Persistent
from interfaces import IExtensionSelectorData
from interfaces import IExtensionSelector
from zope.schema.fieldproperty import FieldProperty

import re
        
class ExtensionSelector(Contained, Persistent) :

    implements(IExtensionSelector, IExtensionSelectorData)

    data = None

    def name2factory(self,name) :
        for desc in self.data :
            rexp = re.compile(desc.regexpsrc)
            mo = rexp.match(name)
            if not mo is None:
               return ( desc.formatname % mo.groupdict(), 
                        component.getUtility(IFactory, desc.factory))
        raise LookupError

    def ob2name(self,ob) :
        obc = IContained(ob)
        for desc in self.data :
            ct = component.getUtility(IContentType, desc.contenttype)
            print ct
            if not ct(ob,None) is None :
                rexp = re.compile(desc.regexpname)
                mo = rexp.match(obc.__name__)
                return desc.formatsrc % mo.groupdict()
        raise LookupError
Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml