This commit is contained in:
66
gitignore_generator/config.py
Normal file
66
gitignore_generator/config.py
Normal file
@@ -0,0 +1,66 @@
|
||||
"""Configuration management for gitignore-generator."""
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
class Config:
|
||||
"""Configuration management class."""
|
||||
|
||||
def __init__(self, config_path: Optional[str] = None):
|
||||
"""Initialize configuration."""
|
||||
if config_path is None:
|
||||
config_path = os.environ.get(
|
||||
"GITIGNORE_CONFIG",
|
||||
str(Path(__file__).parent.parent / ".gitignore-generator" / "config.yaml")
|
||||
)
|
||||
self.config_path = Path(config_path)
|
||||
self._config = self._load_config()
|
||||
|
||||
def _load_config(self) -> dict:
|
||||
"""Load configuration from file."""
|
||||
if self.config_path.exists():
|
||||
with open(self.config_path, "r") as f:
|
||||
return yaml.safe_load(f) or {}
|
||||
return {}
|
||||
|
||||
@property
|
||||
def template_dir(self) -> Path:
|
||||
"""Get template directory path."""
|
||||
env_dir = os.environ.get("TEMPLATE_DIR")
|
||||
if env_dir:
|
||||
return Path(env_dir)
|
||||
config_dir = self._config.get("template_dir")
|
||||
if config_dir:
|
||||
return Path(__file__).parent / config_dir
|
||||
return Path(__file__).parent / "templates"
|
||||
|
||||
@property
|
||||
def default_output(self) -> str:
|
||||
"""Get default output file name."""
|
||||
env_output = os.environ.get("GITIGNORE_DEFAULT_FILE")
|
||||
if env_output:
|
||||
return env_output
|
||||
config_output = self._config.get("default_output")
|
||||
if config_output:
|
||||
return config_output
|
||||
return ".gitignore"
|
||||
|
||||
@property
|
||||
def custom_templates_dir(self) -> Path:
|
||||
"""Get custom templates directory path."""
|
||||
custom_dir = self._config.get("custom_templates_dir", "~/.config/gitignore-generator/templates")
|
||||
return Path(custom_dir).expanduser()
|
||||
|
||||
def get_template_path(self, template_name: str, category: str = "languages") -> Optional[Path]:
|
||||
"""Get the path to a template file."""
|
||||
template_path = self.template_dir / category / f"{template_name}.gitignore"
|
||||
if template_path.exists():
|
||||
return template_path
|
||||
return None
|
||||
|
||||
|
||||
config = Config()
|
||||
Reference in New Issue
Block a user