src/pyams_viewlet/doctests/README.rst
changeset 47 df022d00a9c4
parent 0 b3d96ac70a99
equal deleted inserted replaced
46:ed2dc23f7f99 47:df022d00a9c4
       
     1 =====================
       
     2 pyams_viewlet package
       
     3 =====================
       
     4 
       
     5 These doctests are based on zope.viewlet doctests.
       
     6 
       
     7 In this implementation of viewlets, we first have to define *viewlet managers*, which are special
       
     8 content providers which manage a special type of content providers called *viewlets*. Every
       
     9 viewlets manager handles the viewlets registered for it:
       
    10 
       
    11     >>> from pyramid.testing import setUp, tearDown
       
    12     >>> config = setUp()
       
    13 
       
    14     >>> from pyams_viewlet.interfaces import IViewletManager
       
    15 
       
    16     >>> class ILeftColumn(IViewletManager):
       
    17     ...     """Left column viewlet manager"""
       
    18 
       
    19 We can then create a viewlet manager factory using this interface:
       
    20 
       
    21     >>> from pyams_viewlet.manager import ViewletManagerFactory
       
    22     >>> LeftColumn = ViewletManagerFactory('left-column', ILeftColumn)
       
    23 
       
    24 Having the factory, we can instantiate it:
       
    25 
       
    26     >>> from zope.interface import implementer, Interface
       
    27     >>> @implementer(Interface)
       
    28     ... class Content:
       
    29     ...     """Content class"""
       
    30     >>> content = Content()
       
    31 
       
    32     >>> from pyramid.interfaces import IView, IRequest
       
    33     >>> from pyramid.testing import DummyRequest
       
    34     >>> request = DummyRequest()
       
    35 
       
    36     >>> @implementer(IView)
       
    37     ... class View:
       
    38     ...     def __init__(self, context, request):
       
    39     ...         self.context = context
       
    40     ...         self.request = request
       
    41     >>> view = View(content, request)
       
    42 
       
    43     >>> left_column = LeftColumn(content, request, view)
       
    44 
       
    45 Actually, viewlet manager doesn't render anything:
       
    46 
       
    47     >>> left_column.update()
       
    48     >>> left_column.render()
       
    49     ''
       
    50 
       
    51 We have to create and register viewlets for the manager:
       
    52 
       
    53     >>> from pyams_viewlet.interfaces import IViewlet
       
    54     >>> from pyams_viewlet.viewlet import EmptyViewlet
       
    55     >>> class TextBox(EmptyViewlet):
       
    56     ...     def render(self):
       
    57     ...         return '<div class="text">Text box!</div>'
       
    58     ...     def __repr__(self):
       
    59     ...         return '<TextBox object at %x>' % id(self)
       
    60 
       
    61     >>> config.registry.registerAdapter(TextBox,
       
    62     ...                                 (Interface, IRequest, IView, ILeftColumn),
       
    63     ...                                 IViewlet, name='text-box')
       
    64 
       
    65     >>> left_column.render()
       
    66     ''
       
    67 
       
    68 Viewlet managers are memoized on rendering, so we have to reset it's state if we want to
       
    69 render it another time:
       
    70 
       
    71     >>> left_column.reset()
       
    72     >>> left_column.update()
       
    73     >>> left_column.render()
       
    74     '<div class="text">Text box!</div>'
       
    75 
       
    76     >>> tearDown()