aboutsummaryrefslogtreecommitdiff
path: root/inc/site.py
diff options
context:
space:
mode:
Diffstat (limited to 'inc/site.py')
-rw-r--r--inc/site.py127
1 files changed, 127 insertions, 0 deletions
diff --git a/inc/site.py b/inc/site.py
new file mode 100644
index 00000000..67e5afa8
--- /dev/null
+++ b/inc/site.py
@@ -0,0 +1,127 @@
1import os
2import os.path
3import sys
4import re
5import gettext
6import glob
7import codecs
8import jinja2
9import hashlib
10from pathlib import Path, PurePosixPath
11from ruamel.yaml import YAML
12import inc.i18nfix
13from inc.textproc import cut_news_text
14from inc.fileproc import copy_files
15
16
17class gen_site:
18 def load_config(self, name="www.yml"):
19 yaml = YAML(typ='safe')
20 site_configfile = Path(name)
21 return yaml.load(site_configfile)
22
23 def gen_abstract(self, conf, name, member, pages, length):
24 for item in conf[name]:
25 item[member] = cut_news_text(item[pages], length)
26
27 def run(self, root, conf, env):
28 # os.chdir("..")
29 print(os.getcwd())
30 root = "../" + root
31 for in_file in glob.glob(root + "/*.j2"):
32 name, ext = re.match(r"(.*)\.([^.]+)$",
33 in_file.rstrip(".j2")).groups()
34 tmpl = env.get_template(in_file)
35
36 def self_localized(other_locale):
37 """
38 Return URL for the current page in another locale.
39 """
40 return "../" + other_locale + "/" + in_file.replace(
41 root + '/', '').rstrip(".j2")
42
43 def url_localized(filename):
44 if root == "news":
45 return "../../" + locale + "/" + filename
46 else:
47 return "../" + locale + "/" + filename
48
49 def url_static(filename):
50 if root == "news":
51 return "../../static/" + filename
52 else:
53 return "../static/" + filename
54
55 def url_dist(filename):
56 if root == "news":
57 return "../../dist/" + filename
58 else:
59 return "../dist/" + filename
60
61 def svg_localized(filename):
62 lf = filename + "." + locale + ".svg"
63 if locale == "en" or not Path(lf).is_file():
64 return "../" + filename + ".svg"
65 else:
66 return "../" + lf
67
68 def url(x):
69 # TODO: look at the app root environment variable
70 # TODO: check if file exists
71 #if root == "news":
72 # return "../" + "../" + x
73 #else:
74 # return "../" + x
75 return "../" + x
76
77 for l in glob.glob("locale/*/"):
78 locale = os.path.basename(l[:-1])
79
80 tr = gettext.translation("messages",
81 localedir="locale",
82 languages=[locale])
83
84 tr.gettext = i18nfix.wrap_gettext(tr.gettext)
85
86 env.install_gettext_translations(tr, newstyle=True)
87
88 content = tmpl.render(lang=locale,
89 lang_full=conf["langs_full"][locale],
90 url=url,
91 meetingnotesdata=conf["meetingnotes"],
92 newsdata=conf["newsposts"],
93 videosdata=conf["videoslist"],
94 self_localized=self_localized,
95 url_localized=url_localized,
96 url_static=url_static,
97 url_dist=url_dist,
98 svg_localized=svg_localized,
99 filename=name + "." + ext)
100
101 if root == "news":
102 out_name = "./rendered/" + locale + "/" + root + "/" + in_file.replace(
103 root + '/', '').rstrip(".j2")
104 else:
105 out_name = "./rendered/" + locale + "/" + in_file.replace(
106 root + '/', '').rstrip(".j2")
107
108 outdir = Path("rendered")
109 if outdir.exists() is False:
110 sys.exit(1)
111
112 if root == "news":
113 langdir = outdir / locale / root
114 else:
115 langdir = outdir / locale
116
117 try:
118 langdir.mkdir(parents=True, exist_ok=True)
119 except e as FileNotFoundError:
120 print(e)
121
122 with codecs.open(out_name, "w", encoding='utf-8') as f:
123 try:
124 print(Path.cwd())
125 f.write(content)
126 except e as Error:
127 print(e)