src/pyams_utils/data.py
changeset 1 3f89629b9e54
child 72 9049384a2bd4
equal deleted inserted replaced
0:16d47bd81d84 1:3f89629b9e54
       
     1 #
       
     2 # Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
       
     3 # All Rights Reserved.
       
     4 #
       
     5 # This software is subject to the provisions of the Zope Public License,
       
     6 # Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
       
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
       
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
       
    10 # FOR A PARTICULAR PURPOSE.
       
    11 #
       
    12 
       
    13 __docformat__ = 'restructuredtext'
       
    14 
       
    15 
       
    16 # import standard library
       
    17 import json
       
    18 
       
    19 # import interfaces
       
    20 from pyams_utils.interfaces.data import IObjectData, IObjectDataRenderer
       
    21 from pyams_utils.interfaces.tales import ITALESExtension
       
    22 from pyramid.interfaces import IRequest
       
    23 from zope.publisher.interfaces.browser import IBrowserRequest
       
    24 
       
    25 # import packages
       
    26 from pyams_utils.adapter import ContextAdapter, ContextRequestViewAdapter, adapter_config
       
    27 from zope.interface import Interface
       
    28 
       
    29 
       
    30 @adapter_config(context=IObjectData, provides=IObjectDataRenderer)
       
    31 class ObjectDataRenderer(ContextAdapter):
       
    32     """Object data JSON renderer"""
       
    33 
       
    34     def get_object_data(self):
       
    35         data = IObjectData(self.context)
       
    36         return json.dumps(data.object_data) if data is not None else None
       
    37 
       
    38 
       
    39 @adapter_config(name='object_data', context=(Interface, Interface, Interface), provides=ITALESExtension)
       
    40 class ObjectDataExtension(ContextRequestViewAdapter):
       
    41     """extension:object_data TALES extension"""
       
    42 
       
    43     def render(self, context=None):
       
    44         if context is None:
       
    45             context = self.context
       
    46         renderer = IObjectDataRenderer(context, None)
       
    47         if renderer is not None:
       
    48             return renderer.get_object_data()
       
    49 
       
    50 
       
    51 @adapter_config(name='request_data', context=(Interface, IRequest, Interface), provides=ITALESExtension)
       
    52 class PyramidRequestDataExtension(ContextRequestViewAdapter):
       
    53     """extension:request_data TALES extension for Pyramid request"""
       
    54 
       
    55     def render(self, params=None):
       
    56         return self.request.annotations.get(params)
       
    57 
       
    58 
       
    59 @adapter_config(name='request_data', context=(Interface, IBrowserRequest, Interface), provides=ITALESExtension)
       
    60 class BrowserRequestDataExtension(ContextRequestViewAdapter):
       
    61     """extension:request_data TALES extension for Zope browser request"""
       
    62 
       
    63     def render(self, params=None):
       
    64         return self.request.annotations.get(params)