KuroCore/kurocore/config.py
2024-01-02 00:25:23 +03:00

74 lines
2.0 KiB
Python

from dataclasses import dataclass, field, asdict
from json import loads, dump, dumps
from typing import TextIO
config_version = 1
@dataclass
class Config:
@dataclass
class Logs:
path: str = 'logs/'
name: str = 'KuroCore'
level: str = 'DEBUG'
requests: bool = False
console: bool = False
@dataclass
class Database:
driver: str = 'psql'
host: str = ''
name: str = ''
user: str = 'root'
password: str = ''
port: int = 5432
@dataclass
class Callback:
enabled: bool = False
code: str = ''
port: int = 9980
secret: str = ''
version: int = config_version
tokens: list[str] = field(default_factory=list[str])
prefixes: list[str] = field(default_factory=list[str])
sentry_dsn: str = ''
debug: bool = False
logs: Logs = field(default_factory=Logs)
database: Database = field(default_factory=Database)
callback: Callback = field(default_factory=Callback)
plugins = []
@staticmethod
def loads(config_str: str):
json: dict = loads(config_str)
if json.get('version', 0) < config_version:
raise Exception('This config was generated for old version! Move config file and try again.')
if json.get('version', 0) > config_version:
raise Exception('This config was generated for newer version! Move config file and try again.')
json.update({'callback': Config.Callback(**json['callback'])})
json.update({'database': Config.Database(**json['database'])})
json.update({'logs': Config.Logs(**json['logs'])})
return Config(**json)
@staticmethod
def loadp(path: str):
try:
with open(path, 'r') as f:
return Config.loads(f.read())
except FileNotFoundError:
gen = asdict(Config())
with open(path, 'w') as f:
dump(gen, f)
return Config.loads(dumps(gen))
@staticmethod
def load(file: TextIO):
return Config.loads(file.read())