add requests-file dependency
get rid of our custom wrapper code around requests to handle file:// resources: that is handled by a third-party library and removes about 40 lines of code we didn't need this makes session...
View Articleuse getter/setters for class session
this makes the code cleaner and more idiomatic this does require plugins to use the private member to access the session, especially for the test suite, but there are ways of avoiding that for...
View Articlereorder feed class hierarchy
the feed fetch functionality does not need to be in the "storage" hierarchy...
View Articlemove opml import in the FeedStorage abstract class
this makes more sense than having it as a standalone function. also, it is not storage specific, so let's make a API-facing class that will expose more generic functions.
View Articlesplit --config and --database settings, using xdg module
the xdg module saves us some code and also extends configuration to support global config files like /etc or /var/cache (in theory - in practice, the freedesktop standards only use ~/.cache). using...
View Articleinitialize FeedFetcher session singleton properly
without this, the wayback plugin would fail because it FeedFetcher._session is None. doing this in the constructor makes the accessor faster as well, as we don't need to do another check. this should...
View ArticleAPI refactoring: merge classes in a controller
The FeedStorage and FeedFetcher class were fairly similar: they were wrappers around the storage subsystem, which is basically a "model", so they are a "controller" in the classic sense. So merge them...
View ArticleAPI refactoring: create a Feed class
A "Feed" is the basic representation of a RSS/Atom feed. It derives from the feedparser dict but we use our class to regroup functionality that was loose around the module, like normalize() and...
View Articlesecurity: avoid possible config setting override
It may be possible for parsed feed data to override configuration that is passed to plugins and other components. Normally, feedparser doesn't send those settings (e.g. output or args) that could...
View Articlecosmetic: consistent test comparison
We should do "expected == actual" because that is the way the diff is ordered on display. That's a rather opiniated way of doing things, but at least we should be consistent across the board, which we...
View Articleadd transmission plugin
this plugin is introduced because the exec plugin cannot safely guess a subdirectory to save feed into without resorting to using plugins. now the transmission plugin has nicer defaults and properly...
View Article