Find and inspect python functions
Project description
pyinspect
If, like me, when coding often you know which function you need but can't quite remember
its name, then I have good news!. pyinspect
is here to help you out.
pyinspect
allows you to search for functions and class methods based on their name and
prints out a handy table with all the functions that met your search criteria.
You can also use pyinspect
to print a function's code directly in your terminal so that you can remind yourself what it does without having to open any file!
Table of Contents
- [Installing pyinspect](##Installing pyinspect)
- ExamplFinding functionse2
- Third Example
- Fourth Example
Installing pyinspect
It's as simple as:
pip install pyinspect
Finding functions
The easiest way to grasp how pyinspect
can help is with an example.
Imagine that you just can't remember which
matplotlib.pyplot
method you need to create a figure with subplots...
this is how you use pyinspect
to find the function you need:
# import the module whose functions you're looking for
import matplotlib.pyplot as plt
# import pyinspect
import pyinspect
# Find the functions you're looking for
funcs = pyinspect.search(plt, name='subplot')
This results in a table with all the function's matching your search name
:
note: search also looks for functions in sub-modules of the module found.
e.g. search(matplotlib...)
will look for methods across the entire matplotlib
library!
pyinspect.find
can also be used to find class attributes. For example,
say that you're looking for a method with export
in the name in rich.console.Console
:
# import the class you need to inspect
from rich.console import Console
# import pyinspect
import pyinspect
# find class methods
methods = pyinspect.search(Console, 'export')
Which gives:
note: search also looks for methods matching your query among the parents of the
class
you passed. Useinclude_parents=False
when callingsearch
to restrict the search to just the class you've passed. Methods of the parent class are highlighted in a different color!
PRO TIP: if you don't pass a search name to
pyinspect.search
(e.g.pyinspect.find(Console)
),pyinspect.search
will print all functions and methods.
Inspecting functions
Okay, you've found the function you need, that's great. But how does it work?
What if, in addition to the exact name, you've forgotten which arguments it takes, or what it does exactly. Well, pyinspect
can help you there as well!
You can use pyinspect.print_function
to print the source code of any function or attribute directly in your terminal. This way you can inspect what the function does without having to open any file!
This is how to do it:
# import pyinspect
import pyinspect as pi
# Look at how pyinspect.search works
pi.showme(pi.search)
which yields:
Tracebacks
Finally, pyinspect
builds upon rich
's awesome traceback
functionality to
print nicely formatted tracebacks and show the local variables
when the exception came up.
E.g.:
# import pyinspect and install the traceback handler
import pi
pi.install_traceback() # use hide_locals=True to hide locals panels
# make some buggy code
import numpy as np
a = np.ones(5)
b = "ignore this" # a local variable not being used
c = np.zeros(4) # ooops, wrong size
a + c # this will give an error
and this is the traceback:
note: although we defined three variables (
a
,b
,c
) only two where in the line causing the error (a + c
).pyinspect
then highlightsa
andc
in the traceback as this is what you need to know to fix your bug. If you wantpyinspect
to only show the variables in the error line passrelevant_only=True
topi.install_traceback()
pro tips:
- if you want to show all items in the
local
scope (e.g. also imported modules, not just variables) then you can useall_locals=True
inpi.install_traceback()
- if you don't want the locals to be shown at all, then use
hide_locals=True
- if you want more or less extensive tracebacks, you can use
keep_frames
to decide how manyframes
to shown in nested tracebacks (i.e when a functiona
calls a functionb
and the error comes up inb
, do you want to see only the locals inb
or ina
andb
?)
Contributing
Contributions are welcome! Start a pull request if you have a change you'd like to submit or open an issue to report a bug or request a new feature to be added to pyinspect
Aknowledgements
pyinspect
is mostly a thin wrapper on top of the awesome rich
library, so a huge thank you goes to @willmcgugan for the great job done with rich
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyinspect-0.0.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4a8b3f4f9a9dd9fef0b1d479fda6ecc7f8651694de2fa222bd08a682e009c7c8 |
|
MD5 | 683e42e455b27d3fb936f53069d0b06f |
|
BLAKE2b-256 | 8acf7e493bbf672495a1792a38f683a3ab4d64936ccc1360d86df1b2e83c313c |