mirror of
https://git.ari.lt/ari.lt/blog.ari.lt.git
synced 2025-02-04 17:49:24 +01:00
api change -- dont use base64 encoding, add recents.json api
Signed-off-by: Ari Archer <ari.web.xyz@gmail.com>
This commit is contained in:
parent
aedec19462
commit
d013723e8b
4 changed files with 207 additions and 188 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -8,4 +8,5 @@ venv/
|
||||||
.ccls-cache/
|
.ccls-cache/
|
||||||
/blog_json_hash.txt
|
/blog_json_hash.txt
|
||||||
/manifest.json
|
/manifest.json
|
||||||
|
/recents_json_hash.txt
|
||||||
|
/recents.json
|
||||||
|
|
322
blog.json
322
blog.json
File diff suppressed because one or more lines are too long
14
netlify.toml
14
netlify.toml
|
@ -93,6 +93,20 @@
|
||||||
Access-Control-Allow-Origin = "*"
|
Access-Control-Allow-Origin = "*"
|
||||||
Access-Control-Allow-Methods = "GET"
|
Access-Control-Allow-Methods = "GET"
|
||||||
|
|
||||||
|
[[headers]]
|
||||||
|
for = "/recents_json_hash.txt"
|
||||||
|
|
||||||
|
[headers.values]
|
||||||
|
Access-Control-Allow-Origin = "*"
|
||||||
|
Access-Control-Allow-Methods = "GET"
|
||||||
|
|
||||||
|
[[headers]]
|
||||||
|
for = "/recents.json"
|
||||||
|
|
||||||
|
[headers.values]
|
||||||
|
Access-Control-Allow-Origin = "*"
|
||||||
|
Access-Control-Allow-Methods = "GET"
|
||||||
|
|
||||||
[[headers]]
|
[[headers]]
|
||||||
for = "/*"
|
for = "/*"
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import random
|
||||||
import string
|
import string
|
||||||
import sys
|
import sys
|
||||||
import xml.etree.ElementTree as etree
|
import xml.etree.ElementTree as etree
|
||||||
from base64 import b64decode, b64encode
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from glob import iglob
|
from glob import iglob
|
||||||
from html import escape as html_escape
|
from html import escape as html_escape
|
||||||
|
@ -473,7 +472,7 @@ def pick_blog(config: Dict[str, Any]) -> str:
|
||||||
FzfPrompt()
|
FzfPrompt()
|
||||||
.prompt( # pyright: ignore
|
.prompt( # pyright: ignore
|
||||||
map(
|
map(
|
||||||
lambda key: f"{key} | {b64decode(config['blogs'][key]['title']).decode()!r}", # pyright: ignore
|
lambda key: f"{key} | {config['blogs'][key]['title']!r}", # pyright: ignore
|
||||||
tuple(config["blogs"].keys())[::-1],
|
tuple(config["blogs"].keys())[::-1],
|
||||||
),
|
),
|
||||||
"--prompt='pick a post : '",
|
"--prompt='pick a post : '",
|
||||||
|
@ -495,7 +494,7 @@ def new_blog(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
"""make a new blog"""
|
"""make a new blog"""
|
||||||
|
|
||||||
if title := iinput("blog post title"):
|
if title := iinput("blog post title"):
|
||||||
readline.add_history((title := title[0].upper() + title[1:]))
|
readline.add_history((title := title.capitalize()))
|
||||||
|
|
||||||
us_title: str = title
|
us_title: str = title
|
||||||
s_title: str = sanitise_title(us_title, config["blogs"])
|
s_title: str = sanitise_title(us_title, config["blogs"])
|
||||||
|
@ -503,7 +502,7 @@ def new_blog(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
return EXIT_ERR, config
|
return EXIT_ERR, config
|
||||||
|
|
||||||
blog: Dict[str, Any] = {
|
blog: Dict[str, Any] = {
|
||||||
"title": b64encode(us_title.encode()).decode(),
|
"title": us_title,
|
||||||
"content": "",
|
"content": "",
|
||||||
"time": 0.0,
|
"time": 0.0,
|
||||||
"keywords": "",
|
"keywords": "",
|
||||||
|
@ -518,7 +517,7 @@ def new_blog(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
return log(f"{file!r} does not exist"), config
|
return log(f"{file!r} does not exist"), config
|
||||||
|
|
||||||
with open(file, "r") as md:
|
with open(file, "r") as md:
|
||||||
blog["content"] = b64encode(md.read().encode()).decode()
|
blog["content"] = md.read()
|
||||||
|
|
||||||
os.remove(file)
|
os.remove(file)
|
||||||
|
|
||||||
|
@ -599,7 +598,7 @@ def build(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
with open(os.path.join(blog_dir, "index.html"), "w") as blog_html:
|
with open(os.path.join(blog_dir, "index.html"), "w") as blog_html:
|
||||||
blog_time: str = format_time(blog_meta["time"])
|
blog_time: str = format_time(blog_meta["time"])
|
||||||
|
|
||||||
blog_title: str = html_escape(b64decode(blog_meta["title"]).decode())
|
blog_title: str = html_escape(blog_meta["title"])
|
||||||
|
|
||||||
blog_base_html: str = markdown(
|
blog_base_html: str = markdown(
|
||||||
BLOG_MARKDOWN_TEMPLATE
|
BLOG_MARKDOWN_TEMPLATE
|
||||||
|
@ -610,7 +609,7 @@ def build(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
config["base-homepage"],
|
config["base-homepage"],
|
||||||
config["git-url"],
|
config["git-url"],
|
||||||
markdown(
|
markdown(
|
||||||
b64decode(blog_meta["content"]).decode(),
|
blog_meta["content"],
|
||||||
extensions=[
|
extensions=[
|
||||||
*config["py-markdown-extensions"],
|
*config["py-markdown-extensions"],
|
||||||
AriMarkdownExts(),
|
AriMarkdownExts(),
|
||||||
|
@ -664,7 +663,7 @@ def build(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
blog_list = '<ol reversed="true" aria-label="latest blogs">'
|
blog_list = '<ol reversed="true" aria-label="latest blogs">'
|
||||||
|
|
||||||
for blog_id, blog_meta in reversed(config["blogs"].items()):
|
for blog_id, blog_meta in reversed(config["blogs"].items()):
|
||||||
blog_list += f'<li><a href="{os.path.join(config["blog-dir"], blog_id)}">{html_escape(b64decode(blog_meta["title"]).decode())}</a></li>'
|
blog_list += f'<li><a href="{os.path.join(config["blog-dir"], blog_id)}">{html_escape(blog_meta["title"])}</a></li>'
|
||||||
|
|
||||||
blog_list += "</ol>"
|
blog_list += "</ol>"
|
||||||
|
|
||||||
|
@ -680,7 +679,7 @@ def build(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
lastest_blog_time=lastest_blog_time,
|
lastest_blog_time=lastest_blog_time,
|
||||||
latest_blog_url=os.path.join(config["blog-dir"], latest_blog_id),
|
latest_blog_url=os.path.join(config["blog-dir"], latest_blog_id),
|
||||||
latest_blog_title=truncate_str(
|
latest_blog_title=truncate_str(
|
||||||
b64decode(html_escape(lastest_blog["title"])).decode(), 20
|
html_escape(lastest_blog["title"]), 20
|
||||||
),
|
),
|
||||||
git_url=config["git-url"],
|
git_url=config["git-url"],
|
||||||
content=blog_list,
|
content=blog_list,
|
||||||
|
@ -703,7 +702,7 @@ def list_blogs(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
for blog_id, blog_meta in config["blogs"].items():
|
for blog_id, blog_meta in config["blogs"].items():
|
||||||
print(
|
print(
|
||||||
f"""ID : {blog_id}
|
f"""ID : {blog_id}
|
||||||
title : {b64decode(blog_meta["title"]).decode()!r}
|
title : {blog_meta["title"]!r}
|
||||||
time_of_creation : {format_time(blog_meta["time"])}
|
time_of_creation : {format_time(blog_meta["time"])}
|
||||||
keywords : {blog_meta['keywords'].replace(" ", ", ")}
|
keywords : {blog_meta['keywords'].replace(" ", ", ")}
|
||||||
"""
|
"""
|
||||||
|
@ -735,22 +734,14 @@ def dummy(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
|
|
||||||
def edit_title(blog: str, config: Dict[str, Any]) -> int:
|
def edit_title(blog: str, config: Dict[str, Any]) -> int:
|
||||||
new_title: str = iinput(
|
new_title: str = iinput(
|
||||||
"edit title", b64decode(config["blogs"][blog]["title"]).decode()
|
"edit title",
|
||||||
|
config["blogs"][blog]["title"],
|
||||||
)
|
)
|
||||||
|
|
||||||
if not new_title.strip():
|
if not new_title.strip():
|
||||||
return log("new title cannot be empty")
|
return log("new title cannot be empty")
|
||||||
|
|
||||||
# Made it not change the slug
|
config["blogs"][blog]["title"] = new_title.capitalize()
|
||||||
|
|
||||||
# old_blog: dict = config["blogs"][blog].copy()
|
|
||||||
# old_blog["title"] = b64encode(new_title.encode()).decode()
|
|
||||||
# del config["blogs"][blog]
|
|
||||||
|
|
||||||
# config["blogs"][sanitise_title(new_title, config["blogs"])] = old_blog
|
|
||||||
# del old_blog
|
|
||||||
|
|
||||||
config["blogs"][blog]["title"] = b64encode(new_title.encode()).decode()
|
|
||||||
|
|
||||||
return EXIT_OK
|
return EXIT_OK
|
||||||
|
|
||||||
|
@ -770,7 +761,7 @@ def edit_content(blog: str, config: Dict[str, Any]) -> int:
|
||||||
file: str = tmp_path(f"{blog}.md")
|
file: str = tmp_path(f"{blog}.md")
|
||||||
|
|
||||||
with open(file, "w") as blog_md:
|
with open(file, "w") as blog_md:
|
||||||
blog_md.write(b64decode(config["blogs"][blog]["content"]).decode())
|
blog_md.write(config["blogs"][blog]["content"])
|
||||||
|
|
||||||
editor(config, file)
|
editor(config, file)
|
||||||
|
|
||||||
|
@ -781,7 +772,7 @@ def edit_content(blog: str, config: Dict[str, Any]) -> int:
|
||||||
blog_md_new.close()
|
blog_md_new.close()
|
||||||
return log("content of a blog post cannot be empty")
|
return log("content of a blog post cannot be empty")
|
||||||
|
|
||||||
config["blogs"][blog]["content"] = b64encode(content.encode()).decode()
|
config["blogs"][blog]["content"] = content
|
||||||
|
|
||||||
return EXIT_OK
|
return EXIT_OK
|
||||||
|
|
||||||
|
@ -846,6 +837,8 @@ def clean(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
"blog_json_hash.txt",
|
"blog_json_hash.txt",
|
||||||
"manifest.json",
|
"manifest.json",
|
||||||
"content/fonts/*.min.*",
|
"content/fonts/*.min.*",
|
||||||
|
"recents_json_hash.txt",
|
||||||
|
"recents.json",
|
||||||
}
|
}
|
||||||
|
|
||||||
def remove(file: str) -> None:
|
def remove(file: str) -> None:
|
||||||
|
@ -885,13 +878,18 @@ def generate_metadata(config: Dict[str, Any]) -> Tuple[int, Dict[str, Any]]:
|
||||||
manifest,
|
manifest,
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(DEFAULT_CONFIG_FILE, "rb") as blog_api_file:
|
with open("recents.json", "w") as blog_recents:
|
||||||
log(f"generating hash for {DEFAULT_CONFIG_FILE!r}", "HASH")
|
log(f"generating {blog_recents.name!r}", "GENERATE")
|
||||||
|
ujson.dump(dict(tuple(config["blogs"].items())[-5:]), blog_recents)
|
||||||
|
|
||||||
|
for hashable in (DEFAULT_CONFIG_FILE, blog_recents.name):
|
||||||
|
with open(hashable, "rb") as api_file:
|
||||||
|
log(f"generating hash for {api_file.name!r}", "HASH")
|
||||||
|
|
||||||
with open(
|
with open(
|
||||||
f"{DEFAULT_CONFIG_FILE.replace('.', '_')}_hash.txt", "w"
|
f"{api_file.name.replace('.', '_')}_hash.txt", "w"
|
||||||
) as blog_api_hash:
|
) as blog_api_hash:
|
||||||
blog_api_hash.write(hashlib.sha256(blog_api_file.read()).hexdigest())
|
blog_api_hash.write(hashlib.sha256(api_file.read()).hexdigest())
|
||||||
|
|
||||||
return EXIT_OK, config
|
return EXIT_OK, config
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue