70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
"""Repositorio para gestionar configuración."""
|
|
|
|
from typing import Optional, Any
|
|
import json
|
|
from datetime import datetime
|
|
from .database import db
|
|
|
|
|
|
class ConfigRepository:
|
|
"""Repositorio para operaciones con configuración."""
|
|
|
|
@staticmethod
|
|
def get(key: str, default: Any = None) -> Any:
|
|
"""
|
|
Obtiene un valor de configuración.
|
|
|
|
Args:
|
|
key: Clave de configuración
|
|
default: Valor por defecto si no existe
|
|
|
|
Returns:
|
|
Valor de configuración (deserializado de JSON)
|
|
"""
|
|
row = db.fetchone("SELECT value FROM config WHERE key = ?", (key,))
|
|
if not row:
|
|
return default
|
|
try:
|
|
return json.loads(row["value"])
|
|
except:
|
|
return row["value"]
|
|
|
|
@staticmethod
|
|
def set(key: str, value: Any):
|
|
"""
|
|
Establece un valor de configuración.
|
|
|
|
Args:
|
|
key: Clave de configuración
|
|
value: Valor a guardar (se serializa a JSON)
|
|
"""
|
|
now = datetime.utcnow().isoformat()
|
|
value_str = json.dumps(value) if not isinstance(value, str) else value
|
|
|
|
db.execute("""
|
|
INSERT OR REPLACE INTO config (key, value, updated_at)
|
|
VALUES (?, ?, ?)
|
|
""", (key, value_str, now))
|
|
|
|
@staticmethod
|
|
def get_all() -> dict:
|
|
"""
|
|
Obtiene toda la configuración.
|
|
|
|
Returns:
|
|
Diccionario con todas las claves y valores
|
|
"""
|
|
rows = db.fetchall("SELECT key, value FROM config")
|
|
config = {}
|
|
for row in rows:
|
|
try:
|
|
config[row["key"]] = json.loads(row["value"])
|
|
except:
|
|
config[row["key"]] = row["value"]
|
|
return config
|
|
|
|
@staticmethod
|
|
def delete(key: str):
|
|
"""Elimina una clave de configuración."""
|
|
db.execute("DELETE FROM config WHERE key = ?", (key,))
|