fix permissions
Restore __main__ module after loading and running the plugin.

If the plugin raises an exception (including SystemExit) the __main__ module is
not properly loaded and it's __dict__ is lost. E.g. this causes errors when
using any global variable in planet.py. I don't think is is a good idea to keep
the plugin in memory (as __main__) anyway.
Make the length of cache filename a bit shorter http://lists.planetplanet.org/archives/devel/2011-March/002206.html
Proper handling of non-ascii titles
Documentation changes: Fix feedparser URLS to point to http://pythonhosted.org/feedparser/ instead of http://feedparser.org/docs/
coercedates plugin

new plugin that coerces the 'updated' and 'published' dates on any entry already in the cache to match the 'updated' date already in the cache

if an entry is _not_ already in the cache, coerces the date values to be the smaller of older of the two values

commit also 'fixes' spider.py to work with filters that modify the 'updated' date

see: https://github.com/rubys/venus/issues/15
fix missing import that runtest.py was hiding
add <source> element to <item>

The RSS spec specifies a <source> member of <item> for aggregators to
indicate another feed from which the item originated.
Use a user-agent other than the httplib2 default.

There is something about the default httplib2 user-agent that causes some web
servers to throw up.

Try this, for example::

    >>> import httplib2
    >>> h = httplib2.Http()
    >>> response, content = h.request(
    ...   "http://ankursinha.in/blog/feed/")
    >>> response.status
    406
    >>> response, content = h.request(
    ...   "http://ankursinha.in/blog/feed/",
    ...   headers={'user-agent': 'trololololololol 9000'})
    >>> response.status
    200
Update html5lib to 0.999
Update feedparser to 5.1.3
Fix errors in test suite after html5lib recent changes

Errors like the following should be fixed now.

