commit 0b0a955926badc1aea2e1bbb75958fffb27f5c17
parent 81ee3d4f0914110cf75df09a7f02e5977de62e70
Author: lash <dev@holbrook.no>
Date: Mon, 15 Jun 2026 07:52:31 -0600
Entries can again be saved
Diffstat:
6 files changed, 47 insertions(+), 18 deletions(-)
diff --git a/dummy/usawa/account.py b/dummy/usawa/account.py
@@ -55,6 +55,8 @@ class Account:
path_parser = from_account_path
def __init__(self, sym, typ, segments, virt=False):
+ if isinstance(typ, str):
+ typ = getattr(AccountType, typ)
if not isinstance(typ, AccountType):
raise ValueError('invalid account type: ' + typ)
self.sym = sym
diff --git a/dummy/usawa/context.py b/dummy/usawa/context.py
@@ -69,6 +69,7 @@ class UsawaContext:
self.ledger_path_out = self.ledger_path_in
if self.ledger_path_in != None:
self.load_ledger()
+ self.set('ledger_path', self.ledger_path_in)
self.create_store(store_scope=store_scope)
self.create_resolver()
self.load_accounts()
diff --git a/dummy/usawa/gui/controllers/entry_controller.py b/dummy/usawa/gui/controllers/entry_controller.py
@@ -37,6 +37,7 @@ class EntryController:
return None
try:
entry = LedgerEntry(
+ serial=self.next_serial(),
external_reference=view.ref_entry.get_text().strip() or None,
description=view.desc_entry.get_text().strip() or None,
amount=float(view.amount_entry.get_text() or "0"),
diff --git a/dummy/usawa/gui/core/entry_service.py b/dummy/usawa/gui/core/entry_service.py
@@ -50,8 +50,8 @@ class EntryService:
logg.error(f"Unexpected error: {e}", exc_info=True)
return False, error_msg
- def save_wallet(self, wallet, passphrase):
- return self.repository.save_wallet(wallet=wallet, passphrase=passphrase)
+# def save_wallet(self, wallet, passphrase):
+# return self.repository.save_wallet(wallet=wallet, passphrase=passphrase)
def get_all_entries(self):
return self.repository.get_all_entries()
diff --git a/dummy/usawa/storage/entry_mapper.py b/dummy/usawa/storage/entry_mapper.py
@@ -3,6 +3,7 @@ from datetime import datetime, date
from usawa.entry import Entry, EntryPart
from usawa.ledger import Ledger
+from usawa.account import Account
from usawa.unit import UnitIndex
from ..gui.core.models import LedgerEntry
from usawa import Entry, EntryPart
@@ -39,7 +40,7 @@ class EntryMapper:
ref = domain.transaction_ref if domain.transaction_ref else None
entry = Entry(
- serial=ledger.serial,
+ serial=ledger.next_serial(),
tx_date=tx_date,
parent=parent,
description=domain.description or "",
@@ -52,23 +53,26 @@ class EntryMapper:
)
dest_amount = -source_amount
+ account = Account(unitindex.default_unit, domain.source_type.lower(), domain.source_path)
source_part = EntryPart(
- unitindex.default_unit,
- domain.source_type.lower(),
- domain.source_path,
+ #unitindex.default_unit,
+ #domain.source_type.lower(),
+ #domain.source_path,
+ account,
source_amount,
debit=True,
)
- entry.add_part(source_part, debit=True)
+ #entry.add_part(source_part, debit=True)
+ entry.add_part(source_part)
+ account = Account(unitindex.default_unit, domain.dest_type.lower(), domain.dest_path)
dest_part = EntryPart(
- unitindex.default_unit,
- domain.dest_type.lower(),
- domain.dest_path,
+ account,
dest_amount,
debit=False,
)
- entry.add_part(dest_part, debit=False)
+ #entry.add_part(dest_part, debit=False)
+ entry.add_part(dest_part)
return entry
@@ -91,9 +95,9 @@ class EntryMapper:
dest_path = ""
if storage_entry.debit:
debit_part = storage_entry.debit[0]
- source_unit = debit_part.unit
- source_type = debit_part.typ
- source_path = debit_part.account
+ source_unit = debit_part.get_unit()
+ source_type = debit_part.get_type()
+ source_path = debit_part.account_path_only()
amount = abs(float(debit_part.amount))
else:
source_unit = source_type = source_path = ""
@@ -101,9 +105,9 @@ class EntryMapper:
if storage_entry.credit:
credit_part = storage_entry.credit[0]
- dest_unit = credit_part.unit
- dest_type = credit_part.typ
- dest_path = credit_part.account
+ dest_unit = credit_part.get_unit()
+ dest_type = credit_part.get_type()
+ dest_path = credit_part.account_path_only()
else:
dest_unit = dest_type = dest_path = ""
diff --git a/dummy/usawa/storage/ledger_repository.py b/dummy/usawa/storage/ledger_repository.py
@@ -44,11 +44,32 @@ class LedgerRepository:
self.resolver = ctx.resolver
self.wallet = ctx.wallet
self.store = ctx.store
+ self.db = ctx.db
self.ledger = ctx.ledger
+ self.ledger_path = ctx.get('ledger_path')
def _init_store(self, write=False) -> tuple[LedgerStore, Ledger, Wallet]:
- return self.store, self.ledger, self.wallet
+ ledger_tree = load(self.ledger_path)
+ ledger = Ledger.from_tree(ledger_tree)
+
+ if write:
+ logg.info("init store for write")
+ self.store = LedgerStore(self.db, ledger)
+ else:
+ logg.info("init store for read")
+ self.store = LedgerStore(self.db, ledger)
+
+ logg.info("wallet ready, pubkey: %s...", self.wallet.pubkey().hex()[:16])
+
+ ledger.set_wallet(self.wallet)
+ ledger.acl = ACL.from_wallet(self.wallet)
+ self.store.load(acl=ledger.acl)
+ return self.store, ledger, self.wallet
+
+
+ #def _init_store(self, write=False) -> tuple[LedgerStore, Ledger, Wallet]:
+ # return self.store, self.ledger, self.wallet
def save(self, domain_entry: LedgerEntry) -> None: