Skip to main content

Print objects with data beautifully

Project description

Downloads Downloads Coverage Status Lines of code Hits-of-Code Test-Package Python versions PyPI version Checked with mypy Ruff DeepWiki

logo

Pythonistas follow an implicit convention to create special __repr__ methods that return text closely resembling the code used to construct the object. __repr__ of 1 returns "1", and __repr__ of None returns "None". With this library, you can easily implement __repr__ for your own classes to follow this convention.

Table of contents

Installation

You can install printo with pip:

pip install printo

You can also use instld to quickly try this package and others without installing them.

Basic usage

The main function in this library is describe_data_object; it returns a string representing the initialization code for your object. There are three required positional parameters:

  • A class name.
  • A list or tuple of positional arguments.
  • A dict of keyword arguments, where the keys are the names of the arguments, and the values are arbitrary objects.

Here's a simple example of how it works:

from printo import describe_data_object

print(
    describe_data_object(
        'MyClassName',
        (1, 2, 'some text'),
        {'variable_name': 1, 'second_variable_name': 'kek'},
    )
)
#> MyClassName(1, 2, 'some text', variable_name=1, second_variable_name='kek')

Filtering

You can prevent individual parameters from being displayed. To do this, pass a dict to the filters parameter. The keys identify arguments by index or name. The values are functions that return a boolTrue keeps the argument and False skips it:

print(
    describe_data_object(
        'MyClassName',
        (1, 2, 'some text'),
        {'variable_name': 1, 'second_variable_name': 'kek'},
        filters={1: lambda x: False if x == 2 else True, 'second_variable_name': lambda x: False},
    )
)
#> MyClassName(1, 'some text', variable_name=1)

You can also use the provided not_none filter to automatically exclude None values:

from printo import not_none

print(
    describe_data_object(
        'MyClassName',
        (1, None),
        {},
        filters={1: not_none},
    )
)
#> MyClassName(1)

Custom display of objects

By default, all argument values are represented in the same way as the standard repr function would show them. There are only three exceptions:

  • For regular functions, the function name is displayed.
  • For classes, the class name is displayed.
  • For lambda functions, the complete source code is displayed. However, if a single line of source code contains more than one lambda function, only the λ symbol is displayed (this is a technical limitation of source code reflection in Python).

You can provide a custom serialization function for each argument value via the serializer parameter:

print(
    describe_data_object(
        'MyClassName',
        (1, 2, 'lol'),
        {'variable_name': 1, 'second_variable_name': 'kek'},
        serializer=lambda x: repr(x * 2),
    )
)
#> MyClassName(2, 4, 'lollol', variable_name=2, second_variable_name='kekkek')

Placeholders

For individual parameters, you can pass predefined strings that will be displayed instead of the actual values. This can be useful, for example, to hide the values of sensitive fields when serializing objects.

Pass a dict to the placeholders parameter, where the keys are argument names (for keyword arguments) or indices (for positional parameters, zero-indexed), and the values are strings:

print(
    describe_data_object(
        'MySuperClass',
        (1, 2, 'lol'),
        {'variable_name': 1, 'second_variable_name': 'kek'},
        placeholders={
            1: '***',
            'variable_name': '***',
        },
    )
)
#> MySuperClass(1, ***, 'lol', variable_name=***, second_variable_name='kek')

🤓 If you set a placeholder for a parameter, the custom serializer will not be applied to it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

printo-0.0.16.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

printo-0.0.16-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file printo-0.0.16.tar.gz.

File metadata

  • Download URL: printo-0.0.16.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for printo-0.0.16.tar.gz
Algorithm Hash digest
SHA256 e89d1ad629745adfd215f3adcdcb565b26c39a5a1b00d6d7ca595a4c7abdb3b3
MD5 22b716df422fc9978510526abdd2271b
BLAKE2b-256 fdb3a60da8c392e40abfadc0e812ad1a7de7a2fab073aac6acff0ad4ab1aa3ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for printo-0.0.16.tar.gz:

Publisher: release.yml on mutating/printo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file printo-0.0.16-py3-none-any.whl.

File metadata

  • Download URL: printo-0.0.16-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for printo-0.0.16-py3-none-any.whl
Algorithm Hash digest
SHA256 2fec854a1e0932abd77f9ece6c066ba454d3b4cda1c6f3033868769318edc4ca
MD5 c8729a9b9dc8141c419a34d9932d2b9b
BLAKE2b-256 fd75f0fa73fc515169e45661dd07841307ba28f89004328065923e73d4e6e9ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for printo-0.0.16-py3-none-any.whl:

Publisher: release.yml on mutating/printo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page