Files
xsl-validator/src/conf.py
T

162 lines
3.9 KiB
Python
Raw Normal View History

2025-06-12 19:21:58 +02:00
from os import path
from pathlib import Path
2025-06-12 19:21:58 +02:00
from sys import platform
2025-06-13 20:23:19 +02:00
from typing import Tuple, Type
from pydantic import BaseModel
2025-06-13 20:23:19 +02:00
from pydantic_settings import BaseSettings, PydanticBaseSettingsSource, SettingsConfigDict, JsonConfigSettingsSource
2025-06-12 19:21:58 +02:00
app_name = "DocuMentor"
if platform == "win32":
config_path = f"%APPDATA%\\{app_name}\\config.json"
elif platform in ("linux", "linux2"):
2025-06-12 19:21:58 +02:00
config_path = f"~/.config/{app_name}/config.json"
elif platform == "darwin":
config_path = f"~/Library/Application Support/{app_name}/͏͏͏͏config.json"
else:
config_path = f"~/.config/{app_name}/config.json"
config_path = Path(path.expandvars(config_path))
class JavaVm(BaseModel):
2025-06-09 19:50:17 +02:00
id: int
2025-06-06 20:18:29 +02:00
version: str
path_to_binary_file: Path
class DiffPdf(BaseModel):
2025-06-09 19:50:17 +02:00
id: int
2025-06-06 20:18:29 +02:00
version: str
path_to_binary_file: Path
default_params: list[str]
2025-06-06 20:18:29 +02:00
output_file_extension: str = "pdf"
class SaxonJar(BaseModel):
2025-06-09 19:50:17 +02:00
id: int
2025-06-06 20:18:29 +02:00
version: str
path_to_jar_file: Path
2025-06-06 20:18:29 +02:00
output_file_extension: str = "fo"
class ApacheFop(BaseModel):
2025-06-09 19:50:17 +02:00
id: int
2025-06-06 20:18:29 +02:00
version: str
path_to_dir: Path
2025-06-06 20:18:29 +02:00
output_file_extension: str = "pdf"
class XslDir(BaseModel):
2025-06-09 19:50:17 +02:00
id: int
2025-06-06 20:18:29 +02:00
name: str
path_to_root_dir: Path
2025-06-06 20:32:23 +02:00
2025-06-06 20:18:29 +02:00
class PdfProject(BaseModel):
2025-06-09 19:50:17 +02:00
id: int
name: str
project_dir: Path
2025-06-09 19:58:24 +02:00
java_vm_id: int
2025-06-09 19:50:17 +02:00
diff_pdf_id: int
saxon_jar_id: int
apache_fop_id: int
xsl_dir_id: int
2025-06-06 20:18:29 +02:00
default_xslt_params: dict[str, str] = {}
def getXsl(self) -> str:
global app_settings
value = [x.name for x in app_settings.xsl_dirs if x.id == self.xsl_dir_id]
return value[0] if len(value) else ""
def getJavaVm(self) -> str:
global app_settings
value = [x.version for x in app_settings.java_vms if x.id == self.java_vm_id]
return value[0] if len(value) else ""
def getSaxon(self) -> str:
global app_settings
value = [x.version for x in app_settings.saxon_jars if x.id == self.saxon_jar_id]
return value[0] if len(value) else ""
def getApacheFop(self) -> str:
global app_settings
value = [x.version for x in app_settings.apache_fops if x.id == self.apache_fop_id]
return value[0] if len(value) else ""
def getDiffPdf(self) -> str:
global app_settings
value = [x.version for x in app_settings.diff_pdfs if x.id == self.diff_pdf_id]
return value[0] if len(value) else ""
class AppSettings(BaseSettings):
2025-06-12 19:21:58 +02:00
java_vms: list[JavaVm] = []
diff_pdfs: list[DiffPdf] = []
saxon_jars: list[SaxonJar] = []
apache_fops: list[ApacheFop] = []
xsl_dirs: list[XslDir] = []
2025-06-06 20:18:29 +02:00
pdf_projects: list[PdfProject] = []
theme: str | None = None
2025-06-06 20:32:23 +02:00
2025-06-12 19:21:58 +02:00
model_config = SettingsConfigDict(json_file=config_path)
2025-06-13 20:23:19 +02:00
@classmethod
def settings_customise_sources(
cls,
settings_cls: Type[BaseSettings],
init_settings: PydanticBaseSettingsSource,
env_settings: PydanticBaseSettingsSource,
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> Tuple[PydanticBaseSettingsSource, ...]:
return (JsonConfigSettingsSource(settings_cls),)
def save(self):
global config_path
# Ordner existert nicht
2025-06-13 20:23:19 +02:00
if not config_path.parent.exists():
config_path.parent.mkdir(parents=True, exist_ok=True)
2025-06-12 19:21:58 +02:00
2025-06-13 20:23:19 +02:00
# Konfiguration speichern
with open(config_path, "wb") as c:
c.write(app_settings.model_dump_json(indent=4).encode())
2025-06-12 19:21:58 +02:00
2025-06-06 20:18:29 +02:00
2025-06-13 20:23:19 +02:00
app_settings = AppSettings()
2025-06-13 20:23:19 +02:00
class Xml(BaseModel):
xml: Path
2025-06-20 21:42:30 +02:00
class XslFile(BaseModel):
id: tuple
bez: str
xsl_file: Path
xmls: list[Xml] = []
2025-06-20 21:42:30 +02:00
class TreeNode(BaseModel):
id: tuple
bez: str
children: list["TreeNode|XslFile"]
2025-06-20 21:42:30 +02:00
class PdfProjectSettings(BaseModel):
2025-06-06 20:18:29 +02:00
"""
2025-06-12 19:21:58 +02:00
Speichert Projekt-Einstellungen direkt im Ordner des Projekts in einer Klartextdatei JSON
2025-06-06 20:18:29 +02:00
"""
2025-06-06 20:32:23 +02:00
nodes: list[TreeNode] = []