trin 1
This commit is contained in:
37
udpak_semistruktur/logger.py
Normal file
37
udpak_semistruktur/logger.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
|
||||
fmt = "%(asctime)s [%(levelname)s] %(module)s: %(message)s"
|
||||
datefmt = "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
LOG_NIVEAUER = {
|
||||
"debug": logging.DEBUG,
|
||||
"info": logging.INFO,
|
||||
"warning": logging.WARNING,
|
||||
"error": logging.ERROR,
|
||||
"critical": logging.CRITICAL,
|
||||
}
|
||||
|
||||
def opsaet_logging(log_fil: str, niveau: str = "info") -> None:
|
||||
"""
|
||||
Opsætter global logging til både fil og konsol.
|
||||
niveau styres fra config (debug/info/warning/error/critical).
|
||||
"""
|
||||
log_niveau = LOG_NIVEAUER.get(niveau.lower(), logging.INFO)
|
||||
|
||||
os.makedirs(os.path.dirname(log_fil), exist_ok=True)
|
||||
|
||||
logging.basicConfig(
|
||||
level=log_niveau,
|
||||
format=fmt,
|
||||
datefmt=datefmt,
|
||||
handlers=[
|
||||
logging.FileHandler(log_fil, encoding="utf-8"),
|
||||
logging.StreamHandler(),
|
||||
]
|
||||
)
|
||||
|
||||
def hent_logger(navn: str) -> logging.Logger:
|
||||
"""Returnerer en logger til det givne modul."""
|
||||
return logging.getLogger(navn)
|
||||
@@ -0,0 +1,53 @@
|
||||
import os
|
||||
import re
|
||||
|
||||
from typing import Any
|
||||
|
||||
EMPTY_SENTINELS = (None, "", [], {})
|
||||
|
||||
def er_tom(v: Any) -> bool:
|
||||
return v in EMPTY_SENTINELS
|
||||
|
||||
def evaluer_værdi_token(raw_value: str, global_config: dict) -> str:
|
||||
vtype, vkey = parse_value_token(raw_value)
|
||||
if vtype == "env":
|
||||
return os.environ.get(vkey, "")
|
||||
elif vtype == "prog":
|
||||
return global_config.get(vkey, "")
|
||||
else:
|
||||
return vkey
|
||||
|
||||
def generer_filnavn(tekst: str, config: dict) -> str:
|
||||
"""Erstatter dato-tokens i et filnavn med værdier fra config."""
|
||||
return tekst.format(
|
||||
yy=config["dato"].strftime('%y'),
|
||||
yyyy=config["dato"].strftime('%Y'),
|
||||
mm=config["dato"].strftime('%m'),
|
||||
dd=config["dato"].strftime('%d')
|
||||
)
|
||||
|
||||
def parse_value_token(value: Any) -> tuple[str, Any]:
|
||||
"""
|
||||
Parser en værdi fra YAML og returnerer (type, key/value)
|
||||
|
||||
type:
|
||||
- 'env' → miljøvariabel ${VAR}
|
||||
- 'prog' → programvariabel {var}
|
||||
- 'const' → fast værdi (ingen placeholders)
|
||||
|
||||
key/value:
|
||||
- For env/prog → selve navnet uden {} / ${}
|
||||
- For const → hele strengen som den er
|
||||
"""
|
||||
if not isinstance(value, str):
|
||||
return "const", value # ikke-strenge behandles som faste værdier
|
||||
|
||||
env_match = re.fullmatch(r"\$\{([^}]+)\}", value)
|
||||
if env_match:
|
||||
return "env", env_match.group(1)
|
||||
|
||||
prog_match = re.fullmatch(r"\{([^}]+)\}", value)
|
||||
if prog_match:
|
||||
return "prog", prog_match.group(1)
|
||||
|
||||
return "const", value
|
||||
|
||||
Reference in New Issue
Block a user