From: Max Value Date: Tue, 2 Dec 2025 11:15:28 +0000 (+0000) Subject: Reset blog for chester X-Git-Url: https://git.ozva.co.uk/?a=commitdiff_plain;h=369c70688d75b3c26ef1559e1856d5097bbfb7e1;p=chester Reset blog for chester --- diff --git a/.gitignore b/.gitignore index 5ccf808..3b47b50 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ .venv/ -__pycache__/ -blog.egg-info/ -build/ +*.egg-info/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5ac3925 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +all : .venv/touchfile + +.venv/touchfile : requirements.txt + python3 -m venv .venv + .venv/bin/pip install -r requirements.txt + .venv/bin/pip install ./site + #touch .venv/touchfile + diff --git a/blog.py b/blog.py deleted file mode 100755 index 1dac215..0000000 --- a/blog.py +++ /dev/null @@ -1,242 +0,0 @@ -#! .venv/bin/python3 - -from flask import Flask, Response, request, render_template_string, redirect, send_from_directory -import markdown -from os import listdir, environ -from os.path import getmtime -from markdown.extensions.toc import TocExtension -import re -import mmap -import time -from git import Repo - -app = Flask(__name__) -md = markdown.Markdown(extensions = ['meta', 'tables', 'footnotes', TocExtension(title = "Table of contents")]) - -blog_path = environ["BLOG_PATH"] - -repo = Repo.init(blog_path) - -class Page(): - def __init__( - self, - title: str = "Unamed page", - abstract: str = "", - keywords: list = ["Undefined"], - date: str = "n.d.", - content: str = "", - template: str = "page.html", - filename: str = "" - ): - - self.title = title - self.abstract = abstract - self.keywords = keywords - self.date = date - self.content = content - self.template = template - self.filename = filename - - def from_metadata(self, metadata): - if "title" in metadata: self.title = metadata["title"].title() - if "abstract" in metadata: self.abstract = metadata["abstract"] - if "keywords" in metadata: self.keywords = [x.strip().title() for x in metadata["keywords"].split(",")] - if "date" in metadata: self.date = metadata["date"] - - def make(self): - format_keywords = " - ".join([f"{key}" for key in self.keywords]) - - template_string = open(f"{blog_path}/templates/{self.template}", "r").read() - - history = get_history(6) - with open(f"{blog_path}/templates/sidebar.md", "r") as f: - sidebar = md.convert(f.read()) - - page = render_template_string( - template_string, - title = self.title, - date = self.date, - abstract = self.abstract, - keywords = format_keywords, - content = self.content, - filename = self.filename, - history = history, - sidebar = sidebar - ) - - return Response(page, mimetype="text/html") - -def get_plaintext(file_name: str): - page = open(f"{blog_path}/pages/{file_name}", "r").read() - return re.sub( - r"((?[\S ]*)|(``*)", - "", - page) - -def get_metadata(file_name: str): - title = "Untitled post" - abstract = "..." - keywords = ["Undefined"] - - with open(f"{blog_path}/pages/{file_name}", "r") as f: - while keywords == ["Undefined"]: - line = f.readline().split(":") # Split metdata into [key, value] - if len(line) == 2: # len != 2 when metadata block is over - key, value = line - match key: - case "title": - title = value.strip().title() - case "abstract": - abstract = value.strip() - case "keywords": - keywords = [x.strip() for x in value.split(",")] - else: - break - - return title, abstract, keywords - -def get_history(n): - commits = list(repo.iter_commits("main", max_count=n)) - commits_string = "" - for c in commits: - time_string = time.strftime("%d %b %Y", time.gmtime(c.committed_date)) - link = f"https://git.ozva.co.uk/?p=blog;a=commit;h={c.hexsha}" - commits_string += f"⛁ {time_string} {c.message}
" - - return "

" + commits_string + "

" - -def get_recent(n): - modification_times = {file_name: getmtime(f"{blog_path}/pages/{file_name}") for file_name in listdir(f"{blog_path}/pages")} - pages = sorted(modification_times.items(), key=lambda x: x[1])[:n] - - content = "

Recent Posts

" - - return content - -@app.route("/") -def homepage(): - with open(f"{blog_path}/templates/homepage.md", "r") as f: - homepage = md.convert(f.read()) - - page = Page( - title = "Home", - abstract = "Blog and portfolio of Will Greenwood.", - keywords = [], - date = "", - content = homepage + get_recent(10), - template = "page.html" - ) - return page.make() - -@app.route("/search") -def get_search(): - search = request.args.get("name") - - results = 0 - content = f"

Search '{search}'

No results found

" - else: - content += f"

{results} results found

