| | """Configuration management for Flow2API""" |
| | import tomli |
| | from pathlib import Path |
| | from typing import Dict, Any, Optional |
| |
|
| | class Config: |
| | """Application configuration""" |
| |
|
| | def __init__(self): |
| | self._config = self._load_config() |
| | self._admin_username: Optional[str] = None |
| | self._admin_password: Optional[str] = None |
| |
|
| | def _load_config(self) -> Dict[str, Any]: |
| | """Load configuration from setting.toml""" |
| | config_path = Path(__file__).parent.parent.parent / "config" / "setting.toml" |
| | with open(config_path, "rb") as f: |
| | return tomli.load(f) |
| |
|
| | def reload_config(self): |
| | """Reload configuration from file""" |
| | self._config = self._load_config() |
| |
|
| | def get_raw_config(self) -> Dict[str, Any]: |
| | """Get raw configuration dictionary""" |
| | return self._config |
| |
|
| | @property |
| | def admin_username(self) -> str: |
| | |
| | if self._admin_username is not None: |
| | return self._admin_username |
| | return self._config["global"]["admin_username"] |
| |
|
| | @admin_username.setter |
| | def admin_username(self, value: str): |
| | self._admin_username = value |
| | self._config["global"]["admin_username"] = value |
| |
|
| | def set_admin_username_from_db(self, username: str): |
| | """Set admin username from database""" |
| | self._admin_username = username |
| |
|
| | |
| | @property |
| | def flow_labs_base_url(self) -> str: |
| | """Google Labs base URL for project management""" |
| | return self._config["flow"]["labs_base_url"] |
| |
|
| | @property |
| | def flow_api_base_url(self) -> str: |
| | """Google AI Sandbox API base URL for generation""" |
| | return self._config["flow"]["api_base_url"] |
| |
|
| | @property |
| | def flow_timeout(self) -> int: |
| | return self._config["flow"]["timeout"] |
| |
|
| | @property |
| | def flow_max_retries(self) -> int: |
| | return self._config["flow"]["max_retries"] |
| |
|
| | @property |
| | def poll_interval(self) -> float: |
| | return self._config["flow"]["poll_interval"] |
| |
|
| | @property |
| | def max_poll_attempts(self) -> int: |
| | return self._config["flow"]["max_poll_attempts"] |
| |
|
| | @property |
| | def server_host(self) -> str: |
| | return self._config["server"]["host"] |
| |
|
| | @property |
| | def server_port(self) -> int: |
| | return self._config["server"]["port"] |
| |
|
| | @property |
| | def debug_enabled(self) -> bool: |
| | return self._config.get("debug", {}).get("enabled", False) |
| |
|
| | @property |
| | def debug_log_requests(self) -> bool: |
| | return self._config.get("debug", {}).get("log_requests", True) |
| |
|
| | @property |
| | def debug_log_responses(self) -> bool: |
| | return self._config.get("debug", {}).get("log_responses", True) |
| |
|
| | @property |
| | def debug_mask_token(self) -> bool: |
| | return self._config.get("debug", {}).get("mask_token", True) |
| |
|
| | |
| | @property |
| | def api_key(self) -> str: |
| | return self._config["global"]["api_key"] |
| |
|
| | @api_key.setter |
| | def api_key(self, value: str): |
| | self._config["global"]["api_key"] = value |
| |
|
| | @property |
| | def admin_password(self) -> str: |
| | |
| | if self._admin_password is not None: |
| | return self._admin_password |
| | return self._config["global"]["admin_password"] |
| |
|
| | @admin_password.setter |
| | def admin_password(self, value: str): |
| | self._admin_password = value |
| | self._config["global"]["admin_password"] = value |
| |
|
| | def set_admin_password_from_db(self, password: str): |
| | """Set admin password from database""" |
| | self._admin_password = password |
| |
|
| | def set_debug_enabled(self, enabled: bool): |
| | """Set debug mode enabled/disabled""" |
| | if "debug" not in self._config: |
| | self._config["debug"] = {} |
| | self._config["debug"]["enabled"] = enabled |
| |
|
| | @property |
| | def image_timeout(self) -> int: |
| | """Get image generation timeout in seconds""" |
| | return self._config.get("generation", {}).get("image_timeout", 300) |
| |
|
| | def set_image_timeout(self, timeout: int): |
| | """Set image generation timeout in seconds""" |
| | if "generation" not in self._config: |
| | self._config["generation"] = {} |
| | self._config["generation"]["image_timeout"] = timeout |
| |
|
| | @property |
| | def video_timeout(self) -> int: |
| | """Get video generation timeout in seconds""" |
| | return self._config.get("generation", {}).get("video_timeout", 1500) |
| |
|
| | def set_video_timeout(self, timeout: int): |
| | """Set video generation timeout in seconds""" |
| | if "generation" not in self._config: |
| | self._config["generation"] = {} |
| | self._config["generation"]["video_timeout"] = timeout |
| |
|
| | |
| | @property |
| | def cache_enabled(self) -> bool: |
| | """Get cache enabled status""" |
| | return self._config.get("cache", {}).get("enabled", False) |
| |
|
| | def set_cache_enabled(self, enabled: bool): |
| | """Set cache enabled status""" |
| | if "cache" not in self._config: |
| | self._config["cache"] = {} |
| | self._config["cache"]["enabled"] = enabled |
| |
|
| | @property |
| | def cache_timeout(self) -> int: |
| | """Get cache timeout in seconds""" |
| | return self._config.get("cache", {}).get("timeout", 7200) |
| |
|
| | def set_cache_timeout(self, timeout: int): |
| | """Set cache timeout in seconds""" |
| | if "cache" not in self._config: |
| | self._config["cache"] = {} |
| | self._config["cache"]["timeout"] = timeout |
| |
|
| | @property |
| | def cache_base_url(self) -> str: |
| | """Get cache base URL""" |
| | return self._config.get("cache", {}).get("base_url", "") |
| |
|
| | def set_cache_base_url(self, base_url: str): |
| | """Set cache base URL""" |
| | if "cache" not in self._config: |
| | self._config["cache"] = {} |
| | self._config["cache"]["base_url"] = base_url |
| |
|
| | |
| | @property |
| | def captcha_method(self) -> str: |
| | """Get captcha method""" |
| | return self._config.get("captcha", {}).get("captcha_method", "yescaptcha") |
| |
|
| | def set_captcha_method(self, method: str): |
| | """Set captcha method""" |
| | if "captcha" not in self._config: |
| | self._config["captcha"] = {} |
| | self._config["captcha"]["captcha_method"] = method |
| |
|
| | @property |
| | def yescaptcha_api_key(self) -> str: |
| | """Get YesCaptcha API key""" |
| | return self._config.get("captcha", {}).get("yescaptcha_api_key", "") |
| |
|
| | def set_yescaptcha_api_key(self, api_key: str): |
| | """Set YesCaptcha API key""" |
| | if "captcha" not in self._config: |
| | self._config["captcha"] = {} |
| | self._config["captcha"]["yescaptcha_api_key"] = api_key |
| |
|
| | @property |
| | def yescaptcha_base_url(self) -> str: |
| | """Get YesCaptcha base URL""" |
| | return self._config.get("captcha", {}).get("yescaptcha_base_url", "https://api.yescaptcha.com") |
| |
|
| | def set_yescaptcha_base_url(self, base_url: str): |
| | """Set YesCaptcha base URL""" |
| | if "captcha" not in self._config: |
| | self._config["captcha"] = {} |
| | self._config["captcha"]["yescaptcha_base_url"] = base_url |
| |
|
| |
|
| | |
| | config = Config() |
| |
|