Template
Add Amnezia Web Panel source with PostgreSQL 17 storage.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"""One-shot CLI: import legacy data.json into PostgreSQL.
|
||||
|
||||
Usage:
|
||||
python -m db.migrate_json [path/to/data.json]
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
|
||||
logger = logging.getLogger('migrate_json')
|
||||
|
||||
|
||||
def main(argv: list[str] | None = None) -> int:
|
||||
argv = list(argv if argv is not None else sys.argv[1:])
|
||||
force = '--force' in argv
|
||||
paths = [a for a in argv if not a.startswith('-')]
|
||||
|
||||
if getattr(sys, 'frozen', False):
|
||||
app_path = os.path.dirname(sys.executable)
|
||||
else:
|
||||
app_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
data_file = paths[0] if paths else os.path.join(app_path, 'data.json')
|
||||
|
||||
from db.store import import_from_json_file, is_database_empty, load_data
|
||||
|
||||
if not os.path.exists(data_file):
|
||||
logger.error('File not found: %s', data_file)
|
||||
return 1
|
||||
|
||||
if not is_database_empty():
|
||||
logger.warning('Database is not empty — import will overwrite panel tables.')
|
||||
if not force:
|
||||
logger.error('Re-run with --force to overwrite existing data.')
|
||||
return 2
|
||||
|
||||
import_from_json_file(data_file, backup=True)
|
||||
data = load_data()
|
||||
logger.info(
|
||||
'Done. servers=%s users=%s connections=%s tokens=%s',
|
||||
len(data['servers']),
|
||||
len(data['users']),
|
||||
len(data['user_connections']),
|
||||
len(data['api_tokens']),
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user