src/pyams_zodbbrowser/zmi/views.py
changeset 21 ac784d71bb57
parent 7 ff85e0caffdb
equal deleted inserted replaced
20:1f1d69342248 21:ac784d71bb57
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 import time
    17 import time
       
    18 from html import escape
       
    19 
    18 import transaction
    20 import transaction
    19 from html import escape
    21 # import packages
    20 
    22 from BTrees.utils import oid_repr
       
    23 from ZODB.POSException import POSKeyError
       
    24 from ZODB.utils import p64, tid_repr, u64
       
    25 from persistent import Persistent
       
    26 from persistent.timestamp import TimeStamp
       
    27 from pyramid.httpexceptions import HTTPFound
       
    28 from pyramid.view import view_config
       
    29 from zope.exceptions.interfaces import UserError
       
    30 from zope.interface import Interface, implementer
       
    31 
       
    32 from pyams_pagelet.pagelet import pagelet_config
    21 # import interfaces
    33 # import interfaces
    22 from pyams_skin.interfaces import IInnerPage
    34 from pyams_skin.interfaces import IInnerPage
    23 from pyams_skin.layer import IPyAMSLayer
    35 from pyams_skin.layer import IPyAMSLayer
    24 from pyams_zmi.interfaces.menu import IControlPanelMenu
       
    25 from pyams_zmi.layer import IAdminLayer
       
    26 from pyams_zodbbrowser.interfaces import IValueRenderer, IDatabaseHistory
       
    27 
       
    28 # import packages
       
    29 from BTrees.utils import oid_repr
       
    30 from persistent import Persistent
       
    31 from persistent.timestamp import TimeStamp
       
    32 from pyams_pagelet.pagelet import pagelet_config
       
    33 from pyams_skin.viewlet.menu import MenuItem
    36 from pyams_skin.viewlet.menu import MenuItem
    34 from pyams_template.template import template_config
    37 from pyams_template.template import template_config
    35 from pyams_utils.adapter import ContextRequestAdapter
    38 from pyams_utils.adapter import ContextRequestAdapter
    36 from pyams_utils.interfaces import PYAMS_APPLICATION_DEFAULT_NAME, PYAMS_APPLICATION_SETTINGS_KEY, \
    39 from pyams_utils.interfaces import MANAGE_SYSTEM_PERMISSION, PYAMS_APPLICATION_DEFAULT_NAME, \
    37     MANAGE_SYSTEM_PERMISSION
    40     PYAMS_APPLICATION_SETTINGS_KEY
    38 from pyams_utils.property import cached_property
    41 from pyams_utils.property import cached_property
    39 from pyams_viewlet.viewlet import viewlet_config
    42 from pyams_viewlet.viewlet import viewlet_config
       
    43 from pyams_zmi.interfaces.menu import IControlPanelMenu
       
    44 from pyams_zmi.layer import IAdminLayer
       
    45 from pyams_zodbbrowser import _
    40 from pyams_zodbbrowser.diff import compareDictsHTML
    46 from pyams_zodbbrowser.diff import compareDictsHTML
    41 from pyams_zodbbrowser.history import ZodbObjectHistory
    47 from pyams_zodbbrowser.history import ZodbObjectHistory
       
    48 from pyams_zodbbrowser.interfaces import IDatabaseHistory, IValueRenderer
    42 from pyams_zodbbrowser.state import ZodbObjectState
    49 from pyams_zodbbrowser.state import ZodbObjectState
    43 from pyams_zodbbrowser.value import TRUNCATIONS, pruneTruncations
    50 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
       
    47 from ZODB.utils import p64, u64, tid_repr
       
    48 from zope.exceptions.interfaces import UserError
       
    49 from zope.interface import implementer, Interface
       
    50 
       
    51 from pyams_zodbbrowser import _
       
    52 
    51 
    53 
    52 
    54 def getObjectType(obj):
    53 def getObjectType(obj):
    55     cls = getattr(obj, '__class__', None)
    54     cls = getattr(obj, '__class__', None)
    56     if type(obj) is not cls:
    55     if type(obj) is not cls:
   531             objects = []
   530             objects = []
   532             for record in d:
   531             for record in d:
   533                 obj = self.jar.get(record.oid)
   532                 obj = self.jar.get(record.oid)
   534                 url = "#zodbbrowser?oid=0x%x&tid=0x%x" % (u64(record.oid),
   533                 url = "#zodbbrowser?oid=0x%x&tid=0x%x" % (u64(record.oid),
   535                                                            utid)
   534                                                            utid)
   536                 objects.append(dict(
   535                 try:
   537                     oid=u64(record.oid),
   536                     objects.append(dict(
   538                     path=getObjectPath(obj, d.tid),
   537                         oid=u64(record.oid),
   539                     oid_repr=oid_repr(record.oid),
   538                         path=getObjectPath(obj, d.tid),
   540                     class_repr=getObjectType(obj),
   539                         oid_repr=oid_repr(record.oid),
   541                     url=url,
   540                         class_repr=getObjectType(obj),
   542                     repr=IValueRenderer(obj).render(d.tid),
   541                         url=url,
   543                 ))
   542                         repr=IValueRenderer(obj).render(d.tid),
       
   543                     ))
       
   544                 except KeyError:  # no history
       
   545                     pass
   544             if len(objects) == 1:
   546             if len(objects) == 1:
   545                 summary = '1 object record'
   547                 summary = '1 object record'
   546             else:
   548             else:
   547                 summary = '%d object records' % len(objects)
   549                 summary = '%d object records' % len(objects)
   548             if size is not None:
   550             if size is not None: