diff options
author | Arjun Satarkar <me@arjunsatarkar.net> | 2023-06-22 05:40:59 +0000 |
---|---|---|
committer | Arjun Satarkar <me@arjunsatarkar.net> | 2023-06-22 05:40:59 +0000 |
commit | 589df8813ea7732501fb551296d8fd45c4186217 (patch) | |
tree | 670d915991325c3f1c270be35ad82ba69d1e5cce /serve.py | |
parent | 69a356d177ad98941502b621754d011383e160d9 (diff) | |
download | tagrss-589df8813ea7732501fb551296d8fd45c4186217.tar tagrss-589df8813ea7732501fb551296d8fd45c4186217.tar.gz tagrss-589df8813ea7732501fb551296d8fd45c4186217.zip |
Improve CLI arguments, add basic tag support, add CSS
Diffstat (limited to 'serve.py')
-rwxr-xr-x | serve.py | 81 |
1 files changed, 58 insertions, 23 deletions
@@ -1,17 +1,19 @@ #!/usr/bin/env python3 -from gevent import monkey +import gevent.monkey -monkey.patch_all() +gevent.monkey.patch_all() import bottle import feedparser import gevent.lock import argparse -import datetime +import os +import pathlib +import time parser = argparse.ArgumentParser() -parser.add_argument("host", nargs="?", default="localhost") -parser.add_argument("-p", "--port", default=8000, type=int) +parser.add_argument("--host", default="localhost") +parser.add_argument("--port", default=8000, type=int) args = parser.parse_args() feeds_lock = gevent.lock.RLock() @@ -20,8 +22,27 @@ feeds = {} feed_items_lock = gevent.lock.RLock() feed_items = [] -def store_feed(feed_url: str): - ... + +def parse_space_separated_tags(inp: str) -> list[str]: + tags = [] + tag = "" + escaped = False + for c in inp: + match c: + case "\\": + if not escaped: + escaped = True + continue + case " ": + if not escaped: + tags.append(tag) + tag = "" + continue + escaped = False + tag += c + if tag: + tags.append(tag) + return tags @bottle.route("/") @@ -29,6 +50,7 @@ def index(): with feed_items_lock: return bottle.template("index", items=feed_items) + @bottle.get("/add_feed") def add_feed_ui(): return bottle.template("add_feed") @@ -37,38 +59,51 @@ def add_feed_ui(): @bottle.post("/add_feed") def add_feed_effect(): feed_source = bottle.request.forms.get("feed_source") + tags = parse_space_separated_tags(bottle.request.forms.get("tags")) + already_present: bool = False with feeds_lock: if feed_source not in feeds: - feeds[feed_source] = {} + feeds[feed_source] = {"tags": tags} else: already_present = True - print(feeds) + feed = feedparser.parse(feed_source) with feed_items_lock: for entry in reversed(feed.entries): try: - date_published = datetime.datetime(*(entry.published_parsed[0:6])).strftime("%x %X") + date_published = time.strftime("%x %X", entry.published_parsed) except AttributeError: date_published = None try: - date_updated = datetime.datetime(*(entry.updated_parsed[0:6])).strftime("%x %X") + date_updated = time.strftime("%x %X", entry.updated_parsed) except AttributeError: date_updated = None if date_updated == date_published: date_updated = None - feed_items.append({ - "title": entry["title"], - "link": entry["link"], - "date_published": date_published, - "date_updated": date_updated, - }) - return bottle.template("add_feed", after_add=True, feed_source=feed_source, already_present=already_present) - - -@bottle.get("/modify_feed") -def modify_feed_ui(): - ... + feed_items.append( + { + "title": entry["title"], + "link": entry["link"], + "date_published": date_published, + "date_updated": date_updated, + "feed": { + "tags": tags, + }, + } + ) + + return bottle.template( + "add_feed", + after_add=True, + feed_source=feed_source, + already_present=already_present, + ) + + +@bottle.get("/static/<path:path>") +def serve_static(path): + return bottle.static_file(path, pathlib.Path(os.getcwd(), "static")) bottle.run(host=args.host, port=args.port, server="gevent") |