diff options
Diffstat (limited to 'fracture/__main__.py')
-rw-r--r-- | fracture/__main__.py | 65 |
1 files changed, 55 insertions, 10 deletions
diff --git a/fracture/__main__.py b/fracture/__main__.py index 71ca639..b33dca4 100644 --- a/fracture/__main__.py +++ b/fracture/__main__.py @@ -1,7 +1,7 @@ from invoice import Invoice, Tax import db -import argparse +from argparse import ArgumentParser as ap import tempfile import subprocess import sqlite3 @@ -9,14 +9,19 @@ from configparser import ConfigParser import os from os import path +CONFIG_FILE = "" + def load_config(): - basedir = os.environ.get('XDG_CONFIG_HOME', None) or \ + basedir = os.environ.get("XDG_CONFIG_HOME", None) or \ path.join(os.environ["HOME"], ".config") basedir = path.join(basedir, "fracture") confile = path.join(basedir, "config") + global CONFIG_FILE + CONFIG_FILE = confile + conf = ConfigParser() conf.read(confile) @@ -40,6 +45,13 @@ def load_config(): Invoice.CURRENCY = conf["invoice"].get("currency", "€") Invoice.CURRENCY_DECIMAL = conf["invoice"].getint("currency_decimal", 2) + # TEMPLATE ? + # TODO + # Or dump a json or something? + templatefile = conf["invoice"]["template"] + if not path.isabs(templatefile): + templatefile = path.join(confile, templatefile) + # INVOICE LEVEL TAXES (like IRPF in Spain) tax = [] for k in conf["taxes"]: @@ -48,7 +60,7 @@ def load_config(): # DATABASE Invoice.DB_FILE = path.join(basedir, "invoice.db") - if not os.path.exists(Invoice.DB_FILE): + if not path.exists(Invoice.DB_FILE): db.create(Invoice.DB_FILE) def call_editor(filename): @@ -59,7 +71,7 @@ def call_editor(filename): process.wait() def edit(contents): - """ Edit temporary file with initial `contents` and return it's edited + """ Edit temporary file with initial `contents` and return it"s edited content """ with tempfile.NamedTemporaryFile(mode="w", delete=False) as t: @@ -75,14 +87,47 @@ def edit(contents): return edited_content +def edit_config(): + # TODO: Generate config file if not created + call_editor(CONFIG_FILE) + +def new_invoice(): + num = Invoice.from_config( edit( Invoice().to_config() )).persist() + # + print(num) + # edit(Invoice.load(num).to_config()) + +def summarize(): + pass if __name__ == "__main__": load_config() - # TODO - a = Invoice() - a.from_config( edit( a.to_config() )) - num = a.persist() - print(num) - edit(Invoice.load(num).to_config()) + + # create the top-level parser + parser = ap(prog="fracture") + #parser.add_argument("--foo", action="store_true", help="foo help") + parser.set_defaults(func=lambda: parser.print_help()) + + # make subparsers + subparsers = parser.add_subparsers(title= "Subcommands", + help="sub-command help") + + new_parser = subparsers.add_parser("new", aliases=["n"], help="a help") + new_parser.set_defaults(func=new_invoice) + + configure_parser = subparsers.add_parser("configure", aliases=["c","conf"], + help="b help") + configure_parser.set_defaults(func=edit_config) + + + summary_parser = subparsers.add_parser("summary", aliases=["s", "sum"], + help="get summary") + summary_parser.add_argument("--xlsx", action="store_true", help="aaa") + summary_parser.add_argument("--quarter", action="store_true", help="aaa") + summary_parser.add_argument("--year", action="store_true", help="aaa") + summary_parser.set_defaults(func=summarize) + + # parse + parser.parse_args().func() |