" - - page = Page( - title = "Post search", - date = "", - keywords = [], - content = content - ) - return page.make() - -@app.route("/categories") -def get_categories(): - name = request.args.get("name") - index = {} - - if name == "all": - return redirect("/categories") - - for file_name in listdir(f"{blog_path}/pages"): - title, abstract, keywords = get_metadata(file_name) - - entry = {"title": title, "abstract": abstract, "path": f"/{file_name[:-3]}"} - for key in keywords: - if key in index: - index[key] += [entry] - - elif name is None: - index.update({key: [entry]}) - - elif key.lower() == name.lower(): - index.update({key: [entry]}) - - content = "" - for c in index: - content += f"

{c.title()}

" - - page = Page( - title = "Keyword search", - abstract = "Click on a keyword to see all pages tagged with that keyword.", - date = "", - keywords = [c.title() for c in index] + ["All"], - content = content - ) - return page.make() - -@app.route("/") -def generate_page(title): - title = title.replace("/", "") - try: - with open(f"{blog_path}/pages/{title}.md", "r") as f: - html = md.convert(f.read()) - metadata = {k: v[0] for k, v in md.Meta.items()} - md.reset() - - page = Page(content = html, filename = title) - page.from_metadata(metadata) - return page.make() - - except FileNotFoundError: - page = Page(title = "404", abstract = "Page not found!") - return page.make() - -@app.route("//") -def get_media(title, filename): - return send_from_directory(f"{blog_path}/media/{title}", filename) - -if __name__ == "__main__": - app.run(host='127.0.0.1', port=5000, debug=True) diff --git a/media/bayeux/bayeux.mp3 b/media/bayeux/bayeux.mp3 deleted file mode 100644 index f0e13f4..0000000 Binary files a/media/bayeux/bayeux.mp3 and /dev/null differ diff --git a/media/bayeux/bayeux1.png b/media/bayeux/bayeux1.png deleted file mode 100644 index 64898fc..0000000 Binary files a/media/bayeux/bayeux1.png and /dev/null differ diff --git a/media/bayeux/bayeux2.png b/media/bayeux/bayeux2.png deleted file mode 100644 index 77f0e93..0000000 Binary files a/media/bayeux/bayeux2.png and /dev/null differ diff --git a/media/bayeux/bayeux3.png b/media/bayeux/bayeux3.png deleted file mode 100644 index 2bf63fe..0000000 Binary files a/media/bayeux/bayeux3.png and /dev/null differ diff --git a/media/bread/banner.png b/media/bread/banner.png deleted file mode 100644 index 131509e..0000000 Binary files a/media/bread/banner.png and /dev/null differ diff --git a/media/homepage/challah.jpg b/media/homepage/challah.jpg deleted file mode 100644 index e7caee7..0000000 Binary files a/media/homepage/challah.jpg and /dev/null differ diff --git a/media/homepage/fruit.jpg b/media/homepage/fruit.jpg deleted file mode 100644 index 44f5ddb..0000000 Binary files a/media/homepage/fruit.jpg and /dev/null differ diff --git a/media/plotter/drawing.jpg b/media/plotter/drawing.jpg deleted file mode 100644 index e0915b0..0000000 Binary files a/media/plotter/drawing.jpg and /dev/null differ diff --git a/media/plotter/minkey.jpg b/media/plotter/minkey.jpg deleted file mode 100644 index 0b7e4b1..0000000 Binary files a/media/plotter/minkey.jpg and /dev/null differ diff --git a/media/sidebar/iiw1.jpeg b/media/sidebar/iiw1.jpeg deleted file mode 100644 index fcf9a51..0000000 Binary files a/media/sidebar/iiw1.jpeg and /dev/null differ diff --git a/media/sidebar/iiw2.jpeg b/media/sidebar/iiw2.jpeg deleted file mode 100644 index 51b4e9c..0000000 Binary files a/media/sidebar/iiw2.jpeg and /dev/null differ diff --git a/media/smoked/ciabatta.jpg b/media/smoked/ciabatta.jpg deleted file mode 100644 index d972534..0000000 Binary files a/media/smoked/ciabatta.jpg and /dev/null differ diff --git a/media/stft/demo.jpg b/media/stft/demo.jpg deleted file mode 100644 index 579fb20..0000000 Binary files a/media/stft/demo.jpg and /dev/null differ diff --git a/media/stft/forest.jpg b/media/stft/forest.jpg deleted file mode 100644 index 5dd7357..0000000 Binary files a/media/stft/forest.jpg and /dev/null differ diff --git a/media/weber/weber.jpg b/media/weber/weber.jpg deleted file mode 100644 index 16c91aa..0000000 Binary files a/media/weber/weber.jpg and /dev/null differ diff --git a/pages/bayeux.md b/pages/bayeux.md deleted file mode 100644 index f360ef3..0000000 --- a/pages/bayeux.md +++ /dev/null @@ -1,73 +0,0 @@ -title: An Audio Bayeux Tapestry -abstract: With the power of technology, the Bayeux tapestry is now avaiable for the blind. -keywords: programming,audio -date: 16/12/2024 - -# An Audio Bayeux Tapestry - -Hello! - -With the power of technology, the Bayeux tapestry is now avaiable for the blind. - -