Created
March 4, 2022 14:34
-
-
Save GreyElaina/7e76ba82653f354a9707af97e758e702 to your computer and use it in GitHub Desktop.
config example using both pyhocon and pydantic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from typing import Any, Dict, List | |
| from pydantic import BaseSettings | |
| from pydantic.main import BaseConfig, BaseModel | |
| from pydantic.fields import Field | |
| from pydantic.networks import PostgresDsn, RedisDsn | |
| import pyhocon | |
| from pathlib import Path | |
| from datetime import timedelta | |
| import stringcase | |
| CONFIG_FILE_NAME = "./config.conf" | |
| def hocon_config_settings_source(settings: BaseSettings) -> Dict[str, Any]: | |
| encoding = settings.__config__.env_file_encoding | |
| return dict(pyhocon.ConfigFactory.parse_string(Path(CONFIG_FILE_NAME).read_text(encoding))) | |
| class YggdrasilServerMetadata(BaseModel): | |
| serverName: str | |
| implementationName: str | |
| version: str | |
| class Config: | |
| alias_generator = stringcase.spinalcase | |
| class YggdrasilTokenConfig(BaseModel): | |
| availability: timedelta | |
| outdate: timedelta | |
| class YggdrasilSignatureFile(BaseModel): | |
| public_key: Path | |
| private_key: Path | |
| class Config: | |
| alias_generator = stringcase.spinalcase | |
| class YggdrasilServerConfig(BaseModel): | |
| metadata: YggdrasilServerMetadata | |
| token: YggdrasilTokenConfig | |
| signature_file: YggdrasilSignatureFile | |
| profile_query_limit: int | |
| siteDomains: List[str] | |
| class Config: | |
| alias_generator = stringcase.spinalcase | |
| class FireworkAuthenticateSetting(BaseSettings): | |
| database_url: PostgresDsn | |
| redis_url: RedisDsn | |
| yggdrasil: YggdrasilServerConfig | |
| class Config(BaseConfig): | |
| env_file_encoding = 'utf-8' | |
| @classmethod | |
| def customise_sources( | |
| cls, | |
| init_settings, | |
| env_settings, | |
| file_secret_settings, | |
| ): | |
| return ( | |
| init_settings, | |
| hocon_config_settings_source, | |
| env_settings, | |
| file_secret_settings, | |
| ) | |
| alias_generator = stringcase.spinalcase | |
| service_config = FireworkAuthenticateSetting() | |
| if __name__ == "__main__": | |
| print(service_config) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment