jimsite/testbench.ipynb

212 lines
5.9 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "dda60de8",
"metadata": {},
"source": [
"## Roadmap\n",
"\n",
"- [x] Load markdown\n",
"- [] Determine static website structure\n",
" - Where to put assets for subsites like dogma jimfinium\n",
" - How to otherwise organize pages\n",
"- [x] ~~Resolve markdown links~~\n",
"- [] Consider separating article templates and overall page templates\n",
"- [] RSS feed\n",
"\n",
"\n",
"WEBROOT\n",
"- assets\n",
"- main pages\n",
"- resume\n",
"- dogma-jimfinium/\n",
" - assets/\n",
" - pages"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "207d2510",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import markdown\n",
"import yaml\n",
"import subprocess\n",
"\n",
"\n",
"from datetime import datetime\n",
"from main import *"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "d2361c42",
"metadata": {},
"outputs": [],
"source": [
"metadata, content = load_markdown('tmp/dogma-jimfinium/blowouts.md')\n",
"content = content.replace('src=\"assets', 'src=\"../tmp/dogma-jimfinium/assets')"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "ed7b3b2f",
"metadata": {},
"outputs": [],
"source": [
"PARTIALS = load_partials()\n",
"html = format_html_template('templates/blog_post.html', content = content, **{'metadata__'+k:v for k,v in metadata.items()}, **PARTIALS)\n",
"with open('dist/home.html', 'w') as f:\n",
" f.write(html)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b8c87620",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "57383c24",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2025-12-01\n"
]
},
{
"data": {
"text/plain": [
"CompletedProcess(args=['cp', 'build/resume/2025-12-01/shepich_resume.pdf', 'dist/shepich_resume.pdf'], returncode=0, stdout=b'', stderr=b'')"
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": 58,
"id": "944a5efd",
"metadata": {},
"outputs": [],
"source": [
"run(f'rm -rf dist/dogma-jimfinium && mkdir -p dist/dogma-jimfinium')\n",
"run(f'cp -r build/dogma-jimfinium/assets dist/dogma-jimfinium')\n",
"\n",
"index = {}\n",
"\n",
"for article in os.listdir('build/dogma-jimfinium'):\n",
" metadata, content = load_markdown(f'build/dogma-jimfinium/{article}')\n",
"\n",
" # Skip unpublished articles.\n",
" if not metadata.get('published'):\n",
" continue\n",
"\n",
" article_filestem = os.path.splitext(article)[0]\n",
"\n",
" # Add the article to the index.\n",
" index[article_filestem] = (metadata, content)\n",
"\n",
" # Interpolate the article contents into the webpage template.\n",
" article_html = format_html_template(\n",
" 'templates/components/blog_article.html',\n",
" content = content,\n",
" blog_tags = ' '.join(format_blog_tags(metadata['tags'])),\n",
" **{'metadata__'+k:v for k,v in metadata.items()}\n",
" )\n",
" html = format_html_template('templates/simple.html', content = article_html, **PARTIALS)\n",
" \n",
" # Write the HTML file to /dist/dogma-jimfinium.\n",
" with open(f'dist/dogma-jimfinium/{article_filestem}.html', 'w') as f:\n",
" f.write(html)\n",
"\n",
"\n",
"index_html = build_blog_archive(index, metadata__title = 'Dogma Jimfinium | Index')\n",
"# Write the HTML file to /dist/dogma-jimfinium.\n",
"with open(f'dist/dogma-jimfinium/index.html', 'w') as f:\n",
" f.write(index_html)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e32458c7",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "e3171afd",
"metadata": {},
"outputs": [],
"source": [
"def build_blog_archive(index: dict[str, tuple[str, str]], template = 'templates/simple.html', **kwargs) -> str:\n",
" '''Converts an index, formatted as filestem: (metadata, contents) dict,\n",
" into an HTML page containing the list of articles, sorted from newest to oldest.'''\n",
"\n",
" # Add each article in the format `YYYY-MM-DD - Title`\n",
" index_html_content = '<ul>'\n",
" for article, (metadata, contents) in sorted(index.items(), key = lambda item: item[1][0]['date'])[::-1]:\n",
" blog_tags = ' '.join(format_blog_tags(metadata['tags']))\n",
" index_html_content += format_html_template(\n",
" 'templates/components/blog_archive_li.html',\n",
" article_filestem = article,\n",
" blog_tags = blog_tags,\n",
" **{'metadata__'+k:v for k,v in metadata.items()}\n",
" \n",
" )\n",
" index_html_content +='</ul>'\n",
"\n",
" index_html_page = format_html_template(\n",
" template, \n",
" content = index_html_content, \n",
" **kwargs,\n",
" **PARTIALS\n",
" )\n",
" \n",
" return index_html_page"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}