Skip to content
/ a4 Public

Minimal library for command-line applications.

License

Notifications You must be signed in to change notification settings

sunyj/a4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A4 – Minimal library for command-line applications.

The name comes from A4 paper. It provides absolutely minimal (but not lousy) support for command-line applications.

A4 is listed on PyPI.

Simple logging

a4.log implements minimal logging with three major features which, in my highly opinionated opinion, should be included in all logging libraries:

  • Levels.
  • Colors.
  • Timestamps.

You may print all logs to stderr with a4.log.fork=True (default False).

Yet another command-line application decorator

a4.app provides a decorator Runnable to convert a class into a runnable command-line application. All class methods NOT starting with understore are recognized as sub-commands. This pattern offers more convenience over single-function decorators when multiple commands require shared resources.

import a4
from a4.app import AppBase, Runnable

@Runnable
class MyApp(AppBase):
    def __init__(self):
        AppBase.__init__(self)

    def gen_calendar(self, args):
        """<yyyy> mmdd-mmdd [mmdd-mmdd ...]
        Generate trading calendar for one year.
        -c  <cal_id>   calendar ID, default 86
        """

        opts, args = a4.get_opts('c:', args)
        if len(args) < 2:
            self._die_usage()
        cal_id = int(opts['c'] or '86')
        self._log(f'calendar id = {cal_id}')


if __name__ == '__main__':
    MyApp().run()