From 4af56f8cd8a75382cdb358423a03f6e228008445 Mon Sep 17 00:00:00 2001 From: Samuel Jones Date: Fri, 29 May 2026 11:43:24 +0100 Subject: [PATCH] Draft of constructor to merge ./media files into a single HTML string object. 'theme.css' is also scanned to apply future styling. The next focus is a request handler which serves this content. --- README.md | 0 media/site_content/2022-01 Team Project.txt | 1 + .../2023-01 Quarkonium Energies.txt | 1 + media/site_content/2023-02 Qubit Dynamics.txt | 1 + .../site_content/2024-01 Advanced Optics.txt | 1 + .../2024-02 Business Analytics.txt | 1 + media/site_content/2025-01 Data Analytics.txt | 1 + .../2026-01 Revenue Management.txt | 1 + media/site_content/2026-02 Homelabbing.txt | 1 + media/site_content/2026-03 Tiny Bookshop.txt | 1 + media/site_content/Abstract.txt | 1 + media/site_content/Footer.txt | 1 + media/site_content/Template.txt | 21 +++++++ media/theme.css | 0 pyproject.toml | 15 +++++ src/personal_site/__init__.py | 0 src/personal_site/__main__.py | 4 ++ src/personal_site/constructor.py | 61 +++++++++++++++++++ 18 files changed, 112 insertions(+) create mode 100644 README.md create mode 100644 media/site_content/2022-01 Team Project.txt create mode 100644 media/site_content/2023-01 Quarkonium Energies.txt create mode 100644 media/site_content/2023-02 Qubit Dynamics.txt create mode 100644 media/site_content/2024-01 Advanced Optics.txt create mode 100644 media/site_content/2024-02 Business Analytics.txt create mode 100644 media/site_content/2025-01 Data Analytics.txt create mode 100644 media/site_content/2026-01 Revenue Management.txt create mode 100644 media/site_content/2026-02 Homelabbing.txt create mode 100644 media/site_content/2026-03 Tiny Bookshop.txt create mode 100644 media/site_content/Abstract.txt create mode 100644 media/site_content/Footer.txt create mode 100644 media/site_content/Template.txt create mode 100644 media/theme.css create mode 100644 pyproject.toml create mode 100644 src/personal_site/__init__.py create mode 100644 src/personal_site/__main__.py create mode 100644 src/personal_site/constructor.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/media/site_content/2022-01 Team Project.txt b/media/site_content/2022-01 Team Project.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2022-01 Team Project.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2023-01 Quarkonium Energies.txt b/media/site_content/2023-01 Quarkonium Energies.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2023-01 Quarkonium Energies.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2023-02 Qubit Dynamics.txt b/media/site_content/2023-02 Qubit Dynamics.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2023-02 Qubit Dynamics.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2024-01 Advanced Optics.txt b/media/site_content/2024-01 Advanced Optics.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2024-01 Advanced Optics.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2024-02 Business Analytics.txt b/media/site_content/2024-02 Business Analytics.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2024-02 Business Analytics.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2025-01 Data Analytics.txt b/media/site_content/2025-01 Data Analytics.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2025-01 Data Analytics.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2026-01 Revenue Management.txt b/media/site_content/2026-01 Revenue Management.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2026-01 Revenue Management.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2026-02 Homelabbing.txt b/media/site_content/2026-02 Homelabbing.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2026-02 Homelabbing.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/2026-03 Tiny Bookshop.txt b/media/site_content/2026-03 Tiny Bookshop.txt new file mode 100644 index 0000000..db55aa0 --- /dev/null +++ b/media/site_content/2026-03 Tiny Bookshop.txt @@ -0,0 +1 @@ +Lorum ipsum, whatever else... diff --git a/media/site_content/Abstract.txt b/media/site_content/Abstract.txt new file mode 100644 index 0000000..217b787 --- /dev/null +++ b/media/site_content/Abstract.txt @@ -0,0 +1 @@ +Hello my name Sam etc. diff --git a/media/site_content/Footer.txt b/media/site_content/Footer.txt new file mode 100644 index 0000000..30655e2 --- /dev/null +++ b/media/site_content/Footer.txt @@ -0,0 +1 @@ +Bye bye and some other stuff. diff --git a/media/site_content/Template.txt b/media/site_content/Template.txt new file mode 100644 index 0000000..1640b83 --- /dev/null +++ b/media/site_content/Template.txt @@ -0,0 +1,21 @@ + + + + + + +
+ + + + + + + +
+ + diff --git a/media/theme.css b/media/theme.css new file mode 100644 index 0000000..e69de29 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6d578cc --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "personal-site" +version = "0.1.0" +description = "" +authors = [ + {name = "Samuel Jones",email = "samuel@williamjones.me"} +] +requires-python = ">=3.14" +dependencies = [ +] + + +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/src/personal_site/__init__.py b/src/personal_site/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/personal_site/__main__.py b/src/personal_site/__main__.py new file mode 100644 index 0000000..a22dff6 --- /dev/null +++ b/src/personal_site/__main__.py @@ -0,0 +1,4 @@ +from personal_site.constructor import main + +if __name__ == "__main__": + main() diff --git a/src/personal_site/constructor.py b/src/personal_site/constructor.py new file mode 100644 index 0000000..8fee7d0 --- /dev/null +++ b/src/personal_site/constructor.py @@ -0,0 +1,61 @@ +""" +This module is charged with parsing the project's content files. +From this, we can construct our dynamic HTML. +""" + +# Imports +from pathlib import Path + + +# Init. +CONTENTS_DIR = Path(__file__).parents[2] / "media/site_content/" +THEME_PATH = Path(__file__).parents[2] / "media/theme.css" + + +# Functions +def read_file(path: Path) -> str: + with open(path, "r") as rf: + return "".join(rf.readlines()) + + +def construct_site( + contents_dir: Path = CONTENTS_DIR, + theme_path: Path = THEME_PATH, +) -> str: + paths = [path for path in contents_dir.iterdir() if path.suffix == ".txt"] + potential_template_path = [path for path in paths if path.stem == "Template"] + assert (_l := len(potential_template_path)) == 1, ( + f"`Template.txt`s found: {_l} (!= 1)." + ) + output = read_file(potential_template_path[0]) + output = output.replace("", read_file(theme_path)) + for path in sorted(paths): + match path.stem: + case "Template": + continue + case "Abstract": + output = output.replace( + "", + '\n
\n' + read_file(path) + "
", + ) + continue + case "Footer": + output = output.replace( + "", + '\n", + ) + continue + case _: + ... + new_text = '\n
\n' + read_file(path) + "
\n" + output = output.replace((_s := ""), new_text + _s) + return output.replace("", "") + + +# Script +def main(): + print(construct_site()) + + +if __name__ == "__main__": + main()