From 379f6a42736c7f218187797c0249f017cd18c8ae Mon Sep 17 00:00:00 2001
From: Henrik Jess Nielsen
Date: Wed, 11 Dec 2024 21:14:52 +0100
Subject: [PATCH] Lets test
---
app.py | 224 +++++++++++----------------
data/bolig/lidt_omkring_boliger.html | 5 +-
data/bolig/lidt_omkring_boliger.md | 10 +-
templates/base_template.html | 1 -
templates/index.html | 2 +-
5 files changed, 104 insertions(+), 138 deletions(-)
diff --git a/app.py b/app.py
index 41dd508..8d56901 100644
--- a/app.py
+++ b/app.py
@@ -1,144 +1,100 @@
from fastapi import FastAPI, Request
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
-import json
-import os
-from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from contextlib import asynccontextmanager
+import json
+import os
from markdown_render import render_markdown_with_jinja
-from starlette.middleware.httpsredirect import HTTPSRedirectMiddleware
+class App:
+ def __init__(self):
+ """Initialize the FastAPI app."""
+ self.app = FastAPI(lifespan=self.lifespan)
+ self.templates = Jinja2Templates(directory="templates")
+ self.data = self.load_mock_data()
+
+ # Mount directories
+ self.app.mount("/data", StaticFiles(directory="data"), name="data")
+ self.app.mount("/static", StaticFiles(directory="static"), name="static")
+
+ # Add routes
+ self.add_routes()
+
+ # 1. Lifespan events
+ @asynccontextmanager
+ async def lifespan(self, app: FastAPI):
+ print("App startup: Processing Markdown files...")
+ self.process_markdown_files("./data", "./data") # Process all Markdown files
+ print("Markdown processing complete!")
+ yield # Allow the app to start
+ print("App shutdown: Cleanup complete.")
+
+ # 2. Load JSON data
+ def load_mock_data(self):
+ """Load mock data from a JSON file."""
+ with open("mock_data.json") as file:
+ return json.load(file)
+
+ # 3. Markdown processing logic
+ @staticmethod
+ def process_markdown_files(input_dir: str, output_dir: str):
+ """
+ Recursively process all Markdown files in the input directory,
+ render them to HTML, and save them in the output directory.
+ """
+ for root, _, files in os.walk(input_dir):
+ for file in files:
+ if file.endswith(".md"):
+ input_file_path = os.path.join(root, file)
+ relative_path = os.path.relpath(input_file_path, input_dir)
+ output_file_path = os.path.join(output_dir, os.path.splitext(relative_path)[0] + ".html")
+
+ os.makedirs(os.path.dirname(output_file_path), exist_ok=True)
+
+ with open(input_file_path, "r", encoding="utf-8") as md_file:
+ markdown_content = md_file.read()
+
+ print(f"Processing: {input_file_path} -> {output_file_path}")
+ rendered_html = render_markdown_with_jinja(markdown_content)
+
+ with open(output_file_path, "w", encoding="utf-8") as html_file:
+ html_file.write(rendered_html)
+
+ # 4. Routes
+ def add_routes(self):
+ """Add all routes to the FastAPI app."""
+ @self.app.get("/", response_class=HTMLResponse)
+ async def get_index(request: Request):
+ """Index route."""
+ return self.templates.TemplateResponse(
+ "index.html",
+ {"request": request, "data": self.data, "page_title": "Forside", "author": "Henrik"},
+ )
+
+ @self.app.get("/category/{category_name}", response_class=HTMLResponse)
+ async def get_category(request: Request, category_name: str):
+ """Category route."""
+ category = next((cat for cat in self.data["categories"] if cat["path"] == category_name), None)
+ if category:
+ category_file = f"data/{category_name}/index.html"
+ if os.path.exists(category_file):
+ with open(category_file) as file:
+ category_content = file.read()
+ return self.templates.TemplateResponse(
+ "category.html",
+ {
+ "request": request,
+ "data": self.data,
+ "page_title": category["name"],
+ "author": category["author"],
+ "content": category_content,
+ },
+ )
+ return HTMLResponse("Kategori ikke fundet", status_code=404)
-
-# Context manager for app lifespan
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- print("App startup: Processing Markdown files...")
- process_markdown_files("./data", "./data") # Process all Markdown files
- print("Markdown processing complete!")
- yield # Allow the app to start
- print("App shutdown: Cleanup complete.")
-
-app = FastAPI(lifespan=lifespan)
-app.mount("/data", StaticFiles(directory="data"), name="data")
-
-
-# Mount static files
-app.mount("/static", StaticFiles(directory="static"), name="static")
-
-
-# Templates directory
-templates = Jinja2Templates(directory="templates")
-
-# Load JSON data
-with open("mock_data.json") as file:
- data = json.load(file)
-
-@app.get("/test", response_class=HTMLResponse)
-async def home_test():
- # Load the Markdown content from a file
- with open("templates/example.md", "r") as f:
- markdown_content = f.read()
-
- # Render Markdown first, then inject Jinja2 components
- rendered_html = render_markdown_with_jinja(markdown_content)
-
- # Wrap in a base HTML layout
- html_template = f"""
-
-
-
-
-
- Markdown + Jinja2
-
-
-
-
- {rendered_html}
-
-
-
- """
- return HTMLResponse(content=html_template)
-
-def process_markdown_files(input_dir: str, output_dir: str):
- """
- Recursively process all Markdown files in the input directory,
- render them to HTML, and save them in the output directory.
- """
- for root, _, files in os.walk(input_dir):
- for file in files:
- if file.endswith(".md"):
- input_file_path = os.path.join(root, file)
-
- # Determine output file path (convert .md to .html)
- relative_path = os.path.relpath(input_file_path, input_dir)
- output_file_path = os.path.join(output_dir, os.path.splitext(relative_path)[0] + ".html")
-
- # Ensure the output directory exists
- os.makedirs(os.path.dirname(output_file_path), exist_ok=True)
-
- # Read Markdown content
- with open(input_file_path, "r", encoding="utf-8") as md_file:
- markdown_content = md_file.read()
-
- # Render Markdown with Jinja2
- print(f"Processing: {input_file_path} -> {output_file_path}")
- rendered_html = render_markdown_with_jinja(markdown_content)
-
- # Write the rendered HTML to the output file
- with open(output_file_path, "w", encoding="utf-8") as html_file:
- html_file.write(rendered_html)
-
-
-# Index route
-@app.get("/", response_class=HTMLResponse)
-async def get_index(request: Request):
- return templates.TemplateResponse(
- "index.html",
- {"request": request, "data": data, "page_title": "Forside", "author": "Henrik"}
- )
-
-@app.get("/sitemap", response_class=HTMLResponse)
-async def sitemap():
- """Simple home page listing available HTML files."""
- links = []
- for root, _, files in os.walk("./data"):
- for file in files:
- if file.endswith(".html"):
- relative_path = os.path.relpath(os.path.join(root, file), "./data")
- link = f"{relative_path}"
- links.append(link)
- links_html = " ".join(links)
- return HTMLResponse(content=f"
Available Pages
{links_html}")
-
-# Category route
-@app.get("/category/{category_name}", response_class=HTMLResponse)
-async def get_category(request: Request, category_name: str):
- # Find den korrekte kategori
- category = next((cat for cat in data["categories"] if cat["path"] == category_name), None)
- if category:
- category_file = f"data/{category_name}/index.html"
- if os.path.exists(category_file):
- with open(category_file) as file:
- category_content = file.read()
- return templates.TemplateResponse(
- "category.html",
- {
- "request": request,
- "data": data,
- "page_title": category["name"],
- "author": category["author"],
- "content": category_content
- },
- )
- return HTMLResponse("Kategori ikke fundet", status_code=404)
\ No newline at end of file
+# Create the app instance
+app_instance = App()
+app = app_instance.app
diff --git a/data/bolig/lidt_omkring_boliger.html b/data/bolig/lidt_omkring_boliger.html
index 4e50e0e..90d9605 100644
--- a/data/bolig/lidt_omkring_boliger.html
+++ b/data/bolig/lidt_omkring_boliger.html
@@ -1,7 +1,10 @@
+
PortugalFAQ - Henriks og Erikas lille side
+
BoligBolig Bolig Bolig - Hvor skal sengen placeres
Nu bliver det spænde!
Dette er stadig en test side
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/data/bolig/lidt_omkring_boliger.md b/data/bolig/lidt_omkring_boliger.md
index 510e1de..b4a1eb0 100644
--- a/data/bolig/lidt_omkring_boliger.md
+++ b/data/bolig/lidt_omkring_boliger.md
@@ -1,5 +1,13 @@
+
+{% block title %}PortugalFAQ - Henriks og Erikas lille side{% endblock %}
+
+{% block content %}
+
+
# BoligBolig Bolig Bolig - Hvor skal sengen placeres
Nu bliver det spænde!
-{{ note("Dette er stadig en test side") }}
\ No newline at end of file
+{{ note("Dette er stadig en test side") }}
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/base_template.html b/templates/base_template.html
index e2d3479..3ceff48 100644
--- a/templates/base_template.html
+++ b/templates/base_template.html
@@ -4,7 +4,6 @@
{% block title %}PortugalFAQ{% endblock %}
-
diff --git a/templates/index.html b/templates/index.html
index 5fefff4..8facb2b 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -10,7 +10,7 @@
-
+