Routing Pattern for __main__()

Console Apps

How you startup will vary based on the interface. The following are for console applications.

A Generic Workflow for __main__()

Parse Arguments

Python provides an arguments parser, argparse, use it. Let a user know how this thing is supposed to work. Even if it’s supposed to just start up and run, give it help. A smart user will call your module with --help first to see what it does. Encourage that behavior.

c:\Python37>scripts\py_guide --help
usage: py_guide [-h] [--show_menu] [--version]
                [--list_of_strings list [list ...]]

py_guide is a best practices module recommending a basic project structure for
a teams python projects. Best Practices help teams scale. Starting with it
before you scale the team is a good thing.

optional arguments:
  -h, --help            show this help message and exit
  --show_menu           When this parameter is provided the flag is set to
                        true. When true a console menu will be shown.
  --version             When this parameter is provided the version
                        information will be displayed.
  --list_of_strings list [list ...]
                        The list parameter will collect, then echo a list of
                        strings. This demonstrates the + value of nargs when
                        using the parser.

Route Arguments

I think about a console application, parsing arguments, like routing things at a web server or firewall. Therefore I normally take my parsed arguments and toss to a method which routes them. The method, in turn, normally tosses them to an action method for that route.

Action Arguments

I don’t know why, action as a result of being routed to, seemed like a good set of terminology. There’s a million ways to name things, this one was mine. Therefore I create a function to handle the results of a route being called, and taking action on that.

Web Applications

In the future, tips for this type of user interface.

API first with Flask and OpenAPI (swagger)?

Dare I bother suggesting user interface? Is that the domain of angular?