web/views/tableview.py
changeset 8065 8a933961938e
parent 8060 8acfd23578a8
child 8066 1d1b3735ac1b
equal deleted inserted replaced
8064:6d8eb873256d 8065:8a933961938e
    62 
    62 
    63 __docformat__ = "restructuredtext en"
    63 __docformat__ = "restructuredtext en"
    64 _ = unicode
    64 _ = unicode
    65 
    65 
    66 from warnings import warn
    66 from warnings import warn
       
    67 from copy import copy
       
    68 from types import MethodType
    67 
    69 
    68 from logilab.mtconverter import xml_escape
    70 from logilab.mtconverter import xml_escape
    69 from logilab.common.decorators import cachedproperty
    71 from logilab.common.decorators import cachedproperty
    70 from logilab.common.deprecation import class_deprecated
    72 from logilab.common.deprecation import class_deprecated
    71 
    73 
   363         view/request depending attributes on your column render.
   365         view/request depending attributes on your column render.
   364         """
   366         """
   365         self.view = view
   367         self.view = view
   366         self._cw = view._cw
   368         self._cw = view._cw
   367         self.colid = colid
   369         self.colid = colid
       
   370 
       
   371     def copy(self):
       
   372         assert self.view is None
       
   373         return copy(self)
   368 
   374 
   369     def default_header(self):
   375     def default_header(self):
   370         """Return header for this column if one has not been specified."""
   376         """Return header for this column if one has not been specified."""
   371         return self._cw._(self.colid)
   377         return self._cw._(self.colid)
   372 
   378 
   695                 sortfunc = self.entity_sortvalue
   701                 sortfunc = self.entity_sortvalue
   696         kwargs.setdefault('sortable', sortfunc is not None)
   702         kwargs.setdefault('sortable', sortfunc is not None)
   697         super(EntityTableColRenderer, self).__init__(**kwargs)
   703         super(EntityTableColRenderer, self).__init__(**kwargs)
   698         self.renderfunc = renderfunc
   704         self.renderfunc = renderfunc
   699         self.sortfunc = sortfunc
   705         self.sortfunc = sortfunc
       
   706 
       
   707     def copy(self):
       
   708         assert self.view is None
       
   709         # copy of attribute referencing a method doesn't work with python < 2.7
       
   710         renderfunc = self.__dict__.pop('renderfunc')
       
   711         sortfunc = self.__dict__.pop('sortfunc')
       
   712         try:
       
   713             acopy =  copy(self)
       
   714             for aname, member in[('renderfunc', renderfunc),
       
   715                                  ('sortfunc', sortfunc)]:
       
   716                 if isinstance(member, MethodType):
       
   717                     member = MethodType(member.im_func, acopy, acopy.__class__)
       
   718                 setattr(acopy, aname, member)
       
   719             return acopy
       
   720         finally:
       
   721             self.renderfunc = renderfunc
       
   722             self.sortfunc = sortfunc
   700 
   723 
   701     def render_cell(self, w, rownum):
   724     def render_cell(self, w, rownum):
   702         entity = self.entity(rownum)
   725         entity = self.entity(rownum)
   703         if entity is None:
   726         if entity is None:
   704             w(self.empty_cell_content)
   727             w(self.empty_cell_content)