xmrwallet OpCreate: ignore existing wallets instead of raising exception

This commit is contained in:
The MMGen Project 2026-02-06 10:14:25 +00:00
commit 38ae740035
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2

View file

@ -15,8 +15,9 @@ xmrwallet.ops.wallet: xmrwallet wallet op for the MMGen Suite
import asyncio, re, atexit
from pathlib import Path
from ...color import orange
from ...color import orange, cyan
from ...util import msg, gmsg, ymsg, die, suf
from ...addr import MMGenID
from ...addrlist import KeyAddrList, ViewKeyAddrList, AddrIdxList
from ...proto.xmr.rpc import MoneroRPCClient, MoneroWalletRPCClient
from ...proto.xmr.daemon import MoneroWalletDaemon
@ -40,13 +41,19 @@ class OpWallet(OpBase):
def __init__(self, cfg, uarg_tuple):
def check_wallets():
count = 0
for d in self.addr_data:
fn = self.get_wallet_fn(d)
match self.stat_wallet(fn):
case True if self.is_create:
die(1, f'Wallet ‘{fn}’ already exists!')
case False:
msg('Skipping wallet create for {} - {} exists'.format(
MMGenID(cfg._proto, id_str=f'{self.kal.al_id}:{d.idx}').hl(),
cyan(f'{fn.name}')))
continue
case False if not self.is_create:
die(1, f'Wallet ‘{fn}’ not found!')
count += 1
return count
super().__init__(cfg, uarg_tuple)
@ -110,9 +117,9 @@ class OpWallet(OpBase):
self.create_addr_data()
if not self.skip_wallet_check:
check_wallets()
self.to_process = check_wallets()
if self.start_daemon and not self.cfg.no_start_wallet_daemon:
if self.to_process and self.start_daemon and not self.cfg.no_start_wallet_daemon:
asyncio.run(self.restart_wallet_daemon())
@staticmethod
@ -206,15 +213,17 @@ class OpWallet(OpBase):
return 'offline signing ' if self.cfg.offline else 'watch-only ' if self.cfg.watch_only else ''
async def main(self):
if not self.compat_call:
if self.to_process and not self.compat_call:
gmsg('\n{a}ing {b} {c}wallet{d}'.format(
a = self.stem.capitalize(),
b = len(self.addr_data),
b = self.to_process,
c = self.add_wallet_desc,
d = suf(self.addr_data)))
d = suf(self.to_process)))
data = []
for n, d in enumerate(self.addr_data): # [d.sec,d.addr,d.wallet_passwd,d.viewkey]
fn = self.get_wallet_fn(d)
if self.is_create and self.stat_wallet(fn):
continue
gmsg('\n{a}ing wallet {b}/{c} ({d})'.format(
a = self.stem.capitalize(),
b = n + 1,