mirror of
https://git.ari.lt/ari.lt/blog.ari.lt.git
synced 2025-02-04 09:39:25 +01:00
update @ Sat 2 Apr 20:43:37 EEST 2022
Signed-off-by: Ari Archer <ari.web.xyz@gmail.com>
This commit is contained in:
parent
4116519ab5
commit
7ebd654c57
5 changed files with 98 additions and 22 deletions
|
@ -12,6 +12,14 @@
|
||||||
|
|
||||||
## Installing dependencies
|
## Installing dependencies
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ python3 -m virtualenv venv
|
||||||
|
$ . venv/bin/activate
|
||||||
|
$ pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Or
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ python3 -m pip install --user -r requirements.txt
|
$ python3 -m pip install --user -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
10
blog.json
10
blog.json
|
@ -30,6 +30,7 @@
|
||||||
"page-title": "Ari::web -> Blog",
|
"page-title": "Ari::web -> Blog",
|
||||||
"page-description": "My blog page",
|
"page-description": "My blog page",
|
||||||
"colourscheme-type": "dark",
|
"colourscheme-type": "dark",
|
||||||
|
"short-name": "Ari's blogs",
|
||||||
"home-keywords": [
|
"home-keywords": [
|
||||||
"ari",
|
"ari",
|
||||||
"ari-web",
|
"ari-web",
|
||||||
|
@ -40,6 +41,15 @@
|
||||||
"linux"
|
"linux"
|
||||||
],
|
],
|
||||||
"base-homepage": "https://ari-web.xyz/",
|
"base-homepage": "https://ari-web.xyz/",
|
||||||
|
"meta-icons": [
|
||||||
|
{
|
||||||
|
"src": "/favicon.ico",
|
||||||
|
"sizes": "128x128",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme-colour": "#f9f6e8",
|
||||||
|
"background-colour": "#262220",
|
||||||
"blogs": {
|
"blogs": {
|
||||||
"new-blog-management-system-": {
|
"new-blog-management-system-": {
|
||||||
"title": "TmV3IGJsb2cgbWFuYWdlbWVudCBzeXN0ZW0h",
|
"title": "TmV3IGJsb2cgbWFuYWdlbWVudCBzeXN0ZW0h",
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
|
|
||||||
"short_name": "Ari-web blogs",
|
|
||||||
"name": "Ari::web -> Blog",
|
|
||||||
"description": "My blog page",
|
|
||||||
"icons": [{
|
|
||||||
"src": "/favicon.ico",
|
|
||||||
"sizes": "128x128",
|
|
||||||
"type": "image/png"
|
|
||||||
}],
|
|
||||||
"start_url": ".",
|
|
||||||
"display": "standalone",
|
|
||||||
"theme_color": "#f9f6e8",
|
|
||||||
"background_color": "#262220"
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
[build]
|
[build]
|
||||||
command = "python3 ./scripts/blog clean && python3 ./scripts/blog build"
|
command = "python3 ./scripts/blog static"
|
||||||
|
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
from = "/git/*"
|
from = "/git/*"
|
||||||
|
|
85
scripts/blog
85
scripts/blog
|
@ -2,6 +2,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Manage blogs"""
|
"""Manage blogs"""
|
||||||
|
|
||||||
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
|
@ -53,8 +54,12 @@ DEFAULT_CONFIG: Dict = {
|
||||||
"page-title": "Ari::web -> Blog",
|
"page-title": "Ari::web -> Blog",
|
||||||
"page-description": "My blog page",
|
"page-description": "My blog page",
|
||||||
"colourscheme-type": "dark",
|
"colourscheme-type": "dark",
|
||||||
|
"short-name": "Ari's blogs",
|
||||||
"home-keywords": ["ari", "ari-web", "blog", "ari-archer", "foss", "free", "linux"],
|
"home-keywords": ["ari", "ari-web", "blog", "ari-archer", "foss", "free", "linux"],
|
||||||
"base-homepage": "https://ari-web.xyz/",
|
"base-homepage": "https://ari-web.xyz/",
|
||||||
|
"meta-icons": [{"src": "/favicon.ico", "sizes": "128x128", "type": "image/png"}],
|
||||||
|
"theme-colour": "#f9f6e8",
|
||||||
|
"background-colour": "#262220",
|
||||||
"blogs": {},
|
"blogs": {},
|
||||||
}
|
}
|
||||||
DEFAULT_CONFIG_FILE: str = "blog.json"
|
DEFAULT_CONFIG_FILE: str = "blog.json"
|
||||||
|
@ -126,6 +131,27 @@ def log(message: str, header: str = "ERROR", code: int = EXIT_ERR) -> int:
|
||||||
return code
|
return code
|
||||||
|
|
||||||
|
|
||||||
|
def generate_file_hash(filename: str):
|
||||||
|
hash_filename = filename + ".hash"
|
||||||
|
|
||||||
|
log(filename, "READ")
|
||||||
|
|
||||||
|
with open(filename, "rb") as file:
|
||||||
|
file_content = file.read()
|
||||||
|
|
||||||
|
log(hash_filename, "GENERATE")
|
||||||
|
|
||||||
|
with open(hash_filename, "w") as hash_file:
|
||||||
|
for hashf in hashlib.algorithms_available:
|
||||||
|
try:
|
||||||
|
print(
|
||||||
|
f"{hashf} {getattr(hashlib, hashf)(file_content).hexdigest()}",
|
||||||
|
file=hash_file,
|
||||||
|
)
|
||||||
|
except (TypeError, AttributeError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def sanitise_title(title: str, titleset: Dict) -> str:
|
def sanitise_title(title: str, titleset: Dict) -> str:
|
||||||
_title: str = ""
|
_title: str = ""
|
||||||
|
|
||||||
|
@ -242,8 +268,6 @@ def build(config: Dict) -> Tuple[int, Dict]:
|
||||||
if len(config["blogs"]) < 1:
|
if len(config["blogs"]) < 1:
|
||||||
return log("Cannot build no blogs"), config
|
return log("Cannot build no blogs"), config
|
||||||
|
|
||||||
code_timestamp = code_timer()
|
|
||||||
|
|
||||||
if os.path.isdir(config["blog-dir"]):
|
if os.path.isdir(config["blog-dir"]):
|
||||||
rmtree(config["blog-dir"])
|
rmtree(config["blog-dir"])
|
||||||
|
|
||||||
|
@ -351,10 +375,6 @@ def build(config: Dict) -> Tuple[int, Dict]:
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
log(
|
|
||||||
f"Successfully built blog page in {code_timer() - code_timestamp} seconds",
|
|
||||||
"TIME",
|
|
||||||
)
|
|
||||||
return EXIT_OK, config
|
return EXIT_OK, config
|
||||||
|
|
||||||
|
|
||||||
|
@ -501,6 +521,8 @@ def clean(config: Dict) -> Tuple[int, Dict]:
|
||||||
config["blog-dir"],
|
config["blog-dir"],
|
||||||
"index.html",
|
"index.html",
|
||||||
"content/*.min.*",
|
"content/*.min.*",
|
||||||
|
"*.hash",
|
||||||
|
"manifest.json",
|
||||||
}
|
}
|
||||||
|
|
||||||
def remove(file: str) -> None:
|
def remove(file: str) -> None:
|
||||||
|
@ -520,6 +542,51 @@ def clean(config: Dict) -> Tuple[int, Dict]:
|
||||||
return EXIT_OK, config
|
return EXIT_OK, config
|
||||||
|
|
||||||
|
|
||||||
|
def generate_metadata(config: Dict) -> Tuple[int, Dict]:
|
||||||
|
"""Generate metadata"""
|
||||||
|
|
||||||
|
with open("manifest.json", "w") as manifest:
|
||||||
|
log(f"Generating {manifest.name}...", "GENERATE")
|
||||||
|
json.dump(
|
||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
|
||||||
|
"short_name": config["short-name"],
|
||||||
|
"name": config["page-title"],
|
||||||
|
"description": config["page-description"],
|
||||||
|
"icons": config["meta-icons"],
|
||||||
|
"start_url": ".",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": config["theme-colour"],
|
||||||
|
"background_color": config["background-colour"],
|
||||||
|
},
|
||||||
|
manifest,
|
||||||
|
)
|
||||||
|
|
||||||
|
log(f"Hashing {manifest.name}", "HASH")
|
||||||
|
generate_file_hash(manifest.name)
|
||||||
|
|
||||||
|
log(f"Hashing {DEFAULT_CONFIG_FILE}", "HASH")
|
||||||
|
generate_file_hash(DEFAULT_CONFIG_FILE)
|
||||||
|
|
||||||
|
return EXIT_OK, config
|
||||||
|
|
||||||
|
|
||||||
|
def generate_static_full(config: Dict) -> Tuple[int, Dict]:
|
||||||
|
"""Generate full static site"""
|
||||||
|
|
||||||
|
build_cfg: Dict = {
|
||||||
|
"Cleaning up": clean,
|
||||||
|
"Building static site": build,
|
||||||
|
"Generating metatata": generate_metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
for logger_msg, function in build_cfg.items():
|
||||||
|
log(f"{logger_msg}...", "STATIC")
|
||||||
|
_, config = function(config)
|
||||||
|
|
||||||
|
return EXIT_OK, config
|
||||||
|
|
||||||
|
|
||||||
SUBCOMMANDS: Dict = {
|
SUBCOMMANDS: Dict = {
|
||||||
"help": dummy,
|
"help": dummy,
|
||||||
"new": new_blog,
|
"new": new_blog,
|
||||||
|
@ -529,6 +596,8 @@ SUBCOMMANDS: Dict = {
|
||||||
"edit": edit,
|
"edit": edit,
|
||||||
"new-config": gen_new_config,
|
"new-config": gen_new_config,
|
||||||
"clean": clean,
|
"clean": clean,
|
||||||
|
"metadata": generate_metadata,
|
||||||
|
"static": generate_static_full,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -567,8 +636,12 @@ def main() -> int:
|
||||||
return usage(EXIT_OK)
|
return usage(EXIT_OK)
|
||||||
|
|
||||||
with open(DEFAULT_CONFIG_FILE, "r") as lcfg:
|
with open(DEFAULT_CONFIG_FILE, "r") as lcfg:
|
||||||
|
cmd_time_init = code_timer()
|
||||||
|
|
||||||
code, config = SUBCOMMANDS[sys.argv[1]](config=json.load(lcfg))
|
code, config = SUBCOMMANDS[sys.argv[1]](config=json.load(lcfg))
|
||||||
|
|
||||||
|
log(f"Finished in {code_timer() - cmd_time_init} seconds with code {code}", "TIME")
|
||||||
|
|
||||||
if config["blogs"]:
|
if config["blogs"]:
|
||||||
log("Sorting blogs by creation time...", "CLEANUP")
|
log("Sorting blogs by creation time...", "CLEANUP")
|
||||||
config["blogs"] = dict(
|
config["blogs"] = dict(
|
||||||
|
|
Loading…
Add table
Reference in a new issue