Skip to content

Instantly share code, notes, and snippets.

@GreyElaina
Created March 4, 2022 14:34
Show Gist options
  • Select an option

  • Save GreyElaina/7e76ba82653f354a9707af97e758e702 to your computer and use it in GitHub Desktop.

Select an option

Save GreyElaina/7e76ba82653f354a9707af97e758e702 to your computer and use it in GitHub Desktop.
config example using both pyhocon and pydantic
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