![dependabot[bot]](/assets/img/avatar_default.png) bc9e7e8b93
			
		
	
	bc9e7e8b93
	
	
	
		
			
			* build(deps): bump structlog from 20.1.0 to 20.2.0 Bumps [structlog](https://github.com/hynek/structlog) from 20.1.0 to 20.2.0. - [Release notes](https://github.com/hynek/structlog/releases) - [Changelog](https://github.com/hynek/structlog/blob/master/CHANGELOG.rst) - [Commits](https://github.com/hynek/structlog/compare/20.1.0...20.2.0) Signed-off-by: dependabot[bot] <support@github.com> * *: use structlog.stdlib instead of structlog for type-hints Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jens Langhammer <jens.langhammer@beryju.org>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| """System Migration handler"""
 | |
| from importlib.util import module_from_spec, spec_from_file_location
 | |
| from inspect import getmembers, isclass
 | |
| from pathlib import Path
 | |
| from typing import Any
 | |
| 
 | |
| from psycopg2 import connect
 | |
| from structlog.stdlib import get_logger
 | |
| 
 | |
| from authentik.lib.config import CONFIG
 | |
| 
 | |
| LOGGER = get_logger()
 | |
| 
 | |
| 
 | |
| class BaseMigration:
 | |
|     """Base System Migration"""
 | |
| 
 | |
|     cur: Any
 | |
|     con: Any
 | |
| 
 | |
|     def __init__(self, cur: Any, con: Any):
 | |
|         self.cur = cur
 | |
|         self.con = con
 | |
| 
 | |
|     def needs_migration(self) -> bool:
 | |
|         """Return true if Migration needs to be run"""
 | |
|         return False
 | |
| 
 | |
|     def run(self):
 | |
|         """Run the actual migration"""
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
| 
 | |
|     conn = connect(
 | |
|         dbname=CONFIG.y("postgresql.name"),
 | |
|         user=CONFIG.y("postgresql.user"),
 | |
|         password=CONFIG.y("postgresql.password"),
 | |
|         host=CONFIG.y("postgresql.host"),
 | |
|     )
 | |
|     curr = conn.cursor()
 | |
| 
 | |
|     for migration in Path(__file__).parent.absolute().glob("system_migrations/*.py"):
 | |
|         spec = spec_from_file_location("lifecycle.system_migrations", migration)
 | |
|         mod = module_from_spec(spec)
 | |
|         # pyright: reportGeneralTypeIssues=false
 | |
|         spec.loader.exec_module(mod)
 | |
| 
 | |
|         for name, sub in getmembers(mod, isclass):
 | |
|             if name != "Migration":
 | |
|                 continue
 | |
|             migration = sub(curr, conn)
 | |
|             if migration.needs_migration():
 | |
|                 LOGGER.info("Migration needs to be applied", migration=sub)
 | |
|                 migration.run()
 | |
|                 LOGGER.info("Migration finished applying", migration=sub)
 |