本文整理汇总了Python中zope.interface.registry.Components.registerAdapter方法的典型用法代码示例。如果您正苦于以下问题:Python Components.registerAdapter方法的具体用法?Python Components.registerAdapter怎么用?Python Components.registerAdapter使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类zope.interface.registry.Components
的用法示例。
在下文中一共展示了Components.registerAdapter方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: JSON
# 需要导入模块: from zope.interface.registry import Components [as 别名]
# 或者: from zope.interface.registry.Components import registerAdapter [as 别名]
class JSON(object):
def __init__(self, serializer=json.dumps, adapters=(), **kw):
""" Any keyword arguments will be passed to the ``serializer``
function."""
self.serializer = serializer
self.kw = kw
self.components = Components()
def add_adapter(self, type_or_iface, adapter):
self.components.registerAdapter(adapter, (type_or_iface,),
IJSONAdapter)
def __call__(self, info):
def _render(value, system):
request = system.get('request')
if request is not None:
response = request.response
ct = response.content_type
if ct == response.default_content_type:
response.content_type = 'application/json'
default = self._make_default(request)
return self.serializer(value, default=default, **self.kw)
return _render
def _make_default(self, request):
def default(obj):
obj_iface = providedBy(obj)
adapters = self.components.adapters
result = adapters.lookup((obj_iface,), IJSONAdapter,
default=None)
return result(obj, request)
return default
示例2: test_hit_via_sm
# 需要导入模块: from zope.interface.registry import Components [as 别名]
# 或者: from zope.interface.registry.Components import registerAdapter [as 别名]
def test_hit_via_sm(self):
from zope.interface import Interface
from zope.interface import implementer
from zope.interface.registry import Components
from zope.component import getGlobalSiteManager
from zope.component.tests.examples import ConformsToIComponentLookup
class IFoo(Interface):
pass
class IBar(Interface):
pass
@implementer(IFoo)
class Global(object):
__init__ = fails_if_called(self)
@implementer(IFoo)
class Local(object):
def __init__(self, context):
self.context = context
@implementer(IBar)
class Bar(object):
pass
class Context(ConformsToIComponentLookup):
def __init__(self, sm):
self.sitemanager = sm
gsm = getGlobalSiteManager()
gsm.registerAdapter(Global, (IBar,), IFoo, '')
sm1 = Components('sm1', bases=(gsm, ))
sm1.registerAdapter(Local, (IBar,), IFoo, '')
bar = Bar()
adapted = self._callFUT(bar, IFoo, context=Context(sm1))
self.assertTrue(adapted.__class__ is Local)
self.assertTrue(adapted.context is bar)
示例3: test_nested
# 需要导入模块: from zope.interface.registry import Components [as 别名]
# 或者: from zope.interface.registry.Components import registerAdapter [as 别名]
def test_nested(self):
from zope.interface import Interface
from zope.interface import implementer
from zope.interface.registry import Components
from zope.component import getGlobalSiteManager
from zope.component.tests.examples import ConformsToIComponentLookup
class IFoo(Interface):
pass
class IBar(Interface):
pass
class IBaz(Interface):
pass
@implementer(IBar)
class Bar(object):
pass
@implementer(IBaz)
class Baz(object):
pass
@implementer(IFoo)
class Global(object):
def __init__(self, first, second):
self.first, self.second = first, second
@implementer(IFoo)
class Local(object):
def __init__(self, first, second):
self.first, self.second = first, second
class Context(ConformsToIComponentLookup):
def __init__(self, sm):
self.sitemanager = sm
gsm = getGlobalSiteManager()
gsm.registerAdapter(Global, (IBar, IBaz), IFoo, '')
sm1 = Components('sm1', bases=(gsm, ))
sm1.registerAdapter(Local, (IBar, IBaz), IFoo, '')
bar = Bar()
baz = Baz()
adapted = self._callFUT((bar, baz), IFoo, '', context=Context(sm1))
self.assertTrue(adapted.__class__ is Local)
self.assertTrue(adapted.first is bar)
self.assertTrue(adapted.second is baz)
示例4: JSON
# 需要导入模块: from zope.interface.registry import Components [as 别名]
# 或者: from zope.interface.registry.Components import registerAdapter [as 别名]
class JSON(object):
""" Renderer that returns a JSON-encoded string.
Configure a custom JSON renderer using the
:meth:`~pyramid.config.Configurator.add_renderer` API at application
startup time:
.. code-block:: python
from pyramid.config import Configurator
config = Configurator()
config.add_renderer('myjson', JSON(indent=4))
Once this renderer is registered as above, you can use
``myjson`` as the ``renderer=`` parameter to ``@view_config`` or
:meth:`~pyramid.config.Configurator.add_view``:
.. code-block:: python
from pyramid.view import view_config
@view_config(renderer='myjson')
def myview(request):
return {'greeting':'Hello world'}
Custom objects can be serialized using the renderer by either
implementing the ``__json__`` magic method, or by registering
adapters with the renderer. See
:ref:`json_serializing_custom_objects` for more information.
.. note::
The default serializer uses ``json.JSONEncoder``. A different
serializer can be specified via the ``serializer`` argument. Custom
serializers should accept the object, a callback ``default``, and any
extra ``kw`` keyword arguments passed during renderer construction.
This feature isn't widely used but it can be used to replace the
stock JSON serializer with, say, simplejson. If all you want to
do, however, is serialize custom objects, you should use the method
explained in :ref:`json_serializing_custom_objects` instead
of replacing the serializer.
.. versionadded:: 1.4
Prior to this version, there was no public API for supplying options
to the underlying serializer without defining a custom renderer.
"""
def __init__(self, serializer=json.dumps, adapters=(), **kw):
""" Any keyword arguments will be passed to the ``serializer``
function."""
self.serializer = serializer
self.kw = kw
self.components = Components()
for type, adapter in adapters:
self.add_adapter(type, adapter)
def add_adapter(self, type_or_iface, adapter):
""" When an object of the type (or interface) ``type_or_iface`` fails
to automatically encode using the serializer, the renderer will use
the adapter ``adapter`` to convert it into a JSON-serializable
object. The adapter must accept two arguments: the object and the
currently active request.
.. code-block:: python
class Foo(object):
x = 5
def foo_adapter(obj, request):
return obj.x
renderer = JSON(indent=4)
renderer.add_adapter(Foo, foo_adapter)
When you've done this, the JSON renderer will be able to serialize
instances of the ``Foo`` class when they're encountered in your view
results."""
self.components.registerAdapter(adapter, (type_or_iface,),
IJSONAdapter)
def __call__(self, info):
""" Returns a plain JSON-encoded string with content-type
``application/json``. The content-type may be overridden by
setting ``request.response.content_type``."""
def _render(value, system):
request = system.get('request')
if request is not None:
response = request.response
ct = response.content_type
if ct == response.default_content_type:
response.content_type = 'application/json'
default = self._make_default(request)
return self.serializer(value, default=default, **self.kw)
return _render
def _make_default(self, request):
def default(obj):
#.........这里部分代码省略.........
示例5: TestAdapter
# 需要导入模块: from zope.interface.registry import Components [as 别名]
# 或者: from zope.interface.registry.Components import registerAdapter [as 别名]
class TestAdapter(unittest.TestCase):
def setUp(self):
self.components = Components('comps')
def test_register_and_unregister_adapter(self):
self.components.registerAdapter(A12_1)
multi_adapter = self.components.getMultiAdapter(
(U1(1), U12(2)), IA1)
self.assertEqual(multi_adapter.__class__, A12_1)
self.assertEqual(repr(multi_adapter), 'A12_1(U1(1), U12(2))')
self.assertTrue(self.components.unregisterAdapter(A12_1))
self.assertRaises(
ComponentLookupError,
self.components.getMultiAdapter,
(U1(1), U12(2)),
IA1
)
def test_register_and_unregister_adapter_with_two_interfaces(self):
self.assertRaises(TypeError, self.components.registerAdapter,
A1_12)
self.components.registerAdapter(A1_12,
provided=IA2)
multi_adapter = self.components.getMultiAdapter((U1(1),), IA2)
self.assertEqual(multi_adapter.__class__, A1_12)
self.assertEqual(repr(multi_adapter), 'A1_12(U1(1))')
self.assertRaises(TypeError, self.components.unregisterAdapter, A1_12)
self.assertTrue(self.components.unregisterAdapter(A1_12, provided=IA2))
self.assertRaises(ComponentLookupError,
self.components.getMultiAdapter, (U1(1),), IA2)
def test_register_and_unregister_adapter_with_no_interfaces(self):
self.assertRaises(TypeError, self.components.registerAdapter, A12_)
self.components.registerAdapter(A12_, provided=IA2)
multi_adapter = self.components.getMultiAdapter((U1(1), U12(2)), IA2)
self.assertEqual(multi_adapter.__class__, A12_)
self.assertEqual(repr(multi_adapter), 'A12_(U1(1), U12(2))')
self.assertRaises(TypeError, self.components.unregisterAdapter, A12_)
self.assertTrue(self.components.unregisterAdapter(A12_, provided=IA2))
self.assertRaises(ComponentLookupError,
self.components.getMultiAdapter, (U1(1), U12(2)), IA2)
def test_reg_and_unreg_adp_with_no___component_adapts___attribute(self):
self.assertRaises(TypeError, self.components.registerAdapter, A_2)
self.components.registerAdapter(A_2, required=[I3])
self.assertTrue(self.components.unregisterAdapter(A_2, required=[I3]))
def test_register_and_unregister_class_specific(self):
self.components.registerAdapter(A_3, required=[U],
info=u'Really class specific')
self.assertTrue(self.components.unregisterAdapter(required=[U],
provided=IA3))
def test_registered_adapters_and_sorting(self):
self.components.registerAdapter(A12_1)
self.components.registerAdapter(A1_12, provided=IA2)
self.components.registerAdapter(A12_, provided=IA2)
self.components.registerAdapter(A_2, required=[I3])
self.components.registerAdapter(A_3, required=[U],
info=u'Really class specific')
sorted_adapters = sorted(self.components.registeredAdapters())
sorted_adapters_name = map(lambda x: getattr(x, 'name'),
sorted_adapters)
sorted_adapters_provided = map(lambda x: getattr(x, 'provided'),
sorted_adapters)
sorted_adapters_required = map(lambda x: getattr(x, 'required'),
sorted_adapters)
sorted_adapters_info = map(lambda x: getattr(x, 'info'),
sorted_adapters)
self.assertEqual(len(sorted_adapters), 5)
self.assertEqual(sorted_adapters_name, [u'', u'', u'', u'', u''])
self.assertEqual(sorted_adapters_provided, [IA1,
IA2,
IA2,
IA2,
IA3])
self.assertEqual(sorted_adapters_required, [(I1, I2),
(I1, I2),
(I1,),
(I3,),
(implementedBy(U),)])
self.assertEqual(sorted_adapters_info,
[u'', u'', u'', u'', u'Really class specific'])
def test_get_none_existing_adapter(self):
self.assertRaises(ComponentLookupError,
self.components.getMultiAdapter, (U(1),), IA1)
def test_query_none_existing_adapter(self):
self.assertTrue(self.components.queryMultiAdapter((U(1),), IA1) is None)
#.........这里部分代码省略.........