Merge tag '0.8.0' into betamax
fixed encoding issues, folder support in OPML, bash completion
View Articlerefactor feeds to remove global
we now use a class static session that can be used from plugins this slightly simplifies the implementation of plugins as we do not need to load the module at a specific point to get the right...
View Articleadd 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 Articlemove fetch functionality to Feed
this allows to make for simpler tests, because we can easily fetch and parse a single object instead of having to run over a full config furthermore, it is more logical for plugins: they get passed a...
View Articlemove catchup down into plugins
output plugins are now actually called when catchup is used. responsability to skip slow and write operations are delegated to plugins, which makes them easier to develop and test
View Article