mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 18:44:20 +01:00
* first working version but some sats go missing * back at it * make format * restore to main * move mint database * fix some tests * make format * remove old _construct_outputs we reintroduced in merge with main * add type annotations * add wallet private key to tests * wallet: load proofs * fix tests * _generate_secrets with deterministic generation (temporary) * allow wallet initialization with custom private key * add pk to wallet api test * mint scope=module * remove private_key from test_wallet.py to see if it helps with the github tests * readd private keys to tests * workflow without env * add more private key! * readd env * ledger scope session * add default private key for testing * generate private keys if not available * testing * its working!!! * first iteration of bip32 working * get mint info and add many type annotations * tests * fix tests with bip32 * restore from multiple mints * disable profiler * make format * failed POST /mint do not increment secret counter * store derivation path in each token * fix tests * refactor migrations so private keys can be generated by the wallet with .with_db() classmethod * start fixing tests * all tests passing except those that need to set a specific private key * bip39 mnemonic to seed - with db but restore doesnt work yet with custom seed * mnemonic restore works * enter mnemonic in cli * fix tests to use different mnemonic * properly ask user for seed input * tests: dont ask for inputs * try to fix tests * fix cashu -d * fixing * bump version and add more text to mnemonic enter * add more comments * add many more comments and type annotations in the wallet * dont print generated mnemonic and dont wait for input * fix test * does this fix tests? * sigh.... * make format * do not restore from an initialized wallet * fix mnemonics * fix nitpicks * print wallet name if nonstandard wallet * fix merge error and remove comments * poetry lock and requirements * remove unused code * fix tests * mnemonic.lower() and add keyset id if not present for backwards compat * edit comment
56 lines
2.2 KiB
Python
56 lines
2.2 KiB
Python
import re
|
|
|
|
from loguru import logger
|
|
|
|
from ..core.db import COCKROACH, POSTGRES, SQLITE, Database, table_with_schema
|
|
|
|
|
|
async def migrate_databases(db: Database, migrations_module):
|
|
"""Creates the necessary databases if they don't exist already; or migrates them."""
|
|
|
|
async def set_migration_version(conn, db_name, version):
|
|
await conn.execute(
|
|
f"""
|
|
INSERT INTO {table_with_schema(db, 'dbversions')} (db, version) VALUES (?, ?)
|
|
ON CONFLICT (db) DO UPDATE SET version = ?
|
|
""",
|
|
(db_name, version, version),
|
|
)
|
|
|
|
async def run_migration(db, migrations_module):
|
|
db_name = migrations_module.__name__.split(".")[-2]
|
|
for key, migrate in migrations_module.__dict__.items():
|
|
match = matcher.match(key)
|
|
if match:
|
|
version = int(match.group(1))
|
|
if version > current_versions.get(db_name, 0):
|
|
logger.debug(f"Migrating {db_name} db: {key}")
|
|
await migrate(db)
|
|
|
|
if db.schema == None:
|
|
await set_migration_version(db, db_name, version)
|
|
else:
|
|
async with db.connect() as conn:
|
|
await set_migration_version(conn, db_name, version)
|
|
|
|
async with db.connect() as conn: # type: ignore
|
|
exists = None
|
|
if conn.type == SQLITE:
|
|
exists = await conn.fetchone(
|
|
f"SELECT * FROM sqlite_master WHERE type='table' AND name='{table_with_schema(db, 'dbversions')}'"
|
|
)
|
|
elif conn.type in {POSTGRES, COCKROACH}:
|
|
exists = await conn.fetchone(
|
|
f"SELECT * FROM information_schema.tables WHERE table_name = '{table_with_schema(db, 'dbversions')}'"
|
|
)
|
|
|
|
if not exists:
|
|
await migrations_module.m000_create_migrations_table(conn)
|
|
|
|
rows = await (
|
|
await conn.execute(f"SELECT * FROM {table_with_schema(db, 'dbversions')}")
|
|
).fetchall()
|
|
current_versions = {row["db"]: row["version"] for row in rows}
|
|
matcher = re.compile(r"^m(\d\d\d)_")
|
|
await run_migration(db, migrations_module)
|