Skip to main content

an opinionated set of utilities designed to be easily included in any number of projects

Project description

About

This package contains a set of utilities useful for building python libraries, scripts, and command-line utilities

It's designed to be easy to include in other projects. all of its mainline dependencies are vendored and all modules which have external un-vendorable dependencies are available as optional extras

Install

pip install uoft_core

to include all optional dependencies, run

pip install uoft_core[all]

Usage

This toolkit makes it really easy to write small, simple, well designed CLI utilities In fact, the aim of this project is to make well-engineered CLIs almost as easy to write and deploy as basic python scripts it leverages a lot of really fantastic modern libraries and tools to do so, like poetry, typer, and loguru

let's assume you've created a new project with poetry new, and you want to add a CLI interface to it. here's one way to do that: create a common.py files with your super handy dandy useful function in it:

from loguru import logger

def my_super_awesome_function():
    logger.debug("I'm running my_package.common.my_super_awesome_function!")

create a __main__.py file in your package like so:

import os

from .common import my_super_awesome_function

from at.utils import configure_logging
import typer
from loguru import logger

app = typer.Typer()


@app.callback()
def callback(verbose: bool = False):
    """
    Here is my app's main help string
    Users will see this when they run `python -m my_package`
    """
    log_level = 'DEBUG' if verbose else 'INFO'
    configure_logging(
        'my_app_name', 
        stderr_level=log_level, 
        logfile_level='DEBUG', 
        sentry_level=None)


@app.command()
def my_command(option: bool):
    """
    Here's the help text my users will see when they run `python -m my_package my-command -h`
    """
    logger.debug("running my-command")  # this will only get printed if the --verbose flag is set
    my_super_awesome_function(option)


if __name__ == "__main__":
    if os.environ.get('PYDEBUG'):
        # we're in a debugger session
        # here we can put whatever debugging code we want
        # we can configure logging so all messages up to DEBUG are logged to stderr, and nothing gets logged to file:
        configure_logging('my_app_name', 'DEBUG', None, None)
        # do debugging stuff here
        logger.debug("I'm a debug message!")
        exit()
    try:
        app()  # cli code goes here
    except KeyboardInterrupt:
        print("Aborted!")
        exit()

the main api (all the stuff directly importable from at_utils) consists of:

  • every function defined in the main module
  • the configure_logging function from the log module

configure_logging has an option to enable logging to sentry. in order to use it, you need to install at_utils with the sentry extra (ie pip install at-utils[sentry] or poetry add -D at-utils[sentry])

apart from that, there are other modules which can be imported separately:

yaml has a whole bunch of useful and sometimes esoteric utilities for working with yaml files, built on top of ruamel.yaml

dev_utils has commmand-line utilities for working with python projects, specifically made for projects that use poetry

Project details


Download files

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

Source Distribution

uoft_core-1.0.1.dev2.tar.gz (389.1 kB view details)

Uploaded Source

Built Distribution

uoft_core-1.0.1.dev2-py3-none-any.whl (485.8 kB view details)

Uploaded Python 3

File details

Details for the file uoft_core-1.0.1.dev2.tar.gz.

File metadata

  • Download URL: uoft_core-1.0.1.dev2.tar.gz
  • Upload date:
  • Size: 389.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.8.3 requests/2.28.1 setuptools/63.4.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

File hashes

Hashes for uoft_core-1.0.1.dev2.tar.gz
Algorithm Hash digest
SHA256 4b047d6af39638d849b072284e15fb4a3bbb563922f7f742208cce8551028bbe
MD5 71c6b34699395b97a9d817f7d8e01798
BLAKE2b-256 5dbddf14e8329510abbe0988a32bb10c9a3326215658a435035c7b630139cfe0

See more details on using hashes here.

File details

Details for the file uoft_core-1.0.1.dev2-py3-none-any.whl.

File metadata

  • Download URL: uoft_core-1.0.1.dev2-py3-none-any.whl
  • Upload date:
  • Size: 485.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.8.3 requests/2.28.1 setuptools/63.4.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

File hashes

Hashes for uoft_core-1.0.1.dev2-py3-none-any.whl
Algorithm Hash digest
SHA256 eaad29580af04d644c3810d811e2bacfa26a1550de4f6e26fa5c5deb435889b6
MD5 18f62357162866d892f6dcfc7976b814
BLAKE2b-256 76e684b5b7f965cee58c43b0e5e774d4ab9b0c69fc76eaf47ebbf5d60cb34fcb

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