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 |
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) |