summaryrefslogtreecommitdiff
path: root/cli/build.py
blob: f8fef5de14f48072c569349712e5bd38315234d7 (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
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
import click

from jinja2 import Environment, FileSystemLoader, select_autoescape
from os import listdir, mkdir
from pathlib import Path
from shutil import copyfile
from unidecode import unidecode

from .base import cli, STASH

ROOT_PATH = Path(__file__).parents[1]

NAMES_DIR = ROOT_PATH / "names"
BUILD_DIR = ROOT_PATH / "build"
STATIC_DIR = ROOT_PATH / "static"

TEMPLATES = ["index.html"]


@cli.command()
@click.option("--verbose", "-v", is_flag=True)
def build(verbose):
    # copy static files
    if not BUILD_DIR.exists():
        mkdir(BUILD_DIR)
    for f in listdir(STATIC_DIR):
        copyfile(STATIC_DIR / f, BUILD_DIR / f)

    # process all name yamls
    names = []
    candidates = []

    for key in STASH.list_keys():
        name = STASH.load(key)
        if name.invalid is True:
            continue
        if name.candidate is True:
            candidates.append(name)
        else:
            names.append(name)

    names = list(sorted(names, key=lambda x: x.domain))
    candidates = list(sorted(candidates, key=lambda x: x.domain))

    if verbose:
        names_str = [x.domain for x in names]
        candidates_str = [x.domain for x in candidates]
        print(f"Got {names_str=}")
        print(f"Got {candidates_str=}")

    def render_link(value, classes):
        name = unidecode(value.name).lower().split(" ")
        domain = unidecode(value.domain).replace(".", "")
        res = []
        for part in name:
            if part == domain:
                url = value.url or "https://" + value.domain
                res.append(f'<a href="{url}" class="{classes}">{value.domain}</a>')
            else:
                res.append(part)
        return " ".join(res)

    # render templates
    env = Environment(
        loader=FileSystemLoader("templates"),
        autoescape=select_autoescape(),
    )
    env.filters["render_link"] = render_link
    for template in TEMPLATES:
        t = env.get_template(template)
        index = t.render(names=names, candidates=candidates)
        with open(BUILD_DIR / "index.html", "w") as f:
            f.write(index)