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



