Files

59 lines
1.6 KiB
Python

"""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())