skip to navigation
skip to content

repr 0.3.1

A shortcut to generate __repr__ methods for python classes

Package Documentation

A magic shortcut to generate __repr__ methods for your classes.

  • Free software: BSD license

Installation

pip install repr

This package contains a single module magic_repr called so to not conflict with standart python’s repr.

Reasoning

What do you think each time, writing such code?

def __repr__(self):
    return """
Issue(changelog={self.changelog},
      type={self.type},
      comment={self.comment},
      created_at={self.created_at},
      resolved_at={self.resolved_at})""".format(self=self).strip().encode('utf-8')

Isn’t this much better and readable?

__repr__ = make_repr('changelog', 'type', 'comment', 'created_at', 'resolved_at')

And this produces much nicer output:

<Issue changelog=<Changelog namespace=u'python'
                            name=u'geocoder'
                            source=u'https://github.com/DenisCarriere/geocoder'>
       type=u'wrong-version-content'
       comment=u'AllMyChanges should take release notes from the web site.'
       created_at=datetime.datetime(2016, 6, 17, 6, 44, 52, 16760, tzinfo=<UTC>)
       resolved_at=None>

Another advantage of the magic_repr

Is it’s recursiveness. If you use magic_repr for your objects and they include each other, then representation of the parent object will include child objects properly nested:

<Foo bars={1: <Bar first=1
                   second=2
                   third=3>,
           2: <Bar first=1
                   second=2
                   third=3>,
           u'три': <Bar first=1
                        second=2
                        third=3>}>

And all this for free! Just do __repr__ = make_repr().

Usage

For simple cases it is enough to call make_repr without arguments. It will figure out which attributes object has and will output them sorted alphabetically.

You can also specify which attributes you want to include in “representaion”:

from magic_repr import make_repr

__repr__ = make_repr('foo', 'bar')

And to specify a function to create a value for an attribute, using keywords:

from magic_repr import make_repr

class Some(object):
    def is_active(self):
        return True

Some.__repr__ = make_repr(active=Some.is_active)

Pay attention, that in this case __repr__ was created after the class definition. This is because inside of the class it can’t reference itself.

Development

To run the all tests run:

tox

Note, to combine the coverage data from all the tox environments run:

Windows
set PYTEST_ADDOPTS=--cov-append
tox
Other
PYTEST_ADDOPTS=--cov-append tox

Changelog

0.3.1 (2016-06-22)

  • Fixed issue #1 prevented generated __repr__ methods to work in mutithreaded programs.

0.3.0 (2016-06-20)

  • Now make_repr can be used for recursive datastructures.

0.2.1 (2016-06-19)

  • Documentation improved.

0.2.0 (2016-06-19)

  • Better handling of nested datastructure.
  • Callables as source of the attribute’s value.
  • Some documentation.

0.1.0 (2016-06-09)

  • First release on PyPI.
 
File Type Py Version Uploaded on Size
repr-0.3.1-py2.py3-none-any.whl (md5) Python Wheel 2.7 2016-06-22 7KB
repr-0.3.1.tar.gz (md5) Source 2016-06-22 15KB