From 73889a9a82286f6f7e4de0f7d3b7c0110085865d Mon Sep 17 00:00:00 2001 From: EamonnMR Date: Sat, 31 Dec 2022 02:04:57 -0500 Subject: [PATCH] Nice little FastAPI inspired syntax for adding path handlers. Shame the junk wordpress is returning breaks bs4. Will need to play with the data a bit more. --- requirements.txt | 3 ++- server.py | 42 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1502b89..3a3c903 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ pituophis requests - +parse +beautifulsoup4 diff --git a/server.py b/server.py index 49a4f62..b0887cf 100644 --- a/server.py +++ b/server.py @@ -2,21 +2,55 @@ from os import getenv from urllib.parse import urljoin from html import unescape + import pituophis -from pituophis import Item +from pituophis import Item, Request from requests import get +from parse import parse +from bs4 import BeautifulSoup wordpress_url = getenv("URL") + +handlers = {} + +def register_handler(path: str): + def decorator_handler(func): + handlers[path] = func + return func + return decorator_handler + +@register_handler("/post/{id}") +def post(request: Request, id: int): + post = get(urljoin(wordpress_url, f"wp-json/wp/v2/posts/{id}")).json() + return BeautifulSoup(post["content"]).get_text() + + def handle(request): + for path, handler in handlers.items(): + parse_result = parse(path, request.path) + if parse_result is not None: + return handler(request, **parse_result.named) + posts = get(urljoin(wordpress_url, "wp-json/wp/v2/posts")).json() menu = [ - Item(itype=1, path="/" + post['slug'], text=unescape(post['title']['rendered']), host=request.host, port=request.port) - for post in posts + Item(itype=0, path=f"/post/{post['id']}", text=unescape(post['title']['rendered']), host=request.host, port=request.port) + for i, post in enumerate(posts) ] - print(menu) return menu if __name__ == '__main__': pituophis.serve("127.0.0.1", int(getenv("PORT")), handler=handle) + + # Itypes: + # 0: FILE + # 1: dir + # 2: CSO + # 3: UNKN + # 4: HQX + # 5: BIN + # 6: UUE + # 7: ? + # 8: TEL + # 9: BIN \ No newline at end of file