Skip to main content

Templated docstrings for Python classes.

Project description

documented

Build Status Coverage Python Version wemake-python-styleguide PyPI - License

Templated docstrings for Python classes.

Features

  • Describe your business logic in docstrings of your classes and exceptions;
  • When printing an object or an exception, the library will substitute the placeholders in the docstring text with runtime values,
  • And you (or your user) will see a human readable text.

Installation

pip install documented

Example

from dataclasses import dataclass
from documented import DocumentedError


@dataclass
class InsufficientWizardryLevel(DocumentedError):
    """
    🧙 Your level of wizardry is insufficient ☹

        Spell: {self.spell}
        Minimum level required: {self.required_level}
        Actual level: {self.actual_level} {self.comment}

    Unseen University will be happy to assist in your training! 🎓
    """

    spell: str
    required_level: int
    actual_level: int

    @property
    def comment(self) -> str:
        if self.actual_level <= 0:
            return '(You are Rincewind, right? Hi!)'
        else:
            return ''


raise InsufficientWizardryLevel(
    spell='Animal transformation',
    required_level=8,
    actual_level=0,
)

which prints:

---------------------------------------------------------------------
InsufficientWizardryLevel           Traceback (most recent call last)
<ipython-input-1-d8ccdb953cf6> in <module>
     27 
     28 
---> 29 raise InsufficientWizardryLevel(
     30     spell='Animal transformation',
     31     required_level=8,

InsufficientWizardryLevel: 
🧙 Your level of wizardry is insufficient ☹

    Spell: Animal transformation
    Minimum level required: 8
    Actual level: 0 (You are Rincewind, right? Hi!)

Unseen University will be happy to assist in your training! 🎓

Usage

  • Template rendering is done using str.format().
  • That function receives the object instance as self keyword argument.
  • From template, you can't call methods of the object, but you can access its fields and properties.
  • textwrap.dedent() is applied to the result, thus Python indentation rules do not corrupt the resulting message.

Dynamically computed pieces of content may be introduced using:

You can also access elements of lists and dicts by index, for example: {self.countries[US]}.

Making your exceptions sane

  • Create your own exception classes in terms of your domain, to play a part in your business logic.

  • Do not use the word Exception or Error in their names. Your code should raise things like:

    • BalanceInsufficient
    • PlanetNotFound
    • TetOffline
    • OrderDeclined

    And should not:

    • ValueError
    • Exception
    • CatastrophicalError
  • Store meaningful properties of your errors in fields of the exception classes.

  • Use dataclasses, attrs or pydantic to save yourself from boilerplate in __init__() — and to get IDE support.

  • Maintain docstrings of your exceptions to contain up-to-date, human readable descriptions of what they mean.

  • You will be stimulated to do this by documented: when an exception happens, the docstring becomes actually useful.

Links

Which actually explains the meaning of this little helper: if we're stuck with exceptions in Python, why not at least make them friendlier?

This project was generated with wemake-python-package. Current template version is: 5840464a31423422d7523897d854e92408eee6b8. See what is updated since then.

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

documented-0.1.2.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

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

documented-0.1.2-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file documented-0.1.2.tar.gz.

File metadata

  • Download URL: documented-0.1.2.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.11.0 Linux/5.15.0-53-generic

File hashes

Hashes for documented-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8c8536fc17ad716de4a49fd05efd8c50e7eb569bd29bad88308c4991f9aab2fe
MD5 115a0b6707c9eedffdd0d902afc97a25
BLAKE2b-256 cbcab66a0583bc50e5b54f627e258292f1ec9473f880e4aec74e34165f7af1ba

See more details on using hashes here.

File details

Details for the file documented-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: documented-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.11.0 Linux/5.15.0-53-generic

File hashes

Hashes for documented-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6419656a80c8356d59c74efa7036afb774aa38d14fd8ffd980f320fc71828c30
MD5 7e5198ea71c94b62689b277118d6827e
BLAKE2b-256 0e250e60655bd621ccbf00e2d743c3403369d74958979065002ec1b8c93424bb

See more details on using hashes here.

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