Log with 20/20 vision
Project description
Dynamic logging after the fact
Classic logging expects perfect foresight, but only hindsight is 20/20!
Usage
Install via pip, then enter in a shell:
def hello(a, b=2):
"""docstring"""
a = 1
c = b * 2
a = b = c = a * 2 + b * c
print('output: a={} b={} c={}'.format(a, b, c))
return a, b, c
import retrospect
retro = retrospect.FunctionRetrospector(hello)
Now you can start inspecting lines in real-time:
>>> retro.implement(lines=True)
>>> hello(10)
((3, SetLineno, 3), {'a': 10, 'b': 2})
((4, SetLineno, 4), {'a': 1, 'b': 2})
((5, SetLineno, 5), {'a': 1, 'b': 2, 'c': 4})
((6, SetLineno, 6), {'a': 10, 'b': 10, 'c': 10})
output: a=10 b=10 c=10
((7, SetLineno, 7), {'a': 10, 'b': 10, 'c': 10})
((7, RETURN_VALUE, None), {'a': 10, 'b': 10, 'c': 10})
Or a specific set of lines:
>>> retro.implement(lines=[4], boundaries=False)
>>> hello(20)
((4, SetLineno, 4), {'a': 1, 'b': 2})
output: a=10 b=10 c=10
Or only on symbol changes:
>>> retro.implement(symbols=True, boundaries='start')
>>> hello(30)
((3, SetLineno, 3), {'a': 30, 'b': 2})
((3, STORE_FAST, 'a'), {'a': 30, 'b': 2})
((3, STORE_FAST, 'a'), {'a': 1, 'b': 2})
((4, STORE_FAST, 'c'), {'a': 1, 'b': 2})
((4, STORE_FAST, 'c'), {'a': 1, 'b': 2, 'c': 4})
((5, STORE_FAST, 'a'), {'a': 1, 'b': 2, 'c': 4})
((5, STORE_FAST, 'a'), {'a': 10, 'b': 2, 'c': 4})
((5, STORE_FAST, 'b'), {'a': 10, 'b': 2, 'c': 4})
((5, STORE_FAST, 'b'), {'a': 10, 'b': 10, 'c': 4})
((5, STORE_FAST, 'c'), {'a': 10, 'b': 10, 'c': 4})
((5, STORE_FAST, 'c'), {'a': 10, 'b': 10, 'c': 10})
output: a=10 b=10 c=10
Or specific opcodes:
>>> retro.implement(opcodes=['LOAD_CONST'], boundaries='finish')
>>> hello(40)
((3, LOAD_CONST, 1), {'a': 40, 'b': 2})
((4, LOAD_CONST, 2), {'a': 1, 'b': 2})
((5, LOAD_CONST, 2), {'a': 1, 'b': 2, 'c': 4})
((6, LOAD_CONST, 'output: a={} b={} c={}'), {'a': 10, 'b': 10, 'c': 10})
output: a=10 b=10 c=10
((7, RETURN_VALUE, None), {'a': 10, 'b': 10, 'c': 10})
Or return to exact original:
>>> retro.implement()
>>> hello(50)
output: a=10 b=10 c=10
Any of the above can be mixed as necessary, eg. lines=True, symbols="c"
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
retrospect-0.1.4.tar.gz
(8.2 kB
view details)
Built Distribution
File details
Details for the file retrospect-0.1.4.tar.gz
.
File metadata
- Download URL: retrospect-0.1.4.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c99b884caa7f08476cf5901167450dcd0ea6b5cfd88ef881a5146616bb4d7762 |
|
MD5 | 9f02bd9193038a61507f00e95cabdd5b |
|
BLAKE2b-256 | 2c8f76fa99ff48a1b07f08e9d30f7cbc3b3d1d036c40166bc4b8c2bb7a8442a6 |
File details
Details for the file retrospect-0.1.4-py2-none-any.whl
.
File metadata
- Download URL: retrospect-0.1.4-py2-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb06771537eff97a0219eba8fb24f790d0ce088acd5c33ee6f121db6c3f1dafa |
|
MD5 | 868d6bebb6172905222e989ffc78ff77 |
|
BLAKE2b-256 | fdd2ed9ab4edcd8dbf00cba6057e559948b13f53756cb605b27d5026aa2fe35c |