Re: pycanvas.py

Christoph Zwerschke <[email protected]>
Newsgroups gmane.comp.python.reportlab.user
Message-ID <[email protected]>
Am 28.11.2013 12:15, schrieb Robin Becker:
> It is a module that implements a reporting proxy with a canvas that
> records all access calls and attribute settings etc etc. This fails
> under python3 because of differences between old and new style classes.

That difference is explained here:
http://docs.python.org/2/reference/datamodel.html

Essentially, what you need to do is add some more of the special methods 
to the PDFAction class, i.e. implement __str__ in the same way as it is 
done for __hash__ already.

I also wonder whether the PDFAction class can be simplified like this:

###

class PDFAction(object):
     """Base class to fake method calls or attributes on Canvas"""

     def __init__(self, parent, action) :
         self.__attr = getattr(parent._underlying, action)

     def __str__(self):
         return str(self.__attr)

     def __repr__(self):
         return repr(self.__attr)

     def __getattr__(self, name):
         """Probably a method call on an attribute, returns real one."""
         return getattr(self.__attr, name)

     def __call__(self, *args, **kwargs) :
         """The fake method is called, print it then call real one."""
         if not self._parent._parent._in :
             self._precomment()
             self._postcomment()
         self._parent._parent._in += 1
         retcode = self.__attr(*args, **kwargs)
         self._parent._parent._in -= 1
         return retcode

     def __hash__(self) :
         return hash(self.__attr)

     def _precomment(self) :
         print('%s(__dict__=%s)._precomment()' %
                 (self.__class__.__name__,repr(self.__dict__)))

     def _postcomment(self) :
         print('%s(__dict__=%s)._postcomment()' %
                 (self.__class__.__name__,repr(self.__dict__)))

###

-- Christoph
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.