56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
from dataclasses import dataclass, field
|
|
from typing import Optional, List
|
|
|
|
import yaml
|
|
|
|
|
|
@dataclass
|
|
class ContributorConfig:
|
|
root_image_path: str = "/"
|
|
root_sound_path: str = "/"
|
|
|
|
|
|
@dataclass
|
|
class ContributorEntry:
|
|
name: str
|
|
image: str
|
|
image_hover: Optional[str] = None
|
|
sound_entry: Optional[str] = None
|
|
sound_hover: Optional[str] = None
|
|
sound_exit: Optional[str] = None
|
|
achievements: list[str] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class ContributorsIndex:
|
|
config: ContributorConfig = field(default_factory=ContributorConfig)
|
|
regular: List[ContributorEntry] = field(default_factory=list)
|
|
spiritual: List[ContributorEntry] = field(default_factory=list)
|
|
|
|
def __post_init__(self):
|
|
contributor_entry: dict
|
|
|
|
if self.regular is None:
|
|
self.regular = list()
|
|
else:
|
|
self.regular = [ContributorEntry(**contributor_entry) for contributor_entry in self.regular]
|
|
|
|
if self.spiritual is None:
|
|
self.spiritual = list()
|
|
else:
|
|
self.spiritual = [ContributorEntry(**contributor_entry) for contributor_entry in self.spiritual]
|
|
|
|
|
|
__CONTRIBUTORS_DATA: ContributorsIndex = ContributorsIndex()
|
|
|
|
|
|
def reload_contributors_data(definition_file: str) -> None:
|
|
global __CONTRIBUTORS_DATA
|
|
|
|
with open(definition_file, 'r') as f:
|
|
__CONTRIBUTORS_DATA = ContributorsIndex(**yaml.safe_load(f))
|
|
|
|
|
|
def get_contributors_data() -> ContributorsIndex:
|
|
return __CONTRIBUTORS_DATA
|