#!/usr/bin/python3
# Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
# import required module
import os
import sqlite3
import argparse
import logging
import sys
log = logging.getLogger(__name__)
logging.basicConfig(format='%(asctime)s [%(levelname)s]: %(message)s', level=logging.INFO)
# this helper script creates DBs from SQL schema files
def initialize_database(script_path: os.path, dst_directory: os.path) -> int:
file_name = os.path.basename(script_path)
connection = None
db_name = file_name.split("_0")[0]
db_name = f"{db_name}.db"
dst_db_path = os.path.join(dst_directory, db_name)
log.debug(f"Executing {script_path} script into {dst_db_path} database")
ret = 0
try:
connection = sqlite3.connect(dst_db_path)
with open(script_path) as fp:
connection.executescript(fp.read())
connection.commit()
except OSError as e:
log.error(f"System error: {e}")
ret = 1
except sqlite3.Error as e:
log.error(f"[SQLite] {db_name} database error: {e}")
ret = 1
finally:
if connection:
connection.close()
return ret
def main() -> int:
parser = argparse.ArgumentParser(description='Create databases from schema scripts')
parser.add_argument('--input_path',
metavar='schema_path',
type=str,
help='path to schema scripts',
required=True)
parser.add_argument('--output_path',
metavar='db_path',
type=str,
help='destination path for databases',
required=True)
parser.add_argument('--development',
metavar='devel',
type=bool,
help='with development schema scripts',
default=False)
args = parser.parse_args()
db_script_files = [
os.path.join(args.input_path, file)
for file in os.listdir(args.input_path)
if os.path.isfile(os.path.join(args.input_path, file)) and ".sql" in file
]
db_script_devel = [file for file in db_script_files if "devel" in file]
db_script_no_devel = list(set(db_script_files) - set(db_script_devel))
db_script_devel.sort()
db_script_no_devel.sort()
if not os.path.exists(args.output_path):
os.makedirs(args.output_path, exist_ok=True)
ret = 0
for script in db_script_no_devel:
ret |= initialize_database(script, args.output_path)
if args.development:
for script in db_script_devel:
ret |= initialize_database(script, args.output_path)
return ret
if __name__ == "__main__":
sys.exit(main())