1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# Copyright (c) 2004 Divmod.
# See LICENSE for details.
"""Compatibility wrapper over new twisted.python.components,
so that nevow works with it. This module shadows nevow.compy
when using the new Twisted's Zope components system.
"""
import warnings
from twisted.python.components import *
warnings.filterwarnings('ignore', category=ComponentsDeprecationWarning)
from twisted.python.reflect import namedAny as _namedAny
CannotAdapt = TypeError
class _NamedAnyError(Exception):
'Internal error for when importing fails.'
_registerAdapter = registerAdapter
def registerAdapter(adapterFactory, origInterface, *interfaceClasses):
class RandomClazz(object):
pass
def namedAny(name):
if name == '__builtin__.function':
name='types.FunctionType'
elif name == '__builtin__.method':
return RandomClazz # Hack
elif name == '__builtin__.instancemethod':
name='types.MethodType'
elif name == '__builtin__.NoneType':
name='types.NoneType'
elif name == '__builtin__.generator':
name='types.GeneratorType'
try:
return _namedAny(name)
except (AttributeError, ImportError):
raise _NamedAnyError("Name %s not found." % name)
isStr = type(adapterFactory) is str
if (type(origInterface) is str) != isStr:
raise ValueError("Either all arguments must be strings or all must be objects.")
for interfaceClass in interfaceClasses:
if (type(interfaceClass) is str) != isStr:
raise ValueError("Either all arguments must be strings or all must be objects.")
if isStr:
try:
# print "registerAdapter:",adapterFactory, origInterface, interfaceClasses
adapterFactory = namedAny(adapterFactory)
origInterface = namedAny(origInterface)
interfaceClasses = [namedAny(x) for x in interfaceClasses]
except _NamedAnyError, nae:
print 'NamedAnyError:', nae
return
# print "_registerAdapter:",adapterFactory, origInterface, interfaceClasses
if 'nevow.inevow.ISerializable' in interfaceClasses or filter(
lambda o: getattr(o, '__name__', None) == 'ISerializable', interfaceClasses):
warnings.warn("ISerializable is deprecated. Please use nevow.flat.registerFlattener instead.", stacklevel=2)
from nevow import flat
flat.registerFlattener(adapterFactory, origInterface)
_registerAdapter(adapterFactory, origInterface, *interfaceClasses)
class IComponentized(Interface):
pass
_Componentized = Componentized
class Componentized(_Componentized):
__implements__ = (IComponentized,)
def __init__(self, adapterCache=None):
_Componentized.__init__(self)
if adapterCache:
for k, v in adapterCache.items():
self.setComponent(k, v)
from zope.interface import implements as newImplements
|