from datetime import datetime from auth import model from sqlalchemy import text from sqlalchemy.exc import OperationalError from datetime import datetime from flask import current_app from db import dbauth session = dbauth.session BINDKEY = "auth" def _db_V01_00(): # "bind_key=None" bedeutet hier, dass bei "create_all" nur die Models mit # Default-Bind erzeugt werden sollen und nicht die anderen, insbesonder # nicht die zum MS-SQL-SErver dbauth.create_all(bind_key=BINDKEY) systeminfo = model.Systeminfo() systeminfo.id = 1 systeminfo.version = "01.00" systeminfo.lastupdate = datetime.now() systeminfo.initialinstall = datetime.now() session.add(systeminfo) session.commit() def _db_V01_01(): u = model.User() u.id = 1 u.userid = 'System.Admin' u.username = 'Systemadministrator' u.password = "geheim" u.email = '' session.add(u) sysmgr = model.Role() sysmgr.id = 1 sysmgr.name = "Systemadministrator" sysmgr.roleid = "SysAdmin" session.add(sysmgr) appmgr = model.Role() appmgr.name = "Anwendungsadministrator" appmgr.roleid = "AppAdmin" session.add(appmgr) usermgr = model.Role() usermgr.name = "Benutzerverwaltung" usermgr.roleid = "UserMgr" session.add(usermgr) application = model.Application() application.id = 1 # appid und name aus der Konfiguration übernehmen (config.ini [APP] appid). # Die appid ist der lesbare Anwendungsname, der zur Autorisierung verwendet # wird; nicht identisch mit PROJEKTNAME (technischer Bezeichner). application.appid = current_app.config["APPID"] application.name = current_app.config["APPID"] session.add(application) userapp = model.Userapp() userapp.application = application userapp.userapp_roles.append(sysmgr) session.add(userapp) u.userapps.append(userapp) _updatesysteminfo('01.01') session.commit() def _db_V01_02(): """ Migriert bestehende Application-Datensätze, deren appid noch den alten Platzhalter 'Project01' enthält, auf die appid aus der aktuellen Konfiguration (config.ini [APP] appid). Wird nach reset-db nicht benötigt (da _db_V01_01 direkt den korrekten Wert setzt), greift aber bei Upgrades bestehender DBs. """ appid = current_app.config["APPID"] application: model.Application = model.Application.query.filter( model.Application.appid == "Project01" ).first() if application is not None: application.appid = appid application.name = appid _updatesysteminfo('01.02') session.commit() def _updatesysteminfo(versionnr): s: model.Systeminfo = model.Systeminfo.query.get(1) s.version = versionnr s.lastupdate = datetime.now() return def checkupdates(): systeminfo = None curr_dbversion = '_db_V01_00' try: systeminfo: model.Systeminfo = model.Systeminfo.query.get(1) curr_dbversion = "_db_V" + systeminfo.version.replace(".", "_") except (OperationalError, AttributeError): _db_V01_00() versionen = sorted(filter(lambda f: f.startswith("_db_V"),globals())) for v in versionen: if v > curr_dbversion: globals()[v]() # https://docs.python.org/3.6/library/functions.html?highlight=globals#globals print('########## Database updated')