Metadata-Version: 2.1
Name: scripthelper
Version: 21.10.2
Summary: Helper module for creating simple Python 3 scripts
Home-page: https://github.com/presidento/scripthelper
Author: Máté Farkas
Author-email: fm@farkas-mate.hu
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: tqdm (>=4.31.1)
Requires-Dist: coloredlogs (>=10.0)
Requires-Dist: verboselogs (>=1.7)
Requires-Dist: traceback-with-variables (>=2.0.1)
Requires-Dist: prettyprinter (>=0.18.0)

# scripthelper

Helper module for simple command line Python scripts.

The documentation with inline examples can be found in [pypi](https://pypi.org/project/scripthelper/).

## Basic usage

example1.py:
```python
#!/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

example2.py:
```python
#!/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")
```

Or:

example2b.py:
```python
#!/usr/bin/env python3
import scripthelper

scripthelper.add_argument("--name", default="World")
logger = scripthelper.bootstrap()
name = scripthelper.args.name

logger.info(f"Hello {name}")
```

## Progressbar works with logging, too

example3.py:
```python
#!/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.00001)
logger.info("Done")
```

## Extended log levels can be used in modules

example4.py:
```python
#!/usr/bin/env python3
import scripthelper
import example4module

scripthelper.bootstrap()
example4module.do_the_things()
```

example4module.py:
```python
#!/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

example5.py:
```python
#!/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

example6.py:
```python
#!/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.)

## Has built-in colored pretty printer

example7.py:
```python
#!/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)
```


