Helper module for creating simple Python scripts
Project description
scripthelper
Helper module for simple command line Python scripts.
Basic usage
#!/usr/bin/env python3
import scripthelper
logger = scripthelper.bootstrap()
logger.critical("critical message")
logger.error("error message")
logger.warning("warning message")
logger.info("info message")
logger.verbose("verbose message")
logger.debug("debug message")
logger.spam("spam message")
It just works. Try --verbose
and --quiet
command line options, too.
It uses colored log messages on a terminal.
See --help
for more information.
Adding other command line parameters
#!/usr/bin/env python3
import scripthelper
scripthelper.add_argument("-n", "--name", help="Name to greet")
logger, args = scripthelper.bootstrap_args()
if args.name:
logger.debug("Name was provided")
logger.info(f"Hello {args.name}")
else:
logger.warning("Name was not provided")
For bigger scripts it is good idea to have the logger at the very beginning, and encapsulate the argument parsing phase, which is typically in the main function:
#!/usr/bin/env python3
import scripthelper
logger = scripthelper.getLogger(__name__)
def greet(name):
logger.info(f"Hello {name}")
def main():
scripthelper.add_argument("--name", default="World")
args = scripthelper.initialize()
greet(args.name)
main()
Progressbar works with logging, too
#!/usr/bin/env python3
import scripthelper
import time
logger = scripthelper.bootstrap()
logger.info("Doing the calculations...")
for i in scripthelper.progressbar(range(100)):
if i % 20 == 0:
logger.verbose(f"Iteration {i}")
if i % 5 == 0:
logger.debug(f"Iteration {i}")
if logger.isEnabledFor(scripthelper.SPAM):
logger.spam(f"Iteration {i}")
time.sleep(0.01)
logger.info("Done")
It is automatically disabled on non-tty stderr
by default.
Extended log levels can be used in modules
#!/usr/bin/env python3
import scripthelper
import example4module
scripthelper.bootstrap()
example4module.do_the_things()
#!/usr/bin/env python3
import scripthelper
logger = scripthelper.getLogger(__name__)
def do_the_things():
logger.verbose("Calling logger.verbose raises an exception if it does not work.")
logger.info("Hello from a module.")
You can easily preserve logs in files
#!/usr/bin/env python3
import scripthelper
logger = scripthelper.bootstrap()
scripthelper.setup_file_logging()
logger.critical("critical message")
logger.error("error message")
logger.warning("warning message")
logger.info("info message")
logger.verbose("verbose message")
logger.debug("debug message")
logger.spam("spam message")
It handles exceptions, warnings
#!/usr/bin/env python3
import scripthelper
scripthelper.bootstrap()
def uncaught_exception_test():
this_variable = "will be displayed in stack trace"
as_well_as = "the other variables"
raise RuntimeError("This exception should be handled.")
scripthelper.warn("This user warning will be captured.")
uncaught_exception_test()
The local variables will be displayed in stack trace, for example:
WARNING C:\***\scripthelper\example6.py:13: UserWarning: This user warning will be captured.
scripthelper.warn("This user warning will be captured.")
CRITICAL Uncaught RuntimeError: This exception should be handled.
Traceback with variables (most recent call last):
File "C:\***\scripthelper\example6.py", line 10, in uncaught_exception_test
raise RuntimeError("This exception should be handled.")
this_variable = 'will be displayed in stack trace'
as_well_as = 'the other variables'
builtins.RuntimeError: This exception should be handled.
Has built-in colored pretty printer
#!/usr/bin/env python3
import scripthelper
from dataclasses import dataclass
scripthelper.bootstrap()
@dataclass
class Item:
name: str
value: int
something = {
"string": "value1",
"bool": True,
"none": None,
"integer": 1234,
"item": Item("name", 999),
}
scripthelper.pp(something)
Has built-in persisted state handler
The state is persisted immediately in the background in YAML. Mutable objects (list
, dict
) also can be used.
#!/usr/bin/env python3
import scripthelper
logger = scripthelper.bootstrap()
state = scripthelper.PersistedState(processed_id=0, to_remember=[])
state.processed_id += 1
state.to_remember.append(f"Element {state.processed_id}")
while len(state.to_remember) > 2:
state.to_remember.pop(0)
logger.info(f"Processing item #{state.processed_id}")
for item in state.to_remember:
logger.info(f"- {item}")
$ python3 example9.py
INFO Processing item #1
INFO - Element 1
$ python3 example9.py
INFO Processing item #2
INFO - Element 1
INFO - Element 2
$ python3 example9.py
INFO Processing item #3
INFO - Element 2
INFO - Element 3
Helps issue a warning only once
#!/usr/bin/env python3
import scripthelper
scripthelper.bootstrap()
for _ in range(10):
scripthelper.warning_once("Item #12 has some errors")
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 scripthelper-23.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0357aaf37825485e7c84408bab2baae4b7d7d3d34b3eb5a37012775257e06048 |
|
MD5 | 7571297add0315e30379bd17f78d889e |
|
BLAKE2b-256 | 7070340c977548d9f37898735cd22333500073d7a2727e607ef553062e12e5bd |