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 |