Deal with locked databases, tweaks

This commit is contained in:
John Doty 2024-07-11 10:32:48 +09:00
parent fb9bfe0084
commit 6b02fb66bc
2 changed files with 172 additions and 151 deletions

View file

@ -199,22 +199,34 @@ def serve():
def do_GET(self):
db = database.Database.local()
feeds = db.load_all(feed_limit=10)
del db
feeds.sort(key=feed.sort_key, reverse=True)
buffer = io.StringIO()
buffer.write("<head>")
buffer.write('<meta charset="utf-8"><title>Subscribed Feeds</title>')
buffer.write("</head>")
buffer.write("<h1>Feeds</h1>")
buffer.write(
"""
<!doctype html>
<head>
<meta charset="utf8">
<title>Subscribed Feeds</title>
</head>
<h1>Feeds</h1>
"""
)
for f in feeds:
feed_title = html.escape(f.title)
buffer.write(f'<h2><a href="{f.link}">{feed_title}</a></h2>')
if len(f.entries) > 0:
ago = f" ({f.entries[0].time_ago()})"
else:
ago = ""
buffer.write(f'<h2><a href="{f.link}">{feed_title}</a>{ago}</h2>')
buffer.write(f"<div>")
if len(f.entries) > 0:
for entry in f.entries:
title = html.escape(entry.title)
buffer.write(
f'<span>&bull; <a href="{entry.link}">{title}</a> ({entry.time_ago()})</span> '
f'<span class="entry">&bull; <a href="{entry.link}">{title}</a> ({entry.time_ago()})</span> '
)
else:
buffer.write("<i>No entries...</i>")

View file

@ -102,13 +102,17 @@ class Database:
return db
def get_property(self, prop: str, default=None) -> typing.Any:
cursor = self.db.execute("SELECT value FROM properties WHERE name=?", (prop,))
with self.db:
cursor = self.db.execute(
"SELECT value FROM properties WHERE name=?", (prop,)
)
result = cursor.fetchone()
if result is None:
return default
return result[0]
def set_property(self, prop: str, value):
with self.db:
self.db.execute(
"""
INSERT INTO properties (name, value) VALUES (?, ?)
@ -138,6 +142,7 @@ class Database:
self.set_property("origin", self.origin)
def load_all_meta(self) -> list[feed.FeedMeta]:
with self.db:
cursor = self.db.execute(
"""
SELECT
@ -165,7 +170,10 @@ class Database:
]
def load_all(self, feed_limit: int = 20, pattern: str = "") -> list[feed.Feed]:
pattern = pattern.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_")
with self.db:
pattern = (
pattern.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_")
)
sql_pattern = f"%{pattern}%"
cursor = self.db.execute(
"""
@ -241,6 +249,7 @@ class Database:
return feeds
def load_feed(self, url: str) -> feed.Feed | None:
with self.db:
cursor = self.db.execute(
"""
SELECT