aboutsummaryrefslogtreecommitdiff
path: root/serve.py
diff options
context:
space:
mode:
authorArjun Satarkar <me@arjunsatarkar.net>2023-07-02 23:50:15 +0000
committerArjun Satarkar <me@arjunsatarkar.net>2023-07-02 23:50:15 +0000
commited597cc711919d75a48940b7ee21d76e9b261e13 (patch)
treeac77e938a687731d45d797f55af46d6d76789de9 /serve.py
parent589df8813ea7732501fb551296d8fd45c4186217 (diff)
downloadtagrss-ed597cc711919d75a48940b7ee21d76e9b261e13.tar
tagrss-ed597cc711919d75a48940b7ee21d76e9b261e13.tar.gz
tagrss-ed597cc711919d75a48940b7ee21d76e9b261e13.zip
Separate server and core, add SQLite storage
Diffstat (limited to 'serve.py')
-rwxr-xr-xserve.py60
1 files changed, 19 insertions, 41 deletions
diff --git a/serve.py b/serve.py
index 2f45d3e..025510a 100755
--- a/serve.py
+++ b/serve.py
@@ -11,20 +11,22 @@ import os
import pathlib
import time
+import tagrss
+
parser = argparse.ArgumentParser()
parser.add_argument("--host", default="localhost")
parser.add_argument("--port", default=8000, type=int)
+parser.add_argument("--storage-path", required=True)
args = parser.parse_args()
-feeds_lock = gevent.lock.RLock()
-feeds = {}
+storage_path: pathlib.Path = pathlib.Path(args.storage_path)
-feed_items_lock = gevent.lock.RLock()
-feed_items = []
+tagrss_lock = gevent.lock.RLock()
+tagrss_backend = tagrss.TagRss(storage_path=storage_path)
def parse_space_separated_tags(inp: str) -> list[str]:
- tags = []
+ tags = set()
tag = ""
escaped = False
for c in inp:
@@ -35,20 +37,21 @@ def parse_space_separated_tags(inp: str) -> list[str]:
continue
case " ":
if not escaped:
- tags.append(tag)
+ tags.add(tag)
tag = ""
continue
escaped = False
tag += c
if tag:
- tags.append(tag)
- return tags
+ tags.add(tag)
+ return tuple(sorted(tags))
@bottle.route("/")
def index():
- with feed_items_lock:
- return bottle.template("index", items=feed_items)
+ with tagrss_lock:
+ entries = tagrss_backend.get_entries(limit=100)
+ return bottle.template("index", entries=entries, tagrss_backend=tagrss_backend)
@bottle.get("/add_feed")
@@ -62,42 +65,17 @@ def add_feed_effect():
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] = {"tags": tags}
- else:
+ with tagrss_lock:
+ try:
+ tagrss_backend.add_feed(feed_source=feed_source, tags=tags)
+ except tagrss.FeedAlreadyAddedError:
already_present = True
-
- feed = feedparser.parse(feed_source)
- with feed_items_lock:
- for entry in reversed(feed.entries):
- try:
- date_published = time.strftime("%x %X", entry.published_parsed)
- except AttributeError:
- date_published = None
- try:
- 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,
- "feed": {
- "tags": tags,
- },
- }
- )
-
+ # TODO: handle FeedFetchError too
return bottle.template(
"add_feed",
after_add=True,
feed_source=feed_source,
- already_present=already_present,
+ already_present=already_present
)