include post timestamp in ikiwiki GUIDs
The recent changes page can include multiple posts with the same GUID, as the GUID is simply the URL of the page. In blog posts, that's usually fine because we don't want to act every time a blog post...
View Articlecomply with new feedparser deprecation warning
Somewhere after 5.1.3, feedparser started warning about updated_parsed usage, without any possibility of compliance: https://github.com/kurtmckee/feedparser/issues/151 We properly added defaults but...
View Articledisable cov which crashes on sqlite3.IntegrityError
see https://github.com/pytest-dev/pytest-cov/issues/215
View Articlere-enable coverage tests
We somehow need to tell coveragepy that we're running in parallel even though it's unclear to me that we do: https://github.com/nedbat/coveragepy/issues/702#issuecomment-432016361 Just doing what I'm...
View ArticleMerge branch 'master' into 'master'
According to RFC5064, change header 'Archive-At' to 'Archived-At' See merge request anarcat/feed2exec!4
View Articlewarn instead of crashing on invalid dates
We used to completely crash when a feed had invalid or missing dates. After reviewing the standards, it turns out this is not quite valid behavior: RSS 0.90 and 0.91, for example, do not have dates at...
View Articleexpand and cleanup date validation routines
We used to have a long list of fields. Now we just iterate over the item, then the feed, and look for the fields we want. It's cleaner visually and might even make some feeds validate, as we now look...
View Articleuse dateparser module if available
This behaves better than the feedparser date parser in most scenarios. Still needs unit tests and dependency checks. Closes: #6
View Articlehandle broken pipe correctly from plugins
Before this, doing "feed2exec parse foo | head" would yield an error message for *every* feed item. This silences the warnings completely.
View Articleadd JSON output plugin
This plugin is very simple, if not trivial: it simply dumps all the feed items in a JSON stream. This can be parsed by `jq` on the commandline to diagnose feed problems, do scripting or whatever. This...
View Articleswitch to dateparser for PyPI and tests as well
Because the Debian package recommends dateparser, I had different results running tests natively on Debian and within tox. This harmonizes things and makes use of dateparser everywhere, warts and...
View Articlereduce noise level of 'missing time' problems
It seems like previous versions of feedparser would never trigger that problem, and would fill in the date instead. Now I have feeds that have this on *every* item and it generates a lot of noise in...
View Articlesplit large feeds.py into model.py and controller.py
This rearchitecture seems to make sense to me. I would like to keep those files smaller and that naming will force me to follow that model/controller distinction more clearly. Already, the parse/fetch...
View Articlerename FeedCacheStorage to FeedItemCacheStorage
This is, effectively, a per-item cache, not a full feed cache. We want to implement the latter as part of #10 so it makes sense to rename this first. This is an API breaking change.
View Articlefactor out getter/setters in the base sqlite class
This should pave the way for reusing this class in a caching backend like cachecontrol.
View Articleimplement thread-level locking
This is not absolutely necessary as we don't do thread-level parallelism. But if we every want to switch back to doing that, this is an elegant way of supporting that. Inspired by cachecontrol-sqlite.
View Articleenforce commit in context manager unless explicitely disabled
This makes sure we never, ever forget to commit unless we *explicitely* disable it. This is also inspired by cachecontrol-sqlite, except the latter uses False as a default for the autocommit, which...
View Articlefirst attempt at using cachecontrol, failing
It seems we need to provide the timestamp, and it doesn't store it in the database, so it doesn't send if-modified-since headers, so it fails. Maybe we are better off implementing this on our own?
View Articlefix broken cache adapter support
We did not need to pass the if-modified-since header. All that was needd was that we lookup (and return!) the cache value properly. So also remove that from the database. The way things were setup,...
View Article