Skip to main content

Easily debug and trace attribute changes in your Python classes

pip install attr-tracers

PyPI version

Usage

To use this module, simply import trace from it, and decorate your chosen class:

from tracers import trace

@trace("test")
class MyClass:
   def __init__(self) -> None:
       self.test = 0
   
   ...

You can set custom setter and getter methods for your trace, practically allowing you to subcribe to read/write events of an attribute.

from typing import Any
from tracers import trace

def handle_get(obj: object) -> Any:
    """Get variable"""
    
    # Note the namespace-based reference to `attr`
    print(f"Trying to get {attr} from {obj}")
    return getattr(obj, "_" + attr)
    
def handle_set(obj: object, new: Any) -> None:
    """Set variable"""
    
    print(f"Setting {attr} for {obj} from {getattr(obj, attr)} -> {new}")
    setattr(obj, "_" + attr, new)
    
attr = "test"

@trace(attr, getter=handle_get, setter=handle_set)
class MyClass:
   def __init__(self) -> None:
       self.test = 0

You can also optionally output traces into a file non-interactively using the output argument.

Please note that these methods do NOT get a reference to attr. This is a quirk of properties, but you can work around it using namespace-based referencing, like above.

Inner workings

This module under the hood is just an easy way to assign properties to a class.

When decorated with trace("attr"), a class has its attribute attr replaced with a property. The default setter and getter of this property access the "_attr" attribute, as the property takes up "attr".

Essentially, what it becomes is this:

class MyClass:
    @property
    def attr(self) -> Any:
        return self._attr
        
    @attr.setter
    def attr(self, new: str) -> None:
        # Display current trace
        # Take input, quit or dismiss if chosen
        
        self._attr = new

Why use this over manually defining properties?

While defining the properties manually is doable, this module comes in really handy for debugging.

Imagine having a pretty complex hierarchy of class-inheritance and objects all relating to eachother (like it happens in pytermgui). It often happens that there is a certain attribute that isn't quite behaving how it is supposed to. While you could define these properties yourself, being able to import trace and plop it on top of a class is really efficient for debugging.

It also looks much nicer!

Metadata

Release files for attr-tracers 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for attr-tracers 1.1.0
File Size Uploaded
attr_tracers-1.1.0.tar.gz 230.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for attr-tracers 1.1.0
File Interpreter ABI Platform
attr_tracers-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 233.2 kB

Release files / attr_tracers-1.1.0.tar.gz

Download URL attr_tracers-1.1.0.tar.gz
Size 230.0 kB
Tags Source
SHA-256 checksum
How to use checksums
43de7a0a2e91708508e8430e94e829ca0119fff69c1fc0e1b6841248b76f4f56
BLAKE2b-256 checksum
How to use checksums
f0feb8c12392431f6f5ffda86c0f4e3d6e620d99e3f0afb1cdd539efe3c99c1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.27.0

Release files / attr_tracers-1.1.0-py3-none-any.whl

Download URL attr_tracers-1.1.0-py3-none-any.whl
Size 3.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0298865a418eca271122040c841f3317e8ee577327423fa7fcd78f1468243a3f
BLAKE2b-256 checksum
How to use checksums
5b90b420441eb3c31b4a5b992d1681ffe7a23451d8325494c8d08639c87fee63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.27.0

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page