Files
kontor/kontor-scripts/export.py
T

63 lines
2.3 KiB
Python

"""
import data from json file to MariaDB
"""
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
from datetime import datetime
import json
import yaml
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from platformdirs import PlatformDirs
from pathlib import Path
from db.models import registry
from db.models.base import Base
from config import get_logger
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument('--verbose', '-v', action='count', default=0)
parser.add_argument('--config', '-c', default='kontor-docker')
parser.add_argument('--file', '-f', default='data.json')
args = parser.parse_args()
if __name__ == '__main__':
logger = get_logger(args.verbose, args.config)
logger.info('kontor.export started')
dirs = PlatformDirs(args.config)
database_config = Path(dirs.user_config_dir, 'database-config.yaml')
with open(database_config, 'rt') as f:
db_config = yaml.safe_load(f.read())
connect_string = ('postgresql://{}:{}@{}:{}/{}'.format(
db_config['postgres']['user'],
db_config['postgres']['password'],
db_config['postgres']['host'],
db_config['postgres']['port'],
db_config['postgres']['database']
))
engine = create_engine(connect_string)
Base.metadata.create_all(bind=engine, checkfirst=True)
__session__ = sessionmaker(bind=engine)
with __session__() as db:
data = {}
tables = registry.keys()
for table in tables:
# logger.info(f"Table {table.name} with {table.id}")
model = registry[table]
rows = db.query(model).all()
entries = []
for row in rows:
entry = row.export_dict()
entries.append(entry)
data[table] = entries
logger.info(f"{table}: {len(entries)} exported")
try:
json_dump = json.dumps(data, indent=4)
with open(args.file, "w") as dump_file:
dump_file.write(json_dump)
except TypeError as error:
logger.info(f"{error}")
logger.info(f"{len(data)} tables exported")
#kontor_db = KontorDB(engine, logger)
#kontor_db.export_db(ExportType.JSON, args.file)
logger.info('kontor.export finished')