From 4bb184e08b13308771361913460dcae2742d176b Mon Sep 17 00:00:00 2001 From: calle <93376500+callebtc@users.noreply.github.com> Date: Mon, 25 Jul 2022 09:13:41 +0200 Subject: [PATCH] CI: DB migration with real data (#776) * fix migration conv.py * migrate with mock data --- .github/workflows/migrations.yml | 4 +- .gitignore | 2 +- tests/data/mock_data.zip | Bin 0 -> 24900 bytes tools/conv.py | 103 +++++++++++++++++++++---------- 4 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 tests/data/mock_data.zip diff --git a/.github/workflows/migrations.yml b/.github/workflows/migrations.yml index 45de9727..08557bc1 100644 --- a/.github/workflows/migrations.yml +++ b/.github/workflows/migrations.yml @@ -38,12 +38,14 @@ jobs: ./venv/bin/python -m pip install --upgrade pip ./venv/bin/pip install -r requirements.txt ./venv/bin/pip install pytest pytest-asyncio pytest-cov requests mock + sudo apt install unzip - name: Run migrations run: | rm -rf ./data mkdir -p ./data export LNBITS_DATA_FOLDER="./data" + unzip tests/data/mock_data.zip -d ./data timeout 5s ./venv/bin/uvicorn lnbits.__main__:app --host 0.0.0.0 --port 5001 || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi export LNBITS_DATABASE_URL="postgres://postgres:postgres@0.0.0.0:5432/postgres" timeout 5s ./venv/bin/uvicorn lnbits.__main__:app --host 0.0.0.0 --port 5001 || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi - ./venv/bin/python tools/conv.py --dont-ignore-missing + ./venv/bin/python tools/conv.py diff --git a/.gitignore b/.gitignore index 07ee15b8..5b619912 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ __pycache__ .webassets-cache htmlcov test-reports -tests/data +tests/data/*.sqlite3 *.swo *.swp diff --git a/tests/data/mock_data.zip b/tests/data/mock_data.zip new file mode 100644 index 0000000000000000000000000000000000000000..0480adc27373df73d4d3a352ee4bbe5b40a7fc41 GIT binary patch literal 24900 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 sqlite3: consq = sqlite3.connect(sqdb) @@ -99,8 +97,12 @@ def insert_to_pg(query, data): for d in data: try: cursor.execute(query, d) - except: - raise ValueError(f"Failed to insert {d}") + except Exception as e: + if args.ignore_errors: + print(e) + print(f"Failed to insert {d}") + else: + raise ValueError(f"Failed to insert {d}") connection.commit() cursor.close() @@ -256,9 +258,10 @@ def migrate_ext(sqlite_db_file, schema, ignore_missing=True): k1, open_time, used, - usescsv + usescsv, + webhook_url ) - VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s); + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s); """ insert_to_pg(q, res.fetchall()) # WITHDRAW HASH CHECK @@ -316,8 +319,8 @@ def migrate_ext(sqlite_db_file, schema, ignore_missing=True): # TPOSS res = sq.execute("SELECT * FROM tposs;") q = f""" - INSERT INTO tpos.tposs (id, wallet, name, currency) - VALUES (%s, %s, %s, %s); + INSERT INTO tpos.tposs (id, wallet, name, currency, tip_wallet, tip_options) + VALUES (%s, %s, %s, %s, %s, %s); """ insert_to_pg(q, res.fetchall()) elif schema == "tipjar": @@ -512,12 +515,13 @@ def migrate_ext(sqlite_db_file, schema, ignore_missing=True): wallet, url, memo, + description, amount, time, remembers, - extra + extras ) - VALUES (%s, %s, %s, %s, %s, to_timestamp(%s), %s, %s); + VALUES (%s, %s, %s, %s, %s, %s, to_timestamp(%s), %s, %s); """ insert_to_pg(q, res.fetchall()) elif schema == "offlineshop": @@ -543,15 +547,15 @@ def migrate_ext(sqlite_db_file, schema, ignore_missing=True): # lnurldevice res = sq.execute("SELECT * FROM lnurldevices;") q = f""" - INSERT INTO lnurldevice.lnurldevices (id, key, title, wallet, currency, device, profit) - VALUES (%s, %s, %s, %s, %s, %s, %s); + INSERT INTO lnurldevice.lnurldevices (id, key, title, wallet, currency, device, profit, timestamp) + VALUES (%s, %s, %s, %s, %s, %s, %s, to_timestamp(%s)); """ insert_to_pg(q, res.fetchall()) # lnurldevice PAYMENT res = sq.execute("SELECT * FROM lnurldevicepayment;") q = f""" - INSERT INTO lnurldevice.lnurldevicepayment (id, deviceid, payhash, payload, pin, sats) - VALUES (%s, %s, %s, %s, %s, %s); + INSERT INTO lnurldevice.lnurldevicepayment (id, deviceid, payhash, payload, pin, sats, timestamp) + VALUES (%s, %s, %s, %s, %s, %s, to_timestamp(%s)); """ insert_to_pg(q, res.fetchall()) elif schema == "lnurlp": @@ -710,36 +714,69 @@ def migrate_ext(sqlite_db_file, schema, ignore_missing=True): sq.close() -parser = argparse.ArgumentParser(description="Migrate data from SQLite to PostgreSQL") +parser = argparse.ArgumentParser( + description="LNbits migration tool for migrating data from SQLite to PostgreSQL" +) parser.add_argument( - dest="sqlite_file", + dest="sqlite_path", const=True, nargs="?", - help="SQLite DB to migrate from", - default="data/database.sqlite3", + help=f"SQLite DB folder *or* single extension db file to migrate. Default: {sqfolder}", + default=sqfolder, type=str, ) parser.add_argument( - "-i", - "--dont-ignore-missing", - help="Error if migration is missing for an extension.", + "-e", + "--extensions-only", + help="Migrate only extensions", required=False, default=False, - const=True, - nargs="?", - type=bool, + action="store_true", ) + +parser.add_argument( + "-s", + "--skip-missing", + help="Error if migration is missing for an extension", + required=False, + default=False, + action="store_true", +) + +parser.add_argument( + "-i", + "--ignore-errors", + help="Don't error if migration fails", + required=False, + default=False, + action="store_true", +) + args = parser.parse_args() -print(args) +print("Selected path: ", args.sqlite_path) -check_db_versions(args.sqlite_file) -migrate_core(args.sqlite_file) +if os.path.isdir(args.sqlite_path): + file = os.path.join(args.sqlite_path, "database.sqlite3") + check_db_versions(file) + if not args.extensions_only: + print(f"Migrating: {file}") + migrate_core(file) + +if os.path.isdir(args.sqlite_path): + files = [ + os.path.join(args.sqlite_path, file) for file in os.listdir(args.sqlite_path) + ] +else: + files = [args.sqlite_path] -files = os.listdir(sqfolder) for file in files: - path = f"data/{file}" - if file.startswith("ext_"): - schema = file.replace("ext_", "").split(".")[0] - print(f"Migrating: {schema}") - migrate_ext(path, schema, ignore_missing=not args.dont_ignore_missing) + filename = os.path.basename(file) + if filename.startswith("ext_"): + schema = filename.replace("ext_", "").split(".")[0] + print(f"Migrating: {file}") + migrate_ext( + file, + schema, + ignore_missing=args.skip_missing, + )