lnbits-legend/lnbits/config.py

78 lines
2.8 KiB
Python
Raw Normal View History

2022-03-18 16:59:06 +00:00
import importlib
import json
from os import getenv, path
from typing import List, Optional
2022-06-08 14:58:41 +01:00
from pydantic import BaseSettings, Field
2022-03-18 16:59:06 +00:00
wallets_module = importlib.import_module("lnbits.wallets")
2022-09-22 10:46:11 +02:00
wallet_class = getattr(
2022-03-18 16:59:06 +00:00
wallets_module, getenv("LNBITS_BACKEND_WALLET_CLASS", "VoidWallet")
)
WALLET = wallet_class()
2022-09-22 10:46:11 +02:00
2022-03-18 16:59:06 +00:00
def list_parse_fallback(v):
try:
return json.loads(v)
except Exception as e:
2022-09-22 10:46:11 +02:00
return v.replace(" ", "").split(",")
2022-03-18 16:59:06 +00:00
class Settings(BaseSettings):
2022-05-16 10:49:21 +01:00
admin_ui: bool = Field(default=True, env="LNBITS_ADMIN_UI")
2022-03-18 16:59:06 +00:00
# users
admin_users: List[str] = Field(default_factory=list, env="LNBITS_ADMIN_USERS")
allowed_users: List[str] = Field(default_factory=list, env="LNBITS_ALLOWED_USERS")
admin_ext: List[str] = Field(default_factory=list, env="LNBITS_ADMIN_EXTENSIONS")
2022-09-22 10:46:11 +02:00
disabled_ext: List[str] = Field(
default_factory=list, env="LNBITS_DISABLED_EXTENSIONS"
)
2022-03-18 16:59:06 +00:00
funding_source: str = Field(default="VoidWallet", env="LNBITS_BACKEND_WALLET_CLASS")
# ops
data_folder: str = Field(default=None, env="LNBITS_DATA_FOLDER")
database_url: str = Field(default=None, env="LNBITS_DATABASE_URL")
force_https: bool = Field(default=True, env="LNBITS_FORCE_HTTPS")
2022-06-08 14:58:41 +01:00
reserve_fee_min: int = Field(default=4000, env="LNBITS_RESERVE_FEE_MIN")
reserve_fee_pct: float = Field(default=1.0, env="LNBITS_RESERVE_FEE_PERCENT")
2022-03-18 16:59:06 +00:00
service_fee: float = Field(default=0, env="LNBITS_SERVICE_FEE")
hide_api: bool = Field(default=False, env="LNBITS_HIDE_API")
denomination: str = Field(default="sats", env="LNBITS_DENOMINATION")
# Change theme
2022-03-22 11:35:15 +00:00
site_title: str = Field(default="LNbits", env="LNBITS_SITE_TITLE")
2022-09-22 10:46:11 +02:00
site_tagline: str = Field(
default="free and open-source lightning wallet", env="LNBITS_SITE_TAGLINE"
)
2022-03-18 16:59:06 +00:00
site_description: str = Field(default=None, env="LNBITS_SITE_DESCRIPTION")
2022-09-22 10:46:11 +02:00
default_wallet_name: str = Field(
default="LNbits wallet", env="LNBITS_DEFAULT_WALLET_NAME"
)
theme: List[str] = Field(
default=["classic, flamingo, mint, salvador, monochrome, autumn"],
env="LNBITS_THEME_OPTIONS",
)
2022-06-08 11:00:43 +01:00
custom_logo: str = Field(default=None, env="LNBITS_CUSTOM_LOGO")
2022-03-18 16:59:06 +00:00
ad_space: List[str] = Field(default_factory=list, env="LNBITS_AD_SPACE")
# .env
env: Optional[str]
debug: Optional[str]
host: Optional[str]
port: Optional[str]
2022-09-22 10:46:11 +02:00
lnbits_path: Optional[str] = path.dirname(path.realpath(__file__))
2022-03-18 16:59:06 +00:00
# @validator('admin_users', 'allowed_users', 'admin_ext', 'disabled_ext', pre=True)
# def validate(cls, val):
# print(val)
# return val.split(',')
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
case_sensitive = False
json_loads = list_parse_fallback
conf = Settings()
WALLET = wallet_class()