usawa

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

commit 4b9d730cbefa7a0cf4100013a44d3c85c48001eb
parent 05d924a33e0d5643a4698015c73ad8b38d273230
Author: lash <dev@holbrook.no>
Date:   Sat, 28 Mar 2026 10:31:13 -0600

Implement tx date entry

Diffstat:
Mdummy/usawa/entry.py | 15+++++++++------
Mdummy/usawa/runnable/entry.py | 19+++++++++++++++----
2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/dummy/usawa/entry.py b/dummy/usawa/entry.py @@ -194,7 +194,7 @@ class Entry(UsawaElement): self.dt = tx_date self.uidx = unitindex if tx_datereg == None: - tx_datereg = datetime.datetime.utcnow() + tx_datereg = datetime.datetime.now(datetime.UTC) self.dtreg = tx_datereg self.attachment = [] self.sigs = {} @@ -210,10 +210,13 @@ class Entry(UsawaElement): if unitindex != None: self.balancer = Balancer(unitindex) + @staticmethod - def empty(*args, **kwargs): - dt = datetime.datetime.utcnow() - return Entry(-1, dt, *args, **kwargs) + def empty(tx_date=None, ref=None, description=None, parent=None, tx_datereg=None, unitindex=None): + if not tx_date: + tx_date = datetime.datetime.utcnow() + logg.debug('txdate is {}'.format(tx_date)) + return Entry(-1, tx_date, ref=ref, description=description, parent=parent, tx_datereg=tx_datereg, unitindex=unitindex) """Add an entry part to the entry. @@ -346,7 +349,7 @@ class Entry(UsawaElement): self.serial, self.ref, self.dtreg.strftime('%Y%m%d%H%M%S'), - self.dt.strftime('%Y%m%d'), + self.dt.strftime('%Y%m%d%H%M%S'), self.description, credit, debit, @@ -379,7 +382,7 @@ class Entry(UsawaElement): serial = v[2] ref = v[3].decode('utf-8') date_reg = datetime.datetime.strptime(v[4].decode('utf-8'), '%Y%m%d%H%M%S') - date = datetime.datetime.strptime(v[5].decode('utf-8'), '%Y%m%d') + date = datetime.datetime.strptime(v[5].decode('utf-8'), '%Y%m%d%H%M%S') description = v[6].decode('utf-8') dst_data = v[7] src_data = v[8] diff --git a/dummy/usawa/runnable/entry.py b/dummy/usawa/runnable/entry.py @@ -36,7 +36,7 @@ class Context: if args.d: self.txdate = datetime.datetime.fromisoformat(args.d) else: - self.txdate = datetime.datetime.utcnow() + self.txdate = datetime.datetime.now(datetime.UTC) self.attach = [] # set up ledger @@ -77,7 +77,9 @@ class Context: base = self.cfg.get('FSSTORE_BASE') self.db = FsStore(base=base, dbname='usawa') self.store = LedgerStore(self.db, self.ledger) - self.wallet = self.store.get_key(DemoWallet, passphrase=self.cfg.get('WALLET_KEY_PASSPHRASE')) + ops = int(self.cfg.get('WALLET_OPSLIMIT', 0)) + mem = int(self.cfg.get('WALLET_MEMLIMIT', 0)) + self.wallet = self.store.get_key(DemoWallet, passphrase=self.cfg.get('WALLET_KEY_PASSPHRASE'), opslimit=ops, memlimit=mem) self.ledger.set_wallet(self.wallet) if args.e: self.entry = self.store.get_draft(self.entry) @@ -145,6 +147,10 @@ class Context: raise ValueError('invalid ref') + def parse_txdate(self, v): + return datetime.date.fromisoformat(v) + + argp = argparse.ArgumentParser() argp.add_argument('-e', type=str, help='unique reference of entry') argp.add_argument('-x', type=str, action='append', default=[], help='unique reference of attachment') @@ -184,6 +190,11 @@ def input_or_default(prompt, default=None, postfix=': ', validate_fn=None): def do_interactive_one(ctx): ctx.description = input_or_default('Entry description', ctx.description) ctx.ref = input_or_default('External ref', ctx.ref) + dt = datetime.datetime.utcnow() + dt = input_or_default('Transaction date(time)', ctx.txdate) + if isinstance(dt, str): + dt = ctx.parse_txdate(dt) + ctx.txdate = dt def do_interactive_two(ctx, entry): @@ -233,13 +244,13 @@ def enter_part(ctx, entry): return True - entry = None if ctx.state == 0: do_interactive_one(ctx) - entry = Entry.empty(ref=ctx.ref, unitindex=ctx.uidx) + entry = Entry.empty(ref=ctx.ref, unitindex=ctx.uidx, tx_date=ctx.txdate) entry = ctx.store.get_draft(entry) entry.description = ctx.description + entry.dt = ctx.txdate do_interactive_two(ctx, entry) else: entry = ctx.entry