Universal Feed Parser 3.3 is out. You can download it at SourceForge. That package no longer includes the more than 2700 unit tests; they are now available separately.
The major new feature in this release is improved performance, thanks to a patch from Juri Pakaste. Under Python 2.2, this version runs twice as fast as previous versions. Under Python 2.3, it runs five times as fast. No kidding. Thanks, Juri. Juri is the project lead of Straw, a desktop aggregator for Linux, which uses the Universal Feed Parser.
Other changes in this release:
registerDateHandler().Content-Type header (such as text/plain) and sets bozo_exception to NonXMLContentType. Such feeds can never be well-formed XML; in fact, they should not be treated as XML at all. (Note that not everyone shares this view.)Content-Language HTTP header as the default language, if no xml:lang attribute, <language> element, or <dc:language> element is present.zopeCompatibilityHack(), which makes the parse() routine return a regular dict instead of a subclass. I have been told that this is required for Zope compatibility (hence the name). It also makes command-line debugging easier, since the pprint module inexplicably pretty-prints real dictionaries differently than dict subclasses.xml:lang="" for setting the current language to “unknown.” This behavior is straight from the XML specification. Anyone who tells you that good specs don’t matter is lying, or ignorant, or trying to sell you a bad one, or… hey look, shiny objects!version="rss10" even when the RSS 1.0 namespace is not the default namespace.§
I am no longer accepting public comments on this post, but you can use this form to contact me privately. (Your message will not be published.)
§
© 2001–present Mark Pilgrim