Skip to content

Commit a4013f4

Browse files
authored
Merge pull request openwallet-foundation#1785 from ianco/fix/tails_upload_multi2
Fix tails server upload multi-ledger mode
2 parents ce11560 + 4cce473 commit a4013f4

2 files changed

Lines changed: 40 additions & 4 deletions

File tree

aries_cloudagent/ledger/indy.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import logging
66
import tempfile
77
from datetime import date, datetime
8+
from io import StringIO
89
from os import path
910
from time import time
1011
from typing import Sequence, Tuple, Optional
@@ -42,6 +43,17 @@
4243
GENESIS_TRANSACTION_FILE = "indy_genesis_transactions.txt"
4344

4445

46+
def _normalize_txns(txns: str) -> str:
47+
"""Normalize a set of genesis transactions."""
48+
lines = StringIO()
49+
for line in txns.splitlines():
50+
line = line.strip()
51+
if line:
52+
lines.write(line)
53+
lines.write("\n")
54+
return lines.getvalue()
55+
56+
4557
class IndySdkLedgerPoolProvider(BaseProvider):
4658
"""Indy ledger pool provider which keys off the selected pool name."""
4759

@@ -107,12 +119,28 @@ def __init__(
107119
self.cache = cache
108120
self.cache_duration = cache_duration
109121
self.genesis_transactions = genesis_transactions
122+
self.genesis_txns_cache = genesis_transactions
110123
self.handle = None
111124
self.name = name
112125
self.taa_cache = None
113126
self.read_only = read_only
114127
self.socks_proxy = socks_proxy
115128

129+
@property
130+
def genesis_txns(self) -> str:
131+
"""Get the configured genesis transactions."""
132+
if not self.genesis_txns_cache:
133+
try:
134+
txn_path = path.join(
135+
tempfile.gettempdir(), f"{self.name}_{GENESIS_TRANSACTION_FILE}"
136+
)
137+
self.genesis_txns_cache = _normalize_txns(open(txn_path).read())
138+
except FileNotFoundError:
139+
raise LedgerConfigError(
140+
"Pool config '%s' not found", self.name
141+
) from None
142+
return self.genesis_txns_cache
143+
116144
async def create_pool_config(
117145
self, genesis_transactions: str, recreate: bool = False
118146
):

aries_cloudagent/tails/indy_tails_server.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Indy tails server interface class."""
22

33
from typing import Tuple
4+
import logging
45

56
from ..config.injection_context import InjectionContext
67
from ..ledger.multiple_ledger.base_manager import BaseMultipleLedgerManager
@@ -10,6 +11,9 @@
1011
from .error import TailsServerNotConfiguredError
1112

1213

14+
LOGGER = logging.getLogger(__name__)
15+
16+
1317
class IndyTailsServer(BaseTailsServer):
1418
"""Indy tails server interface."""
1519

@@ -38,12 +42,16 @@ async def upload_tails_file(
3842
if not genesis_transactions:
3943
ledger_manager = context.injector.inject(BaseMultipleLedgerManager)
4044
write_ledgers = await ledger_manager.get_write_ledger()
45+
LOGGER.debug(f"write_ledgers = {write_ledgers}")
4146
pool = write_ledgers[1].pool
47+
LOGGER.debug(f"write_ledger pool = {pool}")
48+
49+
genesis_transactions = pool.genesis_txns
4250

43-
try:
44-
genesis_transactions = pool.genesis_transactions
45-
except AttributeError:
46-
genesis_transactions = pool.genesis_txns_cache
51+
if not genesis_transactions:
52+
raise TailsServerNotConfiguredError(
53+
"no genesis_transactions for writable ledger"
54+
)
4755

4856
if not tails_server_upload_url:
4957
raise TailsServerNotConfiguredError(

0 commit comments

Comments
 (0)