silence coverage warnings for sanity checks
those checks should normally never be ran by the test suite, so they don't merit coverage...
View Articleadd simple opml integration tests
we do only basic tests here, complete OPML tests are in test_feeds we do not, for example, test folder exports, which do not work
View Articleproperly encode From headers
the default From header encoding is dumb: it encodes the *whole* string, including the address itself, which breaks a bunch of email clients, including gmail, notmuch and mutt. instead, we encode the...
View Articlereturn bytes properly in fetch
this fixes double-encoding issues detected in the previous test. our documentation was *saying* we were returning bytes from fetch() but, actually, we were returning a string. it *seems* that...
View ArticleMerge 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 Article