diff --git a/CHANGES.md b/CHANGES.md
index 4e40a674..452ae2d5 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -26,6 +26,8 @@
* Change don't create a backup from an initial zero byte main database file, PEP8 and code tidy up
* Fix show list view when no shows exist and "Group show lists shows into" is set to anything other than "One Show List"
* Add coverage testing and coveralls support
+* Update feedparser library 5.1.3 to 5.2.0 (8c62940)
+* Remove feedcache implementation and library
[develop changelog]
* Update Requests library 2.7.0 (ab1f493) to 2.7.0 (8b5e457)
diff --git a/lib/feedcache/__init__.py b/lib/feedcache/__init__.py
deleted file mode 100644
index 96ebc102..00000000
--- a/lib/feedcache/__init__.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-
-
-#
-# Import local modules
-#
-from cache import Cache
-
-#
-# Module
-#
diff --git a/lib/feedcache/cache.py b/lib/feedcache/cache.py
deleted file mode 100644
index 6ec0a39a..00000000
--- a/lib/feedcache/cache.py
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-from feedparser import feedparser
-
-import logging
-import time
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-
-logger = logging.getLogger('feedcache.cache')
-
-
-class Cache:
- """A class to wrap Mark Pilgrim's Universal Feed Parser module
- (http://www.feedparser.org) so that parameters can be used to
- cache the feed results locally instead of fetching the feed every
- time it is requested. Uses both etag and modified times for
- caching.
- """
-
- def __init__(self, storage, timeToLiveSeconds=300, userAgent='feedcache'):
- """
- Arguments:
-
- storage -- Backing store for the cache. It should follow
- the dictionary API, with URLs used as keys. It should
- persist data.
-
- timeToLiveSeconds=300 -- The length of time content should
- live in the cache before an update is attempted.
-
- userAgent='feedcache' -- User agent string to be used when
- fetching feed contents.
-
- """
- self.storage = storage
- self.time_to_live = timeToLiveSeconds
- self.user_agent = userAgent
- return
-
- def purge(self, olderThanSeconds):
- """Remove cached data from the storage if the data is older than the
- date given. If olderThanSeconds is None, the entire cache is purged.
- """
- if olderThanSeconds is None:
- logger.debug('purging the entire cache')
- for key in self.storage.keys():
- del self.storage[key]
- else:
- now = time.time()
- # Iterate over the keys and load each item one at a time
- # to avoid having the entire cache loaded into memory
- # at one time.
- for url in self.storage.keys():
- (cached_time, cached_data) = self.storage[url]
- age = now - cached_time
- if age >= olderThanSeconds:
- logger.debug('removing %s with age %d', url, age)
- del self.storage[url]
- return
-
- def fetch(self, url, force_update=False, offline=False, request_headers=None):
- """Return the feed at url.
-
- url - The URL of the feed.
-
- force_update=False - When True, update the cache whether the
- current contents have
- exceeded their time-to-live
- or not.
-
- offline=False - When True, only return data from the local
- cache and never access the remote
- URL.
-
- If there is data for that feed in the cache already, check
- the expiration date before accessing the server. If the
- cached data has not expired, return it without accessing the
- server.
-
- In cases where the server is accessed, check for updates
- before deciding what to return. If the server reports a
- status of 304, the previously cached content is returned.
-
- The cache is only updated if the server returns a status of
- 200, to avoid holding redirected data in the cache.
- """
- logger.debug('url="%s"' % url)
-
- # Convert the URL to a value we can use
- # as a key for the storage backend.
- key = url
- if isinstance(key, unicode):
- key = key.encode('utf-8')
-
- modified = None
- etag = None
- now = time.time()
-
- cached_time, cached_content = self.storage.get(key, (None, None))
-
- # Offline mode support (no networked requests)
- # so return whatever we found in the storage.
- # If there is nothing in the storage, we'll be returning None.
- if offline:
- logger.debug('offline mode')
- return cached_content
-
- # Does the storage contain a version of the data
- # which is older than the time-to-live?
- logger.debug('cache modified time: %s' % str(cached_time))
- if cached_time is not None and not force_update:
- if self.time_to_live:
- age = now - cached_time
- if age <= self.time_to_live:
- logger.debug('cache contents still valid')
- return cached_content
- else:
- logger.debug('cache contents older than TTL')
- else:
- logger.debug('no TTL value')
-
- # The cache is out of date, but we have
- # something. Try to use the etag and modified_time
- # values from the cached content.
- etag = cached_content.get('etag')
- modified = cached_content.get('modified')
- logger.debug('cached etag=%s' % etag)
- logger.debug('cached modified=%s' % str(modified))
- else:
- logger.debug('nothing in the cache, or forcing update')
-
- # We know we need to fetch, so go ahead and do it.
- logger.debug('fetching...')
- parsed_result = feedparser.parse(url,
- agent=self.user_agent,
- modified=modified,
- etag=etag,
- request_headers=request_headers)
-
- status = parsed_result.get('status', None)
- logger.debug('HTTP status=%s' % status)
- if status == 304:
- # No new data, based on the etag or modified values.
- # We need to update the modified time in the
- # storage, though, so we know that what we have
- # stored is up to date.
- self.storage[key] = (now, cached_content)
-
- # Return the data from the cache, since
- # the parsed data will be empty.
- parsed_result = cached_content
- elif status == 200:
- # There is new content, so store it unless there was an error.
- error = parsed_result.get('bozo_exception')
- if not error:
- logger.debug('Updating stored data for %s' % url)
- self.storage[key] = (now, parsed_result)
- else:
- logger.warning('Not storing data with exception: %s',
- error)
- else:
- logger.warning('Not updating cache with HTTP status %s', status)
-
- return parsed_result
diff --git a/lib/feedcache/cachestoragelock.py b/lib/feedcache/cachestoragelock.py
deleted file mode 100644
index 05babde6..00000000
--- a/lib/feedcache/cachestoragelock.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-from __future__ import with_statement
-
-"""Lock wrapper for cache storage which do not permit multi-threaded access.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import threading
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-
-class CacheStorageLock:
- """Lock wrapper for cache storage which do not permit multi-threaded access.
- """
-
- def __init__(self, shelf):
- self.lock = threading.Lock()
- self.shelf = shelf
- return
-
- def __getitem__(self, key):
- with self.lock:
- return self.shelf[key]
-
- def get(self, key, default=None):
- with self.lock:
- try:
- return self.shelf[key]
- except KeyError:
- return default
-
- def __setitem__(self, key, value):
- with self.lock:
- self.shelf[key] = value
diff --git a/lib/feedcache/example.py b/lib/feedcache/example.py
deleted file mode 100644
index 4df7ab68..00000000
--- a/lib/feedcache/example.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Example use of feedcache.Cache.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import sys
-import shelve
-
-#
-# Import local modules
-#
-import cache
-
-#
-# Module
-#
-
-def main(urls=[]):
- print 'Saving feed data to ./.feedcache'
- storage = shelve.open('.feedcache')
- try:
- fc = cache.Cache(storage)
- for url in urls:
- parsed_data = fc.fetch(url)
- print parsed_data.feed.title
- for entry in parsed_data.entries:
- print '\t', entry.title
- finally:
- storage.close()
- return
-
-if __name__ == '__main__':
- main(sys.argv[1:])
-
diff --git a/lib/feedcache/example_threads.py b/lib/feedcache/example_threads.py
deleted file mode 100644
index 2eb56d30..00000000
--- a/lib/feedcache/example_threads.py
+++ /dev/null
@@ -1,144 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Example use of feedcache.Cache combined with threads.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import Queue
-import sys
-import shove
-import threading
-
-#
-# Import local modules
-#
-import cache
-
-#
-# Module
-#
-
-MAX_THREADS=5
-OUTPUT_DIR='/tmp/feedcache_example'
-
-
-def main(urls=[]):
-
- if not urls:
- print 'Specify the URLs to a few RSS or Atom feeds on the command line.'
- return
-
- # Decide how many threads to start
- num_threads = min(len(urls), MAX_THREADS)
-
- # Add the URLs to a queue
- url_queue = Queue.Queue()
- for url in urls:
- url_queue.put(url)
-
- # Add poison pills to the url queue to cause
- # the worker threads to break out of their loops
- for i in range(num_threads):
- url_queue.put(None)
-
- # Track the entries in the feeds being fetched
- entry_queue = Queue.Queue()
-
- print 'Saving feed data to', OUTPUT_DIR
- storage = shove.Shove('file://' + OUTPUT_DIR)
- try:
-
- # Start a few worker threads
- worker_threads = []
- for i in range(num_threads):
- t = threading.Thread(target=fetch_urls,
- args=(storage, url_queue, entry_queue,))
- worker_threads.append(t)
- t.setDaemon(True)
- t.start()
-
- # Start a thread to print the results
- printer_thread = threading.Thread(target=print_entries, args=(entry_queue,))
- printer_thread.setDaemon(True)
- printer_thread.start()
-
- # Wait for all of the URLs to be processed
- url_queue.join()
-
- # Wait for the worker threads to finish
- for t in worker_threads:
- t.join()
-
- # Poison the print thread and wait for it to exit
- entry_queue.put((None,None))
- entry_queue.join()
- printer_thread.join()
-
- finally:
- storage.close()
- return
-
-
-def fetch_urls(storage, input_queue, output_queue):
- """Thread target for fetching feed data.
- """
- c = cache.Cache(storage)
-
- while True:
- next_url = input_queue.get()
- if next_url is None: # None causes thread to exit
- input_queue.task_done()
- break
-
- feed_data = c.fetch(next_url)
- for entry in feed_data.entries:
- output_queue.put( (feed_data.feed, entry) )
- input_queue.task_done()
- return
-
-
-def print_entries(input_queue):
- """Thread target for printing the contents of the feeds.
- """
- while True:
- feed, entry = input_queue.get()
- if feed is None: # None causes thread to exist
- input_queue.task_done()
- break
-
- print '%s: %s' % (feed.title, entry.title)
- input_queue.task_done()
- return
-
-
-if __name__ == '__main__':
- main(sys.argv[1:])
-
diff --git a/lib/feedcache/test_cache.py b/lib/feedcache/test_cache.py
deleted file mode 100644
index 2c1ac096..00000000
--- a/lib/feedcache/test_cache.py
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Unittests for feedcache.cache
-
-"""
-
-__module_id__ = "$Id$"
-
-import logging
-logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(levelname)-8s %(name)s %(message)s',
- )
-logger = logging.getLogger('feedcache.test_cache')
-
-#
-# Import system modules
-#
-import copy
-import time
-import unittest
-import UserDict
-
-#
-# Import local modules
-#
-import cache
-from test_server import HTTPTestBase, TestHTTPServer
-
-#
-# Module
-#
-
-
-class CacheTestBase(HTTPTestBase):
-
- CACHE_TTL = 30
-
- def setUp(self):
- HTTPTestBase.setUp(self)
-
- self.storage = self.getStorage()
- self.cache = cache.Cache(self.storage,
- timeToLiveSeconds=self.CACHE_TTL,
- userAgent='feedcache.test',
- )
- return
-
- def getStorage(self):
- "Return a cache storage for the test."
- return {}
-
-
-class CacheTest(CacheTestBase):
-
- CACHE_TTL = 30
-
- def getServer(self):
- "These tests do not want to use the ETag or If-Modified-Since headers"
- return TestHTTPServer(applyModifiedHeaders=False)
-
- def testRetrieveNotInCache(self):
- # Retrieve data not already in the cache.
- feed_data = self.cache.fetch(self.TEST_URL)
- self.failUnless(feed_data)
- self.failUnlessEqual(feed_data.feed.title, 'CacheTest test data')
- return
-
- def testRetrieveIsInCache(self):
- # Retrieve data which is alread in the cache,
- # and verify that the second copy is identitical
- # to the first.
-
- # First fetch
- feed_data = self.cache.fetch(self.TEST_URL)
-
- # Second fetch
- feed_data2 = self.cache.fetch(self.TEST_URL)
-
- # Since it is the in-memory storage, we should have the
- # exact same object.
- self.failUnless(feed_data is feed_data2)
- return
-
- def testExpireDataInCache(self):
- # Retrieve data which is in the cache but which
- # has expired and verify that the second copy
- # is different from the first.
-
- # First fetch
- feed_data = self.cache.fetch(self.TEST_URL)
-
- # Change the timeout and sleep to move the clock
- self.cache.time_to_live = 0
- time.sleep(1)
-
- # Second fetch
- feed_data2 = self.cache.fetch(self.TEST_URL)
-
- # Since we reparsed, the cache response should be different.
- self.failIf(feed_data is feed_data2)
- return
-
- def testForceUpdate(self):
- # Force cache to retrieve data which is alread in the cache,
- # and verify that the new data is different.
-
- # Pre-populate the storage with bad data
- self.cache.storage[self.TEST_URL] = (time.time() + 100, self.id())
-
- # Fetch the data
- feed_data = self.cache.fetch(self.TEST_URL, force_update=True)
-
- self.failIfEqual(feed_data, self.id())
- return
-
- def testOfflineMode(self):
- # Retrieve data which is alread in the cache,
- # whether it is expired or not.
-
- # Pre-populate the storage with data
- self.cache.storage[self.TEST_URL] = (0, self.id())
-
- # Fetch it
- feed_data = self.cache.fetch(self.TEST_URL, offline=True)
-
- self.failUnlessEqual(feed_data, self.id())
- return
-
- def testUnicodeURL(self):
- # Pass in a URL which is unicode
-
- url = unicode(self.TEST_URL)
- feed_data = self.cache.fetch(url)
-
- storage = self.cache.storage
- key = unicode(self.TEST_URL).encode('UTF-8')
-
- # Verify that the storage has a key
- self.failUnless(key in storage)
-
- # Now pull the data from the storage directly
- storage_timeout, storage_data = self.cache.storage.get(key)
- self.failUnlessEqual(feed_data, storage_data)
- return
-
-
-class SingleWriteMemoryStorage(UserDict.UserDict):
- """Cache storage which only allows the cache value
- for a URL to be updated one time.
- """
-
- def __setitem__(self, url, data):
- if url in self.keys():
- modified, existing = self[url]
- # Allow the modified time to change,
- # but not the feed content.
- if data[1] != existing:
- raise AssertionError('Trying to update cache for %s to %s' \
- % (url, data))
- UserDict.UserDict.__setitem__(self, url, data)
- return
-
-
-class CacheConditionalGETTest(CacheTestBase):
-
- CACHE_TTL = 0
-
- def getStorage(self):
- return SingleWriteMemoryStorage()
-
- def testFetchOnceForEtag(self):
- # Fetch data which has a valid ETag value, and verify
- # that while we hit the server twice the response
- # codes cause us to use the same data.
-
- # First fetch populates the cache
- response1 = self.cache.fetch(self.TEST_URL)
- self.failUnlessEqual(response1.feed.title, 'CacheTest test data')
-
- # Remove the modified setting from the cache so we know
- # the next time we check the etag will be used
- # to check for updates. Since we are using an in-memory
- # cache, modifying response1 updates the cache storage
- # directly.
- response1['modified'] = None
-
- # This should result in a 304 status, and no data from
- # the server. That means the cache won't try to
- # update the storage, so our SingleWriteMemoryStorage
- # should not raise and we should have the same
- # response object.
- response2 = self.cache.fetch(self.TEST_URL)
- self.failUnless(response1 is response2)
-
- # Should have hit the server twice
- self.failUnlessEqual(self.server.getNumRequests(), 2)
- return
-
- def testFetchOnceForModifiedTime(self):
- # Fetch data which has a valid Last-Modified value, and verify
- # that while we hit the server twice the response
- # codes cause us to use the same data.
-
- # First fetch populates the cache
- response1 = self.cache.fetch(self.TEST_URL)
- self.failUnlessEqual(response1.feed.title, 'CacheTest test data')
-
- # Remove the etag setting from the cache so we know
- # the next time we check the modified time will be used
- # to check for updates. Since we are using an in-memory
- # cache, modifying response1 updates the cache storage
- # directly.
- response1['etag'] = None
-
- # This should result in a 304 status, and no data from
- # the server. That means the cache won't try to
- # update the storage, so our SingleWriteMemoryStorage
- # should not raise and we should have the same
- # response object.
- response2 = self.cache.fetch(self.TEST_URL)
- self.failUnless(response1 is response2)
-
- # Should have hit the server twice
- self.failUnlessEqual(self.server.getNumRequests(), 2)
- return
-
-
-class CacheRedirectHandlingTest(CacheTestBase):
-
- def _test(self, response):
- # Set up the server to redirect requests,
- # then verify that the cache is not updated
- # for the original or new URL and that the
- # redirect status is fed back to us with
- # the fetched data.
-
- self.server.setResponse(response, '/redirected')
-
- response1 = self.cache.fetch(self.TEST_URL)
-
- # The response should include the status code we set
- self.failUnlessEqual(response1.get('status'), response)
-
- # The response should include the new URL, too
- self.failUnlessEqual(response1.href, self.TEST_URL + 'redirected')
-
- # The response should not have been cached under either URL
- self.failIf(self.TEST_URL in self.storage)
- self.failIf(self.TEST_URL + 'redirected' in self.storage)
- return
-
- def test301(self):
- self._test(301)
-
- def test302(self):
- self._test(302)
-
- def test303(self):
- self._test(303)
-
- def test307(self):
- self._test(307)
-
-
-class CachePurgeTest(CacheTestBase):
-
- def testPurgeAll(self):
- # Remove everything from the cache
-
- self.cache.fetch(self.TEST_URL)
- self.failUnless(self.storage.keys(),
- 'Have no data in the cache storage')
-
- self.cache.purge(None)
-
- self.failIf(self.storage.keys(),
- 'Still have data in the cache storage')
- return
-
- def testPurgeByAge(self):
- # Remove old content from the cache
-
- self.cache.fetch(self.TEST_URL)
- self.failUnless(self.storage.keys(),
- 'have no data in the cache storage')
-
- time.sleep(1)
-
- remains = (time.time(), copy.deepcopy(self.storage[self.TEST_URL][1]))
- self.storage['http://this.should.remain/'] = remains
-
- self.cache.purge(1)
-
- self.failUnlessEqual(self.storage.keys(),
- ['http://this.should.remain/'])
- return
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/lib/feedcache/test_cachestoragelock.py b/lib/feedcache/test_cachestoragelock.py
deleted file mode 100644
index 741a39ab..00000000
--- a/lib/feedcache/test_cachestoragelock.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Tests for shelflock.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import os
-import shelve
-import tempfile
-import threading
-import unittest
-
-#
-# Import local modules
-#
-from cache import Cache
-from cachestoragelock import CacheStorageLock
-from test_server import HTTPTestBase
-
-#
-# Module
-#
-
-class CacheShelveTest(HTTPTestBase):
-
- def setUp(self):
- HTTPTestBase.setUp(self)
- handle, self.shelve_filename = tempfile.mkstemp('.shelve')
- os.close(handle) # we just want the file name, so close the open handle
- os.unlink(self.shelve_filename) # remove the empty file
- return
-
- def tearDown(self):
- try:
- os.unlink(self.shelve_filename)
- except AttributeError:
- pass
- HTTPTestBase.tearDown(self)
- return
-
- def test(self):
- storage = shelve.open(self.shelve_filename)
- locking_storage = CacheStorageLock(storage)
- try:
- fc = Cache(locking_storage)
-
- # First fetch the data through the cache
- parsed_data = fc.fetch(self.TEST_URL)
- self.failUnlessEqual(parsed_data.feed.title, 'CacheTest test data')
-
- # Now retrieve the same data directly from the shelf
- modified, shelved_data = storage[self.TEST_URL]
-
- # The data should be the same
- self.failUnlessEqual(parsed_data, shelved_data)
- finally:
- storage.close()
- return
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/lib/feedcache/test_server.py b/lib/feedcache/test_server.py
deleted file mode 100644
index f48be105..00000000
--- a/lib/feedcache/test_server.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Simple HTTP server for testing the feed cache.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import BaseHTTPServer
-import logging
-import md5
-import threading
-import time
-import unittest
-import urllib
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-logger = logging.getLogger('feedcache.test_server')
-
-
-def make_etag(data):
- """Given a string containing data to be returned to the client,
- compute an ETag value for the data.
- """
- _md5 = md5.new()
- _md5.update(data)
- return _md5.hexdigest()
-
-
-class TestHTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- "HTTP request handler which serves the same feed data every time."
-
- FEED_DATA = """
-
-
- CacheTest test data
-
-
- http://localhost/feedcache/
- 2006-10-14T11:00:36Z
-
- single test entry
-
- 2006-10-14T11:00:36Z
-
- author goes here
- authoremail@example.com
-
- http://www.example.com/
- description goes here
-
-
-
-"""
-
- # The data does not change, so save the ETag and modified times
- # as class attributes.
- ETAG = make_etag(FEED_DATA)
- # Calculated using email.utils.formatdate(usegmt=True)
- MODIFIED_TIME = 'Sun, 08 Apr 2012 20:16:48 GMT'
-
- def do_GET(self):
- "Handle GET requests."
- logger.debug('GET %s', self.path)
-
- if self.path == '/shutdown':
- # Shortcut to handle stopping the server
- logger.debug('Stopping server')
- self.server.stop()
- self.send_response(200)
-
- else:
- # Record the request for tests that count them
- self.server.requests.append(self.path)
- # Process the request
- logger.debug('pre-defined response code: %d', self.server.response)
- handler_method_name = 'do_GET_%d' % self.server.response
- handler_method = getattr(self, handler_method_name)
- handler_method()
- return
-
- def do_GET_3xx(self):
- "Handle redirects"
- if self.path.endswith('/redirected'):
- logger.debug('already redirected')
- # We have already redirected, so return the data.
- return self.do_GET_200()
- new_path = self.server.new_path
- logger.debug('redirecting to %s', new_path)
- self.send_response(self.server.response)
- self.send_header('Location', new_path)
- return
-
- do_GET_301 = do_GET_3xx
- do_GET_302 = do_GET_3xx
- do_GET_303 = do_GET_3xx
- do_GET_307 = do_GET_3xx
-
- def do_GET_200(self):
- logger.debug('Etag: %s' % self.ETAG)
- logger.debug('Last-Modified: %s' % self.MODIFIED_TIME)
-
- incoming_etag = self.headers.get('If-None-Match', None)
- logger.debug('Incoming ETag: "%s"' % incoming_etag)
-
- incoming_modified = self.headers.get('If-Modified-Since', None)
- logger.debug('Incoming If-Modified-Since: %s' % incoming_modified)
-
- send_data = True
-
- # Does the client have the same version of the data we have?
- if self.server.apply_modified_headers:
- if incoming_etag == self.ETAG:
- logger.debug('Response 304, etag')
- self.send_response(304)
- send_data = False
-
- elif incoming_modified == self.MODIFIED_TIME:
- logger.debug('Response 304, modified time')
- self.send_response(304)
- send_data = False
-
- # Now optionally send the data, if the client needs it
- if send_data:
- logger.debug('Response 200')
- self.send_response(200)
-
- self.send_header('Content-Type', 'application/atom+xml')
-
- logger.debug('Outgoing Etag: %s' % self.ETAG)
- self.send_header('ETag', self.ETAG)
-
- logger.debug('Outgoing modified time: %s' % self.MODIFIED_TIME)
- self.send_header('Last-Modified', self.MODIFIED_TIME)
-
- self.end_headers()
-
- logger.debug('Sending data')
- self.wfile.write(self.FEED_DATA)
- return
-
-
-class TestHTTPServer(BaseHTTPServer.HTTPServer):
- """HTTP Server which counts the number of requests made
- and can stop based on client instructions.
- """
-
- def __init__(self, applyModifiedHeaders=True, handler=TestHTTPHandler):
- self.apply_modified_headers = applyModifiedHeaders
- self.keep_serving = True
- self.requests = []
- self.setResponse(200)
- BaseHTTPServer.HTTPServer.__init__(self, ('', 9999), handler)
- return
-
- def setResponse(self, newResponse, newPath=None):
- """Sets the response code to use for future requests, and a new
- path to be used as a redirect target, if necessary.
- """
- self.response = newResponse
- self.new_path = newPath
- return
-
- def getNumRequests(self):
- "Return the number of requests which have been made on the server."
- return len(self.requests)
-
- def stop(self):
- "Stop serving requests, after the next request."
- self.keep_serving = False
- return
-
- def serve_forever(self):
- "Main loop for server"
- while self.keep_serving:
- self.handle_request()
- logger.debug('exiting')
- return
-
-
-class HTTPTestBase(unittest.TestCase):
- "Base class for tests that use a TestHTTPServer"
-
- TEST_URL = 'http://localhost:9999/'
-
- CACHE_TTL = 0
-
- def setUp(self):
- self.server = self.getServer()
- self.server_thread = threading.Thread(target=self.server.serve_forever)
- # set daemon flag so the tests don't hang if cleanup fails
- self.server_thread.setDaemon(True)
- self.server_thread.start()
- return
-
- def getServer(self):
- "Return a web server for the test."
- s = TestHTTPServer()
- s.setResponse(200)
- return s
-
- def tearDown(self):
- # Stop the server thread
- urllib.urlretrieve(self.TEST_URL + 'shutdown')
- time.sleep(1)
- self.server.server_close()
- self.server_thread.join()
- return
diff --git a/lib/feedcache/test_shovefilesystem.py b/lib/feedcache/test_shovefilesystem.py
deleted file mode 100644
index 1a48dead..00000000
--- a/lib/feedcache/test_shovefilesystem.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-# All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Tests with shove filesystem storage.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import os
-import shove
-import tempfile
-import threading
-import unittest
-
-#
-# Import local modules
-#
-from cache import Cache
-from test_server import HTTPTestBase
-
-#
-# Module
-#
-
-class CacheShoveTest(HTTPTestBase):
-
- def setUp(self):
- HTTPTestBase.setUp(self)
- self.shove_dirname = tempfile.mkdtemp('shove')
- return
-
- def tearDown(self):
- try:
- os.system('rm -rf %s' % self.storage_dirname)
- except AttributeError:
- pass
- HTTPTestBase.tearDown(self)
- return
-
- def test(self):
- # First fetch the data through the cache
- storage = shove.Shove('file://' + self.shove_dirname)
- try:
- fc = Cache(storage)
- parsed_data = fc.fetch(self.TEST_URL)
- self.failUnlessEqual(parsed_data.feed.title, 'CacheTest test data')
- finally:
- storage.close()
-
- # Now retrieve the same data directly from the shelf
- storage = shove.Shove('file://' + self.shove_dirname)
- try:
- modified, shelved_data = storage[self.TEST_URL]
- finally:
- storage.close()
-
- # The data should be the same
- self.failUnlessEqual(parsed_data, shelved_data)
- return
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/lib/feedparser/feedparser.egg-info/PKG-INFO b/lib/feedparser/feedparser.egg-info/PKG-INFO
deleted file mode 100644
index 1765e869..00000000
--- a/lib/feedparser/feedparser.egg-info/PKG-INFO
+++ /dev/null
@@ -1,30 +0,0 @@
-Metadata-Version: 1.1
-Name: feedparser
-Version: 5.1.3
-Summary: Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds
-Home-page: http://code.google.com/p/feedparser/
-Author: Kurt McKee
-Author-email: contactme@kurtmckee.org
-License: UNKNOWN
-Download-URL: http://code.google.com/p/feedparser/
-Description: UNKNOWN
-Keywords: atom,cdf,feed,parser,rdf,rss
-Platform: POSIX
-Platform: Windows
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.4
-Classifier: Programming Language :: Python :: 2.5
-Classifier: Programming Language :: Python :: 2.6
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.0
-Classifier: Programming Language :: Python :: 3.1
-Classifier: Programming Language :: Python :: 3.2
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Text Processing :: Markup :: XML
diff --git a/lib/feedparser/feedparser.egg-info/SOURCES.txt b/lib/feedparser/feedparser.egg-info/SOURCES.txt
deleted file mode 100644
index 29533362..00000000
--- a/lib/feedparser/feedparser.egg-info/SOURCES.txt
+++ /dev/null
@@ -1,2480 +0,0 @@
-LICENSE
-MANIFEST.in
-NEWS
-README
-setup.py
-docs/add_custom_css.py
-docs/advanced.rst
-docs/annotated-atom03.rst
-docs/annotated-atom10.rst
-docs/annotated-examples.rst
-docs/annotated-rss10.rst
-docs/annotated-rss20-dc.rst
-docs/annotated-rss20.rst
-docs/atom-detail.rst
-docs/basic-existence.rst
-docs/basic.rst
-docs/bozo.rst
-docs/changes-26.rst
-docs/changes-27.rst
-docs/changes-30.rst
-docs/changes-301.rst
-docs/changes-31.rst
-docs/changes-32.rst
-docs/changes-33.rst
-docs/changes-40.rst
-docs/changes-401.rst
-docs/changes-402.rst
-docs/changes-41.rst
-docs/changes-42.rst
-docs/changes-early.rst
-docs/character-encoding.rst
-docs/common-atom-elements.rst
-docs/common-rss-elements.rst
-docs/conf.py
-docs/content-normalization.rst
-docs/date-parsing.rst
-docs/history.rst
-docs/html-sanitization.rst
-docs/http-authentication.rst
-docs/http-etag.rst
-docs/http-other.rst
-docs/http-redirect.rst
-docs/http-useragent.rst
-docs/http.rst
-docs/index.rst
-docs/introduction.rst
-docs/license.rst
-docs/microformats.rst
-docs/namespace-handling.rst
-docs/reference-bozo.rst
-docs/reference-bozo_exception.rst
-docs/reference-encoding.rst
-docs/reference-entry-author.rst
-docs/reference-entry-author_detail.rst
-docs/reference-entry-comments.rst
-docs/reference-entry-content.rst
-docs/reference-entry-contributors.rst
-docs/reference-entry-created.rst
-docs/reference-entry-created_parsed.rst
-docs/reference-entry-enclosures.rst
-docs/reference-entry-expired.rst
-docs/reference-entry-expired_parsed.rst
-docs/reference-entry-id.rst
-docs/reference-entry-license.rst
-docs/reference-entry-link.rst
-docs/reference-entry-links.rst
-docs/reference-entry-published.rst
-docs/reference-entry-published_parsed.rst
-docs/reference-entry-publisher.rst
-docs/reference-entry-publisher_detail.rst
-docs/reference-entry-source.rst
-docs/reference-entry-summary.rst
-docs/reference-entry-summary_detail.rst
-docs/reference-entry-tags.rst
-docs/reference-entry-title.rst
-docs/reference-entry-title_detail.rst
-docs/reference-entry-updated.rst
-docs/reference-entry-updated_parsed.rst
-docs/reference-entry-vcard.rst
-docs/reference-entry-xfn.rst
-docs/reference-entry.rst
-docs/reference-etag.rst
-docs/reference-feed-author.rst
-docs/reference-feed-author_detail.rst
-docs/reference-feed-cloud.rst
-docs/reference-feed-contributors.rst
-docs/reference-feed-docs.rst
-docs/reference-feed-errorreportsto.rst
-docs/reference-feed-generator.rst
-docs/reference-feed-generator_detail.rst
-docs/reference-feed-icon.rst
-docs/reference-feed-id.rst
-docs/reference-feed-image.rst
-docs/reference-feed-info-detail.rst
-docs/reference-feed-info.rst
-docs/reference-feed-language.rst
-docs/reference-feed-license.rst
-docs/reference-feed-link.rst
-docs/reference-feed-links.rst
-docs/reference-feed-logo.rst
-docs/reference-feed-published.rst
-docs/reference-feed-published_parsed.rst
-docs/reference-feed-publisher.rst
-docs/reference-feed-publisher_detail.rst
-docs/reference-feed-rights.rst
-docs/reference-feed-rights_detail.rst
-docs/reference-feed-subtitle.rst
-docs/reference-feed-subtitle_detail.rst
-docs/reference-feed-tags.rst
-docs/reference-feed-textinput.rst
-docs/reference-feed-title.rst
-docs/reference-feed-title_detail.rst
-docs/reference-feed-ttl.rst
-docs/reference-feed-updated.rst
-docs/reference-feed-updated_parsed.rst
-docs/reference-feed.rst
-docs/reference-headers.rst
-docs/reference-href.rst
-docs/reference-modified.rst
-docs/reference-namespaces.rst
-docs/reference-status.rst
-docs/reference-version.rst
-docs/reference.rst
-docs/resolving-relative-links.rst
-docs/uncommon-atom.rst
-docs/uncommon-rss.rst
-docs/version-detection.rst
-docs/_static/feedparser.css
-feedparser/feedparser.py
-feedparser/feedparsertest.py
-feedparser/sgmllib3.py
-feedparser/feedparser.egg-info/PKG-INFO
-feedparser/feedparser.egg-info/SOURCES.txt
-feedparser/feedparser.egg-info/dependency_links.txt
-feedparser/feedparser.egg-info/top_level.txt
-feedparser/tests/compression/deflate-no-headers.z
-feedparser/tests/compression/deflate-not-compressed.z
-feedparser/tests/compression/deflate.z
-feedparser/tests/compression/gzip-not-compressed.gz
-feedparser/tests/compression/gzip-struct-error.gz
-feedparser/tests/compression/gzip.gz
-feedparser/tests/compression/sample.xml
-feedparser/tests/encoding/big5.xml
-feedparser/tests/encoding/bozo_bogus_encoding.xml
-feedparser/tests/encoding/bozo_double-encoded-html.xml
-feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml
-feedparser/tests/encoding/bozo_http_i18n.xml
-feedparser/tests/encoding/bozo_http_text_plain.xml
-feedparser/tests/encoding/bozo_http_text_plain_charset.xml
-feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml
-feedparser/tests/encoding/bozo_linenoise.xml
-feedparser/tests/encoding/csucs4.xml
-feedparser/tests/encoding/csunicode.xml
-feedparser/tests/encoding/demoronize-1.xml
-feedparser/tests/encoding/demoronize-2.xml
-feedparser/tests/encoding/demoronize-3.xml
-feedparser/tests/encoding/double-encoded-html.xml
-feedparser/tests/encoding/encoding_attribute_crash.xml
-feedparser/tests/encoding/encoding_attribute_crash_2.xml
-feedparser/tests/encoding/euc-kr-attribute.xml
-feedparser/tests/encoding/euc-kr-item.xml
-feedparser/tests/encoding/euc-kr.xml
-feedparser/tests/encoding/http_application_atom_xml_charset.xml
-feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_application_atom_xml_default.xml
-feedparser/tests/encoding/http_application_atom_xml_encoding.xml
-feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml
-feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml
-feedparser/tests/encoding/http_application_rss_xml_charset.xml
-feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_application_rss_xml_default.xml
-feedparser/tests/encoding/http_application_rss_xml_encoding.xml
-feedparser/tests/encoding/http_application_xml_charset.xml
-feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_application_xml_default.xml
-feedparser/tests/encoding/http_application_xml_dtd_charset.xml
-feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_application_xml_dtd_default.xml
-feedparser/tests/encoding/http_application_xml_dtd_encoding.xml
-feedparser/tests/encoding/http_application_xml_encoding.xml
-feedparser/tests/encoding/http_application_xml_epe_charset.xml
-feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_application_xml_epe_default.xml
-feedparser/tests/encoding/http_application_xml_epe_encoding.xml
-feedparser/tests/encoding/http_encoding_attribute_crash.xml
-feedparser/tests/encoding/http_i18n.xml
-feedparser/tests/encoding/http_text_atom_xml_charset.xml
-feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_text_atom_xml_default.xml
-feedparser/tests/encoding/http_text_atom_xml_encoding.xml
-feedparser/tests/encoding/http_text_rss_xml_charset.xml
-feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_text_rss_xml_default.xml
-feedparser/tests/encoding/http_text_rss_xml_encoding.xml
-feedparser/tests/encoding/http_text_xml_bogus_charset.xml
-feedparser/tests/encoding/http_text_xml_bogus_param.xml
-feedparser/tests/encoding/http_text_xml_charset.xml
-feedparser/tests/encoding/http_text_xml_charset_2.xml
-feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml
-feedparser/tests/encoding/http_text_xml_default.xml
-feedparser/tests/encoding/http_text_xml_epe_charset.xml
-feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml
-feedparser/tests/encoding/http_text_xml_epe_default.xml
-feedparser/tests/encoding/http_text_xml_epe_encoding.xml
-feedparser/tests/encoding/http_text_xml_qs.xml
-feedparser/tests/encoding/iso-10646-ucs-2.xml
-feedparser/tests/encoding/iso-10646-ucs-4.xml
-feedparser/tests/encoding/no_content_type_default.xml
-feedparser/tests/encoding/no_content_type_encoding.xml
-feedparser/tests/encoding/u16.xml
-feedparser/tests/encoding/ucs-2.xml
-feedparser/tests/encoding/ucs-4.xml
-feedparser/tests/encoding/utf-16be-autodetect.xml
-feedparser/tests/encoding/utf-16be-bom.xml
-feedparser/tests/encoding/utf-16be.xml
-feedparser/tests/encoding/utf-16le-autodetect.xml
-feedparser/tests/encoding/utf-16le-bom.xml
-feedparser/tests/encoding/utf-16le.xml
-feedparser/tests/encoding/utf-32be-autodetect.xml
-feedparser/tests/encoding/utf-32be-bom.xml
-feedparser/tests/encoding/utf-32be.xml
-feedparser/tests/encoding/utf-32le-autodetect.xml
-feedparser/tests/encoding/utf-32le-bom.xml
-feedparser/tests/encoding/utf-32le.xml
-feedparser/tests/encoding/utf-8-bom.xml
-feedparser/tests/encoding/utf16.xml
-feedparser/tests/encoding/utf_16.xml
-feedparser/tests/encoding/utf_32.xml
-feedparser/tests/encoding/x80_437.xml
-feedparser/tests/encoding/x80_850.xml
-feedparser/tests/encoding/x80_852.xml
-feedparser/tests/encoding/x80_855.xml
-feedparser/tests/encoding/x80_857.xml
-feedparser/tests/encoding/x80_860.xml
-feedparser/tests/encoding/x80_861.xml
-feedparser/tests/encoding/x80_862.xml
-feedparser/tests/encoding/x80_863.xml
-feedparser/tests/encoding/x80_865.xml
-feedparser/tests/encoding/x80_866.xml
-feedparser/tests/encoding/x80_cp037.xml
-feedparser/tests/encoding/x80_cp1125.xml
-feedparser/tests/encoding/x80_cp1250.xml
-feedparser/tests/encoding/x80_cp1251.xml
-feedparser/tests/encoding/x80_cp1252.xml
-feedparser/tests/encoding/x80_cp1253.xml
-feedparser/tests/encoding/x80_cp1254.xml
-feedparser/tests/encoding/x80_cp1255.xml
-feedparser/tests/encoding/x80_cp1256.xml
-feedparser/tests/encoding/x80_cp1257.xml
-feedparser/tests/encoding/x80_cp1258.xml
-feedparser/tests/encoding/x80_cp437.xml
-feedparser/tests/encoding/x80_cp500.xml
-feedparser/tests/encoding/x80_cp737.xml
-feedparser/tests/encoding/x80_cp775.xml
-feedparser/tests/encoding/x80_cp850.xml
-feedparser/tests/encoding/x80_cp852.xml
-feedparser/tests/encoding/x80_cp855.xml
-feedparser/tests/encoding/x80_cp856.xml
-feedparser/tests/encoding/x80_cp857.xml
-feedparser/tests/encoding/x80_cp860.xml
-feedparser/tests/encoding/x80_cp861.xml
-feedparser/tests/encoding/x80_cp862.xml
-feedparser/tests/encoding/x80_cp863.xml
-feedparser/tests/encoding/x80_cp864.xml
-feedparser/tests/encoding/x80_cp865.xml
-feedparser/tests/encoding/x80_cp866.xml
-feedparser/tests/encoding/x80_cp874.xml
-feedparser/tests/encoding/x80_cp875.xml
-feedparser/tests/encoding/x80_cp_is.xml
-feedparser/tests/encoding/x80_csibm037.xml
-feedparser/tests/encoding/x80_csibm500.xml
-feedparser/tests/encoding/x80_csibm855.xml
-feedparser/tests/encoding/x80_csibm857.xml
-feedparser/tests/encoding/x80_csibm860.xml
-feedparser/tests/encoding/x80_csibm861.xml
-feedparser/tests/encoding/x80_csibm863.xml
-feedparser/tests/encoding/x80_csibm864.xml
-feedparser/tests/encoding/x80_csibm865.xml
-feedparser/tests/encoding/x80_csibm866.xml
-feedparser/tests/encoding/x80_cskoi8r.xml
-feedparser/tests/encoding/x80_csmacintosh.xml
-feedparser/tests/encoding/x80_cspc775baltic.xml
-feedparser/tests/encoding/x80_cspc850multilingual.xml
-feedparser/tests/encoding/x80_cspc862latinhebrew.xml
-feedparser/tests/encoding/x80_cspc8codepage437.xml
-feedparser/tests/encoding/x80_cspcp852.xml
-feedparser/tests/encoding/x80_dbcs.xml
-feedparser/tests/encoding/x80_ebcdic-cp-be.xml
-feedparser/tests/encoding/x80_ebcdic-cp-ca.xml
-feedparser/tests/encoding/x80_ebcdic-cp-ch.xml
-feedparser/tests/encoding/x80_ebcdic-cp-nl.xml
-feedparser/tests/encoding/x80_ebcdic-cp-us.xml
-feedparser/tests/encoding/x80_ebcdic-cp-wt.xml
-feedparser/tests/encoding/x80_ebcdic_cp_be.xml
-feedparser/tests/encoding/x80_ebcdic_cp_ca.xml
-feedparser/tests/encoding/x80_ebcdic_cp_ch.xml
-feedparser/tests/encoding/x80_ebcdic_cp_nl.xml
-feedparser/tests/encoding/x80_ebcdic_cp_us.xml
-feedparser/tests/encoding/x80_ebcdic_cp_wt.xml
-feedparser/tests/encoding/x80_ibm037.xml
-feedparser/tests/encoding/x80_ibm039.xml
-feedparser/tests/encoding/x80_ibm1140.xml
-feedparser/tests/encoding/x80_ibm437.xml
-feedparser/tests/encoding/x80_ibm500.xml
-feedparser/tests/encoding/x80_ibm775.xml
-feedparser/tests/encoding/x80_ibm850.xml
-feedparser/tests/encoding/x80_ibm852.xml
-feedparser/tests/encoding/x80_ibm855.xml
-feedparser/tests/encoding/x80_ibm857.xml
-feedparser/tests/encoding/x80_ibm860.xml
-feedparser/tests/encoding/x80_ibm861.xml
-feedparser/tests/encoding/x80_ibm862.xml
-feedparser/tests/encoding/x80_ibm863.xml
-feedparser/tests/encoding/x80_ibm864.xml
-feedparser/tests/encoding/x80_ibm865.xml
-feedparser/tests/encoding/x80_ibm866.xml
-feedparser/tests/encoding/x80_koi8-r.xml
-feedparser/tests/encoding/x80_koi8-t.xml
-feedparser/tests/encoding/x80_koi8-u.xml
-feedparser/tests/encoding/x80_mac-cyrillic.xml
-feedparser/tests/encoding/x80_mac.xml
-feedparser/tests/encoding/x80_maccentraleurope.xml
-feedparser/tests/encoding/x80_maccyrillic.xml
-feedparser/tests/encoding/x80_macgreek.xml
-feedparser/tests/encoding/x80_maciceland.xml
-feedparser/tests/encoding/x80_macintosh.xml
-feedparser/tests/encoding/x80_maclatin2.xml
-feedparser/tests/encoding/x80_macroman.xml
-feedparser/tests/encoding/x80_macturkish.xml
-feedparser/tests/encoding/x80_ms-ansi.xml
-feedparser/tests/encoding/x80_ms-arab.xml
-feedparser/tests/encoding/x80_ms-cyrl.xml
-feedparser/tests/encoding/x80_ms-ee.xml
-feedparser/tests/encoding/x80_ms-greek.xml
-feedparser/tests/encoding/x80_ms-hebr.xml
-feedparser/tests/encoding/x80_ms-turk.xml
-feedparser/tests/encoding/x80_tcvn-5712.xml
-feedparser/tests/encoding/x80_tcvn.xml
-feedparser/tests/encoding/x80_tcvn5712-1.xml
-feedparser/tests/encoding/x80_viscii.xml
-feedparser/tests/encoding/x80_winbaltrim.xml
-feedparser/tests/encoding/x80_windows-1250.xml
-feedparser/tests/encoding/x80_windows-1251.xml
-feedparser/tests/encoding/x80_windows-1252.xml
-feedparser/tests/encoding/x80_windows-1253.xml
-feedparser/tests/encoding/x80_windows-1254.xml
-feedparser/tests/encoding/x80_windows-1255.xml
-feedparser/tests/encoding/x80_windows-1256.xml
-feedparser/tests/encoding/x80_windows-1257.xml
-feedparser/tests/encoding/x80_windows-1258.xml
-feedparser/tests/encoding/x80_windows_1250.xml
-feedparser/tests/encoding/x80_windows_1251.xml
-feedparser/tests/encoding/x80_windows_1252.xml
-feedparser/tests/encoding/x80_windows_1253.xml
-feedparser/tests/encoding/x80_windows_1254.xml
-feedparser/tests/encoding/x80_windows_1255.xml
-feedparser/tests/encoding/x80_windows_1256.xml
-feedparser/tests/encoding/x80_windows_1257.xml
-feedparser/tests/encoding/x80_windows_1258.xml
-feedparser/tests/entities/160.xml
-feedparser/tests/entities/732.xml
-feedparser/tests/entities/8216.xml
-feedparser/tests/entities/8217.xml
-feedparser/tests/entities/8220.xml
-feedparser/tests/entities/8221.xml
-feedparser/tests/entities/9830.xml
-feedparser/tests/entities/aacute.xml
-feedparser/tests/entities/acirc.xml
-feedparser/tests/entities/acute.xml
-feedparser/tests/entities/aelig.xml
-feedparser/tests/entities/agrave.xml
-feedparser/tests/entities/alefsym.xml
-feedparser/tests/entities/alpha.xml
-feedparser/tests/entities/and.xml
-feedparser/tests/entities/ang.xml
-feedparser/tests/entities/aring.xml
-feedparser/tests/entities/asymp.xml
-feedparser/tests/entities/atilde.xml
-feedparser/tests/entities/attr_amp.xml
-feedparser/tests/entities/auml.xml
-feedparser/tests/entities/bdquo.xml
-feedparser/tests/entities/beta.xml
-feedparser/tests/entities/brvbar.xml
-feedparser/tests/entities/bull.xml
-feedparser/tests/entities/cap.xml
-feedparser/tests/entities/ccedil.xml
-feedparser/tests/entities/cedil.xml
-feedparser/tests/entities/cent.xml
-feedparser/tests/entities/chi.xml
-feedparser/tests/entities/circ.xml
-feedparser/tests/entities/clubs.xml
-feedparser/tests/entities/cong.xml
-feedparser/tests/entities/copy.xml
-feedparser/tests/entities/crarr.xml
-feedparser/tests/entities/cup.xml
-feedparser/tests/entities/curren.xml
-feedparser/tests/entities/dagger.xml
-feedparser/tests/entities/darr.xml
-feedparser/tests/entities/deg.xml
-feedparser/tests/entities/delta.xml
-feedparser/tests/entities/diams.xml
-feedparser/tests/entities/divide.xml
-feedparser/tests/entities/doesnotexist.xml
-feedparser/tests/entities/eacute.xml
-feedparser/tests/entities/ecirc.xml
-feedparser/tests/entities/egrave.xml
-feedparser/tests/entities/empty.xml
-feedparser/tests/entities/emsp.xml
-feedparser/tests/entities/ensp.xml
-feedparser/tests/entities/epsilon.xml
-feedparser/tests/entities/equiv.xml
-feedparser/tests/entities/eta.xml
-feedparser/tests/entities/eth.xml
-feedparser/tests/entities/euml.xml
-feedparser/tests/entities/euro.xml
-feedparser/tests/entities/exist.xml
-feedparser/tests/entities/fnof.xml
-feedparser/tests/entities/forall.xml
-feedparser/tests/entities/frac12.xml
-feedparser/tests/entities/frac14.xml
-feedparser/tests/entities/frac34.xml
-feedparser/tests/entities/frasl.xml
-feedparser/tests/entities/gamma.xml
-feedparser/tests/entities/ge.xml
-feedparser/tests/entities/hArr.xml
-feedparser/tests/entities/hearts.xml
-feedparser/tests/entities/hellip.xml
-feedparser/tests/entities/hex_entity_x_lowercase.xml
-feedparser/tests/entities/hex_entity_x_uppercase.xml
-feedparser/tests/entities/iacute.xml
-feedparser/tests/entities/icirc.xml
-feedparser/tests/entities/iexcl.xml
-feedparser/tests/entities/igrave.xml
-feedparser/tests/entities/image.xml
-feedparser/tests/entities/infin.xml
-feedparser/tests/entities/int.xml
-feedparser/tests/entities/iota.xml
-feedparser/tests/entities/iquest.xml
-feedparser/tests/entities/isin.xml
-feedparser/tests/entities/iuml.xml
-feedparser/tests/entities/kappa.xml
-feedparser/tests/entities/lArr.xml
-feedparser/tests/entities/lambda.xml
-feedparser/tests/entities/lang.xml
-feedparser/tests/entities/laquo.xml
-feedparser/tests/entities/lceil.xml
-feedparser/tests/entities/ldquo.xml
-feedparser/tests/entities/le.xml
-feedparser/tests/entities/lfloor.xml
-feedparser/tests/entities/lowast.xml
-feedparser/tests/entities/loz.xml
-feedparser/tests/entities/lrm.xml
-feedparser/tests/entities/lsaquo.xml
-feedparser/tests/entities/lsquo.xml
-feedparser/tests/entities/macr.xml
-feedparser/tests/entities/mdash.xml
-feedparser/tests/entities/micro.xml
-feedparser/tests/entities/middot.xml
-feedparser/tests/entities/minus.xml
-feedparser/tests/entities/mu.xml
-feedparser/tests/entities/nabla.xml
-feedparser/tests/entities/nbsp.xml
-feedparser/tests/entities/ndash.xml
-feedparser/tests/entities/ne.xml
-feedparser/tests/entities/ni.xml
-feedparser/tests/entities/not.xml
-feedparser/tests/entities/notin.xml
-feedparser/tests/entities/nsub.xml
-feedparser/tests/entities/ntilde.xml
-feedparser/tests/entities/nu.xml
-feedparser/tests/entities/oacute.xml
-feedparser/tests/entities/ocirc.xml
-feedparser/tests/entities/oelig.xml
-feedparser/tests/entities/ograve.xml
-feedparser/tests/entities/oline.xml
-feedparser/tests/entities/omega.xml
-feedparser/tests/entities/omicron.xml
-feedparser/tests/entities/oplus.xml
-feedparser/tests/entities/or.xml
-feedparser/tests/entities/ordf.xml
-feedparser/tests/entities/ordm.xml
-feedparser/tests/entities/oslash.xml
-feedparser/tests/entities/otilde.xml
-feedparser/tests/entities/otimes.xml
-feedparser/tests/entities/ouml.xml
-feedparser/tests/entities/para.xml
-feedparser/tests/entities/part.xml
-feedparser/tests/entities/permil.xml
-feedparser/tests/entities/perp.xml
-feedparser/tests/entities/phi.xml
-feedparser/tests/entities/pi.xml
-feedparser/tests/entities/piv.xml
-feedparser/tests/entities/plusmn.xml
-feedparser/tests/entities/pound.xml
-feedparser/tests/entities/prime.xml
-feedparser/tests/entities/prod.xml
-feedparser/tests/entities/prop.xml
-feedparser/tests/entities/psi.xml
-feedparser/tests/entities/query_variable_entry.xml
-feedparser/tests/entities/query_variable_feed.xml
-feedparser/tests/entities/radic.xml
-feedparser/tests/entities/rang.xml
-feedparser/tests/entities/raquo.xml
-feedparser/tests/entities/rarr.xml
-feedparser/tests/entities/rceil.xml
-feedparser/tests/entities/rdquo.xml
-feedparser/tests/entities/real.xml
-feedparser/tests/entities/reg.xml
-feedparser/tests/entities/rfloor.xml
-feedparser/tests/entities/rho.xml
-feedparser/tests/entities/rlm.xml
-feedparser/tests/entities/rsaquo.xml
-feedparser/tests/entities/rsquo.xml
-feedparser/tests/entities/sbquo.xml
-feedparser/tests/entities/scaron.xml
-feedparser/tests/entities/sdot.xml
-feedparser/tests/entities/sect.xml
-feedparser/tests/entities/shy.xml
-feedparser/tests/entities/sigma.xml
-feedparser/tests/entities/sigmaf.xml
-feedparser/tests/entities/sim.xml
-feedparser/tests/entities/spades.xml
-feedparser/tests/entities/sub.xml
-feedparser/tests/entities/sube.xml
-feedparser/tests/entities/sum.xml
-feedparser/tests/entities/sup.xml
-feedparser/tests/entities/sup1.xml
-feedparser/tests/entities/sup2.xml
-feedparser/tests/entities/sup3.xml
-feedparser/tests/entities/supe.xml
-feedparser/tests/entities/szlig.xml
-feedparser/tests/entities/tau.xml
-feedparser/tests/entities/there4.xml
-feedparser/tests/entities/theta.xml
-feedparser/tests/entities/thetasym.xml
-feedparser/tests/entities/thinsp.xml
-feedparser/tests/entities/thorn.xml
-feedparser/tests/entities/tilde.xml
-feedparser/tests/entities/times.xml
-feedparser/tests/entities/trade.xml
-feedparser/tests/entities/uacute.xml
-feedparser/tests/entities/uarr.xml
-feedparser/tests/entities/ucirc.xml
-feedparser/tests/entities/ugrave.xml
-feedparser/tests/entities/uml.xml
-feedparser/tests/entities/upper_AElig.xml
-feedparser/tests/entities/upper_Aacute.xml
-feedparser/tests/entities/upper_Acirc.xml
-feedparser/tests/entities/upper_Agrave.xml
-feedparser/tests/entities/upper_Alpha.xml
-feedparser/tests/entities/upper_Aring.xml
-feedparser/tests/entities/upper_Atilde.xml
-feedparser/tests/entities/upper_Auml.xml
-feedparser/tests/entities/upper_Beta.xml
-feedparser/tests/entities/upper_Ccedil.xml
-feedparser/tests/entities/upper_Chi.xml
-feedparser/tests/entities/upper_Dagger.xml
-feedparser/tests/entities/upper_Delta.xml
-feedparser/tests/entities/upper_ETH.xml
-feedparser/tests/entities/upper_Eacute.xml
-feedparser/tests/entities/upper_Ecirc.xml
-feedparser/tests/entities/upper_Egrave.xml
-feedparser/tests/entities/upper_Epsilon.xml
-feedparser/tests/entities/upper_Eta.xml
-feedparser/tests/entities/upper_Euml.xml
-feedparser/tests/entities/upper_Gamma.xml
-feedparser/tests/entities/upper_Iacute.xml
-feedparser/tests/entities/upper_Icirc.xml
-feedparser/tests/entities/upper_Igrave.xml
-feedparser/tests/entities/upper_Iota.xml
-feedparser/tests/entities/upper_Iuml.xml
-feedparser/tests/entities/upper_Kappa.xml
-feedparser/tests/entities/upper_Lambda.xml
-feedparser/tests/entities/upper_Mu.xml
-feedparser/tests/entities/upper_Ntilde.xml
-feedparser/tests/entities/upper_Nu.xml
-feedparser/tests/entities/upper_OElig.xml
-feedparser/tests/entities/upper_Oacute.xml
-feedparser/tests/entities/upper_Ocirc.xml
-feedparser/tests/entities/upper_Ograve.xml
-feedparser/tests/entities/upper_Omega.xml
-feedparser/tests/entities/upper_Omicron.xml
-feedparser/tests/entities/upper_Oslash.xml
-feedparser/tests/entities/upper_Otilde.xml
-feedparser/tests/entities/upper_Ouml.xml
-feedparser/tests/entities/upper_Phi.xml
-feedparser/tests/entities/upper_Pi.xml
-feedparser/tests/entities/upper_Prime.xml
-feedparser/tests/entities/upper_Psi.xml
-feedparser/tests/entities/upper_Rho.xml
-feedparser/tests/entities/upper_Scaron.xml
-feedparser/tests/entities/upper_Sigma.xml
-feedparser/tests/entities/upper_THORN.xml
-feedparser/tests/entities/upper_Tau.xml
-feedparser/tests/entities/upper_Theta.xml
-feedparser/tests/entities/upper_Uacute.xml
-feedparser/tests/entities/upper_Ucirc.xml
-feedparser/tests/entities/upper_Ugrave.xml
-feedparser/tests/entities/upper_Upsilon.xml
-feedparser/tests/entities/upper_Uuml.xml
-feedparser/tests/entities/upper_Xi.xml
-feedparser/tests/entities/upper_Yacute.xml
-feedparser/tests/entities/upper_Yuml.xml
-feedparser/tests/entities/upper_Zeta.xml
-feedparser/tests/entities/upsih.xml
-feedparser/tests/entities/upsilon.xml
-feedparser/tests/entities/uuml.xml
-feedparser/tests/entities/weierp.xml
-feedparser/tests/entities/xi.xml
-feedparser/tests/entities/yacute.xml
-feedparser/tests/entities/yen.xml
-feedparser/tests/entities/yuml.xml
-feedparser/tests/entities/zeta.xml
-feedparser/tests/entities/zwj.xml
-feedparser/tests/entities/zwnj.xml
-feedparser/tests/http/http_redirect_to_304.xml
-feedparser/tests/http/http_status_301.xml
-feedparser/tests/http/http_status_302.xml
-feedparser/tests/http/http_status_303.xml
-feedparser/tests/http/http_status_304.xml
-feedparser/tests/http/http_status_307.xml
-feedparser/tests/http/http_status_404.xml
-feedparser/tests/http/http_status_9001.xml
-feedparser/tests/http/target.xml
-feedparser/tests/illformed/aaa_illformed.xml
-feedparser/tests/illformed/always_strip_doctype.xml
-feedparser/tests/illformed/http_high_bit_date.xml
-feedparser/tests/illformed/non-ascii-tag.xml
-feedparser/tests/illformed/rdf_channel_empty_textinput.xml
-feedparser/tests/illformed/rss_empty_document.xml
-feedparser/tests/illformed/rss_incomplete_cdata.xml
-feedparser/tests/illformed/undeclared_namespace.xml
-feedparser/tests/illformed/chardet/big5.xml
-feedparser/tests/illformed/chardet/eucjp.xml
-feedparser/tests/illformed/chardet/euckr.xml
-feedparser/tests/illformed/chardet/gb2312.xml
-feedparser/tests/illformed/chardet/koi8r.xml
-feedparser/tests/illformed/chardet/shiftjis.xml
-feedparser/tests/illformed/chardet/tis620.xml
-feedparser/tests/illformed/chardet/windows1255.xml
-feedparser/tests/microformats/hcard/2-4-2-vcard.xml
-feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml
-feedparser/tests/microformats/hcard/3-1-1-fn.xml
-feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml
-feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml
-feedparser/tests/microformats/hcard/3-1-2-n-plural.xml
-feedparser/tests/microformats/hcard/3-1-2-n-singular.xml
-feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml
-feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml
-feedparser/tests/microformats/hcard/3-1-3-nickname.xml
-feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml
-feedparser/tests/microformats/hcard/3-1-4-photo.xml
-feedparser/tests/microformats/hcard/3-1-5-bday-2.xml
-feedparser/tests/microformats/hcard/3-1-5-bday-3.xml
-feedparser/tests/microformats/hcard/3-1-5-bday.xml
-feedparser/tests/microformats/hcard/3-2-1-adr.xml
-feedparser/tests/microformats/hcard/3-2-2-label.xml
-feedparser/tests/microformats/hcard/3-3-1-tel.xml
-feedparser/tests/microformats/hcard/3-3-2-email-2.xml
-feedparser/tests/microformats/hcard/3-3-2-email-3.xml
-feedparser/tests/microformats/hcard/3-3-2-email.xml
-feedparser/tests/microformats/hcard/3-3-3-mailer.xml
-feedparser/tests/microformats/hcard/3-4-1-tz-2.xml
-feedparser/tests/microformats/hcard/3-4-1-tz.xml
-feedparser/tests/microformats/hcard/3-4-2-geo.xml
-feedparser/tests/microformats/hcard/3-5-1-title.xml
-feedparser/tests/microformats/hcard/3-5-2-role.xml
-feedparser/tests/microformats/hcard/3-5-3-logo-2.xml
-feedparser/tests/microformats/hcard/3-5-3-logo.xml
-feedparser/tests/microformats/hcard/3-5-4-agent-2.xml
-feedparser/tests/microformats/hcard/3-5-4-agent.xml
-feedparser/tests/microformats/hcard/3-5-5-org.xml
-feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml
-feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml
-feedparser/tests/microformats/hcard/3-6-1-categories.xml
-feedparser/tests/microformats/hcard/3-6-2-note.xml
-feedparser/tests/microformats/hcard/3-6-4-rev-2.xml
-feedparser/tests/microformats/hcard/3-6-4-rev.xml
-feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml
-feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml
-feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml
-feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml
-feedparser/tests/microformats/hcard/3-6-5-sort-string.xml
-feedparser/tests/microformats/hcard/3-6-6-sound-2.xml
-feedparser/tests/microformats/hcard/3-6-6-sound.xml
-feedparser/tests/microformats/hcard/3-6-7-uid.xml
-feedparser/tests/microformats/hcard/3-6-8-url.xml
-feedparser/tests/microformats/hcard/3-7-1-class-2.xml
-feedparser/tests/microformats/hcard/3-7-1-class-3.xml
-feedparser/tests/microformats/hcard/3-7-1-class.xml
-feedparser/tests/microformats/hcard/3-7-2-key.xml
-feedparser/tests/microformats/hcard/7-authors.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml
-feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml
-feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml
-feedparser/tests/microformats/rel_tag/rel_tag_label.xml
-feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml
-feedparser/tests/microformats/rel_tag/rel_tag_term.xml
-feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml
-feedparser/tests/microformats/xfn/xfn_acquaintance.xml
-feedparser/tests/microformats/xfn/xfn_brother.xml
-feedparser/tests/microformats/xfn/xfn_child.xml
-feedparser/tests/microformats/xfn/xfn_co-resident.xml
-feedparser/tests/microformats/xfn/xfn_co-worker.xml
-feedparser/tests/microformats/xfn/xfn_colleague.xml
-feedparser/tests/microformats/xfn/xfn_contact.xml
-feedparser/tests/microformats/xfn/xfn_coresident.xml
-feedparser/tests/microformats/xfn/xfn_coworker.xml
-feedparser/tests/microformats/xfn/xfn_crush.xml
-feedparser/tests/microformats/xfn/xfn_date.xml
-feedparser/tests/microformats/xfn/xfn_friend.xml
-feedparser/tests/microformats/xfn/xfn_href.xml
-feedparser/tests/microformats/xfn/xfn_husband.xml
-feedparser/tests/microformats/xfn/xfn_kin.xml
-feedparser/tests/microformats/xfn/xfn_me.xml
-feedparser/tests/microformats/xfn/xfn_met.xml
-feedparser/tests/microformats/xfn/xfn_multiple.xml
-feedparser/tests/microformats/xfn/xfn_muse.xml
-feedparser/tests/microformats/xfn/xfn_name.xml
-feedparser/tests/microformats/xfn/xfn_neighbor.xml
-feedparser/tests/microformats/xfn/xfn_parent.xml
-feedparser/tests/microformats/xfn/xfn_relative.xml
-feedparser/tests/microformats/xfn/xfn_sibling.xml
-feedparser/tests/microformats/xfn/xfn_sister.xml
-feedparser/tests/microformats/xfn/xfn_spouse.xml
-feedparser/tests/microformats/xfn/xfn_sweetheart.xml
-feedparser/tests/microformats/xfn/xfn_wife.xml
-feedparser/tests/wellformed/amp/amp01.xml
-feedparser/tests/wellformed/amp/amp02.xml
-feedparser/tests/wellformed/amp/amp03.xml
-feedparser/tests/wellformed/amp/amp04.xml
-feedparser/tests/wellformed/amp/amp05.xml
-feedparser/tests/wellformed/amp/amp06.xml
-feedparser/tests/wellformed/amp/amp07.xml
-feedparser/tests/wellformed/amp/amp08.xml
-feedparser/tests/wellformed/amp/amp09.xml
-feedparser/tests/wellformed/amp/amp10.xml
-feedparser/tests/wellformed/amp/amp11.xml
-feedparser/tests/wellformed/amp/amp12.xml
-feedparser/tests/wellformed/amp/amp13.xml
-feedparser/tests/wellformed/amp/amp14.xml
-feedparser/tests/wellformed/amp/amp15.xml
-feedparser/tests/wellformed/amp/amp16.xml
-feedparser/tests/wellformed/amp/amp17.xml
-feedparser/tests/wellformed/amp/amp18.xml
-feedparser/tests/wellformed/amp/amp19.xml
-feedparser/tests/wellformed/amp/amp20.xml
-feedparser/tests/wellformed/amp/amp21.xml
-feedparser/tests/wellformed/amp/amp22.xml
-feedparser/tests/wellformed/amp/amp23.xml
-feedparser/tests/wellformed/amp/amp24.xml
-feedparser/tests/wellformed/amp/amp25.xml
-feedparser/tests/wellformed/amp/amp26.xml
-feedparser/tests/wellformed/amp/amp27.xml
-feedparser/tests/wellformed/amp/amp28.xml
-feedparser/tests/wellformed/amp/amp29.xml
-feedparser/tests/wellformed/amp/amp30.xml
-feedparser/tests/wellformed/amp/amp31.xml
-feedparser/tests/wellformed/amp/amp32.xml
-feedparser/tests/wellformed/amp/amp33.xml
-feedparser/tests/wellformed/amp/amp34.xml
-feedparser/tests/wellformed/amp/amp35.xml
-feedparser/tests/wellformed/amp/amp36.xml
-feedparser/tests/wellformed/amp/amp37.xml
-feedparser/tests/wellformed/amp/amp38.xml
-feedparser/tests/wellformed/amp/amp39.xml
-feedparser/tests/wellformed/amp/amp40.xml
-feedparser/tests/wellformed/amp/amp41.xml
-feedparser/tests/wellformed/amp/amp42.xml
-feedparser/tests/wellformed/amp/amp43.xml
-feedparser/tests/wellformed/amp/amp44.xml
-feedparser/tests/wellformed/amp/amp45.xml
-feedparser/tests/wellformed/amp/amp46.xml
-feedparser/tests/wellformed/amp/amp47.xml
-feedparser/tests/wellformed/amp/amp48.xml
-feedparser/tests/wellformed/amp/amp49.xml
-feedparser/tests/wellformed/amp/amp50.xml
-feedparser/tests/wellformed/amp/amp51.xml
-feedparser/tests/wellformed/amp/amp52.xml
-feedparser/tests/wellformed/amp/amp53.xml
-feedparser/tests/wellformed/amp/amp54.xml
-feedparser/tests/wellformed/amp/amp55.xml
-feedparser/tests/wellformed/amp/amp56.xml
-feedparser/tests/wellformed/amp/amp57.xml
-feedparser/tests/wellformed/amp/amp58.xml
-feedparser/tests/wellformed/amp/amp59.xml
-feedparser/tests/wellformed/amp/amp60.xml
-feedparser/tests/wellformed/amp/amp61.xml
-feedparser/tests/wellformed/amp/amp62.xml
-feedparser/tests/wellformed/amp/amp63.xml
-feedparser/tests/wellformed/amp/amp64.xml
-feedparser/tests/wellformed/amp/attr01.xml
-feedparser/tests/wellformed/amp/attr02.xml
-feedparser/tests/wellformed/amp/attr03.xml
-feedparser/tests/wellformed/amp/attr04.xml
-feedparser/tests/wellformed/amp/attr05.xml
-feedparser/tests/wellformed/amp/attr06.xml
-feedparser/tests/wellformed/atom/atom_namespace_1.xml
-feedparser/tests/wellformed/atom/atom_namespace_2.xml
-feedparser/tests/wellformed/atom/atom_namespace_3.xml
-feedparser/tests/wellformed/atom/atom_namespace_4.xml
-feedparser/tests/wellformed/atom/atom_namespace_5.xml
-feedparser/tests/wellformed/atom/entry_author_email.xml
-feedparser/tests/wellformed/atom/entry_author_homepage.xml
-feedparser/tests/wellformed/atom/entry_author_map_author.xml
-feedparser/tests/wellformed/atom/entry_author_map_author_2.xml
-feedparser/tests/wellformed/atom/entry_author_name.xml
-feedparser/tests/wellformed/atom/entry_author_uri.xml
-feedparser/tests/wellformed/atom/entry_author_url.xml
-feedparser/tests/wellformed/atom/entry_content_mode_base64.xml
-feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/entry_content_type.xml
-feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/entry_content_value.xml
-feedparser/tests/wellformed/atom/entry_contributor_email.xml
-feedparser/tests/wellformed/atom/entry_contributor_homepage.xml
-feedparser/tests/wellformed/atom/entry_contributor_multiple.xml
-feedparser/tests/wellformed/atom/entry_contributor_name.xml
-feedparser/tests/wellformed/atom/entry_contributor_uri.xml
-feedparser/tests/wellformed/atom/entry_contributor_url.xml
-feedparser/tests/wellformed/atom/entry_created.xml
-feedparser/tests/wellformed/atom/entry_created_multiple_values.xml
-feedparser/tests/wellformed/atom/entry_created_parsed.xml
-feedparser/tests/wellformed/atom/entry_id.xml
-feedparser/tests/wellformed/atom/entry_id_map_guid.xml
-feedparser/tests/wellformed/atom/entry_issued.xml
-feedparser/tests/wellformed/atom/entry_issued_parsed.xml
-feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml
-feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml
-feedparser/tests/wellformed/atom/entry_link_href.xml
-feedparser/tests/wellformed/atom/entry_link_multiple.xml
-feedparser/tests/wellformed/atom/entry_link_rel.xml
-feedparser/tests/wellformed/atom/entry_link_title.xml
-feedparser/tests/wellformed/atom/entry_link_type.xml
-feedparser/tests/wellformed/atom/entry_modified.xml
-feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml
-feedparser/tests/wellformed/atom/entry_published_parsed.xml
-feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml
-feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml
-feedparser/tests/wellformed/atom/entry_summary.xml
-feedparser/tests/wellformed/atom/entry_summary_base64.xml
-feedparser/tests/wellformed/atom/entry_summary_base64_2.xml
-feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml
-feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/entry_summary_content_type.xml
-feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/entry_summary_content_value.xml
-feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml
-feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml
-feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml
-feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml
-feedparser/tests/wellformed/atom/entry_summary_text_plain.xml
-feedparser/tests/wellformed/atom/entry_title.xml
-feedparser/tests/wellformed/atom/entry_title_base64.xml
-feedparser/tests/wellformed/atom/entry_title_base64_2.xml
-feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml
-feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/entry_title_content_type.xml
-feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/entry_title_content_value.xml
-feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml
-feedparser/tests/wellformed/atom/entry_title_inline_markup.xml
-feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml
-feedparser/tests/wellformed/atom/entry_title_naked_markup.xml
-feedparser/tests/wellformed/atom/entry_title_text_plain.xml
-feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml
-feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml
-feedparser/tests/wellformed/atom/entry_updated_parsed.xml
-feedparser/tests/wellformed/atom/feed_author_email.xml
-feedparser/tests/wellformed/atom/feed_author_homepage.xml
-feedparser/tests/wellformed/atom/feed_author_map_author.xml
-feedparser/tests/wellformed/atom/feed_author_map_author_2.xml
-feedparser/tests/wellformed/atom/feed_author_name.xml
-feedparser/tests/wellformed/atom/feed_author_uri.xml
-feedparser/tests/wellformed/atom/feed_author_url.xml
-feedparser/tests/wellformed/atom/feed_contributor_email.xml
-feedparser/tests/wellformed/atom/feed_contributor_homepage.xml
-feedparser/tests/wellformed/atom/feed_contributor_multiple.xml
-feedparser/tests/wellformed/atom/feed_contributor_name.xml
-feedparser/tests/wellformed/atom/feed_contributor_uri.xml
-feedparser/tests/wellformed/atom/feed_contributor_url.xml
-feedparser/tests/wellformed/atom/feed_copyright.xml
-feedparser/tests/wellformed/atom/feed_copyright_base64.xml
-feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml
-feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml
-feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/feed_copyright_content_type.xml
-feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/feed_copyright_content_value.xml
-feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml
-feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml
-feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml
-feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml
-feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml
-feedparser/tests/wellformed/atom/feed_generator.xml
-feedparser/tests/wellformed/atom/feed_generator_name.xml
-feedparser/tests/wellformed/atom/feed_generator_url.xml
-feedparser/tests/wellformed/atom/feed_generator_version.xml
-feedparser/tests/wellformed/atom/feed_id.xml
-feedparser/tests/wellformed/atom/feed_id_map_guid.xml
-feedparser/tests/wellformed/atom/feed_info.xml
-feedparser/tests/wellformed/atom/feed_info_base64.xml
-feedparser/tests/wellformed/atom/feed_info_base64_2.xml
-feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml
-feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/feed_info_content_type.xml
-feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/feed_info_content_value.xml
-feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml
-feedparser/tests/wellformed/atom/feed_info_inline_markup.xml
-feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml
-feedparser/tests/wellformed/atom/feed_info_naked_markup.xml
-feedparser/tests/wellformed/atom/feed_info_text_plain.xml
-feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml
-feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml
-feedparser/tests/wellformed/atom/feed_link_href.xml
-feedparser/tests/wellformed/atom/feed_link_multiple.xml
-feedparser/tests/wellformed/atom/feed_link_rel.xml
-feedparser/tests/wellformed/atom/feed_link_title.xml
-feedparser/tests/wellformed/atom/feed_link_type.xml
-feedparser/tests/wellformed/atom/feed_modified.xml
-feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml
-feedparser/tests/wellformed/atom/feed_tagline.xml
-feedparser/tests/wellformed/atom/feed_tagline_base64.xml
-feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml
-feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml
-feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/feed_tagline_content_type.xml
-feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/feed_tagline_content_value.xml
-feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml
-feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml
-feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml
-feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml
-feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml
-feedparser/tests/wellformed/atom/feed_title.xml
-feedparser/tests/wellformed/atom/feed_title_base64.xml
-feedparser/tests/wellformed/atom/feed_title_base64_2.xml
-feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml
-feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml
-feedparser/tests/wellformed/atom/feed_title_content_type.xml
-feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml
-feedparser/tests/wellformed/atom/feed_title_content_value.xml
-feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml
-feedparser/tests/wellformed/atom/feed_title_inline_markup.xml
-feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml
-feedparser/tests/wellformed/atom/feed_title_naked_markup.xml
-feedparser/tests/wellformed/atom/feed_title_text_plain.xml
-feedparser/tests/wellformed/atom/feed_updated_parsed.xml
-feedparser/tests/wellformed/atom/media_player1.xml
-feedparser/tests/wellformed/atom/media_thumbnail.xml
-feedparser/tests/wellformed/atom/relative_uri.xml
-feedparser/tests/wellformed/atom/relative_uri_inherit.xml
-feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml
-feedparser/tests/wellformed/atom10/ampersand_in_attr.xml
-feedparser/tests/wellformed/atom10/atom10_namespace.xml
-feedparser/tests/wellformed/atom10/atom10_version.xml
-feedparser/tests/wellformed/atom10/entry_author_email.xml
-feedparser/tests/wellformed/atom10/entry_author_map_author.xml
-feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml
-feedparser/tests/wellformed/atom10/entry_author_name.xml
-feedparser/tests/wellformed/atom10/entry_author_uri.xml
-feedparser/tests/wellformed/atom10/entry_author_url.xml
-feedparser/tests/wellformed/atom10/entry_authors_email.xml
-feedparser/tests/wellformed/atom10/entry_authors_name.xml
-feedparser/tests/wellformed/atom10/entry_authors_uri.xml
-feedparser/tests/wellformed/atom10/entry_authors_url.xml
-feedparser/tests/wellformed/atom10/entry_category_label.xml
-feedparser/tests/wellformed/atom10/entry_category_scheme.xml
-feedparser/tests/wellformed/atom10/entry_category_term.xml
-feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml
-feedparser/tests/wellformed/atom10/entry_content_application_xml.xml
-feedparser/tests/wellformed/atom10/entry_content_base64.xml
-feedparser/tests/wellformed/atom10/entry_content_base64_2.xml
-feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_content_src.xml
-feedparser/tests/wellformed/atom10/entry_content_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml
-feedparser/tests/wellformed/atom10/entry_content_type.xml
-feedparser/tests/wellformed/atom10/entry_content_type_text.xml
-feedparser/tests/wellformed/atom10/entry_content_value.xml
-feedparser/tests/wellformed/atom10/entry_contributor_email.xml
-feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml
-feedparser/tests/wellformed/atom10/entry_contributor_name.xml
-feedparser/tests/wellformed/atom10/entry_contributor_uri.xml
-feedparser/tests/wellformed/atom10/entry_contributor_url.xml
-feedparser/tests/wellformed/atom10/entry_id.xml
-feedparser/tests/wellformed/atom10/entry_id_map_guid.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml
-feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml
-feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml
-feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml
-feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml
-feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml
-feedparser/tests/wellformed/atom10/entry_link_href.xml
-feedparser/tests/wellformed/atom10/entry_link_hreflang.xml
-feedparser/tests/wellformed/atom10/entry_link_length.xml
-feedparser/tests/wellformed/atom10/entry_link_multiple.xml
-feedparser/tests/wellformed/atom10/entry_link_no_rel.xml
-feedparser/tests/wellformed/atom10/entry_link_rel.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_license.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_other.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_related.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_self.xml
-feedparser/tests/wellformed/atom10/entry_link_rel_via.xml
-feedparser/tests/wellformed/atom10/entry_link_title.xml
-feedparser/tests/wellformed/atom10/entry_link_type.xml
-feedparser/tests/wellformed/atom10/entry_rights.xml
-feedparser/tests/wellformed/atom10/entry_rights_content_value.xml
-feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml
-feedparser/tests/wellformed/atom10/entry_rights_type_default.xml
-feedparser/tests/wellformed/atom10/entry_rights_type_text.xml
-feedparser/tests/wellformed/atom10/entry_source_author_email.xml
-feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml
-feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml
-feedparser/tests/wellformed/atom10/entry_source_author_name.xml
-feedparser/tests/wellformed/atom10/entry_source_author_uri.xml
-feedparser/tests/wellformed/atom10/entry_source_authors_email.xml
-feedparser/tests/wellformed/atom10/entry_source_authors_name.xml
-feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml
-feedparser/tests/wellformed/atom10/entry_source_authors_url.xml
-feedparser/tests/wellformed/atom10/entry_source_category_label.xml
-feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml
-feedparser/tests/wellformed/atom10/entry_source_category_term.xml
-feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml
-feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml
-feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml
-feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml
-feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml
-feedparser/tests/wellformed/atom10/entry_source_generator.xml
-feedparser/tests/wellformed/atom10/entry_source_generator_name.xml
-feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml
-feedparser/tests/wellformed/atom10/entry_source_generator_version.xml
-feedparser/tests/wellformed/atom10/entry_source_icon.xml
-feedparser/tests/wellformed/atom10/entry_source_id.xml
-feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml
-feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml
-feedparser/tests/wellformed/atom10/entry_source_link_href.xml
-feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml
-feedparser/tests/wellformed/atom10/entry_source_link_length.xml
-feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml
-feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml
-feedparser/tests/wellformed/atom10/entry_source_link_rel.xml
-feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml
-feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml
-feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml
-feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml
-feedparser/tests/wellformed/atom10/entry_source_link_title.xml
-feedparser/tests/wellformed/atom10/entry_source_link_type.xml
-feedparser/tests/wellformed/atom10/entry_source_logo.xml
-feedparser/tests/wellformed/atom10/entry_source_rights.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_source_title.xml
-feedparser/tests/wellformed/atom10/entry_source_title_base64.xml
-feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml
-feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml
-feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml
-feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml
-feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_summary.xml
-feedparser/tests/wellformed/atom10/entry_summary_base64.xml
-feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml
-feedparser/tests/wellformed/atom10/entry_summary_content_value.xml
-feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_summary_type_default.xml
-feedparser/tests/wellformed/atom10/entry_summary_type_text.xml
-feedparser/tests/wellformed/atom10/entry_title.xml
-feedparser/tests/wellformed/atom10/entry_title_base64.xml
-feedparser/tests/wellformed/atom10/entry_title_base64_2.xml
-feedparser/tests/wellformed/atom10/entry_title_content_value.xml
-feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml
-feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml
-feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/entry_title_text_plain.xml
-feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml
-feedparser/tests/wellformed/atom10/entry_title_type_default.xml
-feedparser/tests/wellformed/atom10/entry_title_type_text.xml
-feedparser/tests/wellformed/atom10/feed_author_email.xml
-feedparser/tests/wellformed/atom10/feed_author_map_author.xml
-feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml
-feedparser/tests/wellformed/atom10/feed_author_name.xml
-feedparser/tests/wellformed/atom10/feed_author_uri.xml
-feedparser/tests/wellformed/atom10/feed_author_url.xml
-feedparser/tests/wellformed/atom10/feed_authors_email.xml
-feedparser/tests/wellformed/atom10/feed_authors_name.xml
-feedparser/tests/wellformed/atom10/feed_authors_uri.xml
-feedparser/tests/wellformed/atom10/feed_authors_url.xml
-feedparser/tests/wellformed/atom10/feed_contributor_email.xml
-feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml
-feedparser/tests/wellformed/atom10/feed_contributor_name.xml
-feedparser/tests/wellformed/atom10/feed_contributor_uri.xml
-feedparser/tests/wellformed/atom10/feed_contributor_url.xml
-feedparser/tests/wellformed/atom10/feed_generator.xml
-feedparser/tests/wellformed/atom10/feed_generator_name.xml
-feedparser/tests/wellformed/atom10/feed_generator_url.xml
-feedparser/tests/wellformed/atom10/feed_generator_version.xml
-feedparser/tests/wellformed/atom10/feed_icon.xml
-feedparser/tests/wellformed/atom10/feed_id.xml
-feedparser/tests/wellformed/atom10/feed_id_map_guid.xml
-feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml
-feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml
-feedparser/tests/wellformed/atom10/feed_link_href.xml
-feedparser/tests/wellformed/atom10/feed_link_hreflang.xml
-feedparser/tests/wellformed/atom10/feed_link_length.xml
-feedparser/tests/wellformed/atom10/feed_link_multiple.xml
-feedparser/tests/wellformed/atom10/feed_link_no_rel.xml
-feedparser/tests/wellformed/atom10/feed_link_rel.xml
-feedparser/tests/wellformed/atom10/feed_link_rel_other.xml
-feedparser/tests/wellformed/atom10/feed_link_rel_related.xml
-feedparser/tests/wellformed/atom10/feed_link_rel_self.xml
-feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml
-feedparser/tests/wellformed/atom10/feed_link_rel_via.xml
-feedparser/tests/wellformed/atom10/feed_link_title.xml
-feedparser/tests/wellformed/atom10/feed_link_type.xml
-feedparser/tests/wellformed/atom10/feed_logo.xml
-feedparser/tests/wellformed/atom10/feed_rights.xml
-feedparser/tests/wellformed/atom10/feed_rights_base64.xml
-feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml
-feedparser/tests/wellformed/atom10/feed_rights_content_type.xml
-feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml
-feedparser/tests/wellformed/atom10/feed_rights_content_value.xml
-feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml
-feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml
-feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml
-feedparser/tests/wellformed/atom10/feed_subtitle.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml
-feedparser/tests/wellformed/atom10/feed_title.xml
-feedparser/tests/wellformed/atom10/feed_title_base64.xml
-feedparser/tests/wellformed/atom10/feed_title_base64_2.xml
-feedparser/tests/wellformed/atom10/feed_title_content_type.xml
-feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml
-feedparser/tests/wellformed/atom10/feed_title_content_value.xml
-feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml
-feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml
-feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml
-feedparser/tests/wellformed/atom10/feed_title_text_plain.xml
-feedparser/tests/wellformed/atom10/item_media_category_label.xml
-feedparser/tests/wellformed/atom10/item_media_category_multiple.xml
-feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml
-feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml
-feedparser/tests/wellformed/atom10/item_media_category_term.xml
-feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml
-feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml
-feedparser/tests/wellformed/atom10/qna.xml
-feedparser/tests/wellformed/atom10/quote_in_attr.xml
-feedparser/tests/wellformed/atom10/relative_uri.xml
-feedparser/tests/wellformed/atom10/relative_uri_inherit.xml
-feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml
-feedparser/tests/wellformed/atom10/tag_in_attr.xml
-feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml
-feedparser/tests/wellformed/base/entry_content_xml_base.xml
-feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml
-feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/entry_summary_xml_base.xml
-feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml
-feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/entry_title_xml_base.xml
-feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml
-feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/feed_copyright_xml_base.xml
-feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml
-feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/feed_info_xml_base.xml
-feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml
-feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml
-feedparser/tests/wellformed/base/feed_tagline_xml_base.xml
-feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml
-feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/feed_title_xml_base.xml
-feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml
-feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml
-feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml
-feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml
-feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml
-feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml
-feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml
-feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml
-feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml
-feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml
-feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_body_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_body_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_description_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_description_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_description_spaces.xml
-feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_link_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_link_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml
-feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml
-feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml
-feedparser/tests/wellformed/base/http_relative_xml_base.xml
-feedparser/tests/wellformed/base/http_relative_xml_base_2.xml
-feedparser/tests/wellformed/base/item_media_title1.xml
-feedparser/tests/wellformed/base/item_media_title2.xml
-feedparser/tests/wellformed/base/item_media_title3.xml
-feedparser/tests/wellformed/base/malformed_base.xml
-feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml
-feedparser/tests/wellformed/base/relative_xml_base.xml
-feedparser/tests/wellformed/base/relative_xml_base_2.xml
-feedparser/tests/wellformed/base/unsafe_base.xml
-feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml
-feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml
-feedparser/tests/wellformed/cdf/channel_href_map_link.xml
-feedparser/tests/wellformed/cdf/channel_href_map_links.xml
-feedparser/tests/wellformed/cdf/channel_lastmod.xml
-feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml
-feedparser/tests/wellformed/cdf/channel_title.xml
-feedparser/tests/wellformed/cdf/item_abstract_map_description.xml
-feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml
-feedparser/tests/wellformed/cdf/item_href_map_link.xml
-feedparser/tests/wellformed/cdf/item_href_map_links.xml
-feedparser/tests/wellformed/cdf/item_lastmod.xml
-feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml
-feedparser/tests/wellformed/cdf/item_title.xml
-feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml
-feedparser/tests/wellformed/http/headers_content_location-relative.xml
-feedparser/tests/wellformed/http/headers_content_location-unsafe.xml
-feedparser/tests/wellformed/http/headers_etag.xml
-feedparser/tests/wellformed/http/headers_foo.xml
-feedparser/tests/wellformed/http/headers_no_etag.xml
-feedparser/tests/wellformed/itunes/itunes_channel_block.xml
-feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml
-feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml
-feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml
-feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml
-feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml
-feedparser/tests/wellformed/itunes/itunes_channel_category.xml
-feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml
-feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml
-feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml
-feedparser/tests/wellformed/itunes/itunes_channel_image.xml
-feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml
-feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml
-feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml
-feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml
-feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml
-feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml
-feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml
-feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml
-feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml
-feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml
-feedparser/tests/wellformed/itunes/itunes_channel_summary.xml
-feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml
-feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml
-feedparser/tests/wellformed/itunes/itunes_item_block.xml
-feedparser/tests/wellformed/itunes/itunes_item_block_false.xml
-feedparser/tests/wellformed/itunes/itunes_item_block_no.xml
-feedparser/tests/wellformed/itunes/itunes_item_block_true.xml
-feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml
-feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml
-feedparser/tests/wellformed/itunes/itunes_item_category.xml
-feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml
-feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml
-feedparser/tests/wellformed/itunes/itunes_item_duration.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml
-feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml
-feedparser/tests/wellformed/itunes/itunes_item_image.xml
-feedparser/tests/wellformed/itunes/itunes_item_image_url.xml
-feedparser/tests/wellformed/itunes/itunes_item_link_image.xml
-feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml
-feedparser/tests/wellformed/itunes/itunes_item_summary.xml
-feedparser/tests/wellformed/itunes/itunes_namespace.xml
-feedparser/tests/wellformed/itunes/itunes_namespace_example.xml
-feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml
-feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml
-feedparser/tests/wellformed/lang/channel_dc_language.xml
-feedparser/tests/wellformed/lang/channel_language.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml
-feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml
-feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/entry_title_xml_lang.xml
-feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml
-feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/feed_info_xml_lang.xml
-feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/feed_language.xml
-feedparser/tests/wellformed/lang/feed_language_override.xml
-feedparser/tests/wellformed/lang/feed_not_xml_lang.xml
-feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml
-feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml
-feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/feed_title_xml_lang.xml
-feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml
-feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml
-feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml
-feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml
-feedparser/tests/wellformed/lang/feed_xml_lang.xml
-feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml
-feedparser/tests/wellformed/lang/http_content_language.xml
-feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml
-feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml
-feedparser/tests/wellformed/lang/http_content_language_feed_language.xml
-feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml
-feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml
-feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/item_dc_language.xml
-feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml
-feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml
-feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml
-feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml
-feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml
-feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml
-feedparser/tests/wellformed/namespace/atommathml.xml
-feedparser/tests/wellformed/namespace/atomsvg.xml
-feedparser/tests/wellformed/namespace/atomsvgdctitle.xml
-feedparser/tests/wellformed/namespace/atomsvgdesc.xml
-feedparser/tests/wellformed/namespace/atomsvgtitle.xml
-feedparser/tests/wellformed/namespace/atomthreading.xml
-feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml
-feedparser/tests/wellformed/namespace/atomxlink.xml
-feedparser/tests/wellformed/namespace/rss1.0withModules.xml
-feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml
-feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml
-feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml
-feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml
-feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml
-feedparser/tests/wellformed/namespace/rss2.0mathml.xml
-feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml
-feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml
-feedparser/tests/wellformed/namespace/rss2.0svg.xml
-feedparser/tests/wellformed/namespace/rss2.0svg5.xml
-feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml
-feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml
-feedparser/tests/wellformed/namespace/rss2.0xlink.xml
-feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml
-feedparser/tests/wellformed/node_precedence/atom10_id.xml
-feedparser/tests/wellformed/node_precedence/atom10_title.xml
-feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml
-feedparser/tests/wellformed/rdf/rdf_channel_description.xml
-feedparser/tests/wellformed/rdf/rdf_channel_link.xml
-feedparser/tests/wellformed/rdf/rdf_channel_title.xml
-feedparser/tests/wellformed/rdf/rdf_item_description.xml
-feedparser/tests/wellformed/rdf/rdf_item_link.xml
-feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml
-feedparser/tests/wellformed/rdf/rdf_item_title.xml
-feedparser/tests/wellformed/rdf/rss090_channel_title.xml
-feedparser/tests/wellformed/rdf/rss090_item_title.xml
-feedparser/tests/wellformed/rdf/rss_version_10.xml
-feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml
-feedparser/tests/wellformed/rss/aaa_wellformed.xml
-feedparser/tests/wellformed/rss/channel_author.xml
-feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml
-feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml
-feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml
-feedparser/tests/wellformed/rss/channel_category.xml
-feedparser/tests/wellformed/rss/channel_category_domain.xml
-feedparser/tests/wellformed/rss/channel_category_multiple.xml
-feedparser/tests/wellformed/rss/channel_category_multiple_2.xml
-feedparser/tests/wellformed/rss/channel_cloud_domain.xml
-feedparser/tests/wellformed/rss/channel_cloud_path.xml
-feedparser/tests/wellformed/rss/channel_cloud_port.xml
-feedparser/tests/wellformed/rss/channel_cloud_protocol.xml
-feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml
-feedparser/tests/wellformed/rss/channel_copyright.xml
-feedparser/tests/wellformed/rss/channel_dc_author.xml
-feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/channel_dc_contributor.xml
-feedparser/tests/wellformed/rss/channel_dc_creator.xml
-feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/channel_dc_date.xml
-feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml
-feedparser/tests/wellformed/rss/channel_dc_publisher.xml
-feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml
-feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml
-feedparser/tests/wellformed/rss/channel_dc_rights.xml
-feedparser/tests/wellformed/rss/channel_dc_subject.xml
-feedparser/tests/wellformed/rss/channel_dc_subject_2.xml
-feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml
-feedparser/tests/wellformed/rss/channel_dc_title.xml
-feedparser/tests/wellformed/rss/channel_dcterms_created.xml
-feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml
-feedparser/tests/wellformed/rss/channel_dcterms_issued.xml
-feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml
-feedparser/tests/wellformed/rss/channel_dcterms_modified.xml
-feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml
-feedparser/tests/wellformed/rss/channel_description.xml
-feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml
-feedparser/tests/wellformed/rss/channel_description_map_tagline.xml
-feedparser/tests/wellformed/rss/channel_description_naked_markup.xml
-feedparser/tests/wellformed/rss/channel_description_shorttag.xml
-feedparser/tests/wellformed/rss/channel_docs.xml
-feedparser/tests/wellformed/rss/channel_generator.xml
-feedparser/tests/wellformed/rss/channel_image_description.xml
-feedparser/tests/wellformed/rss/channel_image_height.xml
-feedparser/tests/wellformed/rss/channel_image_link.xml
-feedparser/tests/wellformed/rss/channel_image_link_bleed.xml
-feedparser/tests/wellformed/rss/channel_image_link_conflict.xml
-feedparser/tests/wellformed/rss/channel_image_title.xml
-feedparser/tests/wellformed/rss/channel_image_title_conflict.xml
-feedparser/tests/wellformed/rss/channel_image_url.xml
-feedparser/tests/wellformed/rss/channel_image_width.xml
-feedparser/tests/wellformed/rss/channel_lastBuildDate.xml
-feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml
-feedparser/tests/wellformed/rss/channel_link.xml
-feedparser/tests/wellformed/rss/channel_managingEditor.xml
-feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/channel_pubDate.xml
-feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml
-feedparser/tests/wellformed/rss/channel_textInput_description.xml
-feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml
-feedparser/tests/wellformed/rss/channel_textInput_link.xml
-feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml
-feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml
-feedparser/tests/wellformed/rss/channel_textInput_name.xml
-feedparser/tests/wellformed/rss/channel_textInput_title.xml
-feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml
-feedparser/tests/wellformed/rss/channel_title.xml
-feedparser/tests/wellformed/rss/channel_title_apos.xml
-feedparser/tests/wellformed/rss/channel_title_gt.xml
-feedparser/tests/wellformed/rss/channel_title_lt.xml
-feedparser/tests/wellformed/rss/channel_ttl.xml
-feedparser/tests/wellformed/rss/channel_webMaster.xml
-feedparser/tests/wellformed/rss/channel_webMaster_email.xml
-feedparser/tests/wellformed/rss/channel_webMaster_name.xml
-feedparser/tests/wellformed/rss/entity_in_doctype.xml
-feedparser/tests/wellformed/rss/item_author.xml
-feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml
-feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml
-feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml
-feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml
-feedparser/tests/wellformed/rss/item_category.xml
-feedparser/tests/wellformed/rss/item_category_domain.xml
-feedparser/tests/wellformed/rss/item_category_image.xml
-feedparser/tests/wellformed/rss/item_category_multiple.xml
-feedparser/tests/wellformed/rss/item_category_multiple_2.xml
-feedparser/tests/wellformed/rss/item_cc_license.xml
-feedparser/tests/wellformed/rss/item_comments.xml
-feedparser/tests/wellformed/rss/item_content_encoded.xml
-feedparser/tests/wellformed/rss/item_content_encoded_mode.xml
-feedparser/tests/wellformed/rss/item_content_encoded_type.xml
-feedparser/tests/wellformed/rss/item_creativeCommons_license.xml
-feedparser/tests/wellformed/rss/item_dc_author.xml
-feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/item_dc_contributor.xml
-feedparser/tests/wellformed/rss/item_dc_creator.xml
-feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml
-feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml
-feedparser/tests/wellformed/rss/item_dc_date.xml
-feedparser/tests/wellformed/rss/item_dc_date_parsed.xml
-feedparser/tests/wellformed/rss/item_dc_description.xml
-feedparser/tests/wellformed/rss/item_dc_publisher.xml
-feedparser/tests/wellformed/rss/item_dc_publisher_email.xml
-feedparser/tests/wellformed/rss/item_dc_publisher_name.xml
-feedparser/tests/wellformed/rss/item_dc_rights.xml
-feedparser/tests/wellformed/rss/item_dc_subject.xml
-feedparser/tests/wellformed/rss/item_dc_subject_2.xml
-feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml
-feedparser/tests/wellformed/rss/item_dc_title.xml
-feedparser/tests/wellformed/rss/item_dcterms_created.xml
-feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml
-feedparser/tests/wellformed/rss/item_dcterms_issued.xml
-feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml
-feedparser/tests/wellformed/rss/item_dcterms_modified.xml
-feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml
-feedparser/tests/wellformed/rss/item_description.xml
-feedparser/tests/wellformed/rss/item_description_and_summary.xml
-feedparser/tests/wellformed/rss/item_description_br.xml
-feedparser/tests/wellformed/rss/item_description_br_shorttag.xml
-feedparser/tests/wellformed/rss/item_description_code_br.xml
-feedparser/tests/wellformed/rss/item_description_escaped_markup.xml
-feedparser/tests/wellformed/rss/item_description_map_summary.xml
-feedparser/tests/wellformed/rss/item_description_naked_markup.xml
-feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml
-feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml
-feedparser/tests/wellformed/rss/item_enclosure_length.xml
-feedparser/tests/wellformed/rss/item_enclosure_multiple.xml
-feedparser/tests/wellformed/rss/item_enclosure_type.xml
-feedparser/tests/wellformed/rss/item_enclosure_url.xml
-feedparser/tests/wellformed/rss/item_expirationDate.xml
-feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml
-feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml
-feedparser/tests/wellformed/rss/item_fullitem.xml
-feedparser/tests/wellformed/rss/item_fullitem_mode.xml
-feedparser/tests/wellformed/rss/item_fullitem_type.xml
-feedparser/tests/wellformed/rss/item_guid.xml
-feedparser/tests/wellformed/rss/item_guid_conflict_link.xml
-feedparser/tests/wellformed/rss/item_guid_guidislink.xml
-feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml
-feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml
-feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml
-feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml
-feedparser/tests/wellformed/rss/item_guid_map_link.xml
-feedparser/tests/wellformed/rss/item_guid_not_permalink.xml
-feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml
-feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml
-feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml
-feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml
-feedparser/tests/wellformed/rss/item_image_link_bleed.xml
-feedparser/tests/wellformed/rss/item_image_link_conflict.xml
-feedparser/tests/wellformed/rss/item_link.xml
-feedparser/tests/wellformed/rss/item_pubDate.xml
-feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml
-feedparser/tests/wellformed/rss/item_source.xml
-feedparser/tests/wellformed/rss/item_source_url.xml
-feedparser/tests/wellformed/rss/item_summary_and_description.xml
-feedparser/tests/wellformed/rss/item_title.xml
-feedparser/tests/wellformed/rss/item_xhtml_body.xml
-feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml
-feedparser/tests/wellformed/rss/item_xhtml_body_type.xml
-feedparser/tests/wellformed/rss/newlocation.xml
-feedparser/tests/wellformed/rss/rss_namespace_1.xml
-feedparser/tests/wellformed/rss/rss_namespace_2.xml
-feedparser/tests/wellformed/rss/rss_namespace_3.xml
-feedparser/tests/wellformed/rss/rss_namespace_4.xml
-feedparser/tests/wellformed/rss/rss_version_090.xml
-feedparser/tests/wellformed/rss/rss_version_091_netscape.xml
-feedparser/tests/wellformed/rss/rss_version_091_userland.xml
-feedparser/tests/wellformed/rss/rss_version_092.xml
-feedparser/tests/wellformed/rss/rss_version_093.xml
-feedparser/tests/wellformed/rss/rss_version_094.xml
-feedparser/tests/wellformed/rss/rss_version_20.xml
-feedparser/tests/wellformed/rss/rss_version_201.xml
-feedparser/tests/wellformed/rss/rss_version_21.xml
-feedparser/tests/wellformed/rss/rss_version_missing.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml
-feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_a.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_address.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_area.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_article.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_b.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_big.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_br.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_button.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_center.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_code.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_col.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_command.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_del.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_details.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_div.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_em.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_font.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_form.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_header.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_i.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_img.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_input.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_label.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_li.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_m.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_map.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_option.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_output.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_p.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_q.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_s.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_section.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_select.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_small.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_source.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_span.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_table.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_td.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_th.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_time.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_u.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_var.xml
-feedparser/tests/wellformed/sanitize/acceptable_element_video.xml
-feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml
-feedparser/tests/wellformed/sanitize/entry_content_applet.xml
-feedparser/tests/wellformed/sanitize/entry_content_blink.xml
-feedparser/tests/wellformed/sanitize/entry_content_crazy.xml
-feedparser/tests/wellformed/sanitize/entry_content_embed.xml
-feedparser/tests/wellformed/sanitize/entry_content_frame.xml
-feedparser/tests/wellformed/sanitize/entry_content_iframe.xml
-feedparser/tests/wellformed/sanitize/entry_content_link.xml
-feedparser/tests/wellformed/sanitize/entry_content_meta.xml
-feedparser/tests/wellformed/sanitize/entry_content_object.xml
-feedparser/tests/wellformed/sanitize/entry_content_onabort.xml
-feedparser/tests/wellformed/sanitize/entry_content_onblur.xml
-feedparser/tests/wellformed/sanitize/entry_content_onchange.xml
-feedparser/tests/wellformed/sanitize/entry_content_onclick.xml
-feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml
-feedparser/tests/wellformed/sanitize/entry_content_onerror.xml
-feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml
-feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml
-feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml
-feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml
-feedparser/tests/wellformed/sanitize/entry_content_onload.xml
-feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml
-feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml
-feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml
-feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml
-feedparser/tests/wellformed/sanitize/entry_content_onreset.xml
-feedparser/tests/wellformed/sanitize/entry_content_onresize.xml
-feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml
-feedparser/tests/wellformed/sanitize/entry_content_onunload.xml
-feedparser/tests/wellformed/sanitize/entry_content_script.xml
-feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml
-feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml
-feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml
-feedparser/tests/wellformed/sanitize/entry_content_style.xml
-feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml
-feedparser/tests/wellformed/sanitize/entry_summary_applet.xml
-feedparser/tests/wellformed/sanitize/entry_summary_blink.xml
-feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml
-feedparser/tests/wellformed/sanitize/entry_summary_embed.xml
-feedparser/tests/wellformed/sanitize/entry_summary_frame.xml
-feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml
-feedparser/tests/wellformed/sanitize/entry_summary_link.xml
-feedparser/tests/wellformed/sanitize/entry_summary_meta.xml
-feedparser/tests/wellformed/sanitize/entry_summary_object.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml
-feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onload.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml
-feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml
-feedparser/tests/wellformed/sanitize/entry_summary_script.xml
-feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml
-feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml
-feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml
-feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml
-feedparser/tests/wellformed/sanitize/entry_summary_style.xml
-feedparser/tests/wellformed/sanitize/entry_title_applet.xml
-feedparser/tests/wellformed/sanitize/entry_title_blink.xml
-feedparser/tests/wellformed/sanitize/entry_title_crazy.xml
-feedparser/tests/wellformed/sanitize/entry_title_embed.xml
-feedparser/tests/wellformed/sanitize/entry_title_frame.xml
-feedparser/tests/wellformed/sanitize/entry_title_iframe.xml
-feedparser/tests/wellformed/sanitize/entry_title_link.xml
-feedparser/tests/wellformed/sanitize/entry_title_meta.xml
-feedparser/tests/wellformed/sanitize/entry_title_object.xml
-feedparser/tests/wellformed/sanitize/entry_title_onabort.xml
-feedparser/tests/wellformed/sanitize/entry_title_onblur.xml
-feedparser/tests/wellformed/sanitize/entry_title_onchange.xml
-feedparser/tests/wellformed/sanitize/entry_title_onclick.xml
-feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml
-feedparser/tests/wellformed/sanitize/entry_title_onerror.xml
-feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml
-feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml
-feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml
-feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml
-feedparser/tests/wellformed/sanitize/entry_title_onload.xml
-feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml
-feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml
-feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml
-feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml
-feedparser/tests/wellformed/sanitize/entry_title_onreset.xml
-feedparser/tests/wellformed/sanitize/entry_title_onresize.xml
-feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml
-feedparser/tests/wellformed/sanitize/entry_title_onunload.xml
-feedparser/tests/wellformed/sanitize/entry_title_script.xml
-feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml
-feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml
-feedparser/tests/wellformed/sanitize/entry_title_style.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_link.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_object.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_script.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml
-feedparser/tests/wellformed/sanitize/feed_copyright_style.xml
-feedparser/tests/wellformed/sanitize/feed_info_applet.xml
-feedparser/tests/wellformed/sanitize/feed_info_blink.xml
-feedparser/tests/wellformed/sanitize/feed_info_crazy.xml
-feedparser/tests/wellformed/sanitize/feed_info_embed.xml
-feedparser/tests/wellformed/sanitize/feed_info_frame.xml
-feedparser/tests/wellformed/sanitize/feed_info_iframe.xml
-feedparser/tests/wellformed/sanitize/feed_info_link.xml
-feedparser/tests/wellformed/sanitize/feed_info_meta.xml
-feedparser/tests/wellformed/sanitize/feed_info_object.xml
-feedparser/tests/wellformed/sanitize/feed_info_onabort.xml
-feedparser/tests/wellformed/sanitize/feed_info_onblur.xml
-feedparser/tests/wellformed/sanitize/feed_info_onchange.xml
-feedparser/tests/wellformed/sanitize/feed_info_onclick.xml
-feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml
-feedparser/tests/wellformed/sanitize/feed_info_onerror.xml
-feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml
-feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml
-feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml
-feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml
-feedparser/tests/wellformed/sanitize/feed_info_onload.xml
-feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml
-feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml
-feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml
-feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml
-feedparser/tests/wellformed/sanitize/feed_info_onreset.xml
-feedparser/tests/wellformed/sanitize/feed_info_onresize.xml
-feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml
-feedparser/tests/wellformed/sanitize/feed_info_onunload.xml
-feedparser/tests/wellformed/sanitize/feed_info_script.xml
-feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml
-feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml
-feedparser/tests/wellformed/sanitize/feed_info_style.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml
-feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_link.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_object.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_script.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml
-feedparser/tests/wellformed/sanitize/feed_tagline_style.xml
-feedparser/tests/wellformed/sanitize/feed_title_applet.xml
-feedparser/tests/wellformed/sanitize/feed_title_blink.xml
-feedparser/tests/wellformed/sanitize/feed_title_crazy.xml
-feedparser/tests/wellformed/sanitize/feed_title_embed.xml
-feedparser/tests/wellformed/sanitize/feed_title_frame.xml
-feedparser/tests/wellformed/sanitize/feed_title_iframe.xml
-feedparser/tests/wellformed/sanitize/feed_title_link.xml
-feedparser/tests/wellformed/sanitize/feed_title_meta.xml
-feedparser/tests/wellformed/sanitize/feed_title_object.xml
-feedparser/tests/wellformed/sanitize/feed_title_onabort.xml
-feedparser/tests/wellformed/sanitize/feed_title_onblur.xml
-feedparser/tests/wellformed/sanitize/feed_title_onchange.xml
-feedparser/tests/wellformed/sanitize/feed_title_onclick.xml
-feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml
-feedparser/tests/wellformed/sanitize/feed_title_onerror.xml
-feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml
-feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml
-feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml
-feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml
-feedparser/tests/wellformed/sanitize/feed_title_onload.xml
-feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml
-feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml
-feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml
-feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml
-feedparser/tests/wellformed/sanitize/feed_title_onreset.xml
-feedparser/tests/wellformed/sanitize/feed_title_onresize.xml
-feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml
-feedparser/tests/wellformed/sanitize/feed_title_onunload.xml
-feedparser/tests/wellformed/sanitize/feed_title_script.xml
-feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml
-feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml
-feedparser/tests/wellformed/sanitize/feed_title_style.xml
-feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml
-feedparser/tests/wellformed/sanitize/item_body_applet.xml
-feedparser/tests/wellformed/sanitize/item_body_blink.xml
-feedparser/tests/wellformed/sanitize/item_body_embed.xml
-feedparser/tests/wellformed/sanitize/item_body_frame.xml
-feedparser/tests/wellformed/sanitize/item_body_iframe.xml
-feedparser/tests/wellformed/sanitize/item_body_link.xml
-feedparser/tests/wellformed/sanitize/item_body_meta.xml
-feedparser/tests/wellformed/sanitize/item_body_object.xml
-feedparser/tests/wellformed/sanitize/item_body_onabort.xml
-feedparser/tests/wellformed/sanitize/item_body_onblur.xml
-feedparser/tests/wellformed/sanitize/item_body_onchange.xml
-feedparser/tests/wellformed/sanitize/item_body_onclick.xml
-feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml
-feedparser/tests/wellformed/sanitize/item_body_onerror.xml
-feedparser/tests/wellformed/sanitize/item_body_onfocus.xml
-feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml
-feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml
-feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml
-feedparser/tests/wellformed/sanitize/item_body_onload.xml
-feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml
-feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml
-feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml
-feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml
-feedparser/tests/wellformed/sanitize/item_body_onreset.xml
-feedparser/tests/wellformed/sanitize/item_body_onresize.xml
-feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml
-feedparser/tests/wellformed/sanitize/item_body_onunload.xml
-feedparser/tests/wellformed/sanitize/item_body_script.xml
-feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml
-feedparser/tests/wellformed/sanitize/item_body_style.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml
-feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml
-feedparser/tests/wellformed/sanitize/item_description_applet.xml
-feedparser/tests/wellformed/sanitize/item_description_blink.xml
-feedparser/tests/wellformed/sanitize/item_description_crazy.xml
-feedparser/tests/wellformed/sanitize/item_description_embed.xml
-feedparser/tests/wellformed/sanitize/item_description_frame.xml
-feedparser/tests/wellformed/sanitize/item_description_iframe.xml
-feedparser/tests/wellformed/sanitize/item_description_link.xml
-feedparser/tests/wellformed/sanitize/item_description_meta.xml
-feedparser/tests/wellformed/sanitize/item_description_object.xml
-feedparser/tests/wellformed/sanitize/item_description_onabort.xml
-feedparser/tests/wellformed/sanitize/item_description_onblur.xml
-feedparser/tests/wellformed/sanitize/item_description_onchange.xml
-feedparser/tests/wellformed/sanitize/item_description_onclick.xml
-feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml
-feedparser/tests/wellformed/sanitize/item_description_onerror.xml
-feedparser/tests/wellformed/sanitize/item_description_onfocus.xml
-feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml
-feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml
-feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml
-feedparser/tests/wellformed/sanitize/item_description_onload.xml
-feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml
-feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml
-feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml
-feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml
-feedparser/tests/wellformed/sanitize/item_description_onreset.xml
-feedparser/tests/wellformed/sanitize/item_description_onresize.xml
-feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml
-feedparser/tests/wellformed/sanitize/item_description_onunload.xml
-feedparser/tests/wellformed/sanitize/item_description_script.xml
-feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml
-feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml
-feedparser/tests/wellformed/sanitize/item_description_style.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_link.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_object.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_script.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml
-feedparser/tests/wellformed/sanitize/item_fullitem_style.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml
-feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml
-feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml
-feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml
-feedparser/tests/wellformed/sanitize/style_background_url.xml
-feedparser/tests/wellformed/sanitize/style_background_yellow.xml
-feedparser/tests/wellformed/sanitize/style_border_0.xml
-feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml
-feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml
-feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml
-feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml
-feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml
-feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml
-feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml
-feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml
-feedparser/tests/wellformed/sanitize/style_border_none_important.xml
-feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml
-feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml
-feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml
-feedparser/tests/wellformed/sanitize/style_clear_both.xml
-feedparser/tests/wellformed/sanitize/style_color_000080.xml
-feedparser/tests/wellformed/sanitize/style_color_008.xml
-feedparser/tests/wellformed/sanitize/style_color_999999.xml
-feedparser/tests/wellformed/sanitize/style_color_blue.xml
-feedparser/tests/wellformed/sanitize/style_color_maroon.xml
-feedparser/tests/wellformed/sanitize/style_color_red.xml
-feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml
-feedparser/tests/wellformed/sanitize/style_color_teal.xml
-feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml
-feedparser/tests/wellformed/sanitize/style_display_block.xml
-feedparser/tests/wellformed/sanitize/style_float_left.xml
-feedparser/tests/wellformed/sanitize/style_float_right.xml
-feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml
-feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml
-feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml
-feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml
-feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml
-feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml
-feedparser/tests/wellformed/sanitize/style_font_size_10px.xml
-feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml
-feedparser/tests/wellformed/sanitize/style_font_style_italic.xml
-feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml
-feedparser/tests/wellformed/sanitize/style_height_100px.xml
-feedparser/tests/wellformed/sanitize/style_height_2px.xml
-feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml
-feedparser/tests/wellformed/sanitize/style_line_height_normal.xml
-feedparser/tests/wellformed/sanitize/style_margin_0.xml
-feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml
-feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml
-feedparser/tests/wellformed/sanitize/style_margin_5px.xml
-feedparser/tests/wellformed/sanitize/style_margin_99999em.xml
-feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml
-feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml
-feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml
-feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml
-feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml
-feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml
-feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml
-feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml
-feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml
-feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml
-feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml
-feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml
-feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml
-feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml
-feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml
-feedparser/tests/wellformed/sanitize/style_overflow_auto.xml
-feedparser/tests/wellformed/sanitize/style_padding_0.xml
-feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml
-feedparser/tests/wellformed/sanitize/style_padding_2ex.xml
-feedparser/tests/wellformed/sanitize/style_padding_99999em.xml
-feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml
-feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml
-feedparser/tests/wellformed/sanitize/style_position_absolute.xml
-feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml
-feedparser/tests/wellformed/sanitize/style_text_align_center.xml
-feedparser/tests/wellformed/sanitize/style_text_align_left.xml
-feedparser/tests/wellformed/sanitize/style_text_align_right.xml
-feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml
-feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml
-feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml
-feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml
-feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml
-feedparser/tests/wellformed/sanitize/style_white_space_top.xml
-feedparser/tests/wellformed/sanitize/style_width_300px.xml
-feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml
-feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml
-feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml
-feedparser/tests/wellformed/sgml/charref_uppercase_x.xml
-feedparser/tests/wellformed/xml/empty_xmlns_uri.xml
-feedparser/tests/wellformed/xml/escaped_apos.xml
-feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml
\ No newline at end of file
diff --git a/lib/feedparser/feedparser.egg-info/dependency_links.txt b/lib/feedparser/feedparser.egg-info/dependency_links.txt
deleted file mode 100644
index 8b137891..00000000
--- a/lib/feedparser/feedparser.egg-info/dependency_links.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/lib/feedparser/feedparser.egg-info/top_level.txt b/lib/feedparser/feedparser.egg-info/top_level.txt
deleted file mode 100644
index 1b25361f..00000000
--- a/lib/feedparser/feedparser.egg-info/top_level.txt
+++ /dev/null
@@ -1 +0,0 @@
-feedparser
diff --git a/lib/feedparser/feedparser.py b/lib/feedparser/feedparser.py
index c78e6a39..578e2020 100644
--- a/lib/feedparser/feedparser.py
+++ b/lib/feedparser/feedparser.py
@@ -9,10 +9,10 @@ Required: Python 2.4 or later
Recommended: iconv_codec
"""
-__version__ = "5.1.3"
+__version__ = "5.2.0"
__license__ = """
-Copyright (c) 2010-2012 Kurt McKee
-Copyright (c) 2002-2008 Mark Pilgrim
+Copyright 2010-2015 Kurt McKee
+Copyright 2002-2008 Mark Pilgrim
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -61,15 +61,6 @@ ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,ap
# of pre-installed parsers until it finds one that supports everything we need.
PREFERRED_XML_PARSERS = ["drv_libxml2"]
-# If you want feedparser to automatically run HTML markup through HTML Tidy, set
-# this to 1. Requires mxTidy
-# or utidylib .
-TIDY_MARKUP = 0
-
-# List of Python interfaces for HTML Tidy, in order of preference. Only useful
-# if TIDY_MARKUP = 1
-PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"]
-
# If you want feedparser to automatically resolve all relative URIs, set this
# to 1.
RESOLVE_RELATIVE_URIS = 1
@@ -78,10 +69,6 @@ RESOLVE_RELATIVE_URIS = 1
# HTML content, set this to 1.
SANITIZE_HTML = 1
-# If you want feedparser to automatically parse microformat content embedded
-# in entry contents, set this to 1
-PARSE_MICROFORMATS = 1
-
# ---------- Python 3 modules (make it work if possible) ----------
try:
import rfc822
@@ -147,6 +134,7 @@ import cgi
import codecs
import copy
import datetime
+import itertools
import re
import struct
import time
@@ -203,8 +191,7 @@ else:
_XML_AVAILABLE = 1
# sgmllib is not available by default in Python 3; if the end user doesn't have
-# it available then we'll lose illformed XML parsing, content santizing, and
-# microformat support (at least while feedparser depends on BeautifulSoup).
+# it available then we'll lose illformed XML parsing and content santizing
try:
import sgmllib
except ImportError:
@@ -276,15 +263,6 @@ try:
except ImportError:
chardet = None
-# BeautifulSoup is used to extract microformat content from HTML
-# feedparser is tested using BeautifulSoup 3.2.0
-# http://www.crummy.com/software/BeautifulSoup/
-try:
- import BeautifulSoup
-except ImportError:
- BeautifulSoup = None
- PARSE_MICROFORMATS = False
-
# ---------- don't touch these ----------
class ThingsNobodyCaresAboutButMe(Exception): pass
class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass
@@ -328,6 +306,9 @@ class FeedParserDict(dict):
'tagline': 'subtitle',
'tagline_detail': 'subtitle_detail'}
def __getitem__(self, key):
+ '''
+ :return: A :class:`FeedParserDict`.
+ '''
if key == 'category':
try:
return dict.__getitem__(self, 'tags')[0]['term']
@@ -390,6 +371,9 @@ class FeedParserDict(dict):
has_key = __contains__
def get(self, key, default=None):
+ '''
+ :return: A :class:`FeedParserDict`.
+ '''
try:
return self.__getitem__(key)
except KeyError:
@@ -451,16 +435,15 @@ _cp1252 = {
_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)')
def _urljoin(base, uri):
uri = _urifixer.sub(r'\1\3', uri)
- #try:
if not isinstance(uri, unicode):
uri = uri.decode('utf-8', 'ignore')
- uri = urlparse.urljoin(base, uri)
+ try:
+ uri = urlparse.urljoin(base, uri)
+ except ValueError:
+ uri = u''
if not isinstance(uri, unicode):
return uri.decode('utf-8', 'ignore')
return uri
- #except:
- # uri = urlparse.urlunparse([urllib.quote(part) for part in urlparse.urlparse(uri)])
- # return urlparse.urljoin(base, uri)
class _FeedParserMixin:
namespaces = {
@@ -496,6 +479,8 @@ class _FeedParserMixin:
'http://freshmeat.net/rss/fm/': 'fm',
'http://xmlns.com/foaf/0.1/': 'foaf',
'http://www.w3.org/2003/01/geo/wgs84_pos#': 'geo',
+ 'http://www.georss.org/georss': 'georss',
+ 'http://www.opengis.net/gml': 'gml',
'http://postneo.com/icbm/': 'icbm',
'http://purl.org/rss/1.0/modules/image/': 'image',
'http://www.itunes.com/DTDs/PodCast-1.0.dtd': 'itunes',
@@ -527,6 +512,7 @@ class _FeedParserMixin:
'http://www.w3.org/1999/xhtml': 'xhtml',
'http://www.w3.org/1999/xlink': 'xlink',
'http://www.w3.org/XML/1998/namespace': 'xml',
+ 'http://podlove.org/simple-chapters': 'psc',
}
_matchnamespaces = {}
@@ -556,6 +542,10 @@ class _FeedParserMixin:
self.incontributor = 0
self.inpublisher = 0
self.insource = 0
+
+ # georss
+ self.ingeometry = 0
+
self.sourcedata = FeedParserDict()
self.contentparams = FeedParserDict()
self._summaryKey = None
@@ -568,6 +558,11 @@ class _FeedParserMixin:
self.svgOK = 0
self.title_depth = -1
self.depth = 0
+ # psc_chapters_flag prevents multiple psc_chapters from being
+ # captured in a single entry or item. The transition states are
+ # None -> True -> False. psc_chapter elements will only be
+ # captured while it is True.
+ self.psc_chapters_flag = None
if baselang:
self.feeddata['language'] = baselang.replace('_','-')
@@ -892,7 +887,9 @@ class _FeedParserMixin:
# resolve relative URIs
if (element in self.can_be_relative_uri) and output:
- output = self.resolveURI(output)
+ # do not resolve guid elements with isPermalink="false"
+ if not element == 'id' or self.guidislink:
+ output = self.resolveURI(output)
# decode entities within embedded markup
if not self.contentparams.get('base64', 0):
@@ -920,22 +917,6 @@ class _FeedParserMixin:
if element in self.can_contain_relative_uris:
output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', u'text/html'))
- # parse microformats
- # (must do this before sanitizing because some microformats
- # rely on elements that we sanitize)
- if PARSE_MICROFORMATS and is_htmlish and element in ['content', 'description', 'summary']:
- mfresults = _parseMicroformats(output, self.baseuri, self.encoding)
- if mfresults:
- for tag in mfresults.get('tags', []):
- self._addTag(tag['term'], tag['scheme'], tag['label'])
- for enclosure in mfresults.get('enclosures', []):
- self._start_enclosure(enclosure)
- for xfn in mfresults.get('xfn', []):
- self._addXFN(xfn['relationships'], xfn['href'], xfn['name'])
- vcard = mfresults.get('vcard')
- if vcard:
- self._getContext()['vcard'] = vcard
-
# sanitize embedded markup
if is_htmlish and SANITIZE_HTML:
if element in self.can_contain_dangerous_markup:
@@ -956,8 +937,8 @@ class _FeedParserMixin:
if isinstance(output, unicode):
output = output.translate(_cp1252)
- # categories/tags/keywords/whatever are handled in _end_category
- if element == 'category':
+ # categories/tags/keywords/whatever are handled in _end_category or _end_tags or _end_itunes_keywords
+ if element in ('category', 'tags', 'itunes_keywords'):
return output
if element == 'title' and -1 < self.title_depth <= self.depth:
@@ -975,6 +956,7 @@ class _FeedParserMixin:
# query variables in urls in link elements are improperly
# converted from `?a=1&b=2` to `?a=1&b;=2` as if they're
# unhandled character references. fix this special case.
+ output = output.replace('&', '&')
output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
self.entries[-1][element] = output
if output:
@@ -1313,7 +1295,7 @@ class _FeedParserMixin:
def _sync_author_detail(self, key='author'):
context = self._getContext()
- detail = context.get('%s_detail' % key)
+ detail = context.get('%ss' % key, [FeedParserDict()])[-1]
if detail:
name = detail.get('name')
email = detail.get('email')
@@ -1342,11 +1324,11 @@ class _FeedParserMixin:
author = author[:-1]
author = author.strip()
if author or email:
- context.setdefault('%s_detail' % key, FeedParserDict())
+ context.setdefault('%s_detail' % key, detail)
if author:
- context['%s_detail' % key]['name'] = author
+ detail['name'] = author
if email:
- context['%s_detail' % key]['email'] = email
+ detail['email'] = email
def _start_subtitle(self, attrsD):
self.pushContent('subtitle', attrsD, u'text/plain', 1)
@@ -1374,6 +1356,7 @@ class _FeedParserMixin:
self.inentry = 1
self.guidislink = 0
self.title_depth = -1
+ self.psc_chapters_flag = None
id = self._getAttribute(attrsD, 'rdf:about')
if id:
context = self._getContext()
@@ -1403,6 +1386,20 @@ class _FeedParserMixin:
self._sync_author_detail('publisher')
_end_webmaster = _end_dc_publisher
+ def _start_dcterms_valid(self, attrsD):
+ self.push('validity', 1)
+
+ def _end_dcterms_valid(self):
+ for validity_detail in self.pop('validity').split(';'):
+ if '=' in validity_detail:
+ key, value = validity_detail.split('=', 1)
+ if key == 'start':
+ self._save('validity_start', value, overwrite=True)
+ self._save('validity_start_parsed', _parse_date(value), overwrite=True)
+ elif key == 'end':
+ self._save('validity_end', value, overwrite=True)
+ self._save('validity_end_parsed', _parse_date(value), overwrite=True)
+
def _start_published(self, attrsD):
self.push('published', 1)
_start_dcterms_issued = _start_published
@@ -1447,6 +1444,128 @@ class _FeedParserMixin:
def _end_expirationdate(self):
self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True)
+ # geospatial location, or "where", from georss.org
+
+ def _start_georssgeom(self, attrsD):
+ self.push('geometry', 0)
+ context = self._getContext()
+ context['where'] = FeedParserDict()
+
+ _start_georss_point = _start_georssgeom
+ _start_georss_line = _start_georssgeom
+ _start_georss_polygon = _start_georssgeom
+ _start_georss_box = _start_georssgeom
+
+ def _save_where(self, geometry):
+ context = self._getContext()
+ context['where'].update(geometry)
+
+ def _end_georss_point(self):
+ geometry = _parse_georss_point(self.pop('geometry'))
+ if geometry:
+ self._save_where(geometry)
+
+ def _end_georss_line(self):
+ geometry = _parse_georss_line(self.pop('geometry'))
+ if geometry:
+ self._save_where(geometry)
+
+ def _end_georss_polygon(self):
+ this = self.pop('geometry')
+ geometry = _parse_georss_polygon(this)
+ if geometry:
+ self._save_where(geometry)
+
+ def _end_georss_box(self):
+ geometry = _parse_georss_box(self.pop('geometry'))
+ if geometry:
+ self._save_where(geometry)
+
+ def _start_where(self, attrsD):
+ self.push('where', 0)
+ context = self._getContext()
+ context['where'] = FeedParserDict()
+ _start_georss_where = _start_where
+
+ def _parse_srs_attrs(self, attrsD):
+ srsName = attrsD.get('srsname')
+ try:
+ srsDimension = int(attrsD.get('srsdimension', '2'))
+ except ValueError:
+ srsDimension = 2
+ context = self._getContext()
+ context['where']['srsName'] = srsName
+ context['where']['srsDimension'] = srsDimension
+
+ def _start_gml_point(self, attrsD):
+ self._parse_srs_attrs(attrsD)
+ self.ingeometry = 1
+ self.push('geometry', 0)
+
+ def _start_gml_linestring(self, attrsD):
+ self._parse_srs_attrs(attrsD)
+ self.ingeometry = 'linestring'
+ self.push('geometry', 0)
+
+ def _start_gml_polygon(self, attrsD):
+ self._parse_srs_attrs(attrsD)
+ self.push('geometry', 0)
+
+ def _start_gml_exterior(self, attrsD):
+ self.push('geometry', 0)
+
+ def _start_gml_linearring(self, attrsD):
+ self.ingeometry = 'polygon'
+ self.push('geometry', 0)
+
+ def _start_gml_pos(self, attrsD):
+ self.push('pos', 0)
+
+ def _end_gml_pos(self):
+ this = self.pop('pos')
+ context = self._getContext()
+ srsName = context['where'].get('srsName')
+ srsDimension = context['where'].get('srsDimension', 2)
+ swap = True
+ if srsName and "EPSG" in srsName:
+ epsg = int(srsName.split(":")[-1])
+ swap = bool(epsg in _geogCS)
+ geometry = _parse_georss_point(this, swap=swap, dims=srsDimension)
+ if geometry:
+ self._save_where(geometry)
+
+ def _start_gml_poslist(self, attrsD):
+ self.push('pos', 0)
+
+ def _end_gml_poslist(self):
+ this = self.pop('pos')
+ context = self._getContext()
+ srsName = context['where'].get('srsName')
+ srsDimension = context['where'].get('srsDimension', 2)
+ swap = True
+ if srsName and "EPSG" in srsName:
+ epsg = int(srsName.split(":")[-1])
+ swap = bool(epsg in _geogCS)
+ geometry = _parse_poslist(
+ this, self.ingeometry, swap=swap, dims=srsDimension)
+ if geometry:
+ self._save_where(geometry)
+
+ def _end_geom(self):
+ self.ingeometry = 0
+ self.pop('geometry')
+ _end_gml_point = _end_geom
+ _end_gml_linestring = _end_geom
+ _end_gml_linearring = _end_geom
+ _end_gml_exterior = _end_geom
+ _end_gml_polygon = _end_geom
+
+ def _end_where(self):
+ self.pop('where')
+ _end_georss_where = _end_where
+
+ # end geospatial
+
def _start_cc_license(self, attrsD):
context = self._getContext()
value = self._getAttribute(attrsD, 'rdf:resource')
@@ -1471,22 +1590,25 @@ class _FeedParserMixin:
del context['license']
_end_creativeCommons_license = _end_creativecommons_license
- def _addXFN(self, relationships, href, name):
- context = self._getContext()
- xfn = context.setdefault('xfn', [])
- value = FeedParserDict({'relationships': relationships, 'href': href, 'name': name})
- if value not in xfn:
- xfn.append(value)
-
def _addTag(self, term, scheme, label):
context = self._getContext()
tags = context.setdefault('tags', [])
if (not term) and (not scheme) and (not label):
return
- value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label})
+ value = FeedParserDict(term=term, scheme=scheme, label=label)
if value not in tags:
tags.append(value)
+ def _start_tags(self, attrsD):
+ # This is a completely-made up element. Its semantics are determined
+ # only by a single feed that precipitated bug report 392 on Google Code.
+ # In short, this is junk code.
+ self.push('tags', 1)
+
+ def _end_tags(self):
+ for term in self.pop('tags').split(','):
+ self._addTag(term.strip(), None, None)
+
def _start_category(self, attrsD):
term = attrsD.get('term')
scheme = attrsD.get('scheme', attrsD.get('domain'))
@@ -1505,6 +1627,11 @@ class _FeedParserMixin:
if term.strip():
self._addTag(term.strip(), u'http://www.itunes.com/', None)
+ def _end_media_keywords(self):
+ for term in self.pop('media_keywords').split(','):
+ if term.strip():
+ self._addTag(term.strip(), None, None)
+
def _start_itunes_category(self, attrsD):
self._addTag(attrsD.get('text'), u'http://www.itunes.com/', None)
self.push('category', 1)
@@ -1594,6 +1721,7 @@ class _FeedParserMixin:
else:
self.pushContent('description', attrsD, u'text/html', self.infeed or self.inentry or self.insource)
_start_dc_description = _start_description
+ _start_media_description = _start_description
def _start_abstract(self, attrsD):
self.pushContent('description', attrsD, u'text/plain', self.infeed or self.inentry or self.insource)
@@ -1606,6 +1734,7 @@ class _FeedParserMixin:
self._summaryKey = None
_end_abstract = _end_description
_end_dc_description = _end_description
+ _end_media_description = _end_description
def _start_info(self, attrsD):
self.pushContent('info', attrsD, u'text/plain', 1)
@@ -1729,6 +1858,55 @@ class _FeedParserMixin:
# by applications that only need to know if the content is explicit.
self._getContext()['itunes_explicit'] = (None, False, True)[(value == 'yes' and 2) or value == 'clean' or 0]
+ def _start_media_group(self, attrsD):
+ # don't do anything, but don't break the enclosed tags either
+ pass
+
+ def _start_media_rating(self, attrsD):
+ context = self._getContext()
+ context.setdefault('media_rating', attrsD)
+ self.push('rating', 1)
+
+ def _end_media_rating(self):
+ rating = self.pop('rating')
+ if rating is not None and rating.strip():
+ context = self._getContext()
+ context['media_rating']['content'] = rating
+
+ def _start_media_credit(self, attrsD):
+ context = self._getContext()
+ context.setdefault('media_credit', [])
+ context['media_credit'].append(attrsD)
+ self.push('credit', 1)
+
+ def _end_media_credit(self):
+ credit = self.pop('credit')
+ if credit != None and len(credit.strip()) != 0:
+ context = self._getContext()
+ context['media_credit'][-1]['content'] = credit
+
+ def _start_media_restriction(self, attrsD):
+ context = self._getContext()
+ context.setdefault('media_restriction', attrsD)
+ self.push('restriction', 1)
+
+ def _end_media_restriction(self):
+ restriction = self.pop('restriction')
+ if restriction != None and len(restriction.strip()) != 0:
+ context = self._getContext()
+ context['media_restriction']['content'] = [cc.strip().lower() for cc in restriction.split(' ')]
+
+ def _start_media_license(self, attrsD):
+ context = self._getContext()
+ context.setdefault('media_license', attrsD)
+ self.push('license', 1)
+
+ def _end_media_license(self):
+ license = self.pop('license')
+ if license != None and len(license.strip()) != 0:
+ context = self._getContext()
+ context['media_license']['content'] = license
+
def _start_media_content(self, attrsD):
context = self._getContext()
context.setdefault('media_content', [])
@@ -1767,6 +1945,26 @@ class _FeedParserMixin:
return
context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip())
+ def _start_psc_chapters(self, attrsD):
+ if self.psc_chapters_flag is None:
+ # Transition from None -> True
+ self.psc_chapters_flag = True
+ attrsD['chapters'] = []
+ self._getContext()['psc_chapters'] = FeedParserDict(attrsD)
+
+ def _end_psc_chapters(self):
+ # Transition from True -> False
+ self.psc_chapters_flag = False
+
+ def _start_psc_chapter(self, attrsD):
+ if self.psc_chapters_flag:
+ start = self._getAttribute(attrsD, 'start')
+ attrsD['start_parsed'] = _parse_psc_chapter_start(start)
+
+ context = self._getContext()['psc_chapters']
+ context['chapters'].append(FeedParserDict(attrsD))
+
+
if _XML_AVAILABLE:
class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler):
def __init__(self, baseuri, baselang, encoding):
@@ -1830,6 +2028,7 @@ if _XML_AVAILABLE:
attrsD[str(attrlocalname).lower()] = attrvalue
for qname in attrs.getQNames():
attrsD[str(qname).lower()] = attrs.getValueByQName(qname)
+ localname = str(localname).lower()
self.unknown_starttag(localname, attrsD.items())
def characters(self, text):
@@ -2076,455 +2275,18 @@ class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor):
data = data.replace('&', '&')
data = data.replace('"', '"')
data = data.replace(''', "'")
+ data = data.replace('/', '/')
+ data = data.replace('/', '/')
return data
def strattrs(self, attrs):
return ''.join([' %s="%s"' % (n,v.replace('"','"')) for n,v in attrs])
-class _MicroformatsParser:
- STRING = 1
- DATE = 2
- URI = 3
- NODE = 4
- EMAIL = 5
-
- known_xfn_relationships = set(['contact', 'acquaintance', 'friend', 'met', 'co-worker', 'coworker', 'colleague', 'co-resident', 'coresident', 'neighbor', 'child', 'parent', 'sibling', 'brother', 'sister', 'spouse', 'wife', 'husband', 'kin', 'relative', 'muse', 'crush', 'date', 'sweetheart', 'me'])
- known_binary_extensions = set(['zip','rar','exe','gz','tar','tgz','tbz2','bz2','z','7z','dmg','img','sit','sitx','hqx','deb','rpm','bz2','jar','rar','iso','bin','msi','mp2','mp3','ogg','ogm','mp4','m4v','m4a','avi','wma','wmv'])
-
- def __init__(self, data, baseuri, encoding):
- self.document = BeautifulSoup.BeautifulSoup(data)
- self.baseuri = baseuri
- self.encoding = encoding
- if isinstance(data, unicode):
- data = data.encode(encoding)
- self.tags = []
- self.enclosures = []
- self.xfn = []
- self.vcard = None
-
- def vcardEscape(self, s):
- if isinstance(s, basestring):
- s = s.replace(',', '\\,').replace(';', '\\;').replace('\n', '\\n')
- return s
-
- def vcardFold(self, s):
- s = re.sub(';+$', '', s)
- sFolded = ''
- iMax = 75
- sPrefix = ''
- while len(s) > iMax:
- sFolded += sPrefix + s[:iMax] + '\n'
- s = s[iMax:]
- sPrefix = ' '
- iMax = 74
- sFolded += sPrefix + s
- return sFolded
-
- def normalize(self, s):
- return re.sub(r'\s+', ' ', s).strip()
-
- def unique(self, aList):
- results = []
- for element in aList:
- if element not in results:
- results.append(element)
- return results
-
- def toISO8601(self, dt):
- return time.strftime('%Y-%m-%dT%H:%M:%SZ', dt)
-
- def getPropertyValue(self, elmRoot, sProperty, iPropertyType=4, bAllowMultiple=0, bAutoEscape=0):
- all = lambda x: 1
- sProperty = sProperty.lower()
- bFound = 0
- bNormalize = 1
- propertyMatch = {'class': re.compile(r'\b%s\b' % sProperty)}
- if bAllowMultiple and (iPropertyType != self.NODE):
- snapResults = []
- containers = elmRoot(['ul', 'ol'], propertyMatch)
- for container in containers:
- snapResults.extend(container('li'))
- bFound = (len(snapResults) != 0)
- if not bFound:
- snapResults = elmRoot(all, propertyMatch)
- bFound = (len(snapResults) != 0)
- if (not bFound) and (sProperty == 'value'):
- snapResults = elmRoot('pre')
- bFound = (len(snapResults) != 0)
- bNormalize = not bFound
- if not bFound:
- snapResults = [elmRoot]
- bFound = (len(snapResults) != 0)
- arFilter = []
- if sProperty == 'vcard':
- snapFilter = elmRoot(all, propertyMatch)
- for node in snapFilter:
- if node.findParent(all, propertyMatch):
- arFilter.append(node)
- arResults = []
- for node in snapResults:
- if node not in arFilter:
- arResults.append(node)
- bFound = (len(arResults) != 0)
- if not bFound:
- if bAllowMultiple:
- return []
- elif iPropertyType == self.STRING:
- return ''
- elif iPropertyType == self.DATE:
- return None
- elif iPropertyType == self.URI:
- return ''
- elif iPropertyType == self.NODE:
- return None
- else:
- return None
- arValues = []
- for elmResult in arResults:
- sValue = None
- if iPropertyType == self.NODE:
- if bAllowMultiple:
- arValues.append(elmResult)
- continue
- else:
- return elmResult
- sNodeName = elmResult.name.lower()
- if (iPropertyType == self.EMAIL) and (sNodeName == 'a'):
- sValue = (elmResult.get('href') or '').split('mailto:').pop().split('?')[0]
- if sValue:
- sValue = bNormalize and self.normalize(sValue) or sValue.strip()
- if (not sValue) and (sNodeName == 'abbr'):
- sValue = elmResult.get('title')
- if sValue:
- sValue = bNormalize and self.normalize(sValue) or sValue.strip()
- if (not sValue) and (iPropertyType == self.URI):
- if sNodeName == 'a':
- sValue = elmResult.get('href')
- elif sNodeName == 'img':
- sValue = elmResult.get('src')
- elif sNodeName == 'object':
- sValue = elmResult.get('data')
- if sValue:
- sValue = bNormalize and self.normalize(sValue) or sValue.strip()
- if (not sValue) and (sNodeName == 'img'):
- sValue = elmResult.get('alt')
- if sValue:
- sValue = bNormalize and self.normalize(sValue) or sValue.strip()
- if not sValue:
- sValue = elmResult.renderContents()
- sValue = re.sub(r'<\S[^>]*>', '', sValue)
- sValue = sValue.replace('\r\n', '\n')
- sValue = sValue.replace('\r', '\n')
- if sValue:
- sValue = bNormalize and self.normalize(sValue) or sValue.strip()
- if not sValue:
- continue
- if iPropertyType == self.DATE:
- sValue = _parse_date_iso8601(sValue)
- if bAllowMultiple:
- arValues.append(bAutoEscape and self.vcardEscape(sValue) or sValue)
- else:
- return bAutoEscape and self.vcardEscape(sValue) or sValue
- return arValues
-
- def findVCards(self, elmRoot, bAgentParsing=0):
- sVCards = ''
-
- if not bAgentParsing:
- arCards = self.getPropertyValue(elmRoot, 'vcard', bAllowMultiple=1)
- else:
- arCards = [elmRoot]
-
- for elmCard in arCards:
- arLines = []
-
- def processSingleString(sProperty):
- sValue = self.getPropertyValue(elmCard, sProperty, self.STRING, bAutoEscape=1).decode(self.encoding)
- if sValue:
- arLines.append(self.vcardFold(sProperty.upper() + ':' + sValue))
- return sValue or u''
-
- def processSingleURI(sProperty):
- sValue = self.getPropertyValue(elmCard, sProperty, self.URI)
- if sValue:
- sContentType = ''
- sEncoding = ''
- sValueKey = ''
- if sValue.startswith('data:'):
- sEncoding = ';ENCODING=b'
- sContentType = sValue.split(';')[0].split('/').pop()
- sValue = sValue.split(',', 1).pop()
- else:
- elmValue = self.getPropertyValue(elmCard, sProperty)
- if elmValue:
- if sProperty != 'url':
- sValueKey = ';VALUE=uri'
- sContentType = elmValue.get('type', '').strip().split('/').pop().strip()
- sContentType = sContentType.upper()
- if sContentType == 'OCTET-STREAM':
- sContentType = ''
- if sContentType:
- sContentType = ';TYPE=' + sContentType.upper()
- arLines.append(self.vcardFold(sProperty.upper() + sEncoding + sContentType + sValueKey + ':' + sValue))
-
- def processTypeValue(sProperty, arDefaultType, arForceType=None):
- arResults = self.getPropertyValue(elmCard, sProperty, bAllowMultiple=1)
- for elmResult in arResults:
- arType = self.getPropertyValue(elmResult, 'type', self.STRING, 1, 1)
- if arForceType:
- arType = self.unique(arForceType + arType)
- if not arType:
- arType = arDefaultType
- sValue = self.getPropertyValue(elmResult, 'value', self.EMAIL, 0)
- if sValue:
- arLines.append(self.vcardFold(sProperty.upper() + ';TYPE=' + ','.join(arType) + ':' + sValue))
-
- # AGENT
- # must do this before all other properties because it is destructive
- # (removes nested class="vcard" nodes so they don't interfere with
- # this vcard's other properties)
- arAgent = self.getPropertyValue(elmCard, 'agent', bAllowMultiple=1)
- for elmAgent in arAgent:
- if re.compile(r'\bvcard\b').search(elmAgent.get('class')):
- sAgentValue = self.findVCards(elmAgent, 1) + '\n'
- sAgentValue = sAgentValue.replace('\n', '\\n')
- sAgentValue = sAgentValue.replace(';', '\\;')
- if sAgentValue:
- arLines.append(self.vcardFold('AGENT:' + sAgentValue))
- # Completely remove the agent element from the parse tree
- elmAgent.extract()
- else:
- sAgentValue = self.getPropertyValue(elmAgent, 'value', self.URI, bAutoEscape=1);
- if sAgentValue:
- arLines.append(self.vcardFold('AGENT;VALUE=uri:' + sAgentValue))
-
- # FN (full name)
- sFN = processSingleString('fn')
-
- # N (name)
- elmName = self.getPropertyValue(elmCard, 'n')
- if elmName:
- sFamilyName = self.getPropertyValue(elmName, 'family-name', self.STRING, bAutoEscape=1)
- sGivenName = self.getPropertyValue(elmName, 'given-name', self.STRING, bAutoEscape=1)
- arAdditionalNames = self.getPropertyValue(elmName, 'additional-name', self.STRING, 1, 1) + self.getPropertyValue(elmName, 'additional-names', self.STRING, 1, 1)
- arHonorificPrefixes = self.getPropertyValue(elmName, 'honorific-prefix', self.STRING, 1, 1) + self.getPropertyValue(elmName, 'honorific-prefixes', self.STRING, 1, 1)
- arHonorificSuffixes = self.getPropertyValue(elmName, 'honorific-suffix', self.STRING, 1, 1) + self.getPropertyValue(elmName, 'honorific-suffixes', self.STRING, 1, 1)
- arLines.append(self.vcardFold('N:' + sFamilyName + ';' +
- sGivenName + ';' +
- ','.join(arAdditionalNames) + ';' +
- ','.join(arHonorificPrefixes) + ';' +
- ','.join(arHonorificSuffixes)))
- elif sFN:
- # implied "N" optimization
- # http://microformats.org/wiki/hcard#Implied_.22N.22_Optimization
- arNames = self.normalize(sFN).split()
- if len(arNames) == 2:
- bFamilyNameFirst = (arNames[0].endswith(',') or
- len(arNames[1]) == 1 or
- ((len(arNames[1]) == 2) and (arNames[1].endswith('.'))))
- if bFamilyNameFirst:
- arLines.append(self.vcardFold('N:' + arNames[0] + ';' + arNames[1]))
- else:
- arLines.append(self.vcardFold('N:' + arNames[1] + ';' + arNames[0]))
-
- # SORT-STRING
- sSortString = self.getPropertyValue(elmCard, 'sort-string', self.STRING, bAutoEscape=1)
- if sSortString:
- arLines.append(self.vcardFold('SORT-STRING:' + sSortString))
-
- # NICKNAME
- arNickname = self.getPropertyValue(elmCard, 'nickname', self.STRING, 1, 1)
- if arNickname:
- arLines.append(self.vcardFold('NICKNAME:' + ','.join(arNickname)))
-
- # PHOTO
- processSingleURI('photo')
-
- # BDAY
- dtBday = self.getPropertyValue(elmCard, 'bday', self.DATE)
- if dtBday:
- arLines.append(self.vcardFold('BDAY:' + self.toISO8601(dtBday)))
-
- # ADR (address)
- arAdr = self.getPropertyValue(elmCard, 'adr', bAllowMultiple=1)
- for elmAdr in arAdr:
- arType = self.getPropertyValue(elmAdr, 'type', self.STRING, 1, 1)
- if not arType:
- arType = ['intl','postal','parcel','work'] # default adr types, see RFC 2426 section 3.2.1
- sPostOfficeBox = self.getPropertyValue(elmAdr, 'post-office-box', self.STRING, 0, 1)
- sExtendedAddress = self.getPropertyValue(elmAdr, 'extended-address', self.STRING, 0, 1)
- sStreetAddress = self.getPropertyValue(elmAdr, 'street-address', self.STRING, 0, 1)
- sLocality = self.getPropertyValue(elmAdr, 'locality', self.STRING, 0, 1)
- sRegion = self.getPropertyValue(elmAdr, 'region', self.STRING, 0, 1)
- sPostalCode = self.getPropertyValue(elmAdr, 'postal-code', self.STRING, 0, 1)
- sCountryName = self.getPropertyValue(elmAdr, 'country-name', self.STRING, 0, 1)
- arLines.append(self.vcardFold('ADR;TYPE=' + ','.join(arType) + ':' +
- sPostOfficeBox + ';' +
- sExtendedAddress + ';' +
- sStreetAddress + ';' +
- sLocality + ';' +
- sRegion + ';' +
- sPostalCode + ';' +
- sCountryName))
-
- # LABEL
- processTypeValue('label', ['intl','postal','parcel','work'])
-
- # TEL (phone number)
- processTypeValue('tel', ['voice'])
-
- # EMAIL
- processTypeValue('email', ['internet'], ['internet'])
-
- # MAILER
- processSingleString('mailer')
-
- # TZ (timezone)
- processSingleString('tz')
-
- # GEO (geographical information)
- elmGeo = self.getPropertyValue(elmCard, 'geo')
- if elmGeo:
- sLatitude = self.getPropertyValue(elmGeo, 'latitude', self.STRING, 0, 1)
- sLongitude = self.getPropertyValue(elmGeo, 'longitude', self.STRING, 0, 1)
- arLines.append(self.vcardFold('GEO:' + sLatitude + ';' + sLongitude))
-
- # TITLE
- processSingleString('title')
-
- # ROLE
- processSingleString('role')
-
- # LOGO
- processSingleURI('logo')
-
- # ORG (organization)
- elmOrg = self.getPropertyValue(elmCard, 'org')
- if elmOrg:
- sOrganizationName = self.getPropertyValue(elmOrg, 'organization-name', self.STRING, 0, 1)
- if not sOrganizationName:
- # implied "organization-name" optimization
- # http://microformats.org/wiki/hcard#Implied_.22organization-name.22_Optimization
- sOrganizationName = self.getPropertyValue(elmCard, 'org', self.STRING, 0, 1)
- if sOrganizationName:
- arLines.append(self.vcardFold('ORG:' + sOrganizationName))
- else:
- arOrganizationUnit = self.getPropertyValue(elmOrg, 'organization-unit', self.STRING, 1, 1)
- arLines.append(self.vcardFold('ORG:' + sOrganizationName + ';' + ';'.join(arOrganizationUnit)))
-
- # CATEGORY
- arCategory = self.getPropertyValue(elmCard, 'category', self.STRING, 1, 1) + self.getPropertyValue(elmCard, 'categories', self.STRING, 1, 1)
- if arCategory:
- arLines.append(self.vcardFold('CATEGORIES:' + ','.join(arCategory)))
-
- # NOTE
- processSingleString('note')
-
- # REV
- processSingleString('rev')
-
- # SOUND
- processSingleURI('sound')
-
- # UID
- processSingleString('uid')
-
- # URL
- processSingleURI('url')
-
- # CLASS
- processSingleString('class')
-
- # KEY
- processSingleURI('key')
-
- if arLines:
- arLines = [u'BEGIN:vCard',u'VERSION:3.0'] + arLines + [u'END:vCard']
- # XXX - this is super ugly; properly fix this with issue 148
- for i, s in enumerate(arLines):
- if not isinstance(s, unicode):
- arLines[i] = s.decode('utf-8', 'ignore')
- sVCards += u'\n'.join(arLines) + u'\n'
-
- return sVCards.strip()
-
- def isProbablyDownloadable(self, elm):
- attrsD = elm.attrMap
- if 'href' not in attrsD:
- return 0
- linktype = attrsD.get('type', '').strip()
- if linktype.startswith('audio/') or \
- linktype.startswith('video/') or \
- (linktype.startswith('application/') and not linktype.endswith('xml')):
- return 1
- try:
- path = urlparse.urlparse(attrsD['href'])[2]
- except ValueError:
- return 0
- if path.find('.') == -1:
- return 0
- fileext = path.split('.').pop().lower()
- return fileext in self.known_binary_extensions
-
- def findTags(self):
- all = lambda x: 1
- for elm in self.document(all, {'rel': re.compile(r'\btag\b')}):
- href = elm.get('href')
- if not href:
- continue
- urlscheme, domain, path, params, query, fragment = \
- urlparse.urlparse(_urljoin(self.baseuri, href))
- segments = path.split('/')
- tag = segments.pop()
- if not tag:
- if segments:
- tag = segments.pop()
- else:
- # there are no tags
- continue
- tagscheme = urlparse.urlunparse((urlscheme, domain, '/'.join(segments), '', '', ''))
- if not tagscheme.endswith('/'):
- tagscheme += '/'
- self.tags.append(FeedParserDict({"term": tag, "scheme": tagscheme, "label": elm.string or ''}))
-
- def findEnclosures(self):
- all = lambda x: 1
- enclosure_match = re.compile(r'\benclosure\b')
- for elm in self.document(all, {'href': re.compile(r'.+')}):
- if not enclosure_match.search(elm.get('rel', u'')) and not self.isProbablyDownloadable(elm):
- continue
- if elm.attrMap not in self.enclosures:
- self.enclosures.append(elm.attrMap)
- if elm.string and not elm.get('title'):
- self.enclosures[-1]['title'] = elm.string
-
- def findXFN(self):
- all = lambda x: 1
- for elm in self.document(all, {'rel': re.compile('.+'), 'href': re.compile('.+')}):
- rels = elm.get('rel', u'').split()
- xfn_rels = [r for r in rels if r in self.known_xfn_relationships]
- if xfn_rels:
- self.xfn.append({"relationships": xfn_rels, "href": elm.get('href', ''), "name": elm.string})
-
-def _parseMicroformats(htmlSource, baseURI, encoding):
- if not BeautifulSoup:
- return
- try:
- p = _MicroformatsParser(htmlSource, baseURI, encoding)
- except UnicodeEncodeError:
- # sgmllib throws this exception when performing lookups of tags
- # with non-ASCII characters in them.
- return
- p.vcard = p.findVCards(p.document)
- p.findTags()
- p.findEnclosures()
- p.findXFN()
- return {"tags": p.tags, "enclosures": p.enclosures, "xfn": p.xfn, "vcard": p.vcard}
-
class _RelativeURIResolver(_BaseHTMLProcessor):
relative_uris = set([('a', 'href'),
('applet', 'codebase'),
('area', 'href'),
+ ('audio', 'src'),
('blockquote', 'cite'),
('body', 'background'),
('del', 'cite'),
@@ -2547,7 +2309,9 @@ class _RelativeURIResolver(_BaseHTMLProcessor):
('object', 'usemap'),
('q', 'cite'),
('script', 'src'),
- ('video', 'poster')])
+ ('source', 'src'),
+ ('video', 'poster'),
+ ('video', 'src')])
def __init__(self, baseuri, encoding, _type):
_BaseHTMLProcessor.__init__(self, encoding, _type)
@@ -2572,10 +2336,7 @@ def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type):
def _makeSafeAbsoluteURI(base, rel=None):
# bail if ACCEPTABLE_URI_SCHEMES is empty
if not ACCEPTABLE_URI_SCHEMES:
- try:
- return _urljoin(base, rel or u'')
- except ValueError:
- return u''
+ return _urljoin(base, rel or u'')
if not base:
return rel or u''
if not rel:
@@ -2586,10 +2347,7 @@ def _makeSafeAbsoluteURI(base, rel=None):
if not scheme or scheme in ACCEPTABLE_URI_SCHEMES:
return base
return u''
- try:
- uri = _urljoin(base, rel)
- except ValueError:
- return u''
+ uri = _urljoin(base, rel)
if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES:
return u''
return uri
@@ -2657,21 +2415,154 @@ class _HTMLSanitizer(_BaseHTMLProcessor):
valid_css_values = re.compile('^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|' +
'\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$')
- mathml_elements = set(['annotation', 'annotation-xml', 'maction', 'math',
- 'merror', 'mfenced', 'mfrac', 'mi', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded',
- 'mphantom', 'mprescripts', 'mroot', 'mrow', 'mspace', 'msqrt', 'mstyle',
- 'msub', 'msubsup', 'msup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder',
- 'munderover', 'none', 'semantics'])
+ mathml_elements = set([
+ 'annotation',
+ 'annotation-xml',
+ 'maction',
+ 'maligngroup',
+ 'malignmark',
+ 'math',
+ 'menclose',
+ 'merror',
+ 'mfenced',
+ 'mfrac',
+ 'mglyph',
+ 'mi',
+ 'mlabeledtr',
+ 'mlongdiv',
+ 'mmultiscripts',
+ 'mn',
+ 'mo',
+ 'mover',
+ 'mpadded',
+ 'mphantom',
+ 'mprescripts',
+ 'mroot',
+ 'mrow',
+ 'ms',
+ 'mscarries',
+ 'mscarry',
+ 'msgroup',
+ 'msline',
+ 'mspace',
+ 'msqrt',
+ 'msrow',
+ 'mstack',
+ 'mstyle',
+ 'msub',
+ 'msubsup',
+ 'msup',
+ 'mtable',
+ 'mtd',
+ 'mtext',
+ 'mtr',
+ 'munder',
+ 'munderover',
+ 'none',
+ 'semantics',
+ ])
- mathml_attributes = set(['actiontype', 'align', 'columnalign', 'columnalign',
- 'columnalign', 'close', 'columnlines', 'columnspacing', 'columnspan', 'depth',
- 'display', 'displaystyle', 'encoding', 'equalcolumns', 'equalrows',
- 'fence', 'fontstyle', 'fontweight', 'frame', 'height', 'linethickness',
- 'lspace', 'mathbackground', 'mathcolor', 'mathvariant', 'mathvariant',
- 'maxsize', 'minsize', 'open', 'other', 'rowalign', 'rowalign', 'rowalign',
- 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'scriptlevel', 'selection',
- 'separator', 'separators', 'stretchy', 'width', 'width', 'xlink:href',
- 'xlink:show', 'xlink:type', 'xmlns', 'xmlns:xlink'])
+ mathml_attributes = set([
+ 'accent',
+ 'accentunder',
+ 'actiontype',
+ 'align',
+ 'alignmentscope',
+ 'altimg',
+ 'altimg-height',
+ 'altimg-valign',
+ 'altimg-width',
+ 'alttext',
+ 'bevelled',
+ 'charalign',
+ 'close',
+ 'columnalign',
+ 'columnlines',
+ 'columnspacing',
+ 'columnspan',
+ 'columnwidth',
+ 'crossout',
+ 'decimalpoint',
+ 'denomalign',
+ 'depth',
+ 'dir',
+ 'display',
+ 'displaystyle',
+ 'edge',
+ 'encoding',
+ 'equalcolumns',
+ 'equalrows',
+ 'fence',
+ 'fontstyle',
+ 'fontweight',
+ 'form',
+ 'frame',
+ 'framespacing',
+ 'groupalign',
+ 'height',
+ 'href',
+ 'id',
+ 'indentalign',
+ 'indentalignfirst',
+ 'indentalignlast',
+ 'indentshift',
+ 'indentshiftfirst',
+ 'indentshiftlast',
+ 'indenttarget',
+ 'infixlinebreakstyle',
+ 'largeop',
+ 'length',
+ 'linebreak',
+ 'linebreakmultchar',
+ 'linebreakstyle',
+ 'lineleading',
+ 'linethickness',
+ 'location',
+ 'longdivstyle',
+ 'lquote',
+ 'lspace',
+ 'mathbackground',
+ 'mathcolor',
+ 'mathsize',
+ 'mathvariant',
+ 'maxsize',
+ 'minlabelspacing',
+ 'minsize',
+ 'movablelimits',
+ 'notation',
+ 'numalign',
+ 'open',
+ 'other',
+ 'overflow',
+ 'position',
+ 'rowalign',
+ 'rowlines',
+ 'rowspacing',
+ 'rowspan',
+ 'rquote',
+ 'rspace',
+ 'scriptlevel',
+ 'scriptminsize',
+ 'scriptsizemultiplier',
+ 'selection',
+ 'separator',
+ 'separators',
+ 'shift',
+ 'side',
+ 'src',
+ 'stackalign',
+ 'stretchy',
+ 'subscriptshift',
+ 'superscriptshift',
+ 'symmetric',
+ 'voffset',
+ 'width',
+ 'xlink:href',
+ 'xlink:show',
+ 'xlink:type',
+ 'xmlns',
+ 'xmlns:xlink',
+ ])
# svgtiny - foreignObject + linearGradient + radialGradient + stop
svg_elements = set(['a', 'animate', 'animateColor', 'animateMotion',
@@ -2860,38 +2751,6 @@ def _sanitizeHTML(htmlSource, encoding, _type):
htmlSource = htmlSource.replace(''):
- data = data.split('>', 1)[1]
- if data.count('