Find and inspect python functions
Project description
pyinspect - the python package for lazy programmers
Don't remember a function's name? Use pyinspect
to look for it.
Don't remember what a function does? Use pyinspect
to print its source code directly to your terminal.
Can't figure out why you keep getting an error? Use pyinspect
's fancy tracebacks to figure it out
Still can't figure it out, but too lazy to google it? Use pyinspect
to print Stack Overflow's top answer for your error message directly to your terminal!
... and a bunch of other features to make your life easier when coding.
An example of how `pyinspect` can be used to find and inspect functions lazily.
Table of Contents
- Installing pyinspect
- When you can't remember a variable's name...
- When you can't remember a function's name...
- When you can't remember what a function does
- When you can't fix that bug...
- When you still can't fix that bug...
- When you got a question, ask Google
- When you...
Installing pyinspect
It's as simple as:
pip install pyinspect
When you can't remember a variable's name..
Allright, you've defined a bunch of variables and now can't remember the name or content of the one you need. Fear not, becuse you can use pyinspect
to print all variables in your local scope:
import pyinspect as pi
a = 'my variable'
b = 'another variable'
pi.what() # print all local variables
or to look at a single variable in detail with:
my_favourite_number = 21
pi.what(a)
This will show you the variable content, where it has been defined and some of its attributes and methods. Something like:
When you can't remember a function's name...
That's okay! You can use pyinspect
to search for a function by its name!
E.g. to look for functions with searc
in their name in pyinspect
:
# import pyinspect
import pyinspect as pi
# Find the functions you're looking for
pi.search(pi, name='what')
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 given. e.g.
search(matplotlib, 'plot')
will look for methods across the entirematplotlib
library!
pyinspect.find
can also be used to find class methods. For example to look for a method with export
in the name in rich.console.Console
:
pi.search(Console, 'export')
note:
search
also looks for methods matching your query among the parents of theclass
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.
When you can't remember what a function does
Okay, you've found the function you need, that's great. But how does it work?
You could openthe file where it's defined, scroll down to it etc... but this pyinspect
, the package for lazy programmers! Instead of going thruogh that hastle why not printing the function's code directly to your terminal with a simple command:
# import pyinspect
import pyinspect as pi
# Look at how pyinspect.search works
pi.showme(pi.search)
which yields:
When you can't fix that bug...
Sometimes you know what's causing an error, sometimes you don't. When you don't, it helps to know what the variables involved in the error are, possibly without having to go through the extra work of debugging stuff!
Once again pyinspect
has a labour-saving solution: an advanced traceback
functionality that gives you all the information you need to fix your bug (hopefully!). Just install pyinspect
's traceback
at the start of your script: when get an error you'll get a helpful summary of what's going on with your code!
E.g.:
# import pyinspect and install the traceback handler
import pyinspect as pi
pi.install_traceback() # use hide_locals=True to hide locals panels from your traceback
# 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
?)
When you still can't fix that bug...
Time to do what any real programmer does in this situation... google it / copy-paste an answer from Stack Overflow. But that involves pulling up your browser, opening a new tab, typing stuf... too much work!
When an error comes up, pyinspect
gives you the opportunity to automate this work away by doing the googling for you.
You can do that in two ways:
- passing
enable_prompt=True
toinstall_traceback
: after the error traceback a prompt will come up asking if you want to look for solutions online, typey
. - In a terminal window use the
why
command andpyinspect
will automatically lookup solutions to the last error you've had [note you need to have installedpyinspect
's tracebacks for it to record errors].
Either way, you get 3 things:
- A description of your error
- Links to the top 3 results on Google
- A neat render of a Stack Overflow question and answer related to your error.
Check it out:
When you got a question, ask Google
Ever found yourself googling the same basic command over and over because you keep forgetting what the syntax is?
If you do (and I know you do), or if you have any other question, now you can look for answers directly in python with pynspect.ask
.
Using it is fairly simple:
pi.ask("python Concatenate two lists?")
note: you can also use
ask
in your terminal to lookup answers to your questions. E.g.:
ask "Python how to concatenate strings"
When you...
pyinspect
has a few more useful little features you might find yourself using from time to time. One of our favourites is panels
: a simple why to print neat messages to terminal, for when you need to communicate with your users.
import pyinspect as pi
pi.warn('This is a warning', 'Ooops, something might be wrong!')
pi.ok('You got this!', 'Panels are simple, but nice. Checkout `pyinspect.panels` to see what other kind of panels there are!')
You can also use Report
, a more advanced panel which allows you to create a more structured and detailed panel (see pi.whats_pi()
):
As an example, see how I've used Report
to render my CV
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.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b870566a8a488d40561b173951f564f69655cb21fad26d0d4747dfff9e49ac1 |
|
MD5 | 3405ec092dc67972d7b94b89655b1a13 |
|
BLAKE2b-256 | 67e6213c3333f6d1c1538fcf3a51206f840deea92c2a307e87c432bf2d8e2d58 |