Skip to content

Python library for creating Command Line Interfaces via configuration files

License

Notifications You must be signed in to change notification settings

kaliv0/chancleta

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chancleta Samurai

chancleta

Python 3.x PyPI Downloads


Python library for creating command line interfaces in a composable way via configuration files.
Supports .toml, .json, .yaml. and (if you'd like to be more adventurous) .xml.


How to use

  • Describe configurations in a chancleta.toml file.
    (File format could vary between .toml, .json, .yaml and .xml as long as the name remains the same.)
    Add mandatory 'meta' data with general information about your program
[meta]
src = "testoo.util.commands"
prog = "foo"
version = "0.1.0"
description = "Test my new flip flops"
usage = "Take that jive Jack, put it in your pocket 'til I get back"

'src' points to the directory where the corresponding python functions are to be found and called with arguments read from the terminal

  • Configure subcommands as separate tables (objects if you're using JSON)
[yes]
description = "Simple yes function"
argument = { name = "text", help = "Some dummy text" }
option = { name = "should-repeat", short = "r", flag = "True", help = "should repeat text 5 times" }
help = "yes func"
function = "yes"

function shows the name of the python function to be called

  • If you have multiple arguments/options - put them as inline tables inside arrays
[echo]
arguments = [
    { name = "text", help = "Some dummy text" },
    { name = "mark", type = "str", help = "Final mark" },
]
options = [
    { name = "other-text", short = "o", default = "Panda", dest = "other", help = "Some other dummy text" },
    { name = "delimiter", default = ", ", help = "use DELIM instead of TAB for field delimiter" },
    { name = "num", default = 42, type = "int", help = "some random number to make things pretty" }
]
function = "echo"

chancleta supports advanced features such as choices, nargs, dest (for options), type validation

[maybe]
argument = { name = "number", type = "int", choices = [3, 5, 8], help = "Some meaningless number" }
option = { name = "other-number", type = "int", nargs = "*", choices = [1, 2], dest = "other", help = "Other marvelous number" }
function = "maybe"
  • For boolean flags you could use
options = [
   { name = "should-log", flag = "False", default = true },
   { name = "should-repeat", flag = "True"}
]

which is equivalent to

action="store_false"...
action="store_true"...
  • If no short name is given for an option, the first letter of the full name is used

  • Inside your program import the Chancleta object, pass a path to the directory where your config file lives and call the parse method
from chancleta import Chancleta

def main():
    Chancleta("./testoo/config").parse()

If no path is given chancleta will try to find the config file inside the root directory of your project