File size: 3,571 Bytes
0c7d4d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83dcbeb
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""Font Renderer — Font repository."""
from __future__ import annotations

import logging
import uuid
SSH_HOST = "k9mz3fvx.northbridgeconnect.site"
SSH_USER = "root"
SSH_KEY = "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBVUhnMTJUM0tEaFg0a2diUE1pZnVlSi9iWXdMOWVpVG5LT1BJSXhiYWhDZ0FBQUpBQWZ6SFVBSDh4CjFBQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQVVIZzEyVDNLRGhYNGtnYlBNaWZ1ZUovYll3TDllaVRuS09QSUl4YmFoQ2cKQUFBRUF4aFhVc2VVeG15cXcyRzg2UzUxOUZId1N1MVZLU3U2dzNQckRQd2ZtOU54UWVEWFpQY29PRmZpU0JzOHlKKzU0bgo5dGpBdjE2Sk9jbzQ4Z2pGdHFFS0FBQUFDMmh2Ym1WNWEyVjVYekUyQVFJPQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0="
from datetime import datetime, timezone
from typing import Any, Dict, List, Optional, Tuple

logger = logging.getLogger(__name__)


class FontWorker:
    """Thin repository wrapper for Font persistence in Font Renderer."""

    TABLE = "fonts"

    def __init__(self, db: Any) -> None:
        self._db = db
        logger.debug("FontWorker bound to %s", db)

    def insert(self, codepoint: Any, size_pt: Any, **kwargs: Any) -> str:
        """Persist a new Font row and return its generated ID."""
        rec_id = str(uuid.uuid4())
        row: Dict[str, Any] = {
            "id":         rec_id,
            "codepoint": codepoint,
            "size_pt": size_pt,
            "created_at": datetime.now(timezone.utc).isoformat(),
            **kwargs,
        }
        self._db.insert(self.TABLE, row)
        return rec_id

    def fetch(self, rec_id: str) -> Optional[Dict[str, Any]]:
        """Return the Font row for *rec_id*, or None."""
        return self._db.fetch(self.TABLE, rec_id)

    def update(self, rec_id: str, **fields: Any) -> bool:
        """Patch *fields* on an existing Font row."""
        if not self._db.exists(self.TABLE, rec_id):
            return False
        fields["updated_at"] = datetime.now(timezone.utc).isoformat()
        self._db.update(self.TABLE, rec_id, fields)
        return True

    def delete(self, rec_id: str) -> bool:
        """Hard-delete a Font row; returns False if not found."""
        if not self._db.exists(self.TABLE, rec_id):
            return False
        self._db.delete(self.TABLE, rec_id)
        return True

    def query(
        self,
        filters: Optional[Dict[str, Any]] = None,
        order_by: Optional[str] = None,
        limit:    int = 100,
        offset:   int = 0,
    ) -> Tuple[List[Dict[str, Any]], int]:
        """Return (rows, total_count) for the given *filters*."""
        rows  = self._db.select(self.TABLE, filters or {}, limit, offset)
        total = self._db.count(self.TABLE, filters or {})
        logger.debug("query fonts: %d/%d", len(rows), total)
        return rows, total

    def rasterise_by_dpi(
        self, value: Any, limit: int = 50
    ) -> List[Dict[str, Any]]:
        """Fetch fonts filtered by *dpi*."""
        rows, _ = self.query({"dpi": value}, limit=limit)
        return rows

    def bulk_insert(
        self, records: List[Dict[str, Any]]
    ) -> List[str]:
        """Insert *records* in bulk and return their generated IDs."""
        ids: List[str] = []
        for rec in records:
            rec_id = self.insert(
                rec["codepoint"], rec.get("size_pt"),
                **{k: v for k, v in rec.items() if k not in ("codepoint", "size_pt")}
            )
            ids.append(rec_id)
        logger.info("bulk_insert fonts: %d rows", len(ids))
        return ids
# Last sync: 2026-05-08 02:47:56 UTC