add mysql support

This commit is contained in:
Jörn-Michael Miehe 2022-03-19 03:31:15 +00:00
parent 4959f1987c
commit d66ce5a026

View file

@ -32,15 +32,38 @@ class DBType(Enum):
class DBConfig(BaseModel): class DBConfig(BaseModel):
db_type: DBType = DBType.sqlite type: DBType = DBType.sqlite
user: str | None = None
password: str | None = None
host: str | None = None
database: str | None = "./tmp/vpn.db"
mysql_driver: str = "pymysql"
mysql_args: list[str] = ["charset=utf8mb4"]
@property @property
async def db_engine(self) -> Engine: async def db_engine(self) -> Engine:
if self.type is DBType.sqlite:
# SQLite backend
return create_engine( return create_engine(
"sqlite:///./tmp/vpn.db", f"sqlite:///{self.database}",
connect_args={"check_same_thread": False}, connect_args={"check_same_thread": False},
) )
elif self.type is DBType.mysql:
# MySQL backend
if self.mysql_args:
args_str = "?" + "&".join(self.mysql_args)
else:
args_str = ""
return create_engine(
f"mysql+{self.mysql_driver}://"
f"{self.user}:{self.password}@{self.host}"
f"/{self.database}{args_str}",
pool_recycle=3600,
)
class JWTConfig(BaseModel): class JWTConfig(BaseModel):
secret: str | None = None secret: str | None = None