aboutsummaryrefslogtreecommitdiff
path: root/tagrss.py
AgeCommit message (Collapse)Author
2023-08-04RefactorArjun Satarkar
2023-08-04Handle still more network errors gracefullyArjun Satarkar
2023-08-04Do more user input validationArjun Satarkar
2023-08-03Improve handling of network errorsArjun Satarkar
2023-08-03Handle more network errorsArjun Satarkar
2023-08-03Allow setting custom title on /add_feed, improve form layoutArjun Satarkar
2023-08-03Improve formattingArjun Satarkar
2023-08-03Simplify process to update feeds (i.e. fetch & store new entries)Arjun Satarkar
2023-08-02Format codeArjun Satarkar
2023-08-02Refactor; more to comeArjun Satarkar
I need to add documentation at some point too.
2023-07-30Get feed info for every displayed entry in one query, fix crashArjun Satarkar
Replacing the old approach where for every entry the title & tags were queried separately. If 50 entries are displayed, this is 100 extra queries that are now one query. If the maximum 1000 are displayed, this is 2000 queries to one. Benchmarking this change with ab -n 500 -c 100 http://localhost:8000/?page_num=1&per_page=1000 with 1000+ entries present, we get: (PREVIOUS) Time taken for tests: 0.840 seconds (NEW) Time taken for tests: 0.476 seconds The crash occurred when get_feeds() was called with get_tags=True and the query returned at least one feed with no tags. This was not handled properly by later code. It was not noticed when testing the previous commit since all feeds in the test instance had one or more tags.
2023-07-30Avoid unnecessary code in sqlite3 connection context managerArjun Satarkar
2023-07-30Get tags for all shown feeds in one query for /list_feedsArjun Satarkar
This also avoids the need to pass `core` to the template, which I never liked since it is basically giving up on encapsulation and passing the whole world (as far as the application is concerned) to the template - not only the values it needs. But that could be avoided in other ways too without reducing the number of queries from 1 + (number of feeds shown) - eg. 51 - to just 2, which this does. The next place something like this needs to be done is with the / (index.tpl) view. Currently, that is also passed `core` and actually does 2 * (number of entries shown) + 1 queries, which could be eg. 101, since we fetch both the feed title and feed tags for every entry separately. With some improvements, it should be possible to do that too in 2 queries.
2023-07-30Handle feed deletion after fetch but before inserting new entriesArjun Satarkar
The approach we used is to catch an exception since EAFP. The alternative would be to check if the feed exists just before trying to insert, which would not be a race condition due to the lock.
2023-07-29Simplify logicArjun Satarkar
2023-07-29Use smaller base image, exit cleanly in Docker, improve loggingArjun Satarkar
2023-07-28Add filtering by tag and feed, improve modularity of some HTMLArjun Satarkar
2023-07-28Add AGPLv3 licenseArjun Satarkar
2023-07-28Stop feed fetching from blocking everythingArjun Satarkar
We accomplished this by switching from gevent to cherrypy (should be possible with gevent, but it wasn't worth the trouble) and shifting the HTTP request part of the process out of the core TagRss class. Also added a bit of logging, got rid of /delete_feed returning a spurious success page in response to GET requests,
2023-07-05Add pagination UI, list of all feedsArjun Satarkar
2023-07-05Add periodic updates, clean up codeArjun Satarkar
2023-07-04Add feed modification and deletionArjun Satarkar
2023-07-02Separate server and core, add SQLite storageArjun Satarkar