Skip to main content

python development kit

Project description

pydevkit

PyPI PyPI - Python Version PyPI - License Downloads

Welcome to Python Development Kit.

It provides functionality, frequently needed in a python development:

  • logging
    • 4 predefined configurations (incl json logs)
    • control via command-line
    • control via environment variables
  • colors
    • ANSI coloration with command-line control
  • shell
    • printf-like shell command wrapper
  • argument parsing
    • environment-aware options with lookup order command line > environment > default
    • use module doc string as a help message
    • help formatter with switchable default and source var sections

To use pydevkit in your project, follow these steps

Install it

pip3 install pydevkit

Modify entry point to look like this

import pydevkit.log.config  # noqa: F401
from pydevkit.argparse import ArgumentParser

def get_args():
    p = ArgumentParser(help=__doc__, version='1.2.3')
    # FIXME: add your args here
    p.add_argument("--file", help="file arg")

    return p.parse_known_args()

def main():
    Args, UnknownArgs = get_args()

No need to modify any other code. Instead, continue to use standard logging module.

import logging
log = logging.getLogger(__name__)

We're done. Now your script has working logging configuration.



Logging

Run-time options

To control logging, you can use both PYDEVKIT_LOG_ environment variables and --log- command-line options. For example:

PYDEVKIT_LOG_HANDLER=app ./run.py --log-level=debug

Here is the list of all logging options:

  • level - debug, info, warning, error, critical
  • handler - app, app_mini, json, json_mini
  • date - datetime, date, time or strftime format e.g. %Y-%m-%d
  • color - auto, yes, no. If auto is selected, module will enable coloration for terminals and disable when output is redirected to pipe or file.
  • threads - yes, no. Include thread name in a log

Developer info

You can pass extra arguments to the logger with

log.info("main text", extra={"extra": {"more": "info"}})

External configuration

If PYTHON_LOGGING_CONFIG variable is defined and points to a file, PDK will use it to configure standard logging module, using dictConfig (for json files) or fileConfig methods.

Argument parsing

Custom ArgumentParser wrapper featuring

  • deriving help (description + epilogue) from single doc string
  • automatic version option
  • show / hide option's default value
  • show / hide option's environment variable
  • built-in logging options
class ArgumentParser(
      help=None, version=None, usage="full",
      show_default=True, show_envvar=True, **kwargs)

All standard keywords work as well. New parameters are:

  • help - gets single string, usually module's doc string, if \nEPILOG:\n is present, splits it into description and epilog, otherwise just description
  • version - if supplied, PDK adds --version command-line option
  • usage - when "full" or None, PDK builds standard long usage
    usage: run.py [-h] [--log-level arg] [--log-color arg] [--log-handler arg],
    when "short"
    usage: run.py [options] [logging]
  • show_default - add (default: XXX) to help
  • show_envvar - add (envvar: XXX) to help

Derive help from documentation

This feature allows you to use single string, usually main __doc__string, to initialize ArgParser. Add documentation string to the entry point

#!/usr/bin/env python
'''
Main help message
and another line

EPILOG:
usage examples, notes etc
'''
# main code here

then pass it to the parser

p = ArgumentParser(help=__doc__)

ANSI colors

ANSI colors controlled by --log-color option.

from pydevkit.term import term_get

def main():
    term = term_get()
    log.warning("try %sred%s string", term.red, term.normal)

Shell commands

Simple printf-like shell wrapper

from pydevkit.shell import Shell

sh = Shell()
sh['a1'] = 'long string'
sh['a2'] = 'long string'
cmd = 'echo %(a1)s %(a2)s'
sh(cmd)            # print stdout
txt = sh.inp(cmd)  # grab stdout

Misc

TBD

Development

See development doc

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

pydevkit-3.2.2-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file pydevkit-3.2.2-py3-none-any.whl.

File metadata

  • Download URL: pydevkit-3.2.2-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.7.4 CPython/3.11.3

File hashes

Hashes for pydevkit-3.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a0a99a8669764dab84aac647a9990a56a216e0a9b5c57577340eca0b16b0543d
MD5 bec2a97fd85d0010d6d5e9a72a361169
BLAKE2b-256 d247a9f75274a863fa76fc2abb5540e12c5857bf7cce9daf789b928ff05fc3ea

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page