src/pyams_zodbbrowser/zmi/views.py
changeset 4 f2a4feee1ff3
parent 0 a02202f95e2c
child 7 ff85e0caffdb
equal deleted inserted replaced
3:a2fb7373f0d1 4:f2a4feee1ff3
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     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
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 from pyramid.httpexceptions import HTTPFound
       
    13 from pyramid.view import view_config
       
    14 
    12 
    15 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    16 
    14 
    17 
    15 
    18 # import standard library
    16 # import standard library
    19 import json
       
    20 import time
    17 import time
    21 import transaction
    18 import transaction
    22 from html import escape
    19 from html import escape
    23 
    20 
    24 # import interfaces
    21 # import interfaces
    34 from persistent.timestamp import TimeStamp
    31 from persistent.timestamp import TimeStamp
    35 from pyams_pagelet.pagelet import pagelet_config
    32 from pyams_pagelet.pagelet import pagelet_config
    36 from pyams_skin.viewlet.menu import MenuItem
    33 from pyams_skin.viewlet.menu import MenuItem
    37 from pyams_template.template import template_config
    34 from pyams_template.template import template_config
    38 from pyams_utils.adapter import ContextRequestAdapter
    35 from pyams_utils.adapter import ContextRequestAdapter
    39 from pyams_utils.interfaces import PYAMS_APPLICATION_DEFAULT_NAME, PYAMS_APPLICATION_SETTINGS_KEY
    36 from pyams_utils.interfaces import PYAMS_APPLICATION_DEFAULT_NAME, PYAMS_APPLICATION_SETTINGS_KEY, \
       
    37     MANAGE_SYSTEM_PERMISSION
    40 from pyams_utils.property import cached_property
    38 from pyams_utils.property import cached_property
    41 from pyams_viewlet.viewlet import viewlet_config
    39 from pyams_viewlet.viewlet import viewlet_config
    42 from pyams_zodbbrowser.diff import compareDictsHTML
    40 from pyams_zodbbrowser.diff import compareDictsHTML
    43 from pyams_zodbbrowser.history import ZodbObjectHistory
    41 from pyams_zodbbrowser.history import ZodbObjectHistory
    44 from pyams_zodbbrowser.state import ZodbObjectState
    42 from pyams_zodbbrowser.state import ZodbObjectState
    45 from pyams_zodbbrowser.value import TRUNCATIONS, pruneTruncations
    43 from pyams_zodbbrowser.value import TRUNCATIONS, pruneTruncations
       
    44 from pyramid.httpexceptions import HTTPFound
       
    45 from pyramid.view import view_config
    46 from ZODB.POSException import POSKeyError
    46 from ZODB.POSException import POSKeyError
    47 from ZODB.utils import p64, u64, tid_repr
    47 from ZODB.utils import p64, u64, tid_repr
    48 from zope.exceptions.interfaces import UserError
    48 from zope.exceptions.interfaces import UserError
    49 from zope.interface import implementer, Interface
    49 from zope.interface import implementer, Interface
    50 
    50 
   120     def __ne__(self, other):
   120     def __ne__(self, other):
   121         return not self.__eq__(other)
   121         return not self.__eq__(other)
   122 
   122 
   123 
   123 
   124 @viewlet_config(name='zodbbrowser.menu', layer=IAdminLayer, context=Interface, manager=IControlPanelMenu,
   124 @viewlet_config(name='zodbbrowser.menu', layer=IAdminLayer, context=Interface, manager=IControlPanelMenu,
   125                 permission='system.manage', weight=9999)
   125                 permission=MANAGE_SYSTEM_PERMISSION, weight=9999)
   126 class ZODBBrowserMenu(MenuItem):
   126 class ZODBBrowserMenu(MenuItem):
   127     """ZODB browser menu"""
   127     """ZODB browser menu"""
   128 
   128 
   129     label = _("ZODB browser")
   129     label = _("ZODB browser")
   130     icon_class = 'fa fa-fw fa-database'
   130     icon_class = 'fa fa-fw fa-database'
   158             except AttributeError:
   158             except AttributeError:
   159                 return None
   159                 return None
   160         return obj
   160         return obj
   161 
   161 
   162 
   162 
   163 @pagelet_config(name='zodbbrowser', context=Interface, layer=IPyAMSLayer, permission='system.manage')
   163 @pagelet_config(name='zodbbrowser', context=Interface, layer=IPyAMSLayer, permission=MANAGE_SYSTEM_PERMISSION)
   164 @template_config(template='templates/zodbinfo.pt', layer=IPyAMSLayer)
   164 @template_config(template='templates/zodbinfo.pt', layer=IPyAMSLayer)
   165 @implementer(IInnerPage)
   165 @implementer(IInnerPage)
   166 class ZodbInfoView(VeryCarefulView):
   166 class ZodbInfoView(VeryCarefulView):
   167     """ZODB info view"""
   167     """ZODB info view"""
   168 
   168 
   443             return str(TimeStamp(tid))
   443             return str(TimeStamp(tid))
   444         return tid_repr(tid)
   444         return tid_repr(tid)
   445 
   445 
   446 
   446 
   447 @view_config(name='zodbbrowser_path_to_oid', context=Interface, request_type=IPyAMSLayer,
   447 @view_config(name='zodbbrowser_path_to_oid', context=Interface, request_type=IPyAMSLayer,
   448              permission='system.manage', renderer='json', xhr=True)
   448              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   449 class PathToOidView(ZodbInfoView):
   449 class PathToOidView(ZodbInfoView):
   450 
   450 
   451     def __call__(self):
   451     def __call__(self):
   452         path = self.request.params.get('path')
   452         path = self.request.params.get('path')
   453         return self.locate(path)
   453         return self.locate(path)
   454 
   454 
   455 
   455 
   456 @view_config(name='zodbbrowser_truncated', context=Interface, request_type=IPyAMSLayer,
   456 @view_config(name='zodbbrowser_truncated', context=Interface, request_type=IPyAMSLayer,
   457              permission='system.manage', renderer='json', xhr=True)
   457              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   458 class TruncatedView(ZodbInfoView):
   458 class TruncatedView(ZodbInfoView):
   459 
   459 
   460     def __call__(self):
   460     def __call__(self):
   461         id = self.request.params.get('id')
   461         id = self.request.params.get('id')
   462         return TRUNCATIONS.get(id)
   462         return TRUNCATIONS.get(id)
   463 
   463 
   464 
   464 
   465 @pagelet_config(name='zodbbrowser_history', context=Interface, layer=IPyAMSLayer, permission='system.manage')
   465 @pagelet_config(name='zodbbrowser_history', context=Interface, layer=IPyAMSLayer, permission=MANAGE_SYSTEM_PERMISSION)
   466 @template_config(template='templates/zodbhistory.pt', layer=IPyAMSLayer)
   466 @template_config(template='templates/zodbhistory.pt', layer=IPyAMSLayer)
   467 @implementer(IInnerPage)
   467 @implementer(IInnerPage)
   468 class ZodbHistoryView(VeryCarefulView):
   468 class ZodbHistoryView(VeryCarefulView):
   469     """Zodb history view"""
   469     """Zodb history view"""
   470 
   470