class ElementWithLink(object): LINK_ATTR_NAME = None def __init__(self, el, encoding=None): self.el = el self._link_history = OrderedSet() self.encoding = encoding def get_link(self): #print(__name__, "ElementWithLink encoding=", self.encoding) r = self.el.get(self.LINK_ATTR_NAME) if self.encoding: r = to_unicode(r, self.encoding) return r def set_link(self, new): _old = self.get_link() if _old != new: logging.debug('Update link %s => %s ', _old, new) self.el.set(self.LINK_ATTR_NAME, new) self._link_history.add(_old) link = property(get_link, set_link) @classmethod def make(cls, attr): def wrapper(el, encoding): r = cls(el, encoding=encoding) r.LINK_ATTR_NAME = attr return r return wrapper @property def link_history(self): return self._link_history
def __init__(self, el, encoding=None): self.el = el self._link_history = OrderedSet() self.encoding = encoding