-
Notifications
You must be signed in to change notification settings - Fork 1
/
models.py
93 lines (69 loc) · 2.1 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from pathlib import Path
from typing import Dict, Set
from pydantic import BaseModel, Field, AnyUrl, AnyHttpUrl, Extra, DirectoryPath
class Database(BaseModel):
# Basic config for url
# --------------------
host: str
port: int = 3306
database: str = "muistot"
# Authentication config
# ---------------------
user: str
password: str
# Connection Config (databases)
# -----------------------------
# rollback: Force rollback
# driver: Driver to use for connection
# -----------------------------
rollback: bool = False
driver: str = "mysql+asyncmy"
pool_size: int = 32
pool_timeout_seconds: int = 10
# Remote Database
# -----------------------
# ssl: Use ssl for database connection
# -----------------------
ssl: bool = False
class Config:
extra = Extra.ignore
class Mailer(BaseModel):
driver: str = Field(default="LogMailer")
config: Dict = Field(default_factory=dict)
class Namegen(BaseModel):
url: AnyHttpUrl
class Sessions(BaseModel):
redis_url: AnyUrl
token_lifetime: int = 60 * 16
token_bytes: int = 32
class FileStore(BaseModel):
location: DirectoryPath = Field(default_factory=lambda: Path("/opt/files"))
allowed_filetypes: Set[str] = Field(default_factory=lambda: {
"image/jpg",
"image/jpeg",
"image/png"
})
class Config:
extra = Extra.ignore
class Localization(BaseModel):
default: str = "fi"
supported: Set[str] = Field(default_factory=lambda: {
"fi",
"en"
})
class Cache(BaseModel):
redis_url: AnyUrl
cache_ttl: int = 60 * 10
class BaseConfig(BaseModel):
# Can be omitted
testing: bool = Field(default_factory=lambda: True)
files: FileStore = Field(default_factory=FileStore)
mailer: Mailer = Field(default_factory=Mailer)
localization: Localization = Field(default_factory=Localization)
# Required
sessions: Sessions = Field()
database: Dict[str, Database] = Field()
namegen: Namegen = Field()
cache: Cache = Field()
class Config:
extra = Extra.ignore