usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

commit f654207ff47c3dac289434ceea4ad21bc79aa89e
parent 9e58b5ded69360425030e3ce6b351d408494ad4e
Author: lash <dev@holbrook.no>
Date:   Thu, 26 Mar 2026 06:26:04 -0600

Default replace xml ledger file when no output file given in entry cli

Diffstat:
Mdummy/usawa/ledger.py | 8++++----
Mdummy/usawa/runnable/entry.py | 45+++++++++++++++++++++++++++------------------
2 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/dummy/usawa/ledger.py b/dummy/usawa/ledger.py @@ -529,14 +529,14 @@ class Ledger(UsawaElement): def apply_entryparts(self, entry): for v in entry.debit: amount = v.amount - if v.isdebit: - amount *= -1 + #if v.isdebit: + # amount *= -1 self.running[v.unit].apply(v.typ, amount) for v in entry.credit: amount = v.amount - if v.isdebit: - amount *= -1 + #if v.isdebit: + # amount *= -1 self.running[v.unit].apply(v.typ, amount) logg.debug('applied entry {} src {} dst {}'.format(entry.serial, entry.debit, entry.credit)) diff --git a/dummy/usawa/runnable/entry.py b/dummy/usawa/runnable/entry.py @@ -4,6 +4,7 @@ import uuid import datetime import signal import sys +import shutil from whee.valkey import ValkeyStore @@ -38,7 +39,7 @@ class Context: self.attach = [] # set up ledger - s = args.l + s = args.ledger_file if not s: try: s = self.cfg.get('MAIN_LEDGER_FILE') @@ -47,6 +48,11 @@ class Context: if not s: raise ValueError('ledger file required') self.ledger = Ledger.from_file(s) + self.fp = args.o + self.fp_bak = None + if self.fp == None: + self.fp = s + self.fp_bak = s + '_' + str(self.ledger.serial) self.uidx = self.ledger.uidx # set up accounts hierarchy, if applicable @@ -81,14 +87,14 @@ class Context: self.havedst = False self.i = 0 - - def open(self, output): - if output == '<stdout>': - self.f = sys.stdout - logg.debug('output is stdout') - else: - self.f = open(output, 'w') - return self +# +# def open(self, output): +# if output == '<stdout>': +# self.f = sys.stdout +# logg.debug('output is stdout') +# else: +# self.f = open(output, 'w') +# return self def parse_type(self, v): @@ -144,10 +150,10 @@ class Context: raise ValueError('invalid ref') - def close(self): - if self.f and self.f != sys.stdout: - self.f.close() - +# def close(self): +# if self.f and self.f != sys.stdout: +# self.f.close() +# argp = argparse.ArgumentParser() @@ -157,16 +163,15 @@ argp.add_argument('-z', type=str, action='append', default=[], help='sum of atta argp.add_argument('-v', type=str, choices=['info','debug','warning','error'], help='be verbose') argp.add_argument('-c', type=str, help='override config dir') argp.add_argument('-d', type=str, help='transaction date or datetime') -argp.add_argument('-o', type=str, default='<stdout>', help='output ledger state') +argp.add_argument('-o', type=str, help='output ledger state') argp.add_argument('--commit', action='store_true', dest='commit', help='commit to ledger') -argp.add_argument('-l', type=str, help='ledger file') +argp.add_argument('ledger_file', type=str, help='ledger file') args = argp.parse_args() if args.v: logg.setLevel(getattr(logging, args.v.upper())) ctx = Context(args) -ctx.open(args.o) def croak(*args, **kwargs): sys.exit(1) @@ -276,8 +281,12 @@ if v == 'YES': ctx.store.add_entry(entry, update_ledger=True) ctx.ledger.truncate() ctx.ledger.sign() - ctx.f.write(ctx.ledger.to_string()) - ctx.close() + if ctx.fp_bak != None: + shutil.copy(ctx.fp, ctx.fp_bak) + f = open(ctx.fp, 'w') + f.write(ctx.ledger.to_string()) + f.close() else: ctx.store.put_draft(entry) + print(entry)