======================================================================
ERROR: test_content_html (tests.test_reconstitute.ReconstituteTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 43, in <lambda>
    func = lambda self, name=root: self.eval(name)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 27, in eval
    scrub(testfiles%name, results)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/scrub.py", line 148, in scrub
    xhtml = serializer.XHTMLSerializer(inject_meta_charset = False)
AttributeError: 'module' object has no attribute 'XHTMLSerializer'

======================================================================
ERROR: test_dc_lang (tests.test_reconstitute.ReconstituteTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 43, in <lambda>
    func = lambda self, name=root: self.eval(name)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 28, in eval
    reconstitute(results, results.entries[0]).writexml(work)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/reconstitute.py", line 275, in reconstitute
    content(xentry, 'title', entry.get('title_detail',None), bozo)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/reconstitute.py", line 171, in content
    parser = html5parser.HTMLParser(tree=dom.TreeBuilder)
AttributeError: 'module' object has no attribute 'TreeBuilder'
Fix test cases errors on AttributeError: object has no attribute 'summary_detail'

Fixes errors like the following :
======================================================================
ERROR: test_content_html (tests.test_reconstitute.ReconstituteTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 43, in <lambda>
    func = lambda self, name=root: self.eval(name)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 28, in eval
    reconstitute(results, results.entries[0]).writexml(work)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/reconstitute.py", line 267, in reconstitute
    id(xentry, entry)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/reconstitute.py", line 79, in id
    entry_id = (entry.summary_detail.base + "/" +
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/vendor/feedparser.py", line 416, in __getattr__
    raise AttributeError, "object has no attribute '%s'" % key
AttributeError: object has no attribute 'summary_detail'
Fix test_missing_item_pubDate no longer passing

Fixes :
======================================================================
FAIL: test_missing_item_pubDate (tests.test_reconstitute.ReconstituteTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 43, in <lambda>
    func = lambda self, name=root: self.eval(name)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 38, in eval
    self.assertEqual(eval(rhs), eval(lhs, results.entries[0]))
AssertionError: (2006, 6, 21, 13, 16, 41, 2, 172, 0) != time.struct_time(tm_year=2014, tm_mon=1, tm_mday=27, tm_hour=17, tm_min=16, tm_sec=24, tm_wday=0, tm_yday=27, tm_isdst=0)

----------------------------------------------------------------------
Fix issue on running filters

Fix errors like:
======================================================================
ERROR: test_spiderFeed_retroactive_filter (tests.test_spider.SpiderTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_spider.py", line 82, in test_spiderFeed_retroactive_filter
    self.spiderFeed(testfeed % '1b')
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_spider.py", line 50, in spiderFeed
    writeCache(feed_uri, feed_info, data)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/spider.py", line 232, in writeCache
    output = shell.run(filter, output, mode="filter")
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/shell/__init__.py", line 62, in run
    return module.run(template_resolved, doc, None, options)
  File "/usr/lib/python2.7/dist-packages/py/_apipkg.py", line 122, in __makeattr
    raise AttributeError(name)
AttributeError: run
Fix date values error in templates

Fix errors like:
======================================================================
ERROR: test_apply_classic_fancy (tests.test_apply.ApplyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_apply.py", line 54, in test_apply_classic_fancy
    self.apply_fancy()
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_apply.py", line 84, in apply_fancy
    splice.apply(self.feeddata)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/splice.py", line 142, in apply
    output_file = shell.run(template_file, doc)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/shell/__init__.py", line 66, in run
    module.run(template_resolved, doc, output_file, options)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/shell/tmpl.py", line 256, in run
    tp.set(key, value)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/vendor/htmltmpl.py", line 441, in set
    "be either a scalar or a list." % var
TemplateError: Htmltmpl error: Value of toplevel variable 'date' must be either a scalar or a list.
Change XML test data so that xmlns are correctly set

Fix errors like :
======================================================================
ERROR: test_georss_box_latlong (tests.test_reconstitute.ReconstituteTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 43, in <lambda>
    func = lambda self, name=root: self.eval(name)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_reconstitute.py", line 26, in eval
    results = feedparser.parse(data)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/vendor/feedparser.py", line 4001, in parse
    saxparser.parse(source)
  File "/usr/lib/python2.7/dist-packages/drv_libxml2.py", line 208, in parse
    eltName,eltQName,attributesNSImpl)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/vendor/feedparser.py", line 1801, in startElementNS
    raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix
UndeclaredNamespace: 'georss' is not associated with a namespace
Try and fix Django settings issue

Fix errors like this:
======================================================================
ERROR: test_django_entry_title (tests.test_filter_django.DjangoFilterTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/tests/test_filter_django.py", line 26, in test_django_entry_title
    os.path.realpath('tests/data/filter/django/title.html.dj'), input)
  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/shell/dj.py", line 26, in run
    TEMPLATE_DIRS=(os.path.dirname(script),)
  File "/usr/lib/python2.7/dist-packages/django/conf/__init__.py", line 89, in configure
    raise RuntimeError('Settings already configured.')
RuntimeError: Settings already configured.
Proposed changes as feedparser seems to have a different behaviour.

I hope this isn't critical to the planet.
Fix scrubbing issue

Solves errors like :
ERROR:planet.runner:TypeError: 'NoneType' object has no attribute '__getitem__'
ERROR:planet.runner:  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/spider.py", line 480, in spiderPlanet
    writeCache(uri, feed_info, data)
ERROR:planet.runner:  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/spider.py", line 167, in writeCache
    scrub.scrub(feed_uri, data)
ERROR:planet.runner:  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/scrub.py", line 149, in scrub
    node['value'] = ''.join([str(token) for token in tree])
ERROR:planet.runner:  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/vendor/html5lib/serializer/htmlserializer.py", line 199, in serialize
    for token in treewalker:
ERROR:planet.runner:  File "/home/olivier/svn/svn.debian.org/python-apps/planet-venus/git-svn/planet-venus/planet/vendor/html5lib/filters/optionaltags.py", line 18, in __iter__
    type = token["type"]