summaryrefslogtreecommitdiff
path: root/fracture/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'fracture/__main__.py')
-rw-r--r--fracture/__main__.py65
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()