Skip to main content

access config and CLI easily and elegantly

Project description

volkanic

Interface with config files and shell prompts easily and elegantly.

To install (add sudo if necessary)

python3 -m pip install volkanic

GlobalInterface and config file

Example:

GlobalInterface is defined in example/environ.py as:

import volkanic


class GlobalInterface(volkanic.GlobalInterface):
    # you should always define `package_name`
    package_name = 'example'

Configuration file config.json5:

{
    "upstram_prefix": "http://127.0.0.1:9100",
    "sqlite": "/data/local/example/db.sqlite"
}

This config.json5 is at one of the follow locations:

  • Under your project directory in a development enviornment
  • ~/.example/config.json5
  • /etc/example/config.json5
  • /example/config.json5

Access config:

>>> from example.environ import GlobalInterface 
>>> gi = GlobalInterface()  # note that GlobalInterface is a sington class
>>> print(gi.conf)
{'upstram_prefix': 'http://127.0.0.1:9100', 'sqlite': '/data/local/example/db.sqlite'}

Note that GlobalInterface is a singlon class, which means that GlobalInterface() will always return the same object:

>>> GlobalInterface() is GlobalInterface()
True

The recommended usage of GlobalInterface() is to create instanciate it at the top each module:

from example.environ import GlobalInterface  # noqa
from example.tools import your_funny_tool  # noqa

gi = GlobalInterface()


def find_funny_things():
    url = gi.conf['upstram_prefix'] + '/funny-api'
    path = gi.under_package_dir('asset/funny.json')
    # more code here ...

Accessories

List sub-commands

$ volk
availabe commands:
- a
- o
- runconf
- where

Locate a Python package directory with volk where:

$ volk where requests
requests	/usr/local/lib/python3.6/site-packages/requests

You can open a file or URL with default application with volk o.

To open current directory with default file manager (Finder / explorer.exe / ...)

$ volk o .

Show sys.argv:

$ volk a \; "hello world" hello python
0	'/usr/local/bin/volk'
1	'a'
2	';'
3	'hello world'
4	'hello'
5	'python'

Sub-command protocal

Say you have a package named mypkg

mypkg/
├── MANIFEST.in
├── docs/
├── mypkg/
│    ├── __init__.py
│    ├── algors.py
│    ├── formatters.py
│    ├── main.py
│    └── parsers.py
├── requirements.txt
├── setup.py
└── tests/

In one of your functional modules, e.g. mypkg/mypkg/formatter.py, provide a entry function which takes exactly 2 arguments:

import argparse

def process_file(path):
    # actual code here
    return

def run(prog=None, args=None):
    desc = 'human readable formatter'
    parser = argparse.ArgumentParser(prog=prog, description=desc)
    add = parser.add_argument
    add('-i', '--input-file', help='path to your input file')
    ns = parser.parse_args(args)
    process_file(ns.input_file)

Sub-command registry in mypkg/mypkg/main.py:

import volkanic

commands = {
    "fmt": "mypkg.formatter",
    "yml": "mypkg.parsers:run_yml_parser",
    "ini": "mypkg.parsers:run_ini_parser",
}
registry = volkanic.CommandRegistry(commands)

Note that mypkg.formatter is a shorthand for mypkg.formatter:run.

Configure top level command in mypkg/setup.py:

from setuptools import setup

setup(
    name="mypkg",
    entry_points={"console_scripts": ["mycmd = mypkg.main:registry"]},
    # more arguments here
)

Install package mypkg or link with python3 setup.py develop.

Now you have command mycmd:

$ mycmd
availabe commands:
- fmt
- ini
- yml

Run with sub-command fmt:

$ mycmd fmt -h

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

volkanic-0.5.3.tar.gz (26.8 kB view details)

Uploaded Source

File details

Details for the file volkanic-0.5.3.tar.gz.

File metadata

  • Download URL: volkanic-0.5.3.tar.gz
  • Upload date:
  • Size: 26.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.14

File hashes

Hashes for volkanic-0.5.3.tar.gz
Algorithm Hash digest
SHA256 4c737f63a6099925239f4b61e387be2171426d1ba38a7bd793846b8f1124b99e
MD5 bbfea8504ad1b06e7c110a94022d275c
BLAKE2b-256 8940a22619c597b52ee022b314e859b44bfdf125ce0f325ae49c4affe52b6a06

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