Metadata-Version: 2.1
Name: crepr
Version: 0.2.0
Summary: Create a __repr__ for your python classes from the definition found in __init__
Author-email: Christian Ledermann <christian.ledermann@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/cleder/crepr/
Keywords: __repr__,cli,code generator,introspection
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Code Generators
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: typer
Provides-Extra: complexity
Requires-Dist: lizard; extra == "complexity"
Requires-Dist: radon; extra == "complexity"
Provides-Extra: dev
Requires-Dist: crepr[complexity]; extra == "dev"
Requires-Dist: crepr[linting]; extra == "dev"
Requires-Dist: crepr[tests]; extra == "dev"
Requires-Dist: crepr[typing]; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Provides-Extra: linting
Requires-Dist: black; extra == "linting"
Requires-Dist: flake8; extra == "linting"
Requires-Dist: flake8-cognitive-complexity; extra == "linting"
Requires-Dist: flake8-comments; extra == "linting"
Requires-Dist: flake8-complex-f-strings; extra == "linting"
Requires-Dist: flake8-continuation; extra == "linting"
Requires-Dist: flake8-docstrings; extra == "linting"
Requires-Dist: flake8-encodings; extra == "linting"
Requires-Dist: flake8-expression-complexity; extra == "linting"
Requires-Dist: flake8-function-order; extra == "linting"
Requires-Dist: flake8-pep3101; extra == "linting"
Requires-Dist: flake8-string-format; extra == "linting"
Requires-Dist: flake8-super; extra == "linting"
Requires-Dist: flake8-use-fstring; extra == "linting"
Requires-Dist: ruff; extra == "linting"
Requires-Dist: yamllint; extra == "linting"
Provides-Extra: tests
Requires-Dist: pytest; extra == "tests"
Requires-Dist: pytest-cov; extra == "tests"
Provides-Extra: typing
Requires-Dist: mypy; extra == "typing"

# crepr

Create a ``__repr__`` for your python classes.

A Python script that takes a file path as a command-line argument,
imports the specified file, and creates a `__repr__` method
for each class defined in the module.
It uses the definition found in the  `__init__` method of the class.
It is pronounced /kɹeɪpr/, like 🇳🇿 crêpe.

Have a look at the blog-post [Love Your Representation
](https://dev.to/ldrscke/love-your-representation-27mm) for the rationale of this package.

[![Tests](https://github.com/cleder/crepr/actions/workflows/run-all-tests.yml/badge.svg?branch=main)](https://github.com/cleder/crepr/actions/workflows/run-all-tests.yml)
[![codecov](https://codecov.io/gh/cleder/crepr/graph/badge.svg?token=EGCcrWkpay)](https://codecov.io/gh/cleder/crepr)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)
](https://github.com/pre-commit/pre-commit)
[![MyPy](https://img.shields.io/badge/type_checker-mypy-blue)
](http://mypy-lang.org/)
[![Black](https://img.shields.io/badge/code_style-black-000000)
](https://github.com/psf/black)
[![MIT License](https://img.shields.io/pypi/l/crepr)](https://opensource.org/license/mit/)
[![Python Version](https://img.shields.io/pypi/pyversions/crepr)](https://www.python.org/)
[![PyPI - Version](https://img.shields.io/pypi/v/crepr)](https://pypi.org/project/crepr/)
[![Status](https://img.shields.io/pypi/status/crepr)](https://pypi.org/project/crepr/)

## Install

```bash
pip install crepr
```

## Usage

```bash
❯ crepr --help
Usage: crepr [OPTIONS] FILE_PATH

  Create a __repr__ method for each class of a python file.

Arguments:
  FILE_PATH  [required]

Options:
  --install-completion [bash|zsh|fish|powershell|pwsh]
                                  Install completion for the specified shell.
  --show-completion [bash|zsh|fish|powershell|pwsh]
                                  Show completion for the specified shell, to
                                  copy it or customize
```

## Example

Given the file `tests/classes/kw_only_test.py` with the contents:

```python
class KwOnly:
    def __init__(self, name: str, *, age: int) -> None:
        self.name = name
        self.age = age
```

The command:

```bash
❯ crepr tests/kw_only_test.py
```

produces

```python
class KwOnly:
    def __init__(self, name: str, *, age: int) -> None:
        self.name = name
        self.age = age

    def __repr__(self) -> str:
        """Create a string (c)representation for KwOnly."""
        return (f'{self.__class__.__module__}.{self.__class__.__name__}('
            f'name={self.name!r}, '
            f'age={self.age!r}, '
        ')')
```

The `repr()` of an instance of this class will be:

```python
>>> from tests.classes.kw_only_test import KwOnly
>>> kwo = KwOnly('Christian', age=25)
>>> kwo
tests.classes.kw_only_test.KwOnly(name='Christian', age=25, )
```

Give your representations some love.

❤️`.__repr__(self) -> str:`
