Inject the full power of a REPL in your scripts
Project description
interactive
interactive is a Python 3 package that helps building interactive scripts using the full power of a Read-Eval-Print-Loop.
Installation
Use pip to install this package.
$ pip install interactive
If you have to install offline you can install it from the sources:
- get the sources from here.
- unzip them (
unzip interactive-main.zip) - go into the directory (
cd interactive-main) - install with pip (
pip install .)
If you want to include this code in your own package, just make the interactive folder available to your project scope.
Usage
Basics
Here is a small self explanatory example:
#!/usr/bin/env python3
from interactive import start, query
from interactive.expect import ExpectPredicate
start(locals()) # Initialize the context
print("Start here")
v = query(int, default=42) # give the user a REPL and wait for an answer
# the user may answer by calling `resume(some_value)`
print(f"Got v = {v} !")
sq = query( # a custom validator for the user answer
ExpectPredicate(lambda x: x == v * v, description="the square of v"),
msg="Provide the square of v",
)
print("Nice, thanks.")
Main classes and functions
The package is very simple, thus the help command should be enough to discover it.
The basic interface is made of the start, query and resume functions.
start and query are used in the script.
resume is used in interactive mode by the user to resume the script.
They are all wrapper around the interactive.context.Context methods.
A custom subclass of Context can be used for advanced control of the process.
It should be passed to start like start(locals(), Context=MyContext).
The sources is currently so simple that you can probably just go check it out.
The Expect class and its children are used to validate the data sent by the user. You may derive them and pass some instances as the type_ argument of query to provide custom validation.
Scoping
The scope of the REPL is handled manually two ways.
If you want to bind to the local scope of a function, use with rescope(locals()):.
Every query in the with block will share the scope of the current function.
An example of that use can be found in samples/02_scoping.py.
If you want arbitrary scope manipulation you may use the start and stop functions.
start(some_scope) bind a new REPL to some_scope and stop() pop the last REPL from the stack.
After a start all query will use some_scope. After stop the previous scope will be restored.
start will also be used to open the top level REPL at the beginning of a script (as demonstrated above).
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file interactive-script-0.2.1.tar.gz.
File metadata
- Download URL: interactive-script-0.2.1.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9421268f02f03ee5fa3895fe4af356654b927b5238121f36fa1d4cb726db8d64
|
|
| MD5 |
c528b0c09c110b362e9b8a3aed77b2b9
|
|
| BLAKE2b-256 |
be8b81b2cab43c080188364d8717d9455aa574011158862cf4196ad824f4f788
|
File details
Details for the file interactive_script-0.2.1-py3-none-any.whl.
File metadata
- Download URL: interactive_script-0.2.1-py3-none-any.whl
- Upload date:
- Size: 3.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c75c8b118ca4ce09b77a8f59867042f1fcfd3033324acc6238400be0c2f0d298
|
|
| MD5 |
d054a9190e1d64be6a8cbd611613fd63
|
|
| BLAKE2b-256 |
e929055cb345f922db9bcee5755816778e7285b7efa4342b12847214af834c5b
|