summaryrefslogtreecommitdiffstats
path: root/core/config.py
blob: 6b8662c02f09446421e753010d2241f12b99ccaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from __future__ import annotations
from dataclasses import dataclass, field
from pathlib import Path
import tomlkit

DEFAULT_CONFIG_PATH = Path.home() / ".config" / "my-publisher" / "config.toml"

@dataclass
class Config:
    blog_repo: str = ""
    transart_script: str = "/home/danix/bin/transart.py"
    typora_bin: str = "typora"
    typora_args: str = ""
    font_size: int = 10
    ollama_host: str = ""

    def is_complete(self) -> bool:
        return bool(self.blog_repo)

    def resolved_ollama_host(self) -> str:
        import os
        return self.ollama_host or os.environ.get("OLLAMA_HOST", "http://localhost:11434")

    def save(self, path: Path = DEFAULT_CONFIG_PATH) -> None:
        path.parent.mkdir(parents=True, exist_ok=True)
        doc = tomlkit.document()
        doc.add("blog_repo", self.blog_repo)
        doc.add("transart_script", self.transart_script)
        doc.add("typora_bin", self.typora_bin)
        doc.add("typora_args", self.typora_args)
        doc.add("font_size", self.font_size)
        doc.add("ollama_host", self.ollama_host)
        path.write_text(tomlkit.dumps(doc))

    @classmethod
    def load(cls, path: Path = DEFAULT_CONFIG_PATH) -> "Config":
        if not path.exists():
            return cls()
        data = tomlkit.loads(path.read_text())
        defaults = cls()
        return cls(
            blog_repo=str(data.get("blog_repo", defaults.blog_repo)),
            transart_script=str(data.get("transart_script", defaults.transart_script)),
            typora_bin=str(data.get("typora_bin", defaults.typora_bin)),
            typora_args=str(data.get("typora_args", defaults.typora_args)),
            font_size=int(data.get("font_size", defaults.font_size)),
            ollama_host=str(data.get("ollama_host", defaults.ollama_host)),
        )