diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js index 5ae24b022b7995c50f798f23108b722e70a733c2..56bac94ee9b502dd7bd2313c1666de48bcbe3308 100644 --- a/.build/Gruntfile.js +++ b/.build/Gruntfile.js @@ -2,34 +2,60 @@ module.exports = function(grunt) { grunt.initConfig({ bower_concat: { all: { - dest: '../gui/slick/js/_bower.js', - // cssDest: 'gui/slick/css/_bower.css', + dest: './_bower.js', + cssDest: './_bower.css', exclude: [ - // 'jquery', - // 'modernizr' ], dependencies: { - // 'underscore': 'jquery', - // 'backbone': 'underscore', - // 'jquery-mousewheel': 'jquery' + }, + mainFiles: { + 'tablesorter': [ + 'dist/js/jquery.tablesorter.combined.js', + 'dist/js/widgets/widget-columnSelector.min.js', + 'dist/js/widgets/widget-stickyHeaders.min.js', + 'dist/css/theme.blue.min.css' + ], + 'bootstrap-formhelpers': [ + 'dist/js/bootstrap-formhelpers.min.js' + ] }, bowerOptions: { relative: false - }, + } } }, uglify: { my_target: { files: { - '../gui/slick/js/_bower.min.js': ['../gui/slick/js/_bower.js'] + '../gui/slick/js/vender.min.js': ['./_bower.js'], + '../gui/slick/js/core.min.js': ['../gui/slick/js/core.js'] } } + }, + cssmin: { + options: { + shorthandCompacting: false, + roundingPrecision: -1 + }, + target: { + files: { + '../gui/slick/css/vender.min.css': ['./_bower.css'], + // '../gui/slick/css/core.min.css': ['./gui/slick/css/core.css'] + } + } + }, + jshint: { + options: { + eqeqeq: true + }, + uses_defaults: ['../gui/slick/js/**/*.js'] } }); grunt.loadNpmTasks('grunt-bower-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.registerTask('default', ['bower_concat', 'uglify']); - + grunt.registerTask('default', ['bower_concat', 'uglify', 'cssmin']); }; diff --git a/.build/bower.json b/.build/bower.json index bb396f088855eba598330d50a98c2d81cb4b0e51..8954ee4c899e14d3b29161f6f0de765951556877 100644 --- a/.build/bower.json +++ b/.build/bower.json @@ -14,11 +14,16 @@ "bootstrap": "~3.3.5", "bootstrap-hover-dropdown": "~2.1.3", "jquery-ui": "~1.11.4", - "tablesorter": "jquery.tablesorter#~2.23.5", "jquery-form": "~3.46.0", "jquery-timeago": "~1.4.3", "jquery-tokeninput": "~1.7.0", "bootstrap3-typeahead": "~3.1.1", - "underscore": "~1.8.3" + "underscore": "~1.8.3", + "jqueryui-touch-punch": "*", + "pnotify": "~2.1.0", + "qtip2": "~2.2.1", + "tablesorter": "jquery.tablesorter#~2.24.5", + "jquery-confirm": "~2.5.2", + "bootstrap-formhelpers": "~2.3.0" } } diff --git a/.build/package.json b/.build/package.json index cada201ee611225dd7d68b3ac51f0db63181c017..a0a4b41183e254ed37b997591865458798311451 100644 --- a/.build/package.json +++ b/.build/package.json @@ -5,14 +5,16 @@ "dependencies": { "grunt": "^0.4.5", "grunt-bower-concat": "^0.5.0", + "grunt-contrib-cssmin": "^0.14.0", + "grunt-contrib-jshint": "^0.11.3", "grunt-contrib-uglify": "^0.9.2" }, "repository": { "type": "git", - "url": "git+https://github.com/OmgImAlexis/SickRage.git" + "url": "git+https://github.com/SickRage/SickRage.git" }, "bugs": { - "url": "https://github.com/OmgImAlexis/SickRage/issues" + "url": "https://github.com/SickRage/SickRage/issues" }, - "homepage": "https://github.com/OmgImAlexis/SickRage#readme" + "homepage": "https://github.com/SickRage/SickRage#readme" } diff --git a/.gitignore b/.gitignore index e17cfc889383a407336fd939bdb57adfb7c3d6bd..77f444fa1137a7e4d2e8f273a4bb16be48468dfd 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,6 @@ lib/unrar2/UnRAR.exe # Bower # ###################### -bower_components -node_modules -gui/**/_bower.js +.build/bower_components +.build/node_modules +.build/_bower* diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 0000000000000000000000000000000000000000..c13d13dcf1eed8b2f55b8701780280638b1abc67 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,3 @@ +{ + "validateIndentation": 4 +} diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000000000000000000000000000000000000..7ec9ec8b693393d2ca5bffb94bdcc5e030309f43 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,33 @@ +{ + "bitwise": true, + "browser": true, + "camelcase": true, + "curly": true, + "devel": true, + "eqeqeq": true, + "forin": true, + "freeze": true, + "indent": 4, + "jquery": true, + "latedef": true, + "maxerr": 100, + "noarg": true, + "noempty": true, + "nonbsp": true, + "undef": true, + "unused": true, + "node": true, + "globals": { + "srRoot": true, + "themeSpinner": true, + "metaToBool": true, + "getMeta": true, + "isMeta": true, + "topImageHtml": true, + "generate_bwlist": true, + "_": true, + "bootbox": true, + "PNotify": true, + "anonURL": true + } +} diff --git a/.travis.yml b/.travis.yml index f250fbdf4569b5b37a4ed14bdec80a38fbc9087a..74d73d121d460d86a86baa6a5d19babc05de1fc5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ +sudo: false + language: python -python: - - 2.7.10 + +python: 2.7.9 sudo: false @@ -8,13 +10,8 @@ branches: except: - master -install: echo "Nothing required!" - cache: pip -before_script: - - chmod +x ./tests/all_tests.py - script: - ./tests/all_tests.py diff --git a/SickBeard.py b/SickBeard.py index ad942a88db47c72fcbf6bf84f618af524ebee2b3..e9a3fa0d31afd422c65c32029e6567ac8634453c 100755 --- a/SickBeard.py +++ b/SickBeard.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2.7 +# -*- coding: utf-8 -* # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -20,8 +21,7 @@ # Check needed software dependencies to nudge users to fix their setup # pylint: disable=W0703 - -from __future__ import with_statement +# Catching too general exception import codecs @@ -45,9 +45,11 @@ if sys.version_info < (2, 7): print "Sorry, requires Python 2.7.x" sys.exit(1) +# https://mail.python.org/pipermail/python-dev/2014-September/136300.html if sys.version_info >= (2, 7, 9): import ssl # pylint: disable=W0212 + # Access to a protected member of a client class ssl._create_default_https_context = ssl._create_unverified_context import locale @@ -55,14 +57,20 @@ import datetime import threading import getopt +# Do this before importing sickbeard, to prevent locked files and incorrect import +oldtornado = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tornado')) +if os.path.isdir(oldtornado): + shutil.move(oldtornado, oldtornado + '_kill') + shutil.rmtree(oldtornado + '_kill') + import sickbeard from sickbeard import db, logger, network_timezones, failed_history, name_cache from sickbeard.tv import TVShow from sickbeard.webserveInit import SRWebServer from sickbeard.event_queue import Events from configobj import ConfigObj -from sickrage.helper.encoding import ek +# http://bugs.python.org/issue7980#msg221094 throwaway = datetime.datetime.strptime('20110101', '%Y%m%d') signal.signal(signal.SIGINT, sickbeard.sig_handler) @@ -71,6 +79,7 @@ signal.signal(signal.SIGTERM, sickbeard.sig_handler) class SickRage(object): # pylint: disable=R0902 + # Too many instance attributes def __init__(self): # system event callback for shutdown/restart sickbeard.events = Events(self.shutdown) @@ -92,7 +101,6 @@ class SickRage(object): self.log_dir = None self.consoleLogging = True - @staticmethod def help_message(): """ @@ -125,33 +133,9 @@ class SickRage(object): return help_msg - @staticmethod - def fix_clients_nonsense(): - - filenames = [ - "sickbeard/clients/download_station.py", - "sickbeard/clients/utorrent.py", - "sickbeard/clients/qbittorrent.py", - "sickbeard/clients/transmission.py", - "sickbeard/clients/deluge.py", - "sickbeard/clients/deluged.py", - "sickbeard/clients/rtorrent.py" - ] - - for filename in filenames: - filename = ek(os.path.join, sickbeard.PROG_DIR, filename) - try: - if ek(os.path.exists, filename): - ek(os.remove, filename) - except Exception: - pass - try: - if ek(os.path.exists, filename + "c"): - ek(os.remove, filename + "c") - except Exception: - pass - # pylint: disable=R0912,R0915 + # Too many branches + # Too many statements def start(self): # do some preliminary stuff sickbeard.MY_FULLNAME = os.path.normpath(os.path.abspath(__file__)) @@ -159,26 +143,22 @@ class SickRage(object): sickbeard.PROG_DIR = os.path.dirname(sickbeard.MY_FULLNAME) sickbeard.DATA_DIR = sickbeard.PROG_DIR sickbeard.MY_ARGS = sys.argv[1:] - sickbeard.SYS_ENCODING = None try: locale.setlocale(locale.LC_ALL, "") sickbeard.SYS_ENCODING = locale.getpreferredencoding() except (locale.Error, IOError): - pass + sickbeard.SYS_ENCODING = 'UTF-8' - # For OSes that are poorly configured I'll just randomly force UTF-8 - if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING in ('ANSI_X3.4-1968', 'US-ASCII', 'ASCII'): + # pylint: disable=E1101 + if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING.lower() in ('ansi_x3.4-1968', 'us-ascii', 'ascii', 'charmap') or \ + (sys.platform.startswith('win') and sys.getwindowsversion()[0] >= 6 and getattr(sys.stdout, 'device', sys.stdout).encoding.lower() in ('cp65001', 'charmap')): sickbeard.SYS_ENCODING = 'UTF-8' + # TODO: Continue working on making this unnecessary, this hack creates all sorts of hellish problems if not hasattr(sys, "setdefaultencoding"): reload(sys) - if sys.platform == 'win32': - #pylint: disable=E1101 - if sys.getwindowsversion()[0] >= 6 and sys.stdout.encoding == 'cp65001': - sickbeard.SYS_ENCODING = 'UTF-8' - try: # pylint: disable=E1101 # On non-unicode builds this will raise an AttributeError, if encoding type is not valid it throws a LookupError @@ -191,13 +171,13 @@ class SickRage(object): self.consoleLogging = (not hasattr(sys, "frozen")) or (sickbeard.MY_NAME.lower().find('-console') > 0) # Rename the main thread - threading.currentThread().name = "MAIN" + threading.currentThread().name = u"MAIN" try: - # pylint: disable=W0612 - opts, args = getopt.getopt(sys.argv[1:], "hqdp::", - ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=', - 'datadir=', 'config=', 'noresize']) # @UnusedVariable + opts, _ = getopt.getopt( + sys.argv[1:], "hqdp::", + ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=', 'datadir=', 'config=', 'noresize'] + ) except getopt.GetoptError: sys.exit(self.help_message()) @@ -265,7 +245,7 @@ class SickRage(object): else: if self.consoleLogging: - sys.stdout.write("Not running in daemon mode. PID file creation disabled.\n") + sys.stdout.write(u"Not running in daemon mode. PID file creation disabled.\n") self.CREATEPID = False @@ -299,11 +279,11 @@ class SickRage(object): if os.path.exists(restoreDir): success = self.restoreDB(restoreDir, sickbeard.DATA_DIR) if self.consoleLogging: - sys.stdout.write("Restore: restoring DB and config.ini %s!\n" % ("FAILED", "SUCCESSFUL")[success]) + sys.stdout.write(u"Restore: restoring DB and config.ini %s!\n" % ("FAILED", "SUCCESSFUL")[success]) # Load the config and publish it to the sickbeard package if self.consoleLogging and not os.path.isfile(sickbeard.CONFIG_FILE): - sys.stdout.write("Unable to find '" + sickbeard.CONFIG_FILE + "' , all settings will be default!" + "\n") + sys.stdout.write(u"Unable to find '" + sickbeard.CONFIG_FILE + "' , all settings will be default!" + "\n") sickbeard.CFG = ConfigObj(sickbeard.CONFIG_FILE) @@ -316,9 +296,6 @@ class SickRage(object): # Get PID sickbeard.PID = os.getpid() - # Fix clients old files - self.fix_clients_nonsense() - # Build from the DB to start with self.loadShowsFromDB() @@ -388,8 +365,8 @@ class SickRage(object): if sickbeard.USE_FAILED_DOWNLOADS: failed_history.trimHistory() - # Check for metadata indexer updates for shows (Disabled until we use api) - #sickbeard.showUpdateScheduler.forceRun() + # # Check for metadata indexer updates for shows (Disabled until we use api) + # sickbeard.showUpdateScheduler.forceRun() # Launch browser if sickbeard.LAUNCH_BROWSER and not (self.noLaunch or self.runAsDaemon): @@ -404,13 +381,15 @@ class SickRage(object): Fork off as a daemon """ # pylint: disable=E1101,W0212 + # An object is accessed for a non-existent member. + # Access to a protected member of a client class # Make a non-session-leader child process try: pid = os.fork() # @UndefinedVariable - only available in UNIX if pid != 0: os._exit(0) except OSError, e: - sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) + sys.stderr.write(u"fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) os.setsid() # @UndefinedVariable - only available in UNIX @@ -422,20 +401,20 @@ class SickRage(object): # Daemons traditionally run with umask 0 anyways and this should not have repercussions os.umask(0) - # Make the child a session-leader by detaching from the terminal try: pid = os.fork() # @UndefinedVariable - only available in UNIX if pid != 0: os._exit(0) except OSError, e: - sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) + sys.stderr.write(u"fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) sys.exit(1) # Write pid if self.CREATEPID: pid = str(os.getpid()) logger.log(u"Writing PID: " + pid + " to " + str(self.PIDFILE)) + try: file(self.PIDFILE, 'w').write("%s\n" % pid) except IOError, e: @@ -451,16 +430,16 @@ class SickRage(object): stdin = file(devnull, 'r') stdout = file(devnull, 'a+') stderr = file(devnull, 'a+') - os.dup2(stdin.fileno(), sys.stdin.fileno()) - os.dup2(stdout.fileno(), sys.stdout.fileno()) - os.dup2(stderr.fileno(), sys.stderr.fileno()) + + os.dup2(stdin.fileno(), getattr(sys.stdin, 'device', sys.stdin).fileno()) + os.dup2(stdout.fileno(), getattr(sys.stdout, 'device', sys.stdout).fileno()) + os.dup2(stderr.fileno(), getattr(sys.stderr, 'device', sys.stderr).fileno()) @staticmethod def remove_pid_file(PIDFILE): try: if os.path.exists(PIDFILE): os.remove(PIDFILE) - except (IOError, OSError): return False @@ -471,7 +450,6 @@ class SickRage(object): """ Populates the showList with shows from the database """ - logger.log(u"Loading initial show list", logger.DEBUG) myDB = db.DBConnection() @@ -497,7 +475,7 @@ class SickRage(object): for filename in filesList: srcFile = os.path.join(srcDir, filename) dstFile = os.path.join(dstDir, filename) - bakFile = os.path.join(dstDir, '{0}.bak-{1}'.format(filename, datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S'))) + bakFile = os.path.join(dstDir, '{0}.bak-{1}'.format(filename, datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))) if os.path.isfile(dstFile): shutil.move(dstFile, bakFile) shutil.move(srcFile, dstFile) @@ -515,8 +493,9 @@ class SickRage(object): # shutdown web server if self.webserver: - logger.log("Shutting down Tornado") + logger.log(u"Shutting down Tornado") self.webserver.shutDown() + try: self.webserver.join(10) except Exception: @@ -541,12 +520,13 @@ class SickRage(object): if '--nolaunch' not in popen_list: popen_list += ['--nolaunch'] logger.log(u"Restarting SickRage with " + str(popen_list)) - logger.shutdown() #shutdown the logger to make sure it's released the logfile BEFORE it restarts SR. + logger.shutdown() # shutdown the logger to make sure it's released the logfile BEFORE it restarts SR. subprocess.Popen(popen_list, cwd=os.getcwd()) # system exit - logger.shutdown() #Make sure the logger has stopped, just in case + logger.shutdown() # Make sure the logger has stopped, just in case # pylint: disable=W0212 + # Access to a protected member of a client class os._exit(0) diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css index fe24eafcb4f4ab6bee444f3f6736bdee63af8fc8..d2189bcdf49877d145658397429240e438aa65ad 100644 --- a/gui/slick/css/dark.css +++ b/gui/slick/css/dark.css @@ -4,34 +4,34 @@ inc_top.mako .ui-dialog, .ui-dialog-buttonpane { - background: #2a2a2a !important; + background: #2a2a2a !important; } .ui-widget-content { background: #606060; border: 1px solid #111; - color: #fff; + color: #fff; } .ui-widget-content a { - color: #fff; + color: #fff; } .ui-widget-content a:hover { - color: #09A2FF; - text-decoration: none; + color: #09A2FF; + text-decoration: none; } .ui-widget-header { - background: #3d3d3d; - border: 1px solid #111; - color: #fff; + background: #3d3d3d; + border: 1px solid #111; + color: #fff; } .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { - border: 1px solid #111; + border: 1px solid #111; } .ui-state-hover, @@ -40,35 +40,35 @@ inc_top.mako .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { - background: #3d3d3d; + background: #3d3d3d; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { - background: #3d3d3d; + background: #3d3d3d; } .ui-icon, .ui-widget-content .ui-icon { - background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png"); + background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png"); } .ui-state-default .ui-icon { - background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png'); + background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png'); } .ui-widget-overlay { - background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x; + background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { - color: #fff; - text-decoration: none; + color: #fff; + text-decoration: none; } .ui-dialog .ui-dialog-titlebar-close { - background: #333; + background: #333; } .ui-tabs { @@ -78,134 +78,134 @@ inc_top.mako } .ui-tabs .ui-tabs-panel { - background-color: #3d3d3d !important; - border: 1px solid #111 !important; + background-color: #3d3d3d !important; + border: 1px solid #111 !important; } .ui-tabs-nav > :not(.ui-tabs-active){ - background: #333; - border-top-left-radius: 5px; - border-top-right-radius: 5px; + background: #333; + border-top-left-radius: 5px; + border-top-right-radius: 5px; } [class^="menu-icon-"], [class*=" menu-icon-"] { - background: url("../images/menu/menu-icons-white.png"); - height: 16px; - width: 16px; - display: inline-block; - position: relative; - top: 2px; - float: left; + background: url("../images/menu/menu-icons-white.png"); + height: 16px; + width: 16px; + display: inline-block; + position: relative; + top: 2px; + float: left; } .menu-icon-addshow { - background-position: 0px 0px; + background-position: 0px 0px; } .menu-icon-anime { - background-position: -21px 0px; + background-position: -21px 0px; } .menu-icon-backlog-view { - background-position: -42px 0px; + background-position: -42px 0px; } .menu-icon-backlog { - background-position: -63px 0px; + background-position: -63px 0px; } .menu-icon-bittorrent { - background-position: -84px 0px; + background-position: -84px 0px; } .menu-icon-config-index { - background-position: -105px 0px; + background-position: -105px 0px; } .menu-icon-config { - background-position: -126px 0px; + background-position: -126px 0px; } .menu-icon-failed-download { - background-position: -147px 0px; + background-position: -147px 0px; } .menu-icon-home { - background-position: -168px 0px; + background-position: -168px 0px; } .menu-icon-manage { - background-position: -189px 0px; + background-position: -189px 0px; } .menu-icon-manage-searches { - background-position: -210px 0px; + background-position: -210px 0px; } .menu-icon-poster { - background-position: -231px 0px; + background-position: -231px 0px; } .menu-icon-postprocess { - background-position: -252px 0px; + background-position: -252px 0px; } .menu-icon-restart { - background-position: -273px 0px; + background-position: -273px 0px; } .menu-icon-shutdown { - background-position: -294px 0px; + background-position: -294px 0px; } .menu-icon-update { - background-position: -315px 0px; + background-position: -315px 0px; } .menu-icon-viewlog-errors { - background-position: -336px 0px; + background-position: -336px 0px; } .menu-icon-viewlog { - background-position: -357px 0px; + background-position: -357px 0px; } .menu-icon-kodi { - background-position: -378px 0px; + background-position: -378px 0px; } .menu-icon-help { - background-position: -399px 0px; + background-position: -399px 0px; } [class^="submenu-icon-"], [class*=" submenu-icon-"] { - background: url("../images/menu/menu-icons-white.png"); - height: 16px; - width: 16px; + background: url("../images/menu/menu-icons-white.png"); + height: 16px; + width: 16px; } .submenu-icon-anime { - background-position: -21px 0px; + background-position: -21px 0px; } .submenu-icon-bittorrent { - background-position: -84px 0px; + background-position: -84px 0px; } .submenu-icon-failed-download { - background-position: -147px 0px; + background-position: -147px 0px; } .submenu-icon-restart { - background-position: -273px 0px; + background-position: -273px 0px; } .submenu-icon-shutdown { - background-position: -294px 0px; + background-position: -294px 0px; } .submenu-icon-kodi { - background-position: -378px 0px; + background-position: -378px 0px; } /* ======================================================================= @@ -213,16 +213,16 @@ inc_bottom.mako ========================================================================== */ .footer { - width: 100%; - padding: 20px 0; - color: #fff; - text-align: center; - font-size: 12px; + width: 100%; + padding: 20px 0; + color: #fff; + text-align: center; + font-size: 12px; } .footerhighlight { - color: #09A2FF; - display: inline; + color: #09A2FF; + display: inline; } /* ======================================================================= @@ -230,88 +230,88 @@ home.mako ========================================================================== */ .imgbanner .banner { - border: 1px solid #111; - overflow: hidden; - height: 66px; - overflow: hidden; - border-radius: 8px; - vertical-align: top; - width: 360px; - display: block; - margin-left: auto; - margin-right: auto; + border: 1px solid #111; + overflow: hidden; + height: 66px; + overflow: hidden; + border-radius: 8px; + vertical-align: top; + width: 360px; + display: block; + margin-left: auto; + margin-right: auto; } .imgsmallposter .small { - height: 66px; - overflow: hidden; - border-radius: 3px; - vertical-align: middle; - width: 45px; - border: 1px solid #111; - margin-right: 5px; + height: 66px; + overflow: hidden; + border-radius: 3px; + vertical-align: middle; + width: 45px; + border: 1px solid #111; + margin-right: 5px; } .progressbarText { - position: absolute; - top: 0; - width: 100%; - height: 100%; - overflow: visible; - text-align: center; - text-shadow: 0 0 0.1em #000; - vertical-align: middle; - font-size: 12px; - color: #fff; + position: absolute; + top: 0; + width: 100%; + height: 100%; + overflow: visible; + text-align: center; + text-shadow: 0 0 0.1em #000; + vertical-align: middle; + font-size: 12px; + color: #fff; } .show { - margin: 12px; - width: 188px; - height: 352px; - background-color: #333; - border: 1px solid #111; - border-radius: 6px; + margin: 12px; + width: 188px; + height: 352px; + background-color: #333; + border: 1px solid #111; + border-radius: 6px; } .show-title:after { - content: ""; - pointer-events: none; - position: absolute; - width: 20px; - height: 100%; - top: 0; - right: 0; - background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + content: ""; + pointer-events: none; + position: absolute; + width: 20px; + height: 100%; + top: 0; + right: 0; + background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); } .show-date:after { - content: ""; - pointer-events: none; - position: absolute; - width: 20px; - height: 100%; - top: 0; - right: 0; - background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); - background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + content: ""; + pointer-events: none; + position: absolute; + width: 20px; + height: 100%; + top: 0; + right: 0; + background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); + background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0)); } td.tvShow a { - color: #fff; - text-decoration: none; + color: #fff; + text-decoration: none; } td.tvShow a:hover { - cursor: pointer; - color: #09A2FF; + cursor: pointer; + color: #09A2FF; } .popover { @@ -332,27 +332,27 @@ home_addShows.mako ========================================================================== */ .icon-addnewshow { - background-image: url("../images/addshows/add-new32-white.png"); - width: 32px; - height: 32px; + background-image: url("../images/addshows/add-new32-white.png"); + width: 32px; + height: 32px; } .icon-addtrendingshow { - background-image: url("../images/addshows/add-trending32-white.png"); - width: 32px; - height: 32px; + background-image: url("../images/addshows/add-trending32-white.png"); + width: 32px; + height: 32px; } .icon-addrecommendedshow { - background-image: url("../images/addshows/add-trakt32-white.png"); - width: 32px; - height: 32px; + background-image: url("../images/addshows/add-trakt32-white.png"); + width: 32px; + height: 32px; } .icon-addexistingshow { - background-image: url("../images/addshows/add-existing32-white.png"); - width: 32px; - height: 32px; + background-image: url("../images/addshows/add-existing32-white.png"); + width: 32px; + height: 32px; } /* ======================================================================= @@ -360,11 +360,11 @@ home_newShow.mako ========================================================================== */ #displayText { - padding: 8px; - overflow: hidden; - font-size: 14px; - background-color: #3d3d3d; - border: 1px solid #111; + padding: 8px; + overflow: hidden; + font-size: 14px; + background-color: #3d3d3d; + border: 1px solid #111; } /* ======================================================================= @@ -372,11 +372,11 @@ home_addExistingShow.mako ========================================================================== */ ul#rootDirStaticList li { - padding: 4px 5px 4px 5px; - margin: 2px; - list-style: none outside none; - cursor: pointer; - background: #3d3d3d; + padding: 4px 5px 4px 5px; + margin: 2px; + list-style: none outside none; + cursor: pointer; + background: #3d3d3d; } /* ======================================================================= @@ -384,11 +384,11 @@ home_trendingShows.mako ========================================================================== */ .traktContainer { - margin: 12px; - width: 188px; - background-color: #333; - border: 1px solid #111; - border-radius: 6px; + margin: 12px; + width: 188px; + background-color: #333; + border: 1px solid #111; + border-radius: 6px; } /* ======================================================================= @@ -398,95 +398,95 @@ displayShow.mako #prevShow, #nextShow, #topcontrol { - -webkit-filter: "none"; - filter: none; + -webkit-filter: "none"; + filter: none; } h1.title { - padding-bottom: 12px; - margin-bottom: 15px; - line-height: 30px; - text-align: left; - text-rendering: optimizelegibility; - border-bottom: 1px solid #555; + padding-bottom: 12px; + margin-bottom: 15px; + line-height: 30px; + text-align: left; + text-rendering: optimizelegibility; + border-bottom: 1px solid #555; } ul.tags li { - margin-right: 4px; - margin-bottom: 5px; - padding: 3px 4px 3px 25px; - background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F; - border-radius: 3px; - border: 1px solid #111; - color: #FFF; - font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; - text-shadow: 0px 1px rgba(0, 0, 0, 0.8); - float: left; + margin-right: 4px; + margin-bottom: 5px; + padding: 3px 4px 3px 25px; + background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F; + border-radius: 3px; + border: 1px solid #111; + color: #FFF; + font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; + text-shadow: 0px 1px rgba(0, 0, 0, 0.8); + float: left; } .tvshowImg { - border: 1px solid #111; - border-radius: 5px; - height: 311px; - width: auto; - float: left; + border: 1px solid #111; + border-radius: 5px; + height: 311px; + width: auto; + float: left; } #summary { - padding: 10px; - background-color: #3d3d3d; - border: 1px solid #111; - width: 100%; - height: 250px; - overflow: auto; - cursor: default; + padding: 10px; + background-color: #3d3d3d; + border: 1px solid #111; + width: 100%; + height: 250px; + overflow: auto; + cursor: default; } .sickbeardTable { - table-layout: auto; - width: 100%; - border-collapse: collapse; - border-spacing: 0; - text-align: center; - border: none; - empty-cells: show; - color: #000; + table-layout: auto; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + text-align: center; + border: none; + empty-cells: show; + color: #000; } .sickbeardTable th{ - color: #fff; - text-align: center; - background-color: #15528F; - white-space: nowrap; + color: #fff; + text-align: center; + background-color: #15528F; + white-space: nowrap; } .sickbeardTable th, .sickbeardTable td { - border-top: 1px solid #222; - border-left: 1px solid #222; - padding: 4px; + border-top: 1px solid #222; + border-left: 1px solid #222; + padding: 4px; } th.row-seasonheader { - border: none; - background-color: #222; - color: #fff; - padding-top: 15px; - text-align: left; + border: none; + background-color: #222; + color: #fff; + padding-top: 15px; + text-align: left; } tr.seasonheader { - padding-bottom: 5px; - padding-top: 10px; - text-align: left; - border: none; + padding-bottom: 5px; + padding-top: 10px; + text-align: left; + border: none; } th.col-checkbox, td.col-checkbox { - width: 30px; - border-left: none; - text-align: center; + width: 30px; + border-left: none; + text-align: center; } /* ======================================================================= @@ -494,59 +494,59 @@ schedule.mako ========================================================================== */ h2.day, h2.network { - margin: 10px 0; - font-size: 24px; - line-height: 36px; - font-weight: bold; - letter-spacing: 1px; - color: #FFF; - text-align: center; - text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3); - background-color: #15528F; + margin: 10px 0; + font-size: 24px; + line-height: 36px; + font-weight: bold; + letter-spacing: 1px; + color: #FFF; + text-align: center; + text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3); + background-color: #15528F; } .tvshowDiv { - display: block; - clear: both; - border: 1px solid #ccc; - margin: auto; - padding: 0px; - text-align: left; - width: 750px; - border-radius: 5px; - background: #fff; - cursor: default; - overflow: hidden; - color: #000; + display: block; + clear: both; + border: 1px solid #ccc; + margin: auto; + padding: 0px; + text-align: left; + width: 750px; + border-radius: 5px; + background: #fff; + cursor: default; + overflow: hidden; + color: #000; } .tvshowDiv a:hover { - color: #09A2FF; + color: #09A2FF; } #showListTable td.tvShow a { - color: #000; + color: #000; } #showListTable td.tvShow a:hover { - cursor: pointer; - color: #09A2FF; + cursor: pointer; + color: #09A2FF; } table.cal-odd { - background-color: #333; + background-color: #333; } table.cal-even { - background-color: #3d3d3d; + background-color: #3d3d3d; } .calendarShow .text .airtime { - color:#fff + color:#fff } .calendarShow .text .episode-title { - color:#aaa + color:#aaa } /* ======================================================================= @@ -554,43 +554,43 @@ config*.mako ========================================================================== */ .component-group { - padding: 15px 15px 25px; - border-bottom: 1px dotted #555; - min-height: 200px; + padding: 15px 15px 25px; + border-bottom: 1px dotted #555; + min-height: 200px; } .component-group-desc p { - width: 90%; - margin: 10px 0; - color: #ddd; + width: 90%; + margin: 10px 0; + color: #ddd; } #provider_order_list li, #service_order_list li { - padding: 5px; - margin: 5px 0; - font-size: 14px; - background: #333 !important; - color: #fff; + padding: 5px; + margin: 5px 0; + font-size: 14px; + background: #333 !important; + color: #fff; } #provider_order_list .ui-state-default.torrent-provider { - background-color: #555 !important; + background-color: #555 !important; } #provider_order_list .ui-state-default.nzb-provider { - background-color: #222 !important; + background-color: #222 !important; } [class^="icon16-"], [class*=" icon16-"] { - background-image: url("../images/glyphicons-config-white.png"); - background-position: -40px 0; - background-repeat: no-repeat; - display: inline-block; - height: 16px; - line-height: 16px; - vertical-align: text-top; - width: 16px; + background-image: url("../images/glyphicons-config-white.png"); + background-position: -40px 0; + background-repeat: no-repeat; + display: inline-block; + height: 16px; + line-height: 16px; + vertical-align: text-top; + width: 16px; } /* ======================================================================= @@ -598,35 +598,35 @@ config_postProcessing.mako ========================================================================== */ #config div.example { - padding: 10px; - background-color: #333333; - border: 1px solid #111; + padding: 10px; + background-color: #333333; + border: 1px solid #111; } .Key { - width: 100%; - padding: 6px; - font-size: 13px; - background-color: #3d3d3d; - border: 1px solid #111; - border-collapse: collapse; - border-spacing: 0; + width: 100%; + padding: 6px; + font-size: 13px; + background-color: #3d3d3d; + border: 1px solid #111; + border-collapse: collapse; + border-spacing: 0; } .Key th, .tableHeader { - padding: 3px 9px; - margin: 0; - color: #fff; - text-align: center; - background: #15528F; + padding: 3px 9px; + margin: 0; + color: #fff; + text-align: center; + background: #15528F; } .Key tr { - border-bottom: 1px solid #111; + border-bottom: 1px solid #111; } .Key tr.even { - background-color: #333; + background-color: #333; } /* ======================================================================= @@ -634,31 +634,31 @@ config_notifications.mako ========================================================================== */ div.metadata_options { - padding: 7px; - overflow: auto; - background: #333; - color: #fff; - border: 1px solid #111; + padding: 7px; + overflow: auto; + background: #333; + color: #fff; + border: 1px solid #111; } div.metadata_options label:hover { - color: #fff; - background-color: #15528F; - cursor: pointer; + color: #fff; + background-color: #15528F; + cursor: pointer; } div.metadata_options label { - display: block; - padding-left: 7px; - line-height: 20px; - color: #fff; + display: block; + padding-left: 7px; + line-height: 20px; + color: #fff; } div.metadata_example label { - display: block; - line-height: 21px; - color: #fff; - cursor: pointer; + display: block; + line-height: 21px; + color: #fff; + cursor: pointer; } /* ======================================================================= @@ -666,8 +666,8 @@ manage*.mako ========================================================================== */ .separator { - font-size: 90%; - color: #fff; + font-size: 90%; + color: #fff; } a.whitelink { @@ -678,9 +678,9 @@ Global ========================================================================== */ span.path { - padding: 3px 6px; - color: #09A2FF; - background-color: #333; + padding: 3px 6px; + color: #09A2FF; + background-color: #333; } /* ======================================================================= @@ -688,48 +688,48 @@ bootstrap Overrides ========================================================================== */ body { - padding-top: 60px; - overflow-y: scroll; - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - color: #fff; - background-color: #222; + padding-top: 60px; + overflow-y: scroll; + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #fff; + background-color: #222; } /* navbar styling */ .navbar-default { - background-color: #15528F; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F'); - background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F)); - background: -moz-linear-gradient(top, #297AB8, #15528F); - border-color: #3e3f3a; + background-color: #15528F; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F'); + background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F)); + background: -moz-linear-gradient(top, #297AB8, #15528F); + border-color: #3e3f3a; } .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { - background-color: #124477; + background-color: #124477; } .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #124477; + color: #ffffff; + background-color: #124477; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { - background-color: #124477; + background-color: #124477; } .navbar-default .navbar-toggle .icon-bar { - background-color: #124477; + background-color: #124477; } .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { - background-color: #124477; - color: #ffffff; + background-color: #124477; + color: #ffffff; } @media (max-width: 767px) { @@ -742,59 +742,59 @@ body { } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - color: #fff; - text-decoration: none; - background-color: #15528F; + color: #fff; + text-decoration: none; + background-color: #15528F; } .dropdown-menu > li > a { - padding: 4px 36px 4px 20px; - color: #fff; + padding: 4px 36px 4px 20px; + color: #fff; } .dropdown-menu { - background-color: #333; - border: 1px solid rgba(0, 0, 0, 0.15); - box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); + background-color: #333; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); } .btn { - display: inline-block; - *display: inline; - padding: 4px 10px 4px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 12px; - line-height: 16px; - *line-height: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #2672B6; - *background-color: #2672B6; - background-image: -ms-linear-gradient(top, #297AB8, #15528F); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#297AB8), to(#15528F)); - background-image: -webkit-linear-gradient(top, #297AB8, #15528F); - background-image: -o-linear-gradient(top, #297AB8, #15528F); - background-image: linear-gradient(top, #297AB8, #15528F); - background-image: -moz-linear-gradient(top, #297AB8, #15528F); - background-repeat: repeat-x; - border: 1px solid #111; - *border: 0; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-color: #111 #111 #111; - border-bottom-color: #111; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); + display: inline-block; + *display: inline; + padding: 4px 10px 4px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 12px; + line-height: 16px; + *line-height: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #2672B6; + *background-color: #2672B6; + background-image: -ms-linear-gradient(top, #297AB8, #15528F); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#297AB8), to(#15528F)); + background-image: -webkit-linear-gradient(top, #297AB8, #15528F); + background-image: -o-linear-gradient(top, #297AB8, #15528F); + background-image: linear-gradient(top, #297AB8, #15528F); + background-image: -moz-linear-gradient(top, #297AB8, #15528F); + background-repeat: repeat-x; + border: 1px solid #111; + *border: 0; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: #111 #111 #111; + border-bottom-color: #111; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn:hover, @@ -802,78 +802,78 @@ body { .btn.active, .btn.disabled, .btn[disabled] { - background-color: #2672B6; - *background-color: #2672B6; - color: #fff; + background-color: #2672B6; + *background-color: #2672B6; + color: #fff; } .btn:active, .btn.active { - background-color: #cccccc \9; - color: #fff; + background-color: #cccccc \9; + color: #fff; } .btn:hover { - color: #fff; - text-decoration: none; - background-color: #2672B6; - *background-color: #2672B6; - background-position: 0 -150px; - -webkit-transition: background-position 0.0s linear; - -moz-transition: background-position 0.0s linear; - -ms-transition: background-position 0.0s linear; - -o-transition: background-position 0.0s linear; - transition: background-position 0.0s linear; + color: #fff; + text-decoration: none; + background-color: #2672B6; + *background-color: #2672B6; + background-position: 0 -150px; + -webkit-transition: background-position 0.0s linear; + -moz-transition: background-position 0.0s linear; + -ms-transition: background-position 0.0s linear; + -o-transition: background-position 0.0s linear; + transition: background-position 0.0s linear; } .btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; - color: #fff; + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; + color: #fff; } .btn.active, .btn:active { - background-color: #2672B6; - background-color: #2672B6 \9; - background-image: none; - color: #fff; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + background-color: #2672B6; + background-color: #2672B6 \9; + background-image: none; + color: #fff; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled, .btn[disabled] { - cursor: default; - background-color: #15528F; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; + cursor: default; + background-color: #15528F; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } @media(min-width:768px){ - .navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - right: 12px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #333; - border-left: 6px solid transparent; - content: ""; - } + .navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + right: 12px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #333; + border-left: 6px solid transparent; + content: ""; + } } pre { - color: #fff; - background-color: #3d3d3d; - border-color: #111; + color: #fff; + background-color: #3d3d3d; + border-color: #111; } /* ======================================================================= @@ -881,15 +881,15 @@ browser.css overrides ========================================================================== */ #fileBrowserDialog ul li { - margin: 2px 0; - list-style-type: none; - cursor: pointer; - background: #333; + margin: 2px 0; + list-style-type: none; + cursor: pointer; + background: #333; } #fileBrowserDialog ul li a:hover { - color: #09a2ff; - background: none; + color: #09a2ff; + background: none; } /* ======================================================================= @@ -897,28 +897,28 @@ formWizard.css ========================================================================== */ legend.legendStep { - color: #ffffff; - margin-bottom: 0px; + color: #ffffff; + margin-bottom: 0px; } div.stepsguide .step p { - margin: 12px 0; - border-bottom: 4px solid #23AFDC; + margin: 12px 0; + border-bottom: 4px solid #23AFDC; } div.stepsguide .disabledstep p { - border-bottom: 4px solid #1178B3; + border-bottom: 4px solid #1178B3; } div.formpaginate .prev, div.formpaginate .next { - padding: 3px 6px; - color: #fff; - cursor: hand; - cursor: pointer; - background: #2265A1; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; + padding: 3px 6px; + color: #fff; + cursor: hand; + cursor: pointer; + background: #2265A1; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; } /* ======================================================================= @@ -926,25 +926,25 @@ pnotify.css ========================================================================== */ .ui-pnotify-container { - border: 1px solid #111; - background-image: -moz-linear-gradient(#333, #3d3d3d) !important; - background-image: linear-gradient(#333, #3d3d3d) !important; - background-image: -webkit-linear-gradient(#333, #3d3d3d) !important; - background-image: -o-linear-gradient(#333, #3d3d3d) !important; - filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important; - -ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important; - -moz-box-shadow: 0px 0px 2px #000; - -webkit-box-shadow: 0px 0px 2px #000; - -o-box-shadow: 0px 0px 2px #000; - box-shadow: 0px 0px 2px #000; + border: 1px solid #111; + background-image: -moz-linear-gradient(#333, #3d3d3d) !important; + background-image: linear-gradient(#333, #3d3d3d) !important; + background-image: -webkit-linear-gradient(#333, #3d3d3d) !important; + background-image: -o-linear-gradient(#333, #3d3d3d) !important; + filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important; + -ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important; + -moz-box-shadow: 0px 0px 2px #000; + -webkit-box-shadow: 0px 0px 2px #000; + -o-box-shadow: 0px 0px 2px #000; + box-shadow: 0px 0px 2px #000; } .ui-pnotify-title { - color: #ffffff; + color: #ffffff; } .ui-pnotify-text { - color: #ffffff; + color: #ffffff; } /* ======================================================================= @@ -952,90 +952,90 @@ tablesorter.css ========================================================================== */ .tablesorter { - width: 100%; - margin-right: auto; - margin-left: auto; - color: #fff; - text-align: left; - background-color: #333; - border-spacing: 0; + width: 100%; + margin-right: auto; + margin-left: auto; + color: #fff; + text-align: left; + background-color: #333; + border-spacing: 0; } .tablesorter th, .tablesorter td { - padding: 4px; - border-top: #222 1px solid; - border-left: #222 1px solid; - vertical-align: middle; + padding: 4px; + border-top: #222 1px solid; + border-left: #222 1px solid; + vertical-align: middle; } .tablesorter th { - color: #fff; - text-align: center; - text-shadow: -1px -1px 0 rgba(0,0,0,0.3); - background-color: #15528F; - border-collapse: collapse; - font-weight: normal; + color: #fff; + text-align: center; + text-shadow: -1px -1px 0 rgba(0,0,0,0.3); + background-color: #15528F; + border-collapse: collapse; + font-weight: normal; } .tablesorter thead .tablesorter-headerDesc { - background-color: #297AB8; - background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); - /* background-image: url(../images/tablesorter/asc.gif); */ + background-color: #297AB8; + background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); + /* background-image: url(../images/tablesorter/asc.gif); */ } .tablesorter thead .tablesorter-headerAsc { - background-color: #297AB8; - background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); - /* background-image: url(../images/tablesorter/desc.gif); */ + background-color: #297AB8; + background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); + /* background-image: url(../images/tablesorter/desc.gif); */ } thead.tablesorter-stickyHeader { - border-top: 2px solid #222; - border-bottom: 2px solid #222; + border-top: 2px solid #222; + border-bottom: 2px solid #222; } /* Zebra Widget - row alternating colors */ .tablesorter tr.odd, .sickbeardTable tr.odd { - background-color: #333333; + background-color: #333333; } .tablesorter tr.even, .sickbeardTable tr.even { - background-color: #2e2e2e; + background-color: #2e2e2e; } .tablesorter tr.tablesorter-filter-row, .tablesorter tr.tablesorter-filter-row td { - text-align: center; - background: #333; - border-bottom: 1px solid #111; + text-align: center; + background: #333; + border-bottom: 1px solid #111; } /* hidden filter row */ .tablesorter-filter-row.hideme td { - /*** *********************************************** ***/ - /*** change this padding to modify the thickness ***/ - /*** of the closed filter row (height = padding x 2) ***/ - padding: 2px; - /*** *********************************************** ***/ - margin: 0; - line-height: 0; - cursor: pointer; + /*** *********************************************** ***/ + /*** change this padding to modify the thickness ***/ + /*** of the closed filter row (height = padding x 2) ***/ + padding: 2px; + /*** *********************************************** ***/ + margin: 0; + line-height: 0; + cursor: pointer; } .tablesorter-filter-row.hideme * { - height: 1px; - min-height: 0; - border: 0; - padding: 0; - margin: 0; - /* don't use visibility: hidden because it disables tabbing */ - opacity: 0; - filter: alpha(opacity=0); + height: 1px; + min-height: 0; + border: 0; + padding: 0; + margin: 0; + /* don't use visibility: hidden because it disables tabbing */ + opacity: 0; + filter: alpha(opacity=0); } #showListTable tbody { - color: #000; + color: #000; } /* ======================================================================= @@ -1043,11 +1043,11 @@ token-input.css ========================================================================== */ div.token-input-dropdown { - background-color: #fff; - color: #000; - border-left-color: #ccc; - border-right-color: #ccc; - border-bottom-color: #ccc; + background-color: #fff; + color: #000; + border-left-color: #ccc; + border-right-color: #ccc; + border-bottom-color: #ccc; } /* ======================================================================= @@ -1055,29 +1055,29 @@ jquery.confirm.css ========================================================================== */ #confirmBox{ - background: #222; - width: 460px; - position: fixed; - left: 50%; - top: 50%; - margin: -130px 0 0 -230px; - border: 1px solid #111; - box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); + background: #222; + width: 460px; + position: fixed; + left: 50%; + top: 50%; + margin: -130px 0 0 -230px; + border: 1px solid #111; + box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); } #confirmBox h1 { - background-color: #15528F; - border-bottom: 1px solid #111; - color: #fff; - margin: 0; - font-size: 22px; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + background-color: #15528F; + border-bottom: 1px solid #111; + color: #fff; + margin: 0; + font-size: 22px; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); } #confirmBox p { - padding-top: 20px; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + padding-top: 20px; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); } /* ======================================================================= @@ -1093,15 +1093,15 @@ bootstrap modal } .modal-header { - padding:9px 15px; - border-bottom:1px solid #eee; - background-color: #15528F; - -webkit-border-top-left-radius: 5px; - -webkit-border-top-right-radius: 5px; - -moz-border-radius-topleft: 5px; - -moz-border-radius-topright: 5px; - border-top-left-radius: 5px; - border-top-right-radius: 5px; + padding:9px 15px; + border-bottom:1px solid #eee; + background-color: #15528F; + -webkit-border-top-left-radius: 5px; + -webkit-border-top-right-radius: 5px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-topright: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; } /* ======================================================================= @@ -1109,11 +1109,100 @@ bootstrap panel ========================================================================== */ .panel-default { - background-color: #3D3D3D; - border-color: #111111; + background-color: #3D3D3D; + border-color: #111111; } .panel-heading { - background-color: #3D3D3D !important; - color: #FFFFFF !important; + background-color: #3D3D3D !important; + color: #FFFFFF !important; +} + + +/* ======================================================================= +new #confirmBox +@TODO THIS NEEDS TO BE FIXED! +========================================================================== */ +.modal-dialog { + width: 460px; + position: fixed; + left: 50%; + top: 50%; + margin: -130px 0 0 -230px; + border: 1px solid #111; + box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); + border-radius: 0px; +} + +.modal-content { + border-radius: 0px; +} + +.modal-header { + border-bottom: none; + border-radius: 0px; +} + +.modal-body, .modal-content{ + background: #222; +} + +.modal-footer { + border-top: none; +} + +.confirmation-modal { + background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5); + background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5); +} + +.modal-footer { + text-align: center; +} + +.modal-header .close { + display: none +} + +.modal-footer button { + margin-right: 15px; + padding: 2px 15px; + text-decoration: none; + display: inline-block; + color: #fff; + text-align:center; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + background-clip: padding-box; + border: 1px solid #111; + border-radius: 3px; + cursor: pointer; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25)); + background-image: -moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25)); + background-image: -o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25)); + background-image: linear-gradient(to bottom, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25)); + -webkit-box-shadow: inset 0 1px rgba(255,255,255,0.1),inset 0 -1px 3px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(255,255,255,0.08),0 1px 2px rgba(0,0,0,0.15); + box-shadow: inset 0 1px rgba(255,255,255,0.1),inset 0 -1px 3px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(255,255,255,0.08),0 1px 2px rgba(0,0,0,0.15); +} + +.modal-footer button:last-child { + margin-right:0; +} + +.modal-footer button.confirm { + background-color: #3F7636; +} + +.modal-footer button.confirm:hover { + background-color: #48873E; +} + +.modal-footer button.cancel { + background-color: #8D2D2B; +} + +.modal-footer button.cancel:hover { + background-color: #A13331; } diff --git a/gui/slick/css/vender.min.css b/gui/slick/css/vender.min.css new file mode 100644 index 0000000000000000000000000000000000000000..c23d4637c1e42dbea7d6a89964b962a45fffef9a Binary files /dev/null and b/gui/slick/css/vender.min.css differ diff --git a/gui/slick/images/providers/frenchtorrentdb.png b/gui/slick/images/providers/frenchtorrentdb.png deleted file mode 100644 index 26a665b300adc56127ec4e55e36574b66f5f27e5..0000000000000000000000000000000000000000 Binary files a/gui/slick/images/providers/frenchtorrentdb.png and /dev/null differ diff --git a/gui/slick/js/_bower.min.js b/gui/slick/js/_bower.min.js deleted file mode 100644 index aad0ddf1ce56d0457e6d9e1978f112a66e0d3d3e..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/_bower.min.js and /dev/null differ diff --git a/gui/slick/js/addExistingShow.js b/gui/slick/js/addExistingShow.js index 851628a09ed85cef5d0e5214cf87d1793ba8fa8a..150b5a158f41a7c0b9f15bd32e5b4f805dc0aa6b 100644 --- a/gui/slick/js/addExistingShow.js +++ b/gui/slick/js/addExistingShow.js @@ -1,5 +1,4 @@ $(document).ready(function() { - $('#tableDiv').on('click', '#checkAll', function() { var seasCheck = this; $('.dirCheck').each(function() { @@ -9,7 +8,7 @@ $(document).ready(function() { $('#submitShowDirs').click(function() { var dirArr = []; - $('.dirCheck').each(function(i,w) { + $('.dirCheck').each(function() { if (this.checked === true) { var show = $(this).attr('id'); var indexer = $(this).closest('tr').find('select').val(); @@ -21,10 +20,7 @@ $(document).ready(function() { return false; } - url = srRoot + '/home/addShows/addExistingShows?promptForSettings=' + ($('#promptForSettings').prop('checked') ? 'on' : 'off'); - url += '&shows_to_add=' + dirArr.join('&shows_to_add='); - - window.location.href = url; + window.location.href = srRoot + '/home/addShows/addExistingShows?promptForSettings=' + ($('#promptForSettings').prop('checked') ? 'on' : 'off') + '&shows_to_add=' + dirArr.join('&shows_to_add='); }); @@ -52,12 +48,12 @@ $(document).ready(function() { }); } - var last_txt = ''; + var lastTxt = ''; $('#rootDirText').change(function() { - if (last_txt == $('#rootDirText').val()) { + if (lastTxt === $('#rootDirText').val()) { return false; } else { - last_txt = $('#rootDirText').val(); + lastTxt = $('#rootDirText').val(); } $('#rootDirStaticList').html(''); $('#rootDirs option').each(function(i, w) { diff --git a/gui/slick/js/ajaxEpSearch.js b/gui/slick/js/ajaxEpSearch.js index 6c01dcfd10064dbdaec7060d74701e2bd386dfa6..ff66ca7c7916d12251b395946108eccbc4ab0ec2 100644 --- a/gui/slick/js/ajaxEpSearch.js +++ b/gui/slick/js/ajaxEpSearch.js @@ -1,4 +1,4 @@ -var search_status_url = srRoot + '/home/getManualSearchStatus'; +var searchStatusUrl = srRoot + '/home/getManualSearchStatus'; var failedDownload = false; var qualityDownload = false; var selectedEpisode = ''; @@ -6,32 +6,16 @@ PNotify.prototype.options.maxonscreen = 5; $.fn.manualSearches = []; -function check_manual_searches() { - var poll_interval = 5000; - showId = $('#showID').val(); - var url = showId !== undefined ? search_status_url + '?show=' + showId : search_status_url ; - $.ajax({ - url: url, - success: function (data) { - if (data.episodes) { - poll_interval = 5000; - } else { - poll_interval = 15000; - } +function enableLink(el) { + el.on('click.disabled', false); + el.prop('enableClick', '1'); + el.fadeTo("fast", 1); +} - updateImages(data); - //cleanupManualSearches(data); - }, - error: function () { - poll_interval = 30000; - }, - type: "GET", - dataType: "json", - complete: function () { - setTimeout(check_manual_searches, poll_interval); - }, - timeout: 15000 // timeout every 15 secs - }); +function disableLink(el) { + el.off('click.disabled'); + el.prop('enableClick', '0'); + el.fadeTo("fast", 0.5); } function updateImages(data) { @@ -40,14 +24,14 @@ function updateImages(data) { var loadingImage = 'loading16.gif'; var queuedImage = 'queued.png'; var searchImage = 'search16.png'; - var status = null; + var htmlContent = ''; //Try to get the <a> Element - el=$('a[id=' + ep.show + 'x' + ep.season + 'x' + ep.episode+']'); - img=el.children('img'); - parent=el.parent(); + var el = $('a[id=' + ep.show + 'x' + ep.season + 'x' + ep.episode+']'); + var img = el.children('img'); + var parent = el.parent(); if (el) { var rSearchTerm = ''; - if (ep.searchstatus == 'searching') { + if (ep.searchstatus.toLowerCase() === 'searching') { //el=$('td#' + ep.season + 'x' + ep.episode + '.search img'); img.prop('title','Searching'); img.prop('alt','Searching'); @@ -55,16 +39,16 @@ function updateImages(data) { disableLink(el); // Update Status and Quality rSearchTerm = /(\w+)\s\((.+?)\)/; - HtmlContent = ep.searchstatus; + htmlContent = ep.searchstatus; - } else if (ep.searchstatus == 'queued') { + } else if (ep.searchstatus.toLowerCase() === 'queued') { //el=$('td#' + ep.season + 'x' + ep.episode + '.search img'); img.prop('title','Queued'); img.prop('alt','queued'); img.prop('src',srRoot+'/images/' + queuedImage ); disableLink(el); - HtmlContent = ep.searchstatus; - } else if (ep.searchstatus == 'finished') { + htmlContent = ep.searchstatus; + } else if (ep.searchstatus.toLowerCase() === 'finished') { //el=$('td#' + ep.season + 'x' + ep.episode + '.search img'); img.prop('title','Searching'); img.prop('alt','searching'); @@ -74,54 +58,70 @@ function updateImages(data) { // Update Status and Quality rSearchTerm = /(\w+)\s\((.+?)\)/; - HtmlContent = ep.status.replace(rSearchTerm,"$1"+' <span class="quality '+ep.quality+'">'+"$2"+'</span>'); + htmlContent = ep.status.replace(rSearchTerm,"$1"+' <span class="quality '+ep.quality+'">'+"$2"+'</span>'); parent.closest('tr').prop("class", ep.overview + " season-" + ep.season + " seasonstyle"); } // update the status column if it exists - parent.siblings('.col-status').html(HtmlContent); + parent.siblings('.col-status').html(htmlContent); } - el_comEps=$('a[id=forceUpdate-' + ep.show + 'x' + ep.season + 'x' + ep.episode+']'); - img_comEps=el_comEps.children('img'); - if (el_comEps) { - if (ep.searchstatus == 'searching') { - img_comEps.prop('title','Searching'); - img_comEps.prop('alt','Searching'); - img_comEps.prop('src',srRoot+'/images/' + loadingImage); - disableLink(el_comEps); - } else if (ep.searchstatus == 'queued') { - img_comEps.prop('title','Queued'); - img_comEps.prop('alt','queued'); - img_comEps.prop('src',srRoot+'/images/' + queuedImage ); - } else if (ep.searchstatus == 'finished') { - img_comEps.prop('title','Manual Search'); - img_comEps.prop('alt','[search]'); - img_comEps.prop('src',srRoot+'/images/' + searchImage); - if (ep.overview == 'snatched') { - el_comEps.closest('tr').remove(); + var elementCompleteEpisodes = $('a[id=forceUpdate-' + ep.show + 'x' + ep.season + 'x' + ep.episode+']'); + var imageCompleteEpisodes = elementCompleteEpisodes.children('img'); + if (elementCompleteEpisodes) { + if (ep.searchstatus.toLowerCase() === 'searching') { + imageCompleteEpisodes.prop('title','Searching'); + imageCompleteEpisodes.prop('alt','Searching'); + imageCompleteEpisodes.prop('src',srRoot+'/images/' + loadingImage); + disableLink(elementCompleteEpisodes); + } else if (ep.searchstatus.toLowerCase() === 'queued') { + imageCompleteEpisodes.prop('title','Queued'); + imageCompleteEpisodes.prop('alt','queued'); + imageCompleteEpisodes.prop('src',srRoot+'/images/' + queuedImage ); + } else if (ep.searchstatus.toLowerCase() === 'finished') { + imageCompleteEpisodes.prop('title','Manual Search'); + imageCompleteEpisodes.prop('alt','[search]'); + imageCompleteEpisodes.prop('src',srRoot+'/images/' + searchImage); + if (ep.overview.toLowerCase() === 'snatched') { + elementCompleteEpisodes.closest('tr').remove(); } else { - enableLink(el_comEps); + enableLink(elementCompleteEpisodes); } } } }); } -$(document).ready(function () { - check_manual_searches(); -}); +function checkManualSearches() { + var pollInterval = 5000; + var showId = $('#showID').val(); + var url = showId !== undefined ? searchStatusUrl + '?show=' + showId : searchStatusUrl ; + $.ajax({ + url: url, + success: function (data) { + if (data.episodes) { + pollInterval = 5000; + } else { + pollInterval = 15000; + } -function enableLink(el) { - el.on('click.disabled', false); - el.prop('enableClick', '1'); - el.fadeTo("fast", 1); + updateImages(data); + //cleanupManualSearches(data); + }, + error: function () { + pollInterval = 30000; + }, + type: "GET", + dataType: "json", + complete: function () { + setTimeout(checkManualSearches, pollInterval); + }, + timeout: 15000 // timeout every 15 secs + }); } -function disableLink(el) { - el.off('click.disabled'); - el.prop('enableClick', '0'); - el.fadeTo("fast", 0.5); -} +$(document).ready(function () { + checkManualSearches(); +}); (function(){ $.ajaxEpSearch = { @@ -142,7 +142,7 @@ function disableLink(el) { event.preventDefault(); // Check if we have disabled the click - if($(this).prop('enableClick') == '0') return false; + if($(this).prop('enableClick') === '0') { return false; } selectedEpisode = $(this); @@ -153,7 +153,7 @@ function disableLink(el) { event.preventDefault(); // Check if we have disabled the click - if ($(this).prop('enableClick') == '0') return false; + if ($(this).prop('enableClick') === '0') { return false; } selectedEpisode = $(this); @@ -165,23 +165,25 @@ function disableLink(el) { }); $('#manualSearchModalFailed .btn').click(function(){ - failedDownload = ($(this).text() == 'Yes'); + failedDownload = ($(this).text().toLowerCase() === 'yes'); $("#manualSearchModalQuality").modal('show'); }); $('#manualSearchModalQuality .btn').click(function(){ - qualityDownload = ($(this).text() == 'Yes'); + qualityDownload = ($(this).text().toLowerCase() === 'yes'); manualSearch(); }); function manualSearch(){ + var imageName, imageResult, htmlContent; + var parent = selectedEpisode.parent(); // Create var for anchor - link = selectedEpisode; + var link = selectedEpisode; // Create var for img under anchor and set options for the loading gif - img=selectedEpisode.children('img'); + var img = selectedEpisode.children('img'); img.prop('title','loading'); img.prop('alt',''); img.prop('src',srRoot+'/images/' + options.loadingImage); @@ -197,31 +199,32 @@ function disableLink(el) { $.getJSON(url, function(data){ // if they failed then just put the red X - if (data.result == 'failure') { - img_name = options.noImage; - img_result = 'failed'; + if (data.result.toLowerCase() === 'failure') { + imageName = options.noImage; + imageResult = 'failed'; // if the snatch was successful then apply the corresponding class and fill in the row appropriately } else { - img_name = options.loadingImage; - img_result = 'success'; + imageName = options.loadingImage; + imageResult = 'success'; // color the row - if (options.colorRow) + if (options.colorRow) { parent.parent().removeClass('skipped wanted qual good unaired').addClass('snatched'); + } // applying the quality class var rSearchTerm = /(\w+)\s\((.+?)\)/; - HtmlContent = data.result.replace(rSearchTerm,"$1"+' <span class="quality '+data.quality+'">'+"$2"+'</span>'); + htmlContent = data.result.replace(rSearchTerm,"$1"+' <span class="quality '+data.quality+'">'+"$2"+'</span>'); // update the status column if it exists - parent.siblings('.col-status').html(HtmlContent); + parent.siblings('.col-status').html(htmlContent); // Only if the queuing was successful, disable the onClick event of the loading image disableLink(link); } // put the corresponding image as the result of queuing of the manual search - img.prop('title',img_result); - img.prop('alt',img_result); + img.prop('title', imageResult); + img.prop('alt', imageResult); img.prop('height', options.size); - img.prop('src',srRoot+"/images/"+img_name); + img.prop('src', srRoot+"/images/" + imageName); }); // don't follow the link diff --git a/gui/slick/js/ajaxEpSubtitles.js b/gui/slick/js/ajaxEpSubtitles.js index 241ed7f698360dfc8012c966205cb8eeda0deae8..a61499c394dc069b5e79655c55c1ebe8f94a0ddf 100644 --- a/gui/slick/js/ajaxEpSubtitles.js +++ b/gui/slick/js/ajaxEpSubtitles.js @@ -1,29 +1,29 @@ (function(){ $.fn.ajaxEpSubtitlesSearch = function(){ $('.epSubtitlesSearch').click(function(){ - var subtitles_td = $(this).parent().siblings('.col-subtitles'); - var subtitles_search_link = $(this); + var subtitlesTd = $(this).parent().siblings('.col-subtitles'); + var subtitlesSearchLink = $(this); // fill with the ajax loading gif - subtitles_search_link.empty(); - subtitles_search_link.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"})); + subtitlesSearchLink.empty(); + subtitlesSearchLink.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"})); $.getJSON($(this).attr('href'), function(data){ - if (data.result != "failure" && data.result != "No subtitles downloaded") { - // clear and update the subtitles column with new informations - var subtitles = data.subtitles.split(','); - subtitles_td.empty(); - $.each(subtitles,function(index, language){ - if (language !== "" && language != "und") { - if (index != subtitles.length - 1) { - subtitles_td.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11})); - } else { - subtitles_td.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11})); + if (data.result.toLowerCase() !== "failure" && data.result.toLowerCase() !== "no subtitles downloaded") { + // clear and update the subtitles column with new informations + var subtitles = data.subtitles.split(','); + subtitlesTd.empty(); + $.each(subtitles,function(index, language){ + if (language !== "" && language !== "und") { + if (index !== subtitles.length - 1) { + subtitlesTd.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11})); + } else { + subtitlesTd.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11})); + } } - } - }); - // don't allow other searches - subtitles_search_link.remove(); + }); + // don't allow other searches + subtitlesSearchLink.remove(); } else { - subtitles_search_link.remove(); + subtitlesSearchLink.remove(); } }); @@ -34,13 +34,13 @@ $.fn.ajaxEpMergeSubtitles = function(){ $('.epMergeSubtitles').click(function(){ - var subtitles_merge_link = $(this); + var subtitlesMergeLink = $(this); // fill with the ajax loading gif - subtitles_merge_link.empty(); - subtitles_merge_link.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"})); - $.getJSON($(this).attr('href'), function(data){ + subtitlesMergeLink.empty(); + subtitlesMergeLink.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"})); + $.getJSON($(this).attr('href'), function(){ // don't allow other merges - subtitles_merge_link.remove(); + subtitlesMergeLink.remove(); }); // don't follow the link return false; diff --git a/gui/slick/js/ajaxNotifications.js b/gui/slick/js/ajaxNotifications.js index 80e2a359cbbc4ca11e7ca8d9973be386ec5f6099..11cf3bce413c66cb87617617c219415011430b66 100644 --- a/gui/slick/js/ajaxNotifications.js +++ b/gui/slick/js/ajaxNotifications.js @@ -39,5 +39,5 @@ function check_notifications() { $(document).ready(function(){ check_notifications(); - if(test) displayPNotify('notice', 'test', 'test<br/><i class="test-class">hello <b>world</b></i><ul><li>item 1</li><li>item 2</li></ul>'); + if(test) displayPNotify('notice', 'test', 'test<br><i class="test-class">hello <b>world</b></i><ul><li>item 1</li><li>item 2</li></ul>'); }); diff --git a/gui/slick/js/config.js b/gui/slick/js/config.js deleted file mode 100644 index 7c852360b89e1f1ea408996f73d007bc5d69b81d..0000000000000000000000000000000000000000 --- a/gui/slick/js/config.js +++ /dev/null @@ -1,115 +0,0 @@ -$(document).ready(function(){ - $(".enabler").each(function(){ - if (!$(this).prop('checked')) $('#content_'+$(this).attr('id')).hide(); - }); - - $(".enabler").click(function() { - if ($(this).prop('checked')){ - $('#content_'+$(this).attr('id')).fadeIn("fast", "linear"); - } else { - $('#content_'+$(this).attr('id')).fadeOut("fast", "linear"); - } - }); - - $(".viewIf").click(function() { - if ($(this).prop('checked')) { - $('.hide_if_'+$(this).attr('id')).css('display','none'); - $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear"); - } else { - $('.show_if_'+$(this).attr('id')).css('display','none'); - $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear"); - } - }); - - $(".datePresets").click(function() { - var def = $('#date_presets').val(); - if ($(this).prop('checked') && '%x' == def) { - def = '%a, %b %d, %Y'; - $('#date_use_system_default').html('1'); - } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){ - def = '%x'; - } - - $('#date_presets').attr('name', 'date_preset_old'); - $('#date_presets').attr('id', 'date_presets_old'); - - $('#date_presets_na').attr('name', 'date_preset'); - $('#date_presets_na').attr('id', 'date_presets'); - - $('#date_presets_old').attr('name', 'date_preset_na'); - $('#date_presets_old').attr('id', 'date_presets_na'); - - if (def) $('#date_presets').val(def); - }); - - // bind 'myForm' and provide a simple callback function - $('#configForm').ajaxForm({ - beforeSubmit: function(){ - $('.config_submitter .config_submitter_refresh').each(function(){ - $(this).attr("disabled", "disabled"); - $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>'); - $(this).hide(); - }); - }, - success: function(){ - setTimeout(function () { - "use strict"; - config_success(); - }, 2000); - } - }); - - $('#api_key').click(function(){ - $('#api_key').select(); - }); - - $("#generate_new_apikey").click(function(){ - $.get(srRoot + '/config/general/generateApiKey', - function(data){ - if (data.error !== undefined) { - alert(data.error); - return; - } - $('#api_key').val(data); - }); - }); - - $('#branchCheckout').click(function() { - var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val(); - var checkDBversion = srRoot + "/home/getDBcompare"; - $.getJSON(checkDBversion, function(data){ - if (data.status == "success") { - if (data.message == "equal") { - //Checkout Branch - window.location.href = url; - } - if (data.message == "upgrade") { - if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) { - //Checkout Branch - window.location.href = url; - } - } - if (data.message == "downgrade") { - alert("Can't switch branch as this will result in a database downgrade."); - } - } - }); - }); - -}); - -function config_success(){ - $('.config_submitter').each(function(){ - $(this).removeAttr("disabled"); - $(this).next().remove(); - $(this).show(); - }); - $('.config_submitter_refresh').each(function(){ - $(this).removeAttr("disabled"); - $(this).next().remove(); - $(this).show(); - url = srRoot+'/config/providers/'; - window.location.href = url; - }); - $('#email_show').trigger('notify'); -} diff --git a/gui/slick/js/configBackupRestore.js b/gui/slick/js/configBackupRestore.js deleted file mode 100644 index fc690ba76973405d6f071490c702db11a12bfc6b..0000000000000000000000000000000000000000 --- a/gui/slick/js/configBackupRestore.js +++ /dev/null @@ -1,24 +0,0 @@ -$(document).ready(function(){ - var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />'; - - $('#Backup').click(function() { - $("#Backup").attr("disabled", true); - $('#Backup-result').html(loading); - var backupDir = $("#backupDir").val(); - $.get(srRoot + "/config/backuprestore/backup", {'backupDir': backupDir}) - .done(function (data) { - $('#Backup-result').html(data); - $("#Backup").attr("disabled", false); - }); - }); - $('#Restore').click(function() { - $("#Restore").attr("disabled", true); - $('#Restore-result').html(loading); - var backupFile = $("#backupFile").val(); - $.get(srRoot + "/config/backuprestore/restore", {'backupFile': backupFile}) - .done(function (data) { - $('#Restore-result').html(data); - $("#Restore").attr("disabled", false); - }); - }); -}); diff --git a/gui/slick/js/configNotifications.js b/gui/slick/js/configNotifications.js deleted file mode 100644 index 5c69d7d47e8b187334cf3036df63256b0073f203..0000000000000000000000000000000000000000 --- a/gui/slick/js/configNotifications.js +++ /dev/null @@ -1,575 +0,0 @@ -$(document).ready(function(){ - var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />'; - - $('#testGrowl').click(function () { - var growl_host = $.trim($('#growl_host').val()); - var growl_password = $.trim($('#growl_password').val()); - if (!growl_host) { - $('#testGrowl-result').html('Please fill out the necessary fields above.'); - $('#growl_host').addClass('warning'); - return; - } - $('#growl_host').removeClass('warning'); - $(this).prop('disabled', true); - $('#testGrowl-result').html(loading); - $.get(srRoot + '/home/testGrowl', {'host': growl_host, 'password': growl_password}) - .done(function (data) { - $('#testGrowl-result').html(data); - $('#testGrowl').prop('disabled', false); - }); - }); - - $('#testProwl').click(function () { - var prowl_api = $.trim($('#prowl_api').val()); - var prowl_priority = $('#prowl_priority').val(); - if (!prowl_api) { - $('#testProwl-result').html('Please fill out the necessary fields above.'); - $('#prowl_api').addClass('warning'); - return; - } - $('#prowl_api').removeClass('warning'); - $(this).prop('disabled', true); - $('#testProwl-result').html(loading); - $.get(srRoot + '/home/testProwl', {'prowl_api': prowl_api, 'prowl_priority': prowl_priority}).done(function (data) { - $('#testProwl-result').html(data); - $('#testProwl').prop('disabled', false); - }); - }); - - $('#testKODI').click(function () { - var kodi_host = $.trim($('#kodi_host').val()); - var kodi_username = $.trim($('#kodi_username').val()); - var kodi_password = $.trim($('#kodi_password').val()); - if (!kodi_host) { - $('#testKODI-result').html('Please fill out the necessary fields above.'); - $('#kodi_host').addClass('warning'); - return; - } - $('#kodi_host').removeClass('warning'); - $(this).prop('disabled', true); - $('#testKODI-result').html(loading); - $.get(srRoot + '/home/testKODI', {'host': kodi_host, 'username': kodi_username, 'password': kodi_password}).done(function (data) { - $('#testKODI-result').html(data); - $('#testKODI').prop('disabled', false); - }); - }); - - $('#testPMC').click(function () { - var plex_host = $.trim($('#plex_host').val()); - var plex_client_username = $.trim($('#plex_client_username').val()); - var plex_client_password = $.trim($('#plex_client_password').val()); - if (!plex_host) { - $('#testPMC-result').html('Please fill out the necessary fields above.'); - $('#plex_host').addClass('warning'); - return; - } - $('#plex_host').removeClass('warning'); - $(this).prop('disabled', true); - $('#testPMC-result').html(loading); - $.get(srRoot + '/home/testPMC', {'host': plex_host, 'username': plex_client_username, 'password': plex_client_password}).done(function (data) { - $('#testPMC-result').html(data); - $('#testPMC').prop('disabled', false); - }); - }); - - $('#testPMS').click(function () { - var plex_server_host = $.trim($('#plex_server_host').val()); - var plex_username = $.trim($('#plex_username').val()); - var plex_password = $.trim($('#plex_password').val()); - var plex_server_token = $.trim($('#plex_server_token').val()); - if (!plex_server_host) { - $('#testPMS-result').html('Please fill out the necessary fields above.'); - $('#plex_server_host').addClass('warning'); - return; - } - $('#plex_server_host').removeClass('warning'); - $(this).prop('disabled', true); - $('#testPMS-result').html(loading); - $.get(srRoot + '/home/testPMS', {'host': plex_server_host, 'username': plex_username, 'password': plex_password, 'plex_server_token': plex_server_token}).done(function (data) { - $('#testPMS-result').html(data); - $('#testPMS').prop('disabled', false); - }); - }); - - $('#testEMBY').click(function () { - var emby_host = $('#emby_host').val(); - var emby_apikey = $('#emby_apikey').val(); - if (!emby_host || !emby_apikey) { - $('#testEMBY-result').html('Please fill out the necessary fields above.'); - if (!emby_host) { - $('#emby_host').addClass('warning'); - } else { - $('#emby_host').removeClass('warning'); - } - if (!emby_apikey) { - $('#emby_apikey').addClass('warning'); - } else { - $('#emby_apikey').removeClass('warning'); - } - return; - } - $('#emby_host,#emby_apikey').removeClass('warning'); - $(this).prop('disabled', true); - $('#testEMBY-result').html(loading); - $.get(srRoot + '/home/testEMBY', {'host': emby_host, 'emby_apikey': emby_apikey}).done(function (data) { - $('#testEMBY-result').html(data); - $('#testEMBY').prop('disabled', false); - }); - }); - - $('#testBoxcar').click(function() { - var boxcar_username = $.trim($('#boxcar_username').val()); - if (!boxcar_username) { - $('#testBoxcar-result').html('Please fill out the necessary fields above.'); - $('#boxcar_username').addClass('warning'); - return; - } - $('#boxcar_username').removeClass('warning'); - $(this).prop('disabled', true); - $('#testBoxcar-result').html(loading); - $.get(srRoot + '/home/testBoxcar', {'username': boxcar_username}).done(function (data) { - $('#testBoxcar-result').html(data); - $('#testBoxcar').prop('disabled', false); - }); - }); - - $('#testBoxcar2').click(function () { - var boxcar2_accesstoken = $.trim($('#boxcar2_accesstoken').val()); - if (!boxcar2_accesstoken) { - $('#testBoxcar2-result').html('Please fill out the necessary fields above.'); - $('#boxcar2_accesstoken').addClass('warning'); - return; - } - $('#boxcar2_accesstoken').removeClass('warning'); - $(this).prop('disabled', true); - $('#testBoxcar2-result').html(loading); - $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2_accesstoken}).done(function (data) { - $('#testBoxcar2-result').html(data); - $('#testBoxcar2').prop('disabled', false); - }); - }); - - $('#testPushover').click(function () { - var pushover_userkey = $('#pushover_userkey').val(); - var pushover_apikey = $('#pushover_apikey').val(); - if (!pushover_userkey || !pushover_apikey) { - $('#testPushover-result').html('Please fill out the necessary fields above.'); - if (!pushover_userkey) { - $('#pushover_userkey').addClass('warning'); - } else { - $('#pushover_userkey').removeClass('warning'); - } - if (!pushover_apikey) { - $('#pushover_apikey').addClass('warning'); - } else { - $('#pushover_apikey').removeClass('warning'); - } - return; - } - $('#pushover_userkey,#pushover_apikey').removeClass('warning'); - $(this).prop('disabled', true); - $('#testPushover-result').html(loading); - $.get(srRoot + '/home/testPushover', {'userKey': pushover_userkey, 'apiKey': pushover_apikey}).done(function (data) { - $('#testPushover-result').html(data); - $('#testPushover').prop('disabled', false); - }); - }); - - $('#testLibnotify').click(function() { - $('#testLibnotify-result').html(loading); - $.get(srRoot + '/home/testLibnotify', function (data) { - $('#testLibnotify-result').html(data); - }); - }); - - $('#twitterStep1').click(function() { - $('#testTwitter-result').html(loading); - $.get(srRoot + '/home/twitterStep1', function (data) { - window.open(data); - }).done(function() { - $('#testTwitter-result').html('<b>Step1:</b> Confirm Authorization'); - }); - }); - - $('#twitterStep2').click(function () { - var twitter_key = $.trim($('#twitter_key').val()); - if (!twitter_key) { - $('#testTwitter-result').html('Please fill out the necessary fields above.'); - $('#twitter_key').addClass('warning'); - return; - } - $('#twitter_key').removeClass('warning'); - $('#testTwitter-result').html(loading); - $.get(srRoot + '/home/twitterStep2', {'key': twitter_key}, function(data) { - $('#testTwitter-result').html(data); - }); - }); - - $('#testTwitter').click(function() { - $.get(srRoot + '/home/testTwitter', function(data) { - $('#testTwitter-result').html(data); - }); - }); - - $('#settingsNMJ').click(function() { - if (!$('#nmj_host').val()) { - alert('Please fill in the Popcorn IP address'); - $('#nmj_host').focus(); - return; - } - $('#testNMJ-result').html(loading); - var nmj_host = $('#nmj_host').val(); - - $.get(srRoot + '/home/settingsNMJ', {'host': nmj_host}, function (data) { - if (data === null) { - $('#nmj_database').removeAttr('readonly'); - $('#nmj_mount').removeAttr('readonly'); - } - var JSONData = $.parseJSON(data); - $('#testNMJ-result').html(JSONData.message); - $('#nmj_database').val(JSONData.database); - $('#nmj_mount').val(JSONData.mount); - - if (JSONData.database) { - $('#nmj_database').attr('readonly', true); - } else { - $('#nmj_database').removeAttr('readonly'); - } - if (JSONData.mount) { - $('#nmj_mount').attr('readonly', true); - } else { - $('#nmj_mount').removeAttr('readonly'); - } - }); - }); - - $('#testNMJ').click(function () { - var nmj_host = $.trim($('#nmj_host').val()); - var nmj_database = $('#nmj_database').val(); - var nmj_mount = $('#nmj_mount').val(); - if (!nmj_host) { - $('#testNMJ-result').html('Please fill out the necessary fields above.'); - $('#nmj_host').addClass('warning'); - return; - } - $('#nmj_host').removeClass('warning'); - $(this).prop('disabled', true); - $('#testNMJ-result').html(loading); - $.get(srRoot + '/home/testNMJ', {'host': nmj_host, 'database': nmj_database, 'mount': nmj_mount}).done(function (data) { - $('#testNMJ-result').html(data); - $('#testNMJ').prop('disabled', false); - }); - }); - - $('#settingsNMJv2').click(function() { - if (!$('#nmjv2_host').val()) { - alert('Please fill in the Popcorn IP address'); - $('#nmjv2_host').focus(); - return; - } - $('#testNMJv2-result').html(loading); - var nmjv2_host = $('#nmjv2_host').val(); - var nmjv2_dbloc; - var radios = document.getElementsByName('nmjv2_dbloc'); - for (var i = 0; i < radios.length; i++) { - if (radios[i].checked) { - nmjv2_dbloc=radios[i].value; - break; - } - } - - var nmjv2_dbinstance=$('#NMJv2db_instance').val(); - $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2_host,'dbloc': nmjv2_dbloc,'instance': nmjv2_dbinstance}, function (data){ - if (data === null) { - $('#nmjv2_database').removeAttr('readonly'); - } - var JSONData = $.parseJSON(data); - $('#testNMJv2-result').html(JSONData.message); - $('#nmjv2_database').val(JSONData.database); - - if (JSONData.database){ - $('#nmjv2_database').attr('readonly', true); - } else { - $('#nmjv2_database').removeAttr('readonly'); - } - }); - }); - - $('#testNMJv2').click(function () { - var nmjv2_host = $.trim($('#nmjv2_host').val()); - if (!nmjv2_host) { - $('#testNMJv2-result').html('Please fill out the necessary fields above.'); - $('#nmjv2_host').addClass('warning'); - return; - } - $('#nmjv2_host').removeClass('warning'); - $(this).prop('disabled', true); - $('#testNMJv2-result').html(loading); - $.get(srRoot + '/home/testNMJv2', {'host': nmjv2_host}) .done(function (data) { - $('#testNMJv2-result').html(data); - $('#testNMJv2').prop('disabled', false); - }); - }); - - $('#testFreeMobile').click(function () { - var freemobile_id = $.trim($('#freemobile_id').val()); - var freemobile_apikey = $.trim($('#freemobile_apikey').val()); - if (!freemobile_id || !freemobile_apikey) { - $('#testFreeMobile-result').html('Please fill out the necessary fields above.'); - if (!freemobile_id) { - $('#freemobile_id').addClass('warning'); - } else { - $('#freemobile_id').removeClass('warning'); - } - if (!freemobile_apikey) { - $('#freemobile_apikey').addClass('warning'); - } else { - $('#freemobile_apikey').removeClass('warning'); - } - return; - } - $('#freemobile_id,#freemobile_apikey').removeClass('warning'); - $(this).prop('disabled', true); - $('#testFreeMobile-result').html(loading); - $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile_id, 'freemobile_apikey': freemobile_apikey}).done(function (data) { - $('#testFreeMobile-result').html(data); - $('#testFreeMobile').prop('disabled', false); - }); - }); - - $('#TraktGetPin').click(function () { - var trakt_pin_url = $('#trakt_pin_url').val(); - var w; - w = window.open(trakt_pin_url, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550"); - $('#trakt_pin').removeClass('hide'); - }); - - $('#trakt_pin').on('keyup change', function(){ - var trakt_pin = $('#trakt_pin').val(); - - if (trakt_pin.length !== 0) { - $('#TraktGetPin').addClass('hide'); - $('#authTrakt').removeClass('hide'); - } else { - $('#TraktGetPin').removeClass('hide'); - $('#authTrakt').addClass('hide'); - } - }); - - $('#authTrakt').click(function() { - var trakt_pin = $('#trakt_pin').val(); - if (trakt_pin.length !== 0) { - $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt_pin }).done(function (data) { - $('#testTrakt-result').html(data); - $('#authTrakt').addClass('hide'); - $('#trakt_pin').addClass('hide'); - $('#TraktGetPin').addClass('hide'); - }); - } - }); - - $('#testTrakt').click(function () { - var trakt_username = $.trim($('#trakt_username').val()); - var trakt_trending_blacklist = $.trim($('#trakt_blacklist_name').val()); - if (!trakt_username) { - $('#testTrakt-result').html('Please fill out the necessary fields above.'); - if (!trakt_username) { - $('#trakt_username').addClass('warning'); - } else { - $('#trakt_username').removeClass('warning'); - } - return; - } - - if (/\s/g.test(trakt_trending_blacklist)) { - $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug'); - $('#trakt_blacklist_name').addClass('warning'); - return; - } - $('#trakt_username').removeClass('warning'); - $('#trakt_blacklist_name').removeClass('warning'); - $(this).prop('disabled', true); - $('#testTrakt-result').html(loading); - $.get(srRoot + '/home/testTrakt', {'username': trakt_username, 'blacklist_name': trakt_trending_blacklist}).done(function (data) { - $('#testTrakt-result').html(data); - $('#testTrakt').prop('disabled', false); - }); - }); - - $('#testEmail').click(function () { - var status, host, port, tls, from, user, pwd, err, to; - status = $('#testEmail-result'); - status.html(loading); - host = $('#email_host').val(); - host = host.length > 0 ? host : null; - port = $('#email_port').val(); - port = port.length > 0 ? port : null; - tls = $('#email_tls').attr('checked') !== undefined ? 1 : 0; - from = $('#email_from').val(); - from = from.length > 0 ? from : 'root@localhost'; - user = $('#email_user').val().trim(); - pwd = $('#email_password').val(); - err = ''; - if (host === null) { - err += '<li style="color: red;">You must specify an SMTP hostname!</li>'; - } - if (port === null) { - err += '<li style="color: red;">You must specify an SMTP port!</li>'; - } else if (port.match(/^\d+$/) === null || parseInt(port, 10) > 65535) { - err += '<li style="color: red;">SMTP port must be between 0 and 65535!</li>'; - } - if (err.length > 0) { - err = '<ol>' + err + '</ol>'; - status.html(err); - } else { - to = prompt('Enter an email address to send the test to:', null); - if (to === null || to.length === 0 || to.match(/.*@.*/) === null) { - status.html('<p style="color: red;">You must provide a recipient email address!</p>'); - } else { - $.get(srRoot + '/home/testEmail', {host: host, port: port, smtp_from: from, use_tls: tls, user: user, pwd: pwd, to: to}, function (msg) { - $('#testEmail-result').html(msg); - }); - } - } - }); - - $('#testNMA').click(function () { - var nma_api = $.trim($('#nma_api').val()); - var nma_priority = $('#nma_priority').val(); - if (!nma_api) { - $('#testNMA-result').html('Please fill out the necessary fields above.'); - $('#nma_api').addClass('warning'); - return; - } - $('#nma_api').removeClass('warning'); - $(this).prop('disabled', true); - $('#testNMA-result').html(loading); - $.get(srRoot + '/home/testNMA', {'nma_api': nma_api, 'nma_priority': nma_priority}).done(function (data) { - $('#testNMA-result').html(data); - $('#testNMA').prop('disabled', false); - }); - }); - - $('#testPushalot').click(function () { - var pushalot_authorizationtoken = $.trim($('#pushalot_authorizationtoken').val()); - if (!pushalot_authorizationtoken) { - $('#testPushalot-result').html('Please fill out the necessary fields above.'); - $('#pushalot_authorizationtoken').addClass('warning'); - return; - } - $('#pushalot_authorizationtoken').removeClass('warning'); - $(this).prop('disabled', true); - $('#testPushalot-result').html(loading); - $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot_authorizationtoken}).done(function (data) { - $('#testPushalot-result').html(data); - $('#testPushalot').prop('disabled', false); - }); - }); - - $('#testPushbullet').click(function () { - var pushbullet_api = $.trim($('#pushbullet_api').val()); - if (!pushbullet_api) { - $('#testPushbullet-result').html('Please fill out the necessary fields above.'); - $('#pushbullet_api').addClass('warning'); - return; - } - $('#pushbullet_api').removeClass('warning'); - $(this).prop('disabled', true); - $('#testPushbullet-result').html(loading); - $.get(srRoot + '/home/testPushbullet', {'api': pushbullet_api}).done(function (data) { - $('#testPushbullet-result').html(data); - $('#testPushbullet').prop('disabled', false); - }); - }); - - function get_pushbullet_devices(msg){ - - if(msg) $('#testPushbullet-result').html(loading); - - var pushbullet_api = $("#pushbullet_api").val(); - - if(!pushbullet_api) { - $('#testPushbullet-result').html("You didn't supply a Pushbullet api key"); - $("#pushbullet_api").focus(); - return false; - } - - $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet_api}, function (data) { - var devices = jQuery.parseJSON(data).devices; - var current_pushbullet_device = $("#pushbullet_device").val(); - $("#pushbullet_device_list").html(''); - for (var i = 0; i < devices.length; i++) { - if(devices[i].active === true) { - if(current_pushbullet_device == devices[i].iden) { - $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'" selected>' + devices[i].nickname + '</option>'); - } else { - $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'">' + devices[i].nickname + '</option>'); - } - } - } - if (current_pushbullet_device === '') { - $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>'); - } else { - $("#pushbullet_device_list").prepend('<option value="">All devices</option>'); - } - if(msg) $('#testPushbullet-result').html(msg); - }); - - $("#pushbullet_device_list").change(function(){ - $("#pushbullet_device").val($("#pushbullet_device_list").val()); - $('#testPushbullet-result').html("Don't forget to save your new pushbullet settings."); - }); - } - - $('#getPushbulletDevices').click(function(){ - get_pushbullet_devices("Device list updated. Please choose a device to push to."); - }); - - // we have to call this function on dom ready to create the devices select - get_pushbullet_devices(); - - $('#email_show').change(function() { - var key = parseInt($('#email_show').val(), 10); - $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : ''); - }); - - // Update the internal data struct anytime settings are saved to the server - $('#email_show').bind('notify', function() { - load_show_notify_lists(); - }); - - function load_show_notify_lists() { - $.get(srRoot + "/home/loadShowNotifyLists", function(data) { - var list, html, s; - list = $.parseJSON(data); - notify_data = list; - if (list._size === 0) return; - html = '<option value="-1">-- Select --</option>'; - for (s in list) { - if (s.charAt(0) !== '_') { - html += '<option value="' + list[s].id + '">' + $('<div/>').text(list[s].name).html() + '</option>'; - } - } - $('#email_show').html(html); - $('#email_show_list').val(''); - }); - } - // Load the per show notify lists everytime this page is loaded - load_show_notify_lists(); - - $('#email_show_save').click(function() { - $.post(srRoot + "/home/saveShowNotifyList", { show: $('#email_show').val(), emails: $('#email_show_list').val()}, function (data) { - // Reload the per show notify lists to reflect changes - load_show_notify_lists(); - }); - }); - - // show instructions for plex when enabled - $('#use_plex').click(function() { - if ($(this).is(':checked')) { - $('.plexinfo').removeClass('hide'); - } else { - $('.plexinfo').addClass('hide'); - } - }); -}); diff --git a/gui/slick/js/configPostProcessing.js b/gui/slick/js/configPostProcessing.js deleted file mode 100644 index ff1bb61ad46f8bebfb6df6d349a7650056aa441d..0000000000000000000000000000000000000000 --- a/gui/slick/js/configPostProcessing.js +++ /dev/null @@ -1,475 +0,0 @@ -$(document).ready(function () { - // http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew - var typewatch = (function () { - var timer = 0; - return function (callback, ms) { - clearTimeout(timer); - timer = setTimeout(callback, ms); - }; - })(); - - function israr_supported() { - var pattern = $('#naming_pattern').val(); - $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) { - if (data !== "supported") { - $('#unpack').qtip('option', { - 'content.text': 'Unrar Executable not found.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#unpack').qtip('toggle', true); - $('#unpack').css('background-color', '#FFFFDD'); - } - }); - } - - function fill_examples() { - var pattern = $('#naming_pattern').val(); - var multi = $('#naming_multi_ep :selected').val(); - var anime_type = $('input[name="naming_anime"]:checked').val(); - - $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: 3}, function (data) { - if (data) { - $('#naming_example').text(data + '.ext'); - $('#naming_example_div').show(); - } else { - $('#naming_example_div').hide(); - } - }); - - $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: 3}, function (data) { - if (data) { - $('#naming_example_multi').text(data + '.ext'); - $('#naming_example_multi_div').show(); - } else { - $('#naming_example_multi_div').hide(); - } - }); - - $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) { - if (data == "invalid") { - $('#naming_pattern').qtip('option', { - 'content.text': 'This pattern is invalid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_pattern').qtip('toggle', true); - $('#naming_pattern').css('background-color', '#FFDDDD'); - } else if (data == "seasonfolders") { - $('#naming_pattern').qtip('option', { - 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_pattern').qtip('toggle', true); - $('#naming_pattern').css('background-color', '#FFFFDD'); - } else { - $('#naming_pattern').qtip('option', { - 'content.text': 'This pattern is valid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-green' - }); - $('#naming_pattern').qtip('toggle', false); - $('#naming_pattern').css('background-color', '#FFFFFF'); - } - }); - } - - function fill_abd_examples() { - var pattern = $('#naming_abd_pattern').val(); - - $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, abd: 'True'}, function (data) { - if (data) { - $('#naming_abd_example').text(data + '.ext'); - $('#naming_abd_example_div').show(); - } else { - $('#naming_abd_example_div').hide(); - } - }); - - $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, abd: 'True'}, function (data) { - if (data == "invalid") { - $('#naming_abd_pattern').qtip('option', { - 'content.text': 'This pattern is invalid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_abd_pattern').qtip('toggle', true); - $('#naming_abd_pattern').css('background-color', '#FFDDDD'); - } else if (data == "seasonfolders") { - $('#naming_abd_pattern').qtip('option', { - 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_abd_pattern').qtip('toggle', true); - $('#naming_abd_pattern').css('background-color', '#FFFFDD'); - } else { - $('#naming_abd_pattern').qtip('option', { - 'content.text': 'This pattern is valid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-green' - }); - $('#naming_abd_pattern').qtip('toggle', false); - $('#naming_abd_pattern').css('background-color', '#FFFFFF'); - } - }); - } - - function fill_sports_examples() { - var pattern = $('#naming_sports_pattern').val(); - - $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, sports: 'True'}, function (data) { - if (data) { - $('#naming_sports_example').text(data + '.ext'); - $('#naming_sports_example_div').show(); - } else { - $('#naming_sports_example_div').hide(); - } - }); - - $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, sports: 'True'}, function (data) { - if (data == "invalid") { - $('#naming_sports_pattern').qtip('option', { - 'content.text': 'This pattern is invalid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_sports_pattern').qtip('toggle', true); - $('#naming_sports_pattern').css('background-color', '#FFDDDD'); - } else if (data == "seasonfolders") { - $('#naming_sports_pattern').qtip('option', { - 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_sports_pattern').qtip('toggle', true); - $('#naming_sports_pattern').css('background-color', '#FFFFDD'); - } else { - $('#naming_sports_pattern').qtip('option', { - 'content.text': 'This pattern is valid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-green' - }); - $('#naming_sports_pattern').qtip('toggle', false); - $('#naming_sports_pattern').css('background-color', '#FFFFFF'); - } - }); - } - - function fill_anime_examples() { - var pattern = $('#naming_anime_pattern').val(); - var multi = $('#naming_anime_multi_ep :selected').val(); - var anime_type = $('input[name="naming_anime"]:checked').val(); - - $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: anime_type}, function (data) { - if (data) { - $('#naming_example_anime').text(data + '.ext'); - $('#naming_example_anime_div').show(); - } else { - $('#naming_example_anime_div').hide(); - } - }); - - $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) { - if (data) { - $('#naming_example_multi_anime').text(data + '.ext'); - $('#naming_example_multi_anime_div').show(); - } else { - $('#naming_example_multi_anime_div').hide(); - } - }); - - $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) { - if (data == "invalid") { - $('#naming_pattern').qtip('option', { - 'content.text': 'This pattern is invalid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_pattern').qtip('toggle', true); - $('#naming_pattern').css('background-color', '#FFDDDD'); - } else if (data == "seasonfolders") { - $('#naming_pattern').qtip('option', { - 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-red' - }); - $('#naming_pattern').qtip('toggle', true); - $('#naming_pattern').css('background-color', '#FFFFDD'); - } else { - $('#naming_pattern').qtip('option', { - 'content.text': 'This pattern is valid.', - 'style.classes': 'qtip-rounded qtip-shadow qtip-green' - }); - $('#naming_pattern').qtip('toggle', false); - $('#naming_pattern').css('background-color', '#FFFFFF'); - } - }); - } - - function setup_naming() { - // if it is a custom selection then show the text box - if ($('#name_presets :selected').val() == "Custom...") { - $('#naming_custom').show(); - } else { - $('#naming_custom').hide(); - $('#naming_pattern').val($('#name_presets :selected').attr('id')); - } - fill_examples(); - } - - function setup_abd_naming() { - // if it is a custom selection then show the text box - if ($('#name_abd_presets :selected').val() == "Custom...") { - $('#naming_abd_custom').show(); - } else { - $('#naming_abd_custom').hide(); - $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id')); - } - fill_abd_examples(); - } - - function setup_sports_naming() { - // if it is a custom selection then show the text box - if ($('#name_sports_presets :selected').val() == "Custom...") { - $('#naming_sports_custom').show(); - } else { - $('#naming_sports_custom').hide(); - $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id')); - } - fill_sports_examples(); - } - - function setup_anime_naming() { - // if it is a custom selection then show the text box - if ($('#name_anime_presets :selected').val() == "Custom...") { - $('#naming_anime_custom').show(); - } else { - $('#naming_anime_custom').hide(); - $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id')); - } - fill_anime_examples(); - } - - $('#unpack').on('change', function(){ - if(this.checked) { - israr_supported(); - } else { - $('#unpack').qtip('toggle', false); - } - }); - - $('#name_presets').on('change', function(){ - setup_naming(); - }); - - $('#name_abd_presets').on('change', function(){ - setup_abd_naming(); - }); - - $('#naming_custom_abd').on('change', function(){ - setup_abd_naming(); - }); - - $('#name_sports_presets').on('change', function(){ - setup_sports_naming(); - }); - - $('#naming_custom_sports').on('change', function(){ - setup_sports_naming(); - }); - - $('#name_anime_presets').on('change', function(){ - setup_anime_naming(); - }); - - $('#naming_custom_anime').on('change', function(){ - setup_anime_naming(); - }); - - $('input[name="naming_anime"]').on('click', function(){ - setup_anime_naming(); - }); - - $('#naming_multi_ep').change(fill_examples); - $('#naming_pattern').focusout(fill_examples); - $('#naming_pattern').keyup(function () { - typewatch(function () { - fill_examples(); - }, 500); - }); - - $('#naming_anime_multi_ep').change(fill_anime_examples); - $('#naming_anime_pattern').focusout(fill_anime_examples); - $('#naming_anime_pattern').keyup(function () { - typewatch(function () { - fill_anime_examples(); - }, 500); - }); - - $('#naming_abd_pattern').focusout(fill_examples); - $('#naming_abd_pattern').keyup(function () { - typewatch(function () { - fill_abd_examples(); - }, 500); - }); - - $('#naming_sports_pattern').focusout(fill_examples); - $('#naming_sports_pattern').keyup(function () { - typewatch(function () { - fill_sports_examples(); - }, 500); - }); - - $('#naming_anime_pattern').focusout(fill_examples); - $('#naming_anime_pattern').keyup(function () { - typewatch(function () { - fill_anime_examples(); - }, 500); - }); - - $('#show_naming_key').on('click', function(){ - $('#naming_key').toggle(); - }); - $('#show_naming_abd_key').on('click', function(){ - $('#naming_abd_key').toggle(); - }); - $('#show_naming_sports_key').on('click', function(){ - $('#naming_sports_key').toggle(); - }); - $('#show_naming_anime_key').on('click', function(){ - $('#naming_anime_key').toggle(); - }); - $('#do_custom').on('click', function(){ - $('#naming_pattern').val($('#name_presets :selected').attr('id')); - $('#naming_custom').show(); - $('#naming_pattern').focus(); - }); - setup_naming(); - setup_abd_naming(); - setup_sports_naming(); - setup_anime_naming(); - - // -- start of metadata options div toggle code -- - $('#metadataType').on('change keyup', function () { - $(this).showHideMetadata(); - }); - - $.fn.showHideMetadata = function () { - $('.metadataDiv').each(function () { - var targetName = $(this).attr('id'); - var selectedTarget = $('#metadataType :selected').val(); - - if (selectedTarget == targetName) { - $(this).show(); - } else { - $(this).hide(); - } - }); - }; - //initialize to show the div - $(this).showHideMetadata(); - // -- end of metadata options div toggle code -- - - $('.metadata_checkbox').on('click', function(){ - $(this).refreshMetadataConfig(false); - }); - - $.fn.refreshMetadataConfig = function (first) { - var cur_most = 0; - var cur_most_provider = ''; - - $('.metadataDiv').each(function () { - var generator_name = $(this).attr('id'); - - var config_arr = []; - var show_metadata = $("#" + generator_name + "_show_metadata").prop('checked'); - var episode_metadata = $("#" + generator_name + "_episode_metadata").prop('checked'); - var fanart = $("#" + generator_name + "_fanart").prop('checked'); - var poster = $("#" + generator_name + "_poster").prop('checked'); - var banner = $("#" + generator_name + "_banner").prop('checked'); - var episode_thumbnails = $("#" + generator_name + "_episode_thumbnails").prop('checked'); - var season_posters = $("#" + generator_name + "_season_posters").prop('checked'); - var season_banners = $("#" + generator_name + "_season_banners").prop('checked'); - var season_all_poster = $("#" + generator_name + "_season_all_poster").prop('checked'); - var season_all_banner = $("#" + generator_name + "_season_all_banner").prop('checked'); - - config_arr.push(show_metadata ? '1' : '0'); - config_arr.push(episode_metadata ? '1' : '0'); - config_arr.push(fanart ? '1' : '0'); - config_arr.push(poster ? '1' : '0'); - config_arr.push(banner ? '1' : '0'); - config_arr.push(episode_thumbnails ? '1' : '0'); - config_arr.push(season_posters ? '1' : '0'); - config_arr.push(season_banners ? '1' : '0'); - config_arr.push(season_all_poster ? '1' : '0'); - config_arr.push(season_all_banner ? '1' : '0'); - - var cur_num = 0; - for (var i = 0; i < config_arr.length; i++) { - cur_num += parseInt(config_arr[i]); - } - if (cur_num > cur_most) { - cur_most = cur_num; - cur_most_provider = generator_name; - } - - $("#" + generator_name + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled'); - $("#" + generator_name + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled'); - $("#" + generator_name + "_data").val(config_arr.join('|')); - - }); - - if (cur_most_provider !== '' && first) { - $('#metadataType option[value=' + cur_most_provider + ']').attr('selected', 'selected'); - $(this).showHideMetadata(); - } - }; - - $(this).refreshMetadataConfig(true); - $('img[title]').qtip({ - position: { - viewport: $(window), - at: 'bottom center', - my: 'top right' - }, - style: { - tip: { - corner: true, - method: 'polygon' - }, - classes: 'qtip-shadow qtip-dark' - } - }); - $('i[title]').qtip({ - position: { - viewport: $(window), - at: 'top center', - my: 'bottom center' - }, - style: { - tip: { - corner: true, - method: 'polygon' - }, - classes: 'qtip-rounded qtip-shadow ui-tooltip-sb' - } - }); - $('.custom-pattern,#unpack').qtip({ - content: 'validating...', - show: { - event: false, - ready: false - }, - hide: false, - position: { - viewport: $(window), - at: 'center left', - my: 'center right' - }, - style: { - tip: { - corner: true, - method: 'polygon' - }, - classes: 'qtip-rounded qtip-shadow qtip-red' - } - }); -}); diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js index 466df5ceb8c2b47b3e72ae5b12235185359cd8bd..e2a7a49ed83ad5aaceb102bef6a3b250c4bac9e8 100644 --- a/gui/slick/js/configProviders.js +++ b/gui/slick/js/configProviders.js @@ -4,7 +4,7 @@ $(document).ready(function(){ var providerName = $(this).attr('id'); var selectedProvider = $('#editAProvider :selected').val(); - if (selectedProvider + 'Div' == providerName) { + if (selectedProvider + 'Div' == providerName) { // jshint ignore:line $(this).show(); } else { $(this).hide(); @@ -12,6 +12,18 @@ $(document).ready(function(){ }); }; + var ifExists = function(loopThroughArray, searchFor) { + var found = false; + + loopThroughArray.forEach(function(rootObject) { + if (rootObject.name === searchFor) { + found = true; + } + console.log(rootObject.name + " while searching for: "+ searchFor); + }); + return found; + }; + /** * Gets categories for the provided newznab provider. * @param {String} isDefault @@ -24,38 +36,35 @@ $(document).ready(function(){ var url = selectedProvider[1]; var key = selectedProvider[2]; - if (!name) - return; - - if (!url) - return; - - if (!key) + if (!name || !url || !key) { return; + } var params = {url: url, name: name, key: key}; - var returnData; $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>'); - var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, - function(data){ - $(this).updateNewznabCaps( data, selectedProvider ); - console.debug(data.tv_categories); - }); + var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){ + $(this).updateNewznabCaps( data, selectedProvider ); + console.debug(data.tv_categories); // jshint ignore:line + }); jqxhr.always(function() { $(".updating_categories").empty(); - }); + }); }; $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) { - url = $.trim(url); - if (!url) + if (!url) { return; + } - if (!/^https?:\/\//i.test(url)) url = "http://" + url; + if (!/^https?:\/\//i.test(url)) { + url = "http://" + url; + } - if (url.match('/$') === null) url = url + '/'; + if (url.match('/$') === null) { + url = url + '/'; + } var newData = [isDefault, [name, url, key, cat]]; newznabProviders[id] = newData; @@ -76,7 +85,6 @@ $(document).ready(function(){ }; $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) { - var newData = [name, url, cookies, titleTAG]; torrentRssProviders[id] = newData; @@ -84,9 +92,7 @@ $(document).ready(function(){ $(this).populateTorrentRssSection(); if ($('#provider_order_list > #'+id).length === 0) { - var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>'; - - $('#provider_order_list').append(toAdd); + $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>'); $('#provider_order_list').sortable("refresh"); } @@ -94,7 +100,6 @@ $(document).ready(function(){ }; $.fn.updateProvider = function (id, url, key, cat) { - newznabProviders[id][1][1] = url; newznabProviders[id][1][2] = key; newznabProviders[id][1][3] = cat; @@ -102,17 +107,14 @@ $(document).ready(function(){ $(this).populateNewznabSection(); $(this).makeNewznabProviderString(); - }; $.fn.deleteProvider = function (id) { - $('#editANewznabProvider').removeOption(id); delete newznabProviders[id]; $(this).populateNewznabSection(); $('li').remove('#'+id); $(this).makeNewznabProviderString(); - }; $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) { @@ -132,12 +134,12 @@ $(document).ready(function(){ }; $.fn.populateNewznabSection = function() { - var selectedProvider = $('#editANewznabProvider :selected').val(); var data = ''; var isDefault = ''; + var rrcat = ''; - if (selectedProvider == 'addNewznab') { + if (selectedProvider === 'addNewznab') { data = ['','','']; isDefault = 0; $('#newznab_add_div').show(); @@ -183,16 +185,17 @@ $(document).ready(function(){ var newCatOptions = []; if (rrcat) { rrcat.forEach(function (cat) { - if (cat !== '') newCatOptions.push({text : cat, value : cat}); + if (cat !== '') { + newCatOptions.push({text : cat, value : cat}); + } }); $("#newznab_cat").replaceOptions(newCatOptions); } - if (selectedProvider == 'addNewznab') { + if (selectedProvider === 'addNewznab') { $('#newznab_name').removeAttr("disabled"); $('#newznab_url').removeAttr("disabled"); } else { - $('#newznab_name').attr("disabled", "disabled"); if (isDefault) { @@ -211,18 +214,6 @@ $(document).ready(function(){ } }; - ifExists = function(loopThroughArray, searchFor) { - var found = false; - - loopThroughArray.forEach(function(rootObject) { - if (rootObject.name == searchFor) { - found = true; - } - console.log(rootObject.name + " while searching for: "+ searchFor); - }); - return found; - }; - /** * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name * and category capabilities. Return @@ -231,24 +222,22 @@ $(document).ready(function(){ * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result. */ $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) { - if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) { - $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); + $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line } //Loop through the array and if currently selected newznab provider name matches one in the array, use it to //update the capabilities select box (on the left). if (selectedProvider[0]) { $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) { - - if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) { - var newCapOptions = []; - newzNabCap.categories.forEach(function(category_set) { - if (category_set.id && category_set.name) { - newCapOptions.push({value : category_set.id, text : category_set.name + "(" + category_set.id + ")"}); - } - }); - $("#newznab_cap").replaceOptions(newCapOptions); + if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) { + var newCapOptions = []; + newzNabCap.categories.forEach(function(categorySet) { + if (categorySet.id && categorySet.name) { + newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"}); + } + }); + $("#newznab_cap").replaceOptions(newCapOptions); } }); } @@ -258,7 +247,9 @@ $(document).ready(function(){ var provStrings = []; for (var id in newznabProviders) { - provStrings.push(newznabProviders[id][1].join('|')); + if (newznabProviders.hasOwnProperty(id)) { + provStrings.push(newznabProviders[id][1].join('|')); + } } $('#newznab_string').val(provStrings.join('!!!')); @@ -268,7 +259,7 @@ $(document).ready(function(){ var selectedProvider = $('#editATorrentRssProvider :selected').val(); var data = ''; - if (selectedProvider == 'addTorrentRss') { + if (selectedProvider === 'addTorrentRss') { data = ['','','','title']; $('#torrentrss_add_div').show(); $('#torrentrss_update_div').hide(); @@ -283,7 +274,7 @@ $(document).ready(function(){ $('#torrentrss_cookies').val(data[2]); $('#torrentrss_titleTAG').val(data[3]); - if (selectedProvider == 'addTorrentRss') { + if (selectedProvider === 'addTorrentRss') { $('#torrentrss_name').removeAttr("disabled"); $('#torrentrss_url').removeAttr("disabled"); $('#torrentrss_cookies').removeAttr("disabled"); @@ -295,13 +286,14 @@ $(document).ready(function(){ $('#torrentrss_titleTAG').removeAttr("disabled"); $('#torrentrss_delete').removeAttr("disabled"); } - }; $.fn.makeTorrentRssProviderString = function() { var provStrings = []; for (var id in torrentRssProviders) { - provStrings.push(torrentRssProviders[id].join('|')); + if (torrentRssProviders.hasOwnProperty(id)) { + provStrings.push(torrentRssProviders[id].join('|')); + } } $('#torrentrss_string').val(provStrings.join('!!!')); @@ -333,7 +325,7 @@ $(document).ready(function(){ if (finalArr.length > 0) { $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list'); - for (var i = 0; i < finalArr.length; i++) { + for (var i = 0, len = finalArr.length; i < len; i++) { var provider = finalArr[i]; $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, ''))); } @@ -348,22 +340,22 @@ $(document).ready(function(){ var torrentRssProviders = []; $(this).on('change', '.newznab_key', function(){ + var providerId = $(this).attr('id'); + providerId = providerId.substring(0, providerId.length-'_hash'.length); - var provider_id = $(this).attr('id'); - provider_id = provider_id.substring(0, provider_id.length-'_hash'.length); - - var url = $('#'+provider_id+'_url').val(); - var cat = $('#'+provider_id+'_cat').val(); + var url = $('#'+providerId+'_url').val(); + var cat = $('#'+providerId+'_cat').val(); var key = $(this).val(); - $(this).updateProvider(provider_id, url, key, cat); - + $(this).updateProvider(providerId, url, key, cat); }); $('#newznab_key,#newznab_url').change(function(){ var selectedProvider = $('#editANewznabProvider :selected').val(); - if (selectedProvider == "addNewznab") return; + if (selectedProvider === "addNewznab"){ + return; + } var url = $('#newznab_url').val(); var key = $('#newznab_key').val(); @@ -378,7 +370,9 @@ $(document).ready(function(){ $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){ var selectedProvider = $('#editATorrentRssProvider :selected').val(); - if (selectedProvider == "addTorrentRss") return; + if (selectedProvider === "addTorrentRss"){ + return; + } var url = $('#torrentrss_url').val(); var cookies = $('#torrentrss_cookies').val(); @@ -416,52 +410,44 @@ $(document).ready(function(){ // When the update botton is clicked, loop through the capabilities list // and copy the selected category id's to the category list on the right. $("#newznab_cap option:selected").each(function(){ - var selected_cat = $(this).val(); - console.debug(selected_cat); - newOptions.push({text: selected_cat, value: selected_cat}); + var selectedCat = $(this).val(); + console.debug(selectedCat); + newOptions.push({text: selectedCat, value: selectedCat}); }); $("#newznab_cat").replaceOptions(newOptions); var selectedProvider = $("#editANewznabProvider :selected").val(); - if (selectedProvider == "addNewznab") + if (selectedProvider === "addNewznab"){ return; + } var url = $('#newznab_url').val(); var key = $('#newznab_key').val(); var cat = $('#newznab_cat option').map(function(i, opt) { return $(opt).text(); - }).toArray().join(','); + }).toArray().join(','); $("#newznab_cat option:not([value])").remove(); $(this).updateProvider(selectedProvider, url, key, cat); - }); $('#newznab_add').click(function(){ - - var selectedProvider = $('#editANewznabProvider :selected').val(); - var name = $.trim($('#newznab_name').val()); var url = $.trim($('#newznab_url').val()); var key = $.trim($('#newznab_key').val()); //var cat = $.trim($('#newznab_cat').val()); var cat = $.trim($('#newznab_cat option').map(function(i, opt) { - return $(opt).text();}).toArray().join(',')); - - - if (!name) - return; - - if (!url) - return; + return $(opt).text(); + }).toArray().join(',')); - if (!key) + if (!name || !url || !key) { return; + } var params = {name: name}; @@ -473,7 +459,6 @@ $(document).ready(function(){ } $(this).addProvider(data.success, name, url, key, cat, 0); }); - }); $('.newznab_delete').click(function(){ @@ -482,8 +467,6 @@ $(document).ready(function(){ }); $('#torrentrss_add').click(function(){ - var selectedProvider = $('#editATorrentRssProvider :selected').val(); - var name = $('#torrentrss_name').val(); var url = $('#torrentrss_url').val(); var cookies = $('#torrentrss_cookies').val(); @@ -491,25 +474,22 @@ $(document).ready(function(){ var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG}; // send to the form with ajax, get a return value - $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, - function(data){ - if (data.error !== undefined) { - alert(data.error); - return; - } + $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){ + if (data.error !== undefined) { + alert(data.error); + return; + } - $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG); - $(this).refreshEditAProvider(); + $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG); + $(this).refreshEditAProvider(); }); }); $('.torrentrss_delete').on('click', function(){ - var selectedProvider = $('#editATorrentRssProvider :selected').val(); - $(this).deleteTorrentRssProvider(selectedProvider); + $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val()); $(this).refreshEditAProvider(); }); - $(this).on('change', "[class='providerDiv_tip'] input", function(){ $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone()); $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone()); @@ -546,22 +526,20 @@ $(document).ready(function(){ } }); - $.fn.makeTorrentOptionString = function(provider_id) { - - var seed_ratio = $('.providerDiv_tip #'+provider_id+'_seed_ratio').prop('value'); - var seed_time = $('.providerDiv_tip #'+provider_id+'_seed_time').prop('value'); - var process_met = $('.providerDiv_tip #'+provider_id+'_process_method').prop('value'); - var option_string = $('.providerDiv_tip #'+provider_id+'_option_string'); + $.fn.makeTorrentOptionString = function(providerId) { + var seedRatio = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value'); + var seedTime = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value'); + var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value'); + var optionString = $('.providerDiv_tip #' + providerId + '_option_string'); - option_string.val([seed_ratio, seed_time, process_met].join('|')); + optionString.val([seedRatio, seedTime, processMet].join('|')); }; $(this).on('change', '.seed_option', function(){ - var provider_id = $(this).attr('id').split('_')[0]; - $(this).makeTorrentOptionString(provider_id); + var providerId = $(this).attr('id').split('_')[0]; + $(this).makeTorrentOptionString(providerId); }); - $.fn.replaceOptions = function(options) { var self, $option; @@ -569,23 +547,19 @@ $(document).ready(function(){ self = this; $.each(options, function(index, option) { - $option = $("<option></option>") - .attr("value", option.value) - .text(option.text); - self.append($option); + $option = $("<option></option>").attr("value", option.value).text(option.text); + self.append($option); }); - }; + }; // initialization stuff - - $.fn.newznabProvidersCapabilities = []; $(this).showHideProviders(); $("#provider_order_list").sortable({ placeholder: 'ui-state-highlight', - update: function (event, ui) { + update: function () { $(this).refreshProviderList(); } }); @@ -595,5 +569,4 @@ $(document).ready(function(){ if ($('#editANewznabProvider').length) { $(this).populateNewznabSection(); } - }); diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js deleted file mode 100644 index 35dfd6b00c9c1c03e52c0ce85a8aaed4374068bb..0000000000000000000000000000000000000000 --- a/gui/slick/js/configSearch.js +++ /dev/null @@ -1,218 +0,0 @@ -$(document).ready(function(){ - var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />'; - - function toggle_torrent_title(){ - if ($('#use_torrents').prop('checked')){ - $('#no_torrents').show(); - } else { - $('#no_torrents').hide(); - } - } - - $.fn.nzb_method_handler = function() { - var selectedProvider = $('#nzb_method :selected').val(), - blackhole_settings = '#blackhole_settings', - sabnzbd_settings = '#sabnzbd_settings', - testSABnzbd = '#testSABnzbd', - testSABnzbd_result = '#testSABnzbd_result', - nzbget_settings = '#nzbget_settings'; - - $(blackhole_settings).hide(); - $(sabnzbd_settings).hide(); - $(testSABnzbd).hide(); - $(testSABnzbd_result).hide(); - $(nzbget_settings).hide(); - - if ('blackhole' == selectedProvider) { - $(blackhole_settings).show(); - } else if ('nzbget' == selectedProvider) { - $(nzbget_settings).show(); - } else { - $(sabnzbd_settings).show(); - $(testSABnzbd).show(); - $(testSABnzbd_result).show(); - } - }; - - $.fn.rtorrent_scgi = function(){ - var selectedProvider = $('#torrent_method :selected').val(); - - if ('rtorrent' == selectedProvider) { - var hostname = $('#torrent_host').prop('value'); - var isMatch = hostname.substr(0, 7) == "scgi://"; - - if (isMatch) { - $('#torrent_username_option').hide(); - $('#torrent_username').prop('value', ''); - $('#torrent_password_option').hide(); - $('#torrent_password').prop('value', ''); - $('#torrent_auth_type_option').hide(); - $("#torrent_auth_type option[value=none]").attr('selected', 'selected'); - } else { - $('#torrent_username_option').show(); - $('#torrent_password_option').show(); - $('#torrent_auth_type_option').show(); - } - } - }; - - $.fn.torrent_method_handler = function() { - - $('#options_torrent_clients').hide(); - $('#options_torrent_blackhole').hide(); - - var selectedProvider = $('#torrent_method :selected').val(), - host = ' host:port', - username = ' username', - password = ' password', - label = ' label', - directory = ' directory', - client = '', - option_panel = '#options_torrent_blackhole'; - rpcurl = ' RPC URL'; - - if ('blackhole' != selectedProvider) { - var label_warning_deluge = '#label_warning_deluge', - label_anime_warning_deluge = '#label_anime_warning_deluge', - host_desc_rtorrent = '#host_desc_rtorrent', - host_desc_torrent = '#host_desc_torrent', - torrent_verify_cert_option = '#torrent_verify_cert_option', - torrent_path_option = '#torrent_path_option', - torrent_seed_time_option = '#torrent_seed_time_option', - torrent_high_bandwidth_option = '#torrent_high_bandwidth_option', - torrent_label_option = '#torrent_label_option', - torrent_label_anime_option = '#torrent_label_anime_option', - path_synology = '#path_synology', - torrent_paused_option = '#torrent_paused_option'; - - $(label_warning_deluge).hide(); - $(label_anime_warning_deluge).hide(); - $(label_anime_warning_deluge).hide(); - $(host_desc_rtorrent).hide(); - $(host_desc_torrent).show(); - $(torrent_verify_cert_option).hide(); - $(torrent_verify_deluge).hide(); - $(torrent_verify_rtorrent).hide(); - $(torrent_auth_type_option).hide(); - $(torrent_path_option).show(); - $(torrent_path_option).find('.fileBrowser').show(); - $(torrent_seed_time_option).hide(); - $(torrent_high_bandwidth_option).hide(); - $(torrent_label_option).show(); - $(torrent_label_anime_option).show(); - $(path_synology).hide(); - $(torrent_paused_option).show(); - $(torrent_rpcurl_option).hide(); - $(this).rtorrent_scgi(); - - if ('utorrent' == selectedProvider) { - client = 'uTorrent'; - $(torrent_path_option).hide(); - $('#torrent_seed_time_label').text('Minimum seeding time is'); - $(torrent_seed_time_option).show(); - $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)'); - } else if ('transmission' == selectedProvider){ - client = 'Transmission'; - $('#torrent_seed_time_label').text('Stop seeding when inactive for'); - $(torrent_seed_time_option).show(); - $(torrent_high_bandwidth_option).show(); - $(torrent_label_option).hide(); - $(torrent_label_anime_option).hide(); - $(torrent_rpcurl_option).show(); - $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)'); - //$('#directory_title').text(client + directory); - } else if ('deluge' == selectedProvider){ - client = 'Deluge'; - $(torrent_verify_cert_option).show(); - $(torrent_verify_deluge).show(); - $(torrent_verify_rtorrent).hide(); - $(label_warning_deluge).show(); - $(label_anime_warning_deluge).show(); - $('#torrent_username_option').hide(); - $('#torrent_username').prop('value', ''); - $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)'); - //$('#directory_title').text(client + directory); - } else if ('deluged' == selectedProvider){ - client = 'Deluge'; - $(torrent_verify_cert_option).hide(); - $(torrent_verify_deluge).hide(); - $(torrent_verify_rtorrent).hide(); - $(label_warning_deluge).show(); - $(label_anime_warning_deluge).show(); - $('#torrent_username_option').show(); - $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)'); - //$('#directory_title').text(client + directory); - } else if ('download_station' == selectedProvider){ - client = 'Synology DS'; - $(torrent_label_option).hide(); - $(torrent_label_anime_option).hide(); - $('#torrent_paused_option').hide(); - $(torrent_path_option).find('.fileBrowser').hide(); - $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)'); - //$('#directory_title').text(client + directory); - $(path_synology).show(); - } else if ('rtorrent' == selectedProvider){ - client = 'rTorrent'; - $(torrent_paused_option).hide(); - $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br/> or https://localhost/rutorrent/plugins/httprpc/action.php)'); - $(torrent_verify_cert_option).show(); - $(torrent_verify_deluge).hide(); - $(torrent_verify_rtorrent).show(); - $(torrent_auth_type_option).show(); - //$('#directory_title').text(client + directory); - } else if ('qbittorrent' == selectedProvider){ - client = 'qbittorrent'; - $(torrent_path_option).hide(); - $(torrent_label_option).hide(); - $(torrent_label_anime_option).hide(); - $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)'); - } - $('#host_title').text(client + host); - $('#username_title').text(client + username); - $('#password_title').text(client + password); - $('#torrent_client').text(client); - $('#rpcurl_title').text(client + rpcurl); - option_panel = '#options_torrent_clients'; - } - $(option_panel).show(); - }; - - $('#nzb_method').change($(this).nzb_method_handler); - - $(this).nzb_method_handler(); - - $('#testSABnzbd').click(function(){ - $('#testSABnzbd_result').html(loading); - var sab_host = $('#sab_host').val(); - var sab_username = $('#sab_username').val(); - var sab_password = $('#sab_password').val(); - var sab_apiKey = $('#sab_apikey').val(); - - $.get(srRoot + '/home/testSABnzbd', {'host': sab_host, 'username': sab_username, 'password': sab_password, 'apikey': sab_apiKey}, - function(data){ - $('#testSABnzbd_result').html(data); - }); - }); - - - $('#torrent_method').change($(this).torrent_method_handler); - - $(this).torrent_method_handler(); - - $('#use_torrents').click(function(){ - toggle_torrent_title(); - }); - - $('#test_torrent').click(function(){ - $('#test_torrent_result').html(loading); - var torrent_method = $('#torrent_method :selected').val(); - var torrent_host = $('#torrent_host').val(); - var torrent_username = $('#torrent_username').val(); - var torrent_password = $('#torrent_password').val(); - - $.get(srRoot + '/home/testTorrent', {'torrent_method': torrent_method, 'host': torrent_host, 'username': torrent_username, 'password': torrent_password}, - function(data){ $('#test_torrent_result').html(data); }); - }); - - $('#torrent_host').change($(this).rtorrent_scgi); -}); diff --git a/gui/slick/js/configSubtitles.js b/gui/slick/js/configSubtitles.js deleted file mode 100644 index 05974d6dfb467491a8f66bbdbabb7a5e4c1418c2..0000000000000000000000000000000000000000 --- a/gui/slick/js/configSubtitles.js +++ /dev/null @@ -1,65 +0,0 @@ -$(document).ready(function(){ - - $.fn.showHideServices = function() { - $('.serviceDiv').each(function(){ - var serviceName = $(this).attr('id'); - var selectedService = $('#editAService :selected').val(); - - if (selectedService+'Div' == serviceName){ - $(this).show(); - } else { - $(this).hide(); - } - }); - }; - - $.fn.addService = function (id, name, url, key, isDefault, showService) { - if (url.match('/$') === null) url = url + '/'; - - var newData = [isDefault, [name, url, key]]; - - if ($('#service_order_list > #'+id).length === 0 && showService !== false) { - var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>'; - - $('#service_order_list').append(toAdd); - $('#service_order_list').sortable("refresh"); - } - }; - - $.fn.deleteService = function (id) { - $('#service_order_list > #'+id).remove(); - }; - - $.fn.refreshServiceList = function() { - var idArr = $("#service_order_list").sortable('toArray'); - var finalArr = []; - $.each(idArr, function(key, val) { - var checked = + $('#enable_'+val).prop('checked') ? '1' : '0'; - finalArr.push(val + ':' + checked); - }); - - $("#service_order").val(finalArr.join(' ')); - }; - - $('#editAService').change(function(){ - $(this).showHideServices(); - }); - - $('.service_enabler').on('click', function(){ - $(this).refreshServiceList(); - }); - - - // initialization stuff - - $(this).showHideServices(); - - $("#service_order_list").sortable({ - placeholder: 'ui-state-highlight', - update: function (event, ui) { - $(this).refreshServiceList(); - } - }); - - $("#service_order_list").disableSelection(); -}); diff --git a/gui/slick/js/confirmations.js b/gui/slick/js/confirmations.js deleted file mode 100644 index 2746732902d192ee5bd37f1985addd59ebf5493b..0000000000000000000000000000000000000000 --- a/gui/slick/js/confirmations.js +++ /dev/null @@ -1,129 +0,0 @@ -$(document).ready(function () { - $('a.shutdown').on('click', function(e) { - e.preventDefault(); - var target = $(this).attr('href'); - $.confirm({ - 'title' : 'Shutdown', - 'message' : 'Are you sure you want to shutdown SickRage ?', - 'buttons' : { - 'Yes' : { - 'class' : 'green', - 'action': function(){ - location.href = target; - } - }, - 'No' : { - 'class' : 'red', - 'action': function(){} // Nothing to do in this case. You can as well omit the action property. - } - } - }); - }); - - $('a.restart').on('click', function(e) { - e.preventDefault(); - var target = $(this).attr('href'); - $.confirm({ - 'title' : 'Restart', - 'message' : 'Are you sure you want to restart SickRage ?', - 'buttons' : { - 'Yes' : { - 'class' : 'green', - 'action': function(){ - location.href = target; - } - }, - 'No' : { - 'class' : 'red', - 'action': function(){} // Nothing to do in this case. You can as well omit the action property. - } - } - }); - }); - - $('a.removeshow').on('click', function(e) { - e.preventDefault(); - var target = $(this).attr('href'); - var showname = document.getElementById("showtitle").getAttribute('data-showname'); - $.confirm({ - 'title' : 'Remove Show', - 'message' : 'Are you sure you want to remove <span class="footerhighlight">' + showname + '</span> from the database ?<br /><br /><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>', - 'buttons' : { - 'Yes' : { - 'class' : 'green', - 'action': function(){ - location.href = target + (document.getElementById('deleteFiles').checked ? '&full=1' : ''); - // If checkbox is ticked, remove show and delete files. Else just remove show. - } - }, - 'No' : { - 'class' : 'red', - 'action': function(){} // Nothing to do in this case. You can as well omit the action property. - } - } - }); - }); - - $('a.clearhistory').on('click', function(e) { - e.preventDefault(); - var target = $(this).attr('href'); - $.confirm({ - 'title' : 'Clear History', - 'message' : 'Are you sure you want to clear all download history ?', - 'buttons' : { - 'Yes' : { - 'class' : 'green', - 'action': function(){ - location.href = target; - } - }, - 'No' : { - 'class' : 'red', - 'action': function(){} // Nothing to do in this case. You can as well omit the action property. - } - } - }); - }); - - $('a.trimhistory').on('click', function(e) { - e.preventDefault(); - var target = $(this).attr('href'); - $.confirm({ - 'title' : 'Trim History', - 'message' : 'Are you sure you want to trim all download history older than 30 days ?', - 'buttons' : { - 'Yes' : { - 'class' : 'green', - 'action': function(){ - location.href = target; - } - }, - 'No' : { - 'class' : 'red', - 'action': function(){} // Nothing to do in this case. You can as well omit the action property. - } - } - }); - }); - - $('a.submiterrors').on('click', function(e) { - e.preventDefault(); - var target = $(this).attr('href'); - $.confirm({ - 'title' : 'Submit Errors', - 'message' : 'Are you sure you want to submit these errors ?<br /><br /><span class="red-text">Make sure SickRage is updated and trigger<br /> this error with debug enabled before submitting</span>', - 'buttons' : { - 'Yes' : { - 'class' : 'green', - 'action': function(){ - location.href = target; - } - }, - 'No' : { - 'class' : 'red', - 'action': function(){} // Nothing to do in this case. You can as well omit the action property. - } - } - }); - }); -}); diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js new file mode 100644 index 0000000000000000000000000000000000000000..1fcbeae568427ab310002eb23a6e9d9f37aab25b --- /dev/null +++ b/gui/slick/js/core.js @@ -0,0 +1,2003 @@ +// @TODO Move these into common.ini when possible, +// currently we can't do that as browser.js and a few others need it before this is loaded +var srRoot = getMeta('srRoot'), + themeSpinner = getMeta('themeSpinner'), + anonURL = getMeta('anonURL'), + topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />', // jshint ignore:line + loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />'; + +var configSuccess = function(){ + $('.config_submitter').each(function(){ + $(this).removeAttr("disabled"); + $(this).next().remove(); + $(this).show(); + }); + $('.config_submitter_refresh').each(function(){ + $(this).removeAttr("disabled"); + $(this).next().remove(); + $(this).show(); + window.location.href = srRoot + '/config/providers/'; + }); + $('#email_show').trigger('notify'); +}; + +var SICKRAGE = { + common: { + init: function() { + $.confirm.options = { + confirmButton: "Yes", + cancelButton: "Cancel", + dialogClass: "modal-dialog", + post: false, + confirm: function(e) { + location.href = e.context.href; + } + }; + + $("a.shutdown").confirm({ + title: "Shutdown", + text: "Are you sure you want to shutdown SickRage?" + }); + + $("a.restart").confirm({ + title: "Restart", + text: "Are you sure you want to restart SickRage?" + }); + + $("a.removeshow").confirm({ + title: "Remove Show", + text: 'Are you sure you want to remove <span class="footerhighlight">' + $('#showtitle').data('showname') + '</span> from the database?<br><br><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>', + confirm: function(e) { + location.href = e.context.href + ($('#deleteFiles')[0].checked ? '&full=1' : ''); + } + }); + + $('a.clearhistory').confirm({ + title: 'Clear History', + text: 'Are you sure you want to clear all download history?' + }); + + $('a.trimhistory').confirm({ + title: 'Trim History', + text: 'Are you sure you want to trim all download history older than 30 days?' + }); + + $('a.submiterrors').confirm({ + title: 'Submit Errors', + text: 'Are you sure you want to submit these errors ?<br><br><span class="red-text">Make sure SickRage is updated and trigger<br> this error with debug enabled before submitting</span>' + }); + + $("#config-components").tabs({ + activate: function (event, ui) { + var lastOpenedPanel = $(this).data("lastOpenedPanel"); + + if(!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); } + + if(!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); } + + //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that + //Fadein the new tab yourself + $(ui.newPanel).hide().fadeIn(0); + + if(lastOpenedPanel) { + // 1. Show the previous opened tab by removing the jQuery UI class + // 2. Make the tab temporary position:absolute so the two tabs will overlap + // 3. Set topposition so they will overlap if you go from tab 1 to tab 0 + // 4. Remove position:absolute after animation + lastOpenedPanel + .toggleClass("ui-tabs-hide") + .css("position", "absolute") + .css("top", $(this).data("topPositionTab") + "px") + .fadeOut(0, function () { + $(this).css("position", ""); + }); + } + + //Saving the last tab has been opened + $(this).data("lastOpenedPanel", $(ui.newPanel)); + } + }); + + // @TODO Replace this with a real touchscreen check + // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle + if((navigator.maxTouchPoints || 0) < 2) { + $('.dropdown-toggle').on('click', function() { + var $this = $(this); + if ($this.attr('aria-expanded') === 'true') { + window.location.href = $this.attr('href'); + } + }); + } + + if(metaToBool('sickbeard.FUZZY_DATING')) { + $.timeago.settings.allowFuture = true; + $.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: 'In ', + suffixAgo: "ago", + suffixFromNow: "", + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "an hour", + hours: "%d hours", + day: "a day", + days: "%d days", + month: "a month", + months: "%d months", + year: "a year", + years: "%d years", + wordSeparator: " ", + numbers: [] + }; + $("[datetime]").timeago(); + } + } + }, + config: { + init: function() { + $('#config-components').tabs(); + + $(".enabler").each(function(){ + if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); } + }); + + $(".enabler").click(function() { + if ($(this).prop('checked')){ + $('#content_'+$(this).attr('id')).fadeIn("fast", "linear"); + } else { + $('#content_'+$(this).attr('id')).fadeOut("fast", "linear"); + } + }); + + $(".viewIf").click(function() { + if ($(this).prop('checked')) { + $('.hide_if_'+$(this).attr('id')).css('display','none'); + $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear"); + } else { + $('.show_if_'+$(this).attr('id')).css('display','none'); + $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear"); + } + }); + + $(".datePresets").click(function() { + var def = $('#date_presets').val(); + if ($(this).prop('checked') && '%x' === def) { + def = '%a, %b %d, %Y'; + $('#date_use_system_default').html('1'); + } else if (!$(this).prop('checked') && '1' === $('#date_use_system_default').html()){ + def = '%x'; + } + + $('#date_presets').attr('name', 'date_preset_old'); + $('#date_presets').attr('id', 'date_presets_old'); + + $('#date_presets_na').attr('name', 'date_preset'); + $('#date_presets_na').attr('id', 'date_presets'); + + $('#date_presets_old').attr('name', 'date_preset_na'); + $('#date_presets_old').attr('id', 'date_presets_na'); + + if (def) { $('#date_presets').val(def); } + }); + + // bind 'myForm' and provide a simple callback function + $('#configForm').ajaxForm({ + beforeSubmit: function(){ + $('.config_submitter .config_submitter_refresh').each(function(){ + $(this).attr("disabled", "disabled"); + $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>'); + $(this).hide(); + }); + }, + success: function(){ + setTimeout(function () { + "use strict"; + configSuccess(); + }, 2000); + } + }); + + $('#api_key').click(function(){ + $('#api_key').select(); + }); + + $("#generate_new_apikey").click(function(){ + $.get(srRoot + '/config/general/generateApiKey', function(data){ + if (data.error !== undefined) { + alert(data.error); + return; + } + $('#api_key').val(data); + }); + }); + + $('#branchCheckout').click(function() { + var url = srRoot + '/home/branchCheckout?branch=' + $("#branchVersion").val(); + var checkDBversion = srRoot + "/home/getDBcompare"; + $.getJSON(checkDBversion, function(data){ + if (data.status === "success") { + if (data.message === "equal") { + //Checkout Branch + window.location.href = url; + } + if (data.message === "upgrade") { + if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) { + //Checkout Branch + window.location.href = url; + } + } + if (data.message === "downgrade") { + alert("Can't switch branch as this will result in a database downgrade."); + } + } + }); + }); + }, + index: function() { + if ($("input[name='proxy_setting']").val().length === 0) { + $("input[id='proxy_indexers']").prop('checked', false); + $("label[for='proxy_indexers']").hide(); + } + + $("input[name='proxy_setting']").on('input', function() { + if($(this).val().length === 0) { + $("input[id='proxy_indexers']").prop('checked', false); + $("label[for='proxy_indexers']").hide(); + } else { + $("label[for='proxy_indexers']").show(); + } + }); + + $('#log_dir').fileBrowser({ title: 'Select log file folder location' }); + }, + backupRestore: function(){ + $('#Backup').click(function() { + $("#Backup").attr("disabled", true); + $('#Backup-result').html(loading); + var backupDir = $("#backupDir").val(); + $.get(srRoot + "/config/backuprestore/backup", {'backupDir': backupDir}) + .done(function (data) { + $('#Backup-result').html(data); + $("#Backup").attr("disabled", false); + }); + }); + $('#Restore').click(function() { + $("#Restore").attr("disabled", true); + $('#Restore-result').html(loading); + var backupFile = $("#backupFile").val(); + $.get(srRoot + "/config/backuprestore/restore", {'backupFile': backupFile}) + .done(function (data) { + $('#Restore-result').html(data); + $("#Restore").attr("disabled", false); + }); + }); + + $('#backupDir').fileBrowser({ title: 'Select backup folder to save to', key: 'backupPath' }); + $('#backupFile').fileBrowser({ title: 'Select backup files to restore', key: 'backupFile', includeFiles: 1 }); + $('#config-components').tabs(); + + $(".enabler").each(function(){ + if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); } + }); + + $(".enabler").click(function() { + if ($(this).prop('checked')){ + $('#content_'+$(this).attr('id')).fadeIn("fast", "linear"); + } else { + $('#content_'+$(this).attr('id')).fadeOut("fast", "linear"); + } + }); + + $(".viewIf").click(function() { + if ($(this).prop('checked')) { + $('.hide_if_'+$(this).attr('id')).css('display','none'); + $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear"); + } else { + $('.show_if_'+$(this).attr('id')).css('display','none'); + $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear"); + } + }); + + $(".datePresets").click(function() { + var def = $('#date_presets').val(); + if ($(this).prop('checked') && '%x' == def) { // jshint ignore:line + def = '%a, %b %d, %Y'; + $('#date_use_system_default').html('1'); + } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){ // jshint ignore:line + def = '%x'; + } + + $('#date_presets').attr('name', 'date_preset_old'); + $('#date_presets').attr('id', 'date_presets_old'); + + $('#date_presets_na').attr('name', 'date_preset'); + $('#date_presets_na').attr('id', 'date_presets'); + + $('#date_presets_old').attr('name', 'date_preset_na'); + $('#date_presets_old').attr('id', 'date_presets_na'); + + if (def) { $('#date_presets').val(def); } + }); + + // bind 'myForm' and provide a simple callback function + $('#configForm').ajaxForm({ + beforeSubmit: function(){ + $('.config_submitter .config_submitter_refresh').each(function(){ + $(this).attr("disabled", "disabled"); + $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>'); + $(this).hide(); + }); + }, + success: function(){ + setTimeout(function () { + "use strict"; + configSuccess(); + }, 2000); + } + }); + + $('#api_key').click(function(){ + $('#api_key').select(); + }); + + $("#generate_new_apikey").click(function(){ + $.get(srRoot + '/config/general/generateApiKey', function(data){ + if (data.error !== undefined) { + alert(data.error); + return; + } + $('#api_key').val(data); + }); + }); + + $('#branchCheckout').click(function() { + var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val(); + var checkDBversion = srRoot + "/home/getDBcompare"; + $.getJSON(checkDBversion, function(data){ + if (data.status.toLowerCase() === "success") { + if (data.message.toLowerCase() === "equal") { + //Checkout Branch + window.location.href = url; + } + if (data.message.toLowerCase() === "upgrade") { + if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) { + //Checkout Branch + window.location.href = url; + } + } + if (data.message.toLowerCase() === "downgrade") { + alert("Can't switch branch as this will result in a database downgrade."); + } + } + }); + }); + }, + notifications: function() { + $('#config-components').tabs(); + + $('#testGrowl').click(function () { + var growl = {}; + growl.host = $.trim($('#growl_host').val()); + growl.password = $.trim($('#growl_password').val()); + if (!growl.ost) { + $('#testGrowl-result').html('Please fill out the necessary fields above.'); + $('#growl_host').addClass('warning'); + return; + } + $('#growl_host').removeClass('warning'); + $(this).prop('disabled', true); + $('#testGrowl-result').html(loading); + $.get(srRoot + '/home/testGrowl', {'host': growl.host, 'password': growl.password}).done(function (data) { + $('#testGrowl-result').html(data); + $('#testGrowl').prop('disabled', false); + }); + }); + + $('#testProwl').click(function () { + var prowl = {}; + prowl.api = $.trim($('#prowl_api').val()); + prowl.priority = $('#prowl_priority').val(); + if (!prowl.ai) { + $('#testProwl-result').html('Please fill out the necessary fields above.'); + $('#prowl_api').addClass('warning'); + return; + } + $('#prowl_api').removeClass('warning'); + $(this).prop('disabled', true); + $('#testProwl-result').html(loading); + $.get(srRoot + '/home/testProwl', {'prowl_api': prowl.api, 'prowl_priority': prowl.priority}).done(function (data) { + $('#testProwl-result').html(data); + $('#testProwl').prop('disabled', false); + }); + }); + + $('#testKODI').click(function () { + var kodi = {}; + kodi.host = $.trim($('#kodi_host').val()); + kodi.username = $.trim($('#kodi_username').val()); + kodi.password = $.trim($('#kodi_password').val()); + if (!kodi.host) { + $('#testKODI-result').html('Please fill out the necessary fields above.'); + $('#kodi_host').addClass('warning'); + return; + } + $('#kodi_host').removeClass('warning'); + $(this).prop('disabled', true); + $('#testKODI-result').html(loading); + $.get(srRoot + '/home/testKODI', {'host': kodi.host, 'username': kodi.username, 'password': kodi.password}).done(function (data) { + $('#testKODI-result').html(data); + $('#testKODI').prop('disabled', false); + }); + }); + + $('#testPMC').click(function () { + var plex = {}; + plex.client = {}; + plex.client.host = $.trim($('#plex_host').val()); + plex.client.username = $.trim($('#plex_client_username').val()); + plex.client.password = $.trim($('#plex_client_password').val()); + if (!plex.host) { + $('#testPMC-result').html('Please fill out the necessary fields above.'); + $('#plex_host').addClass('warning'); + return; + } + $('#plex_host').removeClass('warning'); + $(this).prop('disabled', true); + $('#testPMC-result').html(loading); + $.get(srRoot + '/home/testPMC', {'host': plex.client.host, 'username': plex.client.username, 'password': plex.client.password}).done(function (data) { + $('#testPMC-result').html(data); + $('#testPMC').prop('disabled', false); + }); + }); + + $('#testPMS').click(function () { + var plex = {}; + plex.server = {}; + plex.server.host = $.trim($('#plex_server_host').val()); + plex.username = $.trim($('#plex_username').val()); + plex.password = $.trim($('#plex_password').val()); + plex.server.token = $.trim($('#plex_server_token').val()); + if (!plex.server.host) { + $('#testPMS-result').html('Please fill out the necessary fields above.'); + $('#plex_server_host').addClass('warning'); + return; + } + $('#plex_server_host').removeClass('warning'); + $(this).prop('disabled', true); + $('#testPMS-result').html(loading); + $.get(srRoot + '/home/testPMS', {'host': plex.server.host, 'username': plex.username, 'password': plex.password, 'plex_server_token': plex.server.token}).done(function (data) { + $('#testPMS-result').html(data); + $('#testPMS').prop('disabled', false); + }); + }); + + $('#testEMBY').click(function () { + var emby = {}; + emby.host = $('#emby_host').val(); + emby.apikey = $('#emby_apikey').val(); + if (!emby.host || !emby.apikey) { + $('#testEMBY-result').html('Please fill out the necessary fields above.'); + if (!emby.host) { + $('#emby_host').addClass('warning'); + } else { + $('#emby_host').removeClass('warning'); + } + if (!emby.apikey) { + $('#emby_apikey').addClass('warning'); + } else { + $('#emby_apikey').removeClass('warning'); + } + return; + } + $('#emby_host,#emby_apikey').removeClass('warning'); + $(this).prop('disabled', true); + $('#testEMBY-result').html(loading); + $.get(srRoot + '/home/testEMBY', {'host': emby.host, 'emby_apikey': emby.apikey}).done(function (data) { + $('#testEMBY-result').html(data); + $('#testEMBY').prop('disabled', false); + }); + }); + + $('#testBoxcar').click(function() { + var boxcar = {}; + boxcar.username = $.trim($('#boxcar_username').val()); + if (!boxcar.username) { + $('#testBoxcar-result').html('Please fill out the necessary fields above.'); + $('#boxcar_username').addClass('warning'); + return; + } + $('#boxcar_username').removeClass('warning'); + $(this).prop('disabled', true); + $('#testBoxcar-result').html(loading); + $.get(srRoot + '/home/testBoxcar', {'username': boxcar.username}).done(function (data) { + $('#testBoxcar-result').html(data); + $('#testBoxcar').prop('disabled', false); + }); + }); + + $('#testBoxcar2').click(function () { + var boxcar2 = {}; + boxcar2.accesstoken = $.trim($('#boxcar2_accesstoken').val()); + if (!boxcar2.accesstoken) { + $('#testBoxcar2-result').html('Please fill out the necessary fields above.'); + $('#boxcar2_accesstoken').addClass('warning'); + return; + } + $('#boxcar2_accesstoken').removeClass('warning'); + $(this).prop('disabled', true); + $('#testBoxcar2-result').html(loading); + $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2.accesstoken}).done(function (data) { + $('#testBoxcar2-result').html(data); + $('#testBoxcar2').prop('disabled', false); + }); + }); + + $('#testPushover').click(function () { + var pushover = {}; + pushover.userkey = $('#pushover_userkey').val(); + pushover.apikey = $('#pushover_apikey').val(); + if (!pushover.userkey || !pushover.apikey) { + $('#testPushover-result').html('Please fill out the necessary fields above.'); + if (!pushover.userkey) { + $('#pushover_userkey').addClass('warning'); + } else { + $('#pushover_userkey').removeClass('warning'); + } + if (!pushover.apikey) { + $('#pushover_apikey').addClass('warning'); + } else { + $('#pushover_apikey').removeClass('warning'); + } + return; + } + $('#pushover_userkey,#pushover_apikey').removeClass('warning'); + $(this).prop('disabled', true); + $('#testPushover-result').html(loading); + $.get(srRoot + '/home/testPushover', {'userKey': pushover.userkey, 'apiKey': pushover.apikey}).done(function (data) { + $('#testPushover-result').html(data); + $('#testPushover').prop('disabled', false); + }); + }); + + $('#testLibnotify').click(function() { + $('#testLibnotify-result').html(loading); + $.get(srRoot + '/home/testLibnotify', function (data) { + $('#testLibnotify-result').html(data); + }); + }); + + $('#twitterStep1').click(function() { + $('#testTwitter-result').html(loading); + $.get(srRoot + '/home/twitterStep1', function (data) { + window.open(data); + }).done(function() { + $('#testTwitter-result').html('<b>Step1:</b> Confirm Authorization'); + }); + }); + + $('#twitterStep2').click(function () { + var twitter = {}; + twitter.key = $.trim($('#twitter_key').val()); + if (!twitter.key) { + $('#testTwitter-result').html('Please fill out the necessary fields above.'); + $('#twitter_key').addClass('warning'); + return; + } + $('#twitter_key').removeClass('warning'); + $('#testTwitter-result').html(loading); + $.get(srRoot + '/home/twitterStep2', {'key': twitter.key}, function(data) { + $('#testTwitter-result').html(data); + }); + }); + + $('#testTwitter').click(function() { + $.get(srRoot + '/home/testTwitter', function(data) { + $('#testTwitter-result').html(data); + }); + }); + + $('#settingsNMJ').click(function() { + var nmj = {}; + if (!$('#nmj_host').val()) { + alert('Please fill in the Popcorn IP address'); + $('#nmj_host').focus(); + return; + } + $('#testNMJ-result').html(loading); + nmj.host = $('#nmj_host').val(); + + $.get(srRoot + '/home/settingsNMJ', {'host': nmj.host}, function (data) { + if (data === null) { + $('#nmj_database').removeAttr('readonly'); + $('#nmj_mount').removeAttr('readonly'); + } + var JSONData = $.parseJSON(data); + $('#testNMJ-result').html(JSONData.message); + $('#nmj_database').val(JSONData.database); + $('#nmj_mount').val(JSONData.mount); + + if (JSONData.database) { + $('#nmj_database').attr('readonly', true); + } else { + $('#nmj_database').removeAttr('readonly'); + } + if (JSONData.mount) { + $('#nmj_mount').attr('readonly', true); + } else { + $('#nmj_mount').removeAttr('readonly'); + } + }); + }); + + $('#testNMJ').click(function () { + var nmj = {}; + nmj.host = $.trim($('#nmj_host').val()); + nmj.database = $('#nmj_database').val(); + nmj.mount = $('#nmj_mount').val(); + if (!nmj.host) { + $('#testNMJ-result').html('Please fill out the necessary fields above.'); + $('#nmj_host').addClass('warning'); + return; + } + $('#nmj_host').removeClass('warning'); + $(this).prop('disabled', true); + $('#testNMJ-result').html(loading); + $.get(srRoot + '/home/testNMJ', {'host': nmj.host, 'database': nmj.database, 'mount': nmj.mount}).done(function (data) { + $('#testNMJ-result').html(data); + $('#testNMJ').prop('disabled', false); + }); + }); + + $('#settingsNMJv2').click(function() { + var nmjv2 = {}; + if(!$('#nmjv2_host').val()) { + alert('Please fill in the Popcorn IP address'); + $('#nmjv2_host').focus(); + return; + } + $('#testNMJv2-result').html(loading); + nmjv2.host = $('#nmjv2_host').val(); + nmjv2.dbloc = ''; + var radios = document.getElementsByName('nmjv2_dbloc'); + for(var i = 0, len = radios.length; i < len; i++) { + if (radios[i].checked) { + nmjv2.dbloc = radios[i].value; + break; + } + } + + nmjv2.dbinstance=$('#NMJv2db_instance').val(); + $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2.host,'dbloc': nmjv2.dbloc,'instance': nmjv2.dbinstance}, function (data){ + if (data === null) { + $('#nmjv2_database').removeAttr('readonly'); + } + var JSONData = $.parseJSON(data); + $('#testNMJv2-result').html(JSONData.message); + $('#nmjv2_database').val(JSONData.database); + + if (JSONData.database){ + $('#nmjv2_database').attr('readonly', true); + } else { + $('#nmjv2_database').removeAttr('readonly'); + } + }); + }); + + $('#testNMJv2').click(function () { + var nmjv2 = {}; + nmjv2.host = $.trim($('#nmjv2_host').val()); + if (!nmjv2.host) { + $('#testNMJv2-result').html('Please fill out the necessary fields above.'); + $('#nmjv2_host').addClass('warning'); + return; + } + $('#nmjv2_host').removeClass('warning'); + $(this).prop('disabled', true); + $('#testNMJv2-result').html(loading); + $.get(srRoot + '/home/testNMJv2', {'host': nmjv2.host}) .done(function (data) { + $('#testNMJv2-result').html(data); + $('#testNMJv2').prop('disabled', false); + }); + }); + + $('#testFreeMobile').click(function () { + var freemobile = {}; + freemobile.id = $.trim($('#freemobile_id').val()); + freemobile.apikey = $.trim($('#freemobile_apikey').val()); + if (!freemobile.id || !freemobile.apikey) { + $('#testFreeMobile-result').html('Please fill out the necessary fields above.'); + if (!freemobile.id) { + $('#freemobile_id').addClass('warning'); + } else { + $('#freemobile_id').removeClass('warning'); + } + if (!freemobile.apikey) { + $('#freemobile_apikey').addClass('warning'); + } else { + $('#freemobile_apikey').removeClass('warning'); + } + return; + } + $('#freemobile_id,#freemobile_apikey').removeClass('warning'); + $(this).prop('disabled', true); + $('#testFreeMobile-result').html(loading); + $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile.id, 'freemobile_apikey': freemobile.apikey}).done(function (data) { + $('#testFreeMobile-result').html(data); + $('#testFreeMobile').prop('disabled', false); + }); + }); + + $('#TraktGetPin').click(function () { + var trakt = {}; + trakt.pinUrl = $('#trakt_pin_url').val(); + window.open(trakt.pinUrl, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550"); + $('#trakt_pin').removeClass('hide'); + }); + + $('#trakt_pin').on('keyup change', function(){ + var trakt = {}; + trakt.pin = $('#trakt_pin').val(); + + if (trakt.pin.length !== 0) { + $('#TraktGetPin').addClass('hide'); + $('#authTrakt').removeClass('hide'); + } else { + $('#TraktGetPin').removeClass('hide'); + $('#authTrakt').addClass('hide'); + } + }); + + $('#authTrakt').click(function() { + var trakt = {}; + trakt.pin = $('#trakt_pin').val(); + if (trakt.pin.length !== 0) { + $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt.pin }).done(function (data) { + $('#testTrakt-result').html(data); + $('#authTrakt').addClass('hide'); + $('#trakt_pin').addClass('hide'); + $('#TraktGetPin').addClass('hide'); + }); + } + }); + + $('#testTrakt').click(function () { + var trakt = {}; + trakt.username = $.trim($('#trakt_username').val()); + trakt.trendingBlacklist = $.trim($('#trakt_blacklist_name').val()); + if (!trakt.username) { + $('#testTrakt-result').html('Please fill out the necessary fields above.'); + if (!trakt.username) { + $('#trakt_username').addClass('warning'); + } else { + $('#trakt_username').removeClass('warning'); + } + return; + } + + if (/\s/g.test(trakt.trendingBlacklist)) { + $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug'); + $('#trakt_blacklist_name').addClass('warning'); + return; + } + $('#trakt_username').removeClass('warning'); + $('#trakt_blacklist_name').removeClass('warning'); + $(this).prop('disabled', true); + $('#testTrakt-result').html(loading); + $.get(srRoot + '/home/testTrakt', {'username': trakt.username, 'blacklist_name': trakt.trendingBlacklist}).done(function (data) { + $('#testTrakt-result').html(data); + $('#testTrakt').prop('disabled', false); + }); + }); + + $('#testEmail').click(function () { + var status, host, port, tls, from, user, pwd, err, to; + status = $('#testEmail-result'); + status.html(loading); + host = $('#email_host').val(); + host = host.length > 0 ? host : null; + port = $('#email_port').val(); + port = port.length > 0 ? port : null; + tls = $('#email_tls').attr('checked') !== undefined ? 1 : 0; + from = $('#email_from').val(); + from = from.length > 0 ? from : 'root@localhost'; + user = $('#email_user').val().trim(); + pwd = $('#email_password').val(); + err = ''; + if (host === null) { + err += '<li style="color: red;">You must specify an SMTP hostname!</li>'; + } + if (port === null) { + err += '<li style="color: red;">You must specify an SMTP port!</li>'; + } else if (port.match(/^\d+$/) === null || parseInt(port, 10) > 65535) { + err += '<li style="color: red;">SMTP port must be between 0 and 65535!</li>'; + } + if (err.length > 0) { + err = '<ol>' + err + '</ol>'; + status.html(err); + } else { + to = prompt('Enter an email address to send the test to:', null); + if (to === null || to.length === 0 || to.match(/.*@.*/) === null) { + status.html('<p style="color: red;">You must provide a recipient email address!</p>'); + } else { + $.get(srRoot + '/home/testEmail', { + host: host, + port: port, + smtp_from: from, // jshint ignore:line + use_tls: tls, // jshint ignore:line + user: user, + pwd: pwd, + to: to + }, function (msg) { + $('#testEmail-result').html(msg); + }); + } + } + }); + + $('#testNMA').click(function () { + var nma = {}; + nma.api = $.trim($('#nma_api').val()); + nma.priority = $('#nma_priority').val(); + if (!nma.api) { + $('#testNMA-result').html('Please fill out the necessary fields above.'); + $('#nma_api').addClass('warning'); + return; + } + $('#nma_api').removeClass('warning'); + $(this).prop('disabled', true); + $('#testNMA-result').html(loading); + $.get(srRoot + '/home/testNMA', {'nma_api': nma.api, 'nma_priority': nma.priority}).done(function (data) { + $('#testNMA-result').html(data); + $('#testNMA').prop('disabled', false); + }); + }); + + $('#testPushalot').click(function () { + var pushalot = {}; + pushalot.authToken = $.trim($('#pushalot_authorizationtoken').val()); + if (!pushalot.authToken) { + $('#testPushalot-result').html('Please fill out the necessary fields above.'); + $('#pushalot_authorizationtoken').addClass('warning'); + return; + } + $('#pushalot_authorizationtoken').removeClass('warning'); + $(this).prop('disabled', true); + $('#testPushalot-result').html(loading); + $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot.authToken}).done(function (data) { + $('#testPushalot-result').html(data); + $('#testPushalot').prop('disabled', false); + }); + }); + + $('#testPushbullet').click(function () { + var pushbullet = {}; + pushbullet.api = $.trim($('#pushbullet_api').val()); + if (!pushbullet.api) { + $('#testPushbullet-result').html('Please fill out the necessary fields above.'); + $('#pushbullet_api').addClass('warning'); + return; + } + $('#pushbullet_api').removeClass('warning'); + $(this).prop('disabled', true); + $('#testPushbullet-result').html(loading); + $.get(srRoot + '/home/testPushbullet', {'api': pushbullet.api}).done(function (data) { + $('#testPushbullet-result').html(data); + $('#testPushbullet').prop('disabled', false); + }); + }); + + function getPushbulletDevices(msg){ + var pushbullet = {}; + pushbullet.api = $("#pushbullet_api").val(); + + if(msg) { + $('#testPushbullet-result').html(loading); + } + + if(!pushbullet.api) { + $('#testPushbullet-result').html("You didn't supply a Pushbullet api key"); + $("#pushbullet_api").focus(); + return false; + } + + $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet.api}, function (data) { + pushbullet.devices = jQuery.parseJSON(data).devices; + pushbullet.currentDevice = $("#pushbullet_device").val(); + $("#pushbullet_device_list").html(''); + for (var i = 0, len = pushbullet.devices.length; i < len; i++) { + if(pushbullet.devices[i].active === true) { + if(pushbullet.currentDevice === pushbullet.devices[i].iden) { + $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'" selected>' + pushbullet.devices[i].nickname + '</option>'); + } else { + $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'">' + pushbullet.devices[i].nickname + '</option>'); + } + } + } + if (pushbullet.currentDevice === '') { + $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>'); + } else { + $("#pushbullet_device_list").prepend('<option value="">All devices</option>'); + } + if(msg) { + $('#testPushbullet-result').html(msg); + } + }); + + $("#pushbullet_device_list").change(function(){ + $("#pushbullet_device").val($("#pushbullet_device_list").val()); + $('#testPushbullet-result').html("Don't forget to save your new pushbullet settings."); + }); + } + + $('#getPushbulletDevices').click(function(){ + getPushbulletDevices("Device list updated. Please choose a device to push to."); + }); + + // we have to call this function on dom ready to create the devices select + getPushbulletDevices(); + + // @TODO Find out what notify_data actually does since it doesn't seem to be a real function + $('#email_show').change(function() { + var key = parseInt($('#email_show').val(), 10); + $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : ''); // jshint ignore:line + }); + + // Update the internal data struct anytime settings are saved to the server + $('#email_show').bind('notify', function() { + loadShowNotifyLists(); + }); + + function loadShowNotifyLists() { + $.get(srRoot + "/home/loadShowNotifyLists", function(data) { + var list, html, s; + list = $.parseJSON(data); // @TODO The line below this is the same as the $('#email_show') function above + notify_data = list; // jshint ignore:line + if (list._size === 0) { return; } + html = '<option value="-1">-- Select --</option>'; + for (s in list) { + if (s.charAt(0) !== '_') { + html += '<option value="' + list[s].id + '">' + $('<div/>').text(list[s].name).html() + '</option>'; + } + } + $('#email_show').html(html); + $('#email_show_list').val(''); + }); + } + // Load the per show notify lists everytime this page is loaded + loadShowNotifyLists(); + + $('#email_show_save').click(function() { + $.post(srRoot + "/home/saveShowNotifyList", { + show: $('#email_show').val(), + emails: $('#email_show_list').val() + }, function() { + // Reload the per show notify lists to reflect changes + loadShowNotifyLists(); + }); + }); + + // show instructions for plex when enabled + $('#use_plex').click(function() { + if ($(this).is(':checked')) { + $('.plexinfo').removeClass('hide'); + } else { + $('.plexinfo').addClass('hide'); + } + }); + }, + postProcessing: function() { + $('#config-components').tabs(); + $('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' }); + + // http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew + var typewatch = (function () { + var timer = 0; + return function (callback, ms) { + clearTimeout(timer); + timer = setTimeout(callback, ms); + }; + })(); + + function isRarSupported() { + $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) { + if (data !== "supported") { + $('#unpack').qtip('option', { + 'content.text': 'Unrar Executable not found.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#unpack').qtip('toggle', true); + $('#unpack').css('background-color', '#FFFFDD'); + } + }); + } + + function fillExamples() { + var example = {}; + + example.pattern = $('#naming_pattern').val(); + example.multi = $('#naming_multi_ep :selected').val(); + example.animeType = $('input[name="naming_anime"]:checked').val(); + + $.get(srRoot + '/config/postProcessing/testNaming', { + pattern: example.pattern, + anime_type: 3 // jshint ignore:line + }, function (data) { + if (data) { + $('#naming_example').text(data + '.ext'); + $('#naming_example_div').show(); + } else { + $('#naming_example_div').hide(); + } + }); + + $.get(srRoot + '/config/postProcessing/testNaming', { + pattern: example.pattern, + multi: example.multi, + anime_type: 3 // jshint ignore:line + }, function (data) { + if (data) { + $('#naming_example_multi').text(data + '.ext'); + $('#naming_example_multi_div').show(); + } else { + $('#naming_example_multi_div').hide(); + } + }); + + $.get(srRoot + '/config/postProcessing/isNamingValid', { + pattern: example.pattern, + multi: example.multi, + anime_type: example.animeType // jshint ignore:line + }, function (data) { + if (data === "invalid") { + $('#naming_pattern').qtip('option', { + 'content.text': 'This pattern is invalid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_pattern').qtip('toggle', true); + $('#naming_pattern').css('background-color', '#FFDDDD'); + } else if (data === "seasonfolders") { + $('#naming_pattern').qtip('option', { + 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_pattern').qtip('toggle', true); + $('#naming_pattern').css('background-color', '#FFFFDD'); + } else { + $('#naming_pattern').qtip('option', { + 'content.text': 'This pattern is valid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-green' + }); + $('#naming_pattern').qtip('toggle', false); + $('#naming_pattern').css('background-color', '#FFFFFF'); + } + }); + } + + function fillAbdExamples() { + var pattern = $('#naming_abd_pattern').val(); + + $.get(srRoot + '/config/postProcessing/testNaming', { + pattern: pattern, + abd: 'True' + }, function (data) { + if (data) { + $('#naming_abd_example').text(data + '.ext'); + $('#naming_abd_example_div').show(); + } else { + $('#naming_abd_example_div').hide(); + } + }); + + $.get(srRoot + '/config/postProcessing/isNamingValid', { + pattern: pattern, + abd: 'True' + }, function (data) { + if (data === "invalid") { + $('#naming_abd_pattern').qtip('option', { + 'content.text': 'This pattern is invalid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_abd_pattern').qtip('toggle', true); + $('#naming_abd_pattern').css('background-color', '#FFDDDD'); + } else if (data === "seasonfolders") { + $('#naming_abd_pattern').qtip('option', { + 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_abd_pattern').qtip('toggle', true); + $('#naming_abd_pattern').css('background-color', '#FFFFDD'); + } else { + $('#naming_abd_pattern').qtip('option', { + 'content.text': 'This pattern is valid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-green' + }); + $('#naming_abd_pattern').qtip('toggle', false); + $('#naming_abd_pattern').css('background-color', '#FFFFFF'); + } + }); + } + + function fillSportsExamples() { + var pattern = $('#naming_sports_pattern').val(); + + $.get(srRoot + '/config/postProcessing/testNaming', { + pattern: pattern, + sports: 'True' + }, function (data) { + if (data) { + $('#naming_sports_example').text(data + '.ext'); + $('#naming_sports_example_div').show(); + } else { + $('#naming_sports_example_div').hide(); + } + }); + + $.get(srRoot + '/config/postProcessing/isNamingValid', { + pattern: pattern, + sports: 'True' + }, function (data) { + if (data === "invalid") { + $('#naming_sports_pattern').qtip('option', { + 'content.text': 'This pattern is invalid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_sports_pattern').qtip('toggle', true); + $('#naming_sports_pattern').css('background-color', '#FFDDDD'); + } else if (data === "seasonfolders") { + $('#naming_sports_pattern').qtip('option', { + 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_sports_pattern').qtip('toggle', true); + $('#naming_sports_pattern').css('background-color', '#FFFFDD'); + } else { + $('#naming_sports_pattern').qtip('option', { + 'content.text': 'This pattern is valid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-green' + }); + $('#naming_sports_pattern').qtip('toggle', false); + $('#naming_sports_pattern').css('background-color', '#FFFFFF'); + } + }); + } + + function fillAnimeExamples() { + var example = {}; + example.pattern = $('#naming_anime_pattern').val(); + example.multi = $('#naming_anime_multi_ep :selected').val(); + example.animeType = $('input[name="naming_anime"]:checked').val(); + + $.get(srRoot + '/config/postProcessing/testNaming', { + pattern: example.pattern, + anime_type: example.animeType // jshint ignore:line + }, function (data) { + if (data) { + $('#naming_example_anime').text(data + '.ext'); + $('#naming_example_anime_div').show(); + } else { + $('#naming_example_anime_div').hide(); + } + }); + + $.get(srRoot + '/config/postProcessing/testNaming', { + pattern: example.pattern, + multi: example.multi, + anime_type: example.animeType // jshint ignore:line + }, function (data) { + if (data) { + $('#naming_example_multi_anime').text(data + '.ext'); + $('#naming_example_multi_anime_div').show(); + } else { + $('#naming_example_multi_anime_div').hide(); + } + }); + + $.get(srRoot + '/config/postProcessing/isNamingValid', { + pattern: example.pattern, + multi: example.multi, + anime_type: example.animeType // jshint ignore:line + }, function (data) { + if (data === "invalid") { + $('#naming_pattern').qtip('option', { + 'content.text': 'This pattern is invalid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_pattern').qtip('toggle', true); + $('#naming_pattern').css('background-color', '#FFDDDD'); + } else if (data === "seasonfolders") { + $('#naming_pattern').qtip('option', { + 'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-red' + }); + $('#naming_pattern').qtip('toggle', true); + $('#naming_pattern').css('background-color', '#FFFFDD'); + } else { + $('#naming_pattern').qtip('option', { + 'content.text': 'This pattern is valid.', + 'style.classes': 'qtip-rounded qtip-shadow qtip-green' + }); + $('#naming_pattern').qtip('toggle', false); + $('#naming_pattern').css('background-color', '#FFFFFF'); + } + }); + } + + function setupNaming() { + // if it is a custom selection then show the text box + if ($('#name_presets :selected').val().toLowerCase() === "custom...") { + $('#naming_custom').show(); + } else { + $('#naming_custom').hide(); + $('#naming_pattern').val($('#name_presets :selected').attr('id')); + } + fillExamples(); + } + + function setupAbdNaming() { + // if it is a custom selection then show the text box + if ($('#name_abd_presets :selected').val().toLowerCase() === "custom...") { + $('#naming_abd_custom').show(); + } else { + $('#naming_abd_custom').hide(); + $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id')); + } + fillAbdExamples(); + } + + function setupSportsNaming() { + // if it is a custom selection then show the text box + if ($('#name_sports_presets :selected').val().toLowerCase() === "custom...") { + $('#naming_sports_custom').show(); + } else { + $('#naming_sports_custom').hide(); + $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id')); + } + fillSportsExamples(); + } + + function setupAnimeNaming() { + // if it is a custom selection then show the text box + if ($('#name_anime_presets :selected').val().toLowerCase() === "custom...") { + $('#naming_anime_custom').show(); + } else { + $('#naming_anime_custom').hide(); + $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id')); + } + fillAnimeExamples(); + } + + $('#unpack').on('change', function(){ + if(this.checked) { + isRarSupported(); + } else { + $('#unpack').qtip('toggle', false); + } + }); + + $('#name_presets').on('change', function(){ + setupNaming(); + }); + + $('#name_abd_presets').on('change', function(){ + setupAbdNaming(); + }); + + $('#naming_custom_abd').on('change', function(){ + setupAbdNaming(); + }); + + $('#name_sports_presets').on('change', function(){ + setupSportsNaming(); + }); + + $('#naming_custom_sports').on('change', function(){ + setupSportsNaming(); + }); + + $('#name_anime_presets').on('change', function(){ + setupAnimeNaming(); + }); + + $('#naming_custom_anime').on('change', function(){ + setupAnimeNaming(); + }); + + $('input[name="naming_anime"]').on('click', function(){ + setupAnimeNaming(); + }); + + $('#naming_multi_ep').change(fillExamples); + $('#naming_pattern').focusout(fillExamples); + $('#naming_pattern').keyup(function () { + typewatch(function () { + fillExamples(); + }, 500); + }); + + $('#naming_anime_multi_ep').change(fillAnimeExamples); + $('#naming_anime_pattern').focusout(fillAnimeExamples); + $('#naming_anime_pattern').keyup(function () { + typewatch(function () { + fillAnimeExamples(); + }, 500); + }); + + $('#naming_abd_pattern').focusout(fillExamples); + $('#naming_abd_pattern').keyup(function () { + typewatch(function () { + fillAbdExamples(); + }, 500); + }); + + $('#naming_sports_pattern').focusout(fillExamples); + $('#naming_sports_pattern').keyup(function () { + typewatch(function () { + fillSportsExamples(); + }, 500); + }); + + $('#naming_anime_pattern').focusout(fillExamples); + $('#naming_anime_pattern').keyup(function () { + typewatch(function () { + fillAnimeExamples(); + }, 500); + }); + + $('#show_naming_key').on('click', function(){ + $('#naming_key').toggle(); + }); + $('#show_naming_abd_key').on('click', function(){ + $('#naming_abd_key').toggle(); + }); + $('#show_naming_sports_key').on('click', function(){ + $('#naming_sports_key').toggle(); + }); + $('#show_naming_anime_key').on('click', function(){ + $('#naming_anime_key').toggle(); + }); + $('#do_custom').on('click', function(){ + $('#naming_pattern').val($('#name_presets :selected').attr('id')); + $('#naming_custom').show(); + $('#naming_pattern').focus(); + }); + setupNaming(); + setupAbdNaming(); + setupSportsNaming(); + setupAnimeNaming(); + + // -- start of metadata options div toggle code -- + $('#metadataType').on('change keyup', function () { + $(this).showHideMetadata(); + }); + + $.fn.showHideMetadata = function () { + $('.metadataDiv').each(function () { + var targetName = $(this).attr('id'); + var selectedTarget = $('#metadataType :selected').val(); + + if (selectedTarget === targetName) { + $(this).show(); + } else { + $(this).hide(); + } + }); + }; + //initialize to show the div + $(this).showHideMetadata(); + // -- end of metadata options div toggle code -- + + $('.metadata_checkbox').on('click', function(){ + $(this).refreshMetadataConfig(false); + }); + + $.fn.refreshMetadataConfig = function (first) { + var curMost = 0; + var curMostProvider = ''; + + $('.metadataDiv').each(function () { + var generatorName = $(this).attr('id'); + + var configArray = []; + var showMetadata = $("#" + generatorName + "_show_metadata").prop('checked'); + var episodeMetadata = $("#" + generatorName + "_episode_metadata").prop('checked'); + var fanart = $("#" + generatorName + "_fanart").prop('checked'); + var poster = $("#" + generatorName + "_poster").prop('checked'); + var banner = $("#" + generatorName + "_banner").prop('checked'); + var episodeThumbnails = $("#" + generatorName + "_episode_thumbnails").prop('checked'); + var seasonPosters = $("#" + generatorName + "_season_posters").prop('checked'); + var seasonBanners = $("#" + generatorName + "_season_banners").prop('checked'); + var seasonAllPoster = $("#" + generatorName + "_season_all_poster").prop('checked'); + var seasonAllBanner = $("#" + generatorName + "_season_all_banner").prop('checked'); + + configArray.push(showMetadata ? '1' : '0'); + configArray.push(episodeMetadata ? '1' : '0'); + configArray.push(fanart ? '1' : '0'); + configArray.push(poster ? '1' : '0'); + configArray.push(banner ? '1' : '0'); + configArray.push(episodeThumbnails ? '1' : '0'); + configArray.push(seasonPosters ? '1' : '0'); + configArray.push(seasonBanners ? '1' : '0'); + configArray.push(seasonAllPoster ? '1' : '0'); + configArray.push(seasonAllBanner ? '1' : '0'); + + var curNumber = 0; + for (var i = 0, len = configArray.length; i < len; i++) { + curNumber += parseInt(configArray[i]); + } + if (curNumber > curMost) { + curMost = curNumber; + curMostProvider = generatorName; + } + + $("#" + generatorName + "_eg_show_metadata").attr('class', showMetadata ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_episode_metadata").attr('class', episodeMetadata ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_episode_thumbnails").attr('class', episodeThumbnails ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_season_posters").attr('class', seasonPosters ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_season_banners").attr('class', seasonBanners ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_season_all_poster").attr('class', seasonAllPoster ? 'enabled' : 'disabled'); + $("#" + generatorName + "_eg_season_all_banner").attr('class', seasonAllBanner ? 'enabled' : 'disabled'); + $("#" + generatorName + "_data").val(configArray.join('|')); + + }); + + if (curMostProvider !== '' && first) { + $('#metadataType option[value=' + curMostProvider + ']').attr('selected', 'selected'); + $(this).showHideMetadata(); + } + }; + + $(this).refreshMetadataConfig(true); + $('img[title]').qtip({ + position: { + viewport: $(window), + at: 'bottom center', + my: 'top right' + }, + style: { + tip: { + corner: true, + method: 'polygon' + }, + classes: 'qtip-shadow qtip-dark' + } + }); + $('i[title]').qtip({ + position: { + viewport: $(window), + at: 'top center', + my: 'bottom center' + }, + style: { + tip: { + corner: true, + method: 'polygon' + }, + classes: 'qtip-rounded qtip-shadow ui-tooltip-sb' + } + }); + $('.custom-pattern,#unpack').qtip({ + content: 'validating...', + show: { + event: false, + ready: false + }, + hide: false, + position: { + viewport: $(window), + at: 'center left', + my: 'center right' + }, + style: { + tip: { + corner: true, + method: 'polygon' + }, + classes: 'qtip-rounded qtip-shadow qtip-red' + } + }); + }, + search: function() { + $('#config-components').tabs(); + $('#nzb_dir').fileBrowser({ title: 'Select .nzb black hole/watch location' }); + $('#torrent_dir').fileBrowser({ title: 'Select .torrent black hole/watch location' }); + $('#torrent_path').fileBrowser({ title: 'Select .torrent download location' }); + + function toggleTorrentTitle(){ + if ($('#use_torrents').prop('checked')){ + $('#no_torrents').show(); + } else { + $('#no_torrents').hide(); + } + } + + $.fn.nzbMethodHandler = function() { + var selectedProvider = $('#nzb_method :selected').val(), + blackholeSettings = '#blackhole_settings', + sabnzbdSettings = '#sabnzbd_settings', + testSABnzbd = '#testSABnzbd', + testSABnzbdResult = '#testSABnzbd_result', + nzbgetSettings = '#nzbget_settings'; + + $(blackholeSettings).hide(); + $(sabnzbdSettings).hide(); + $(testSABnzbd).hide(); + $(testSABnzbdResult).hide(); + $(nzbgetSettings).hide(); + + if (selectedProvider.toLowerCase() === 'blackhole') { + $(blackholeSettings).show(); + } else if (selectedProvider.toLowerCase() === 'nzbget') { + $(nzbgetSettings).show(); + } else { + $(sabnzbdSettings).show(); + $(testSABnzbd).show(); + $(testSABnzbdResult).show(); + } + }; + + $.fn.rtorrentScgi = function(){ + var selectedProvider = $('#torrent_method :selected').val(); + + if (selectedProvider.toLowerCase() === 'rtorrent') { + var hostname = $('#torrent_host').prop('value'); + var isMatch = hostname.substr(0, 7) === "scgi://"; + + if (isMatch) { + $('#torrent_username_option').hide(); + $('#torrent_username').prop('value', ''); + $('#torrent_password_option').hide(); + $('#torrent_password').prop('value', ''); + $('#torrent_auth_type_option').hide(); + $("#torrent_auth_type option[value=none]").attr('selected', 'selected'); + } else { + $('#torrent_username_option').show(); + $('#torrent_password_option').show(); + $('#torrent_auth_type_option').show(); + } + } + }; + + $.fn.torrentMethodHandler = function() { + $('#options_torrent_clients').hide(); + $('#options_torrent_blackhole').hide(); + + var selectedProvider = $('#torrent_method :selected').val(), + host = ' host:port', + username = ' username', + password = ' password', + client = '', + optionPanel = '#options_torrent_blackhole', + rpcurl = ' RPC URL'; + + if (selectedProvider.toLowerCase() !== 'blackhole') { + var label_warning_deluge = '#label_warning_deluge', + label_anime_warning_deluge = '#label_anime_warning_deluge', + host_desc_rtorrent = '#host_desc_rtorrent', + host_desc_torrent = '#host_desc_torrent', + torrent_verify_cert_option = '#torrent_verify_cert_option', + torrent_path_option = '#torrent_path_option', + torrent_seed_time_option = '#torrent_seed_time_option', + torrent_high_bandwidth_option = '#torrent_high_bandwidth_option', + torrent_label_option = '#torrent_label_option', + torrent_label_anime_option = '#torrent_label_anime_option', + path_synology = '#path_synology', + torrent_paused_option = '#torrent_paused_option'; + + $(label_warning_deluge).hide(); + $(label_anime_warning_deluge).hide(); + $(label_anime_warning_deluge).hide(); + $(host_desc_rtorrent).hide(); + $(host_desc_torrent).show(); + $(torrent_verify_cert_option).hide(); + $(torrent_verify_deluge).hide(); + $(torrent_verify_rtorrent).hide(); + $(torrent_auth_type_option).hide(); + $(torrent_path_option).show(); + $(torrent_path_option).find('.fileBrowser').show(); + $(torrent_seed_time_option).hide(); + $(torrent_high_bandwidth_option).hide(); + $(torrent_label_option).show(); + $(torrent_label_anime_option).show(); + $(path_synology).hide(); + $(torrent_paused_option).show(); + $(torrent_rpcurl_option).hide(); + $(this).rtorrentScgi(); + + if (selectedProvider.toLowerCase() === 'utorrent') { + client = 'uTorrent'; + $(torrent_path_option).hide(); + $('#torrent_seed_time_label').text('Minimum seeding time is'); + $(torrent_seed_time_option).show(); + $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)'); + } else if (selectedProvider.toLowerCase() === 'transmission'){ + client = 'Transmission'; + $('#torrent_seed_time_label').text('Stop seeding when inactive for'); + $(torrent_seed_time_option).show(); + $(torrent_high_bandwidth_option).show(); + $(torrent_label_option).hide(); + $(torrent_label_anime_option).hide(); + $(torrent_rpcurl_option).show(); + $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)'); + } else if (selectedProvider.toLowerCase() === 'deluge'){ + client = 'Deluge'; + $(torrent_verify_cert_option).show(); + $(torrent_verify_deluge).show(); + $(torrent_verify_rtorrent).hide(); + $(label_warning_deluge).show(); + $(label_anime_warning_deluge).show(); + $('#torrent_username_option').hide(); + $('#torrent_username').prop('value', ''); + $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)'); + } else if ('deluged' == selectedProvider){ + client = 'Deluge'; + $(torrent_verify_cert_option).hide(); + $(torrent_verify_deluge).hide(); + $(torrent_verify_rtorrent).hide(); + $(label_warning_deluge).show(); + $(label_anime_warning_deluge).show(); + $('#torrent_username_option').show(); + $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)'); + } else if ('download_station' == selectedProvider){ + client = 'Synology DS'; + $(torrent_label_option).hide(); + $(torrent_label_anime_option).hide(); + $('#torrent_paused_option').hide(); + $(torrent_path_option).find('.fileBrowser').hide(); + $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)'); + $(path_synology).show(); + } else if ('rtorrent' == selectedProvider){ + client = 'rTorrent'; + $(torrent_paused_option).hide(); + $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br> or https://localhost/rutorrent/plugins/httprpc/action.php)'); + $(torrent_verify_cert_option).show(); + $(torrent_verify_deluge).hide(); + $(torrent_verify_rtorrent).show(); + $(torrent_auth_type_option).show(); + } else if ('qbittorrent' == selectedProvider){ + client = 'qbittorrent'; + $(torrent_path_option).hide(); + $(torrent_label_option).hide(); + $(torrent_label_anime_option).hide(); + $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)'); + } else if ('mlnet' == selectedProvider){ + client = 'mlnet'; + $(torrent_path_option).hide(); + $(torrent_label_option).hide(); + $(torrent_verify_cert_option).hide(); + $(torrent_verify_deluge).hide(); + $(torrent_verify_rtorrent).hide(); + $(torrent_label_anime_option).hide(); + $(torrent_paused_option).hide(); + $('#host_desc_torrent').text('URL to your MLDonkey (e.g. http://localhost:4080)'); + } + $('#host_title').text(client + host); + $('#username_title').text(client + username); + $('#password_title').text(client + password); + $('#torrent_client').text(client); + $('#rpcurl_title').text(client + rpcurl); + optionPanel = '#options_torrent_clients'; + } + $(optionPanel).show(); + }; + + $('#nzb_method').change($(this).nzbMethodHandler); + + $(this).nzbMethodHandler(); + + $('#testSABnzbd').click(function(){ + $('#testSABnzbd_result').html(loading); + var sab_host = $('#sab_host').val(); + var sab_username = $('#sab_username').val(); + var sab_password = $('#sab_password').val(); + var sab_apiKey = $('#sab_apikey').val(); + + $.get(srRoot + '/home/testSABnzbd', {'host': sab_host, 'username': sab_username, 'password': sab_password, 'apikey': sab_apiKey}, function(data){ + $('#testSABnzbd_result').html(data); + }); + }); + + $('#torrent_method').change($(this).torrentMethodHandler); + + $(this).torrentMethodHandler(); + + $('#use_torrents').click(function(){ + toggleTorrentTitle(); + }); + + $('#test_torrent').click(function(){ + var torrent = {}; + $('#test_torrent_result').html(loading); + torrent.method = $('#torrent_method :selected').val(); + torrent.host = $('#torrent_host').val(); + torrent.username = $('#torrent_username').val(); + torrent.password = $('#torrent_password').val(); + + $.get(srRoot + '/home/testTorrent', { + 'torrent_method': torrent.method, + 'host': torrent.host, + 'username': torrent.username, + 'password': torrent.password + }, function(data){ + $('#test_torrent_result').html(data); + }); + }); + + $('#torrent_host').change($(this).rtorrentScgi); + }, + subtitles: function() { + $.fn.showHideServices = function() { + $('.serviceDiv').each(function(){ + var serviceName = $(this).attr('id'); + var selectedService = $('#editAService :selected').val(); + + if (selectedService+'Div' === serviceName){ + $(this).show(); + } else { + $(this).hide(); + } + }); + }; + + $.fn.addService = function(id, name, url, key, isDefault, showService) { + if (url.match('/$') === null) { url = url + '/'; } + + if ($('#service_order_list > #'+id).length === 0 && showService !== false) { + var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>'; + + $('#service_order_list').append(toAdd); + $('#service_order_list').sortable("refresh"); + } + }; + + $.fn.deleteService = function(id) { + $('#service_order_list > #'+id).remove(); + }; + + $.fn.refreshServiceList = function() { + var idArr = $("#service_order_list").sortable('toArray'); + var finalArr = []; + $.each(idArr, function(key, val) { + var checked = + $('#enable_'+val).prop('checked') ? '1' : '0'; + finalArr.push(val + ':' + checked); + }); + $("#service_order").val(finalArr.join(' ')); + }; + + $('#editAService').change(function(){ + $(this).showHideServices(); + }); + + $('.service_enabler').on('click', function(){ + $(this).refreshServiceList(); + }); + + // initialization stuff + $(this).showHideServices(); + + $("#service_order_list").sortable({ + placeholder: 'ui-state-highlight', + update: function() { + $(this).refreshServiceList(); + } + }); + + $("#service_order_list").disableSelection(); + }, + providers: function() { + // @TODO This function need to be filled with ConfigProviders.js but can't be as we've got scope issues currently. + console.log('This function need to be filled with ConfigProviders.js but can\'t be as we\'ve got scope issues currently.'); + } + }, + manage: { + init: function() { + $.makeRow = function(indexerId, season, episode, name, checked) { + var row = ''; + row += ' <tr class="' + $('#row_class').val() + ' show-' + indexerId + '">'; + row += ' <td class="tableleft" align="center"><input type="checkbox" class="' + indexerId + '-epcheck" name="' + indexerId + '-' + season + 'x' + episode + '"' + (checked ? ' checked' : '') + '></td>'; + row += ' <td>' + season + 'x' + episode + '</td>'; + row += ' <td class="tableright" style="width: 100%">' + name + '</td>'; + row += ' </tr>'; + + return row; + }; + }, + index: function() { + $("#massUpdateTable:has(tbody tr)").tablesorter({ + sortList: [[1,0]], + textExtraction: { + 2: function(node) { return $(node).find("span").text().toLowerCase(); }, + 3: function(node) { return $(node).find("img").attr("alt"); }, + 4: function(node) { return $(node).find("img").attr("alt"); }, + 5: function(node) { return $(node).find("img").attr("alt"); }, + 6: function(node) { return $(node).find("img").attr("alt"); }, + 7: function(node) { return $(node).find("img").attr("alt"); }, + 8: function(node) { return $(node).find("img").attr("alt"); }, + 9: function(node) { return $(node).find("img").attr("alt"); }, + }, + widgets: ['zebra'], + headers: { + 0: { sorter: false}, + 1: { sorter: 'showNames'}, + 2: { sorter: 'quality'}, + 3: { sorter: 'sports'}, + 4: { sorter: 'scene'}, + 5: { sorter: 'anime'}, + 6: { sorter: 'flatfold'}, + 7: { sorter: 'archive_firstmatch'}, + 8: { sorter: 'paused'}, + 9: { sorter: 'subtitle'}, + 10: { sorter: 'default_ep_status'}, + 11: { sorter: 'status'}, + 12: { sorter: false}, + 13: { sorter: false}, + 14: { sorter: false}, + 15: { sorter: false}, + 16: { sorter: false}, + 17: { sorter: false} + } + }); + }, + backlogOverview: function() { + $('#pickShow').change(function(){ + var id = $(this).val(); + if (id) { + $('html,body').animate({scrollTop: $('#show-' + id).offset().top -25},'slow'); + } + }); + }, + failedDownloads: function() { + $("#failedTable:has(tbody tr)").tablesorter({ + widgets: ['zebra'], + sortList: [[0,0]], + headers: { 3: { sorter: false } } + }); + $('#limit').change(function(){ + window.location.href = srRoot + '/manage/failedDownloads/?limit=' + $(this).val(); + }); + }, + massEdit: function() { + $('#location').fileBrowser({ title: 'Select Show Location' }); + }, + episodeStatuses: function() { + $('.allCheck').click(function(){ + var indexerId = $(this).attr('id').split('-')[1]; + $('.' + indexerId + '-epcheck').prop('checked', $(this).prop('checked')); + }); + + $('.get_more_eps').click(function(){ + var curIndexerId = $(this).attr('id'); + var checked = $('#allCheck-' + curIndexerId).prop('checked'); + var lastRow = $('tr#' + curIndexerId); + var clicked = $(this).attr('data-clicked'); + var action = $(this).attr('value'); + + if(!clicked) { + $.getJSON(srRoot+'/manage/showEpisodeStatuses',{ + indexer_id: curIndexerId, // jshint ignore:line + whichStatus: $('#oldStatus').val() + }, function (data) { + $.each(data, function(season,eps){ + $.each(eps, function(episode, name) { + //alert(season+'x'+episode+': '+name); + lastRow.after($.makeRow(curIndexerId, season, episode, name, checked)); + }); + }); + }); + $(this).attr('data-clicked',1); + $(this).prop('value', 'Collapse'); + } else { + if (action.toLowerCase() === 'collapse') { + $('table tr').filter('.show-' + curIndexerId).hide(); + $(this).prop('value', 'Expand'); + } else if (action.toLowerCase() === 'expand') { + $('table tr').filter('.show-' + curIndexerId).show(); + $(this).prop('value', 'Collapse'); + } + } + }); + + // selects all visible episode checkboxes. + $('.selectAllShows').click(function(){ + $('.allCheck').each(function(){ + this.checked = true; + }); + $('input[class*="-epcheck"]').each(function(){ + this.checked = true; + }); + }); + + // clears all visible episode checkboxes and the season selectors + $('.unselectAllShows').click(function(){ + $('.allCheck').each(function(){ + this.checked = false; + }); + $('input[class*="-epcheck"]').each(function(){ + this.checked = false; + }); + }); + }, + subtitleMissed: function() { + $('.allCheck').click(function(){ + var indexerId = $(this).attr('id').split('-')[1]; + $('.'+indexerId+'-epcheck').prop('checked', $(this).prop('checked')); + }); + + $('.get_more_eps').click(function(){ + var indexerId = $(this).attr('id'); + var checked = $('#allCheck-'+indexerId).prop('checked'); + var lastRow = $('tr#'+indexerId); + var clicked = $(this).attr('data-clicked'); + var action = $(this).attr('value'); + + if (!clicked) { + $.getJSON(srRoot + '/manage/showSubtitleMissed', { + indexer_id: indexerId, // jshint ignore:line + whichSubs: $('#selectSubLang').val() + }, function(data) { + $.each(data, function(season, eps) { + $.each(eps, function(episode, data) { + lastRow.after($.makeRow(indexerId, season, episode, data.name, data.subtitles, checked)); + }); + }); + }); + $(this).attr('data-clicked', 1); + $(this).prop('value', 'Collapse'); + } else { + if (action === 'Collapse') { + $('table tr').filter('.show-' + indexerId).hide(); + $(this).prop('value', 'Expand'); + } else if (action === 'Expand') { + $('table tr').filter('.show-' + indexerId).show(); + $(this).prop('value', 'Collapse'); + } + } + }); + + // selects all visible episode checkboxes. + $('.selectAllShows').click(function(){ + $('.allCheck').each(function(){ + this.checked = true; + }); + $('input[class*="-epcheck"]').each(function(){ + this.checked = true; + }); + }); + + // clears all visible episode checkboxes and the season selectors + $('.unselectAllShows').click(function(){ + $('.allCheck').each(function(){ + this.checked = false; + }); + $('input[class*="-epcheck"]').each(function(){ + this.checked = false; + }); + }); + } + } +}; + +var UTIL = { + exec: function(controller, action) { + var ns = SICKRAGE; + action = (action === undefined) ? "init" : action; + + if (controller !== "" && ns[controller] && typeof ns[controller][action] === "function") { + ns[controller][action](); + } + }, + init: function() { + var body = document.body, + controller = body.getAttribute("data-controller"), + action = body.getAttribute("data-action"); + + UTIL.exec("common"); + UTIL.exec(controller); + UTIL.exec(controller, action); + } +}; + +$(document).ready(UTIL.init); diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js new file mode 100644 index 0000000000000000000000000000000000000000..07c6080f5cac0873cd01ac7aea2ca82773f1a384 Binary files /dev/null and b/gui/slick/js/core.min.js differ diff --git a/gui/slick/js/displayShow.js b/gui/slick/js/displayShow.js deleted file mode 100644 index 138abad496103bb89f8775aadf5aa922474c2e53..0000000000000000000000000000000000000000 --- a/gui/slick/js/displayShow.js +++ /dev/null @@ -1,247 +0,0 @@ -$(document).ready(function () { - - $('#srRoot').ajaxEpSearch({'colorRow': true}); - - $('#srRoot').ajaxEpSubtitlesSearch(); - - $('#seasonJump').on('change', function(){ - var id = $('#seasonJump option:selected').val(); - if (id && id != 'jump') { - var season = $('#seasonJump option:selected').data('season'); - $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow'); - $('#collapseSeason-' + season).collapse('show'); - location.hash = id; - } - $(this).val('jump'); - }); - - $("#prevShow").on('click', function(){ - $('#pickShow option:selected').prev('option').prop('selected', 'selected'); - $("#pickShow").change(); - }); - - $("#nextShow").on('click', function(){ - $('#pickShow option:selected').next('option').prop('selected', 'selected'); - $("#pickShow").change(); - }); - - $('#changeStatus').on('click', function(){ - var srRoot = $('#srRoot').val(); - var epArr = []; - - $('.epCheck').each(function () { - if (this.checked === true) epArr.push($(this).attr('id')); - }); - - if (epArr.length === 0) return false; - - url = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val(); - window.location.href = url; - }); - - $('.seasonCheck').on('click', function(){ - var seasCheck = this; - var seasNo = $(seasCheck).attr('id'); - - $('#collapseSeason-' + seasNo).collapse('show'); - $('.epCheck:visible').each(function () { - var epParts = $(this).attr('id').split('x'); - if (epParts[0] == seasNo) this.checked = seasCheck.checked; - }); - }); - - var lastCheck = null; - $('.epCheck').on('click', function (event) { - - if (!lastCheck || !event.shiftKey) { - lastCheck = this; - return; - } - - var check = this; - var found = 0; - - $('.epCheck').each(function() { - switch (found) { - case 2: - return false; - case 1: - this.checked = lastCheck.checked; - } - - if (this == check || this == lastCheck) - found++; - }); - - lastClick = this; - }); - - // selects all visible episode checkboxes. - $('.seriesCheck').on('click', function () { - $('.epCheck:visible').each(function () { - this.checked = true; - }); - $('.seasonCheck:visible').each(function () { - this.checked = true; - }); - }); - - // clears all visible episode checkboxes and the season selectors - $('.clearAll').on('click', function () { - $('.epCheck:visible').each(function () { - this.checked = false; - }); - $('.seasonCheck:visible').each(function () { - this.checked = false; - }); - }); - - // handle the show selection dropbox - $('#pickShow').on('change', function () { - var srRoot = $('#srRoot').val(); - var val = $(this).val(); - if (val === 0) return; - url = srRoot + '/home/displayShow?show=' + val; - window.location.href = url; - }); - - // show/hide different types of rows when the checkboxes are changed - $("#checkboxControls input").change(function (e) { - var whichClass = $(this).attr('id'); - $(this).showHideRows(whichClass); - }); - - // initially show/hide all the rows according to the checkboxes - $("#checkboxControls input").each(function (e) { - var status = this.checked; - $("tr." + $(this).attr('id')).each(function (e) { - if (status) { - $(this).show(); - } else { - $(this).hide(); - } - }); - }); - - $.fn.showHideRows = function(whichClass) { - var status = $('#checkboxControls > input, #' + whichClass).prop('checked'); - $("tr." + whichClass).each(function (e) { - if (status) { - $(this).show(); - } else { - $(this).hide(); - } - }); - - // hide season headers with no episodes under them - $('tr.seasonheader').each(function () { - var numRows = 0; - var seasonNo = $(this).attr('id'); - $('tr.' + seasonNo + ' :visible').each(function () { - numRows++; - }); - if (numRows === 0) { - $(this).hide(); - $('#' + seasonNo + '-cols').hide(); - } else { - $(this).show(); - $('#' + seasonNo + '-cols').show(); - } - }); - }; - - function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) { - var srRoot = $('#srRoot').val(); - var showId = $('#showID').val(); - var indexer = $('#indexer').val(); - - if (sceneSeason === '') sceneSeason = null; - if (sceneEpisode === '') sceneEpisode = null; - - $.getJSON(srRoot + '/home/setSceneNumbering',{ - 'show': showId, - 'indexer': indexer, - 'forSeason': forSeason, - 'forEpisode': forEpisode, - 'sceneSeason': sceneSeason, - 'sceneEpisode': sceneEpisode - }, function(data) { - // Set the values we get back - if (data.sceneSeason === null || data.sceneEpisode === null) { - $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(''); - } else { - $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode); - } - if (!data.success) { - if (data.errorMessage) { - alert(data.errorMessage); - } else { - alert('Update failed.'); - } - } - }); - } - - function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) { - var srRoot = $('#srRoot').val(); - var showId = $('#showID').val(); - var indexer = $('#indexer').val(); - - if (sceneAbsolute === '') sceneAbsolute = null; - - $.getJSON(srRoot + '/home/setSceneNumbering', { - 'show': showId, - 'indexer': indexer, - 'forAbsolute': forAbsolute, - 'sceneAbsolute': sceneAbsolute - }, - function(data) { - // Set the values we get back - if (data.sceneAbsolute === null) { - $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(''); - } else { - $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute); - } - if (!data.success) { - if (data.errorMessage) { - alert(data.errorMessage); - } else { - alert('Update failed.'); - } - } - }); - } - - $('.sceneSeasonXEpisode').on('change', function() { - // Strip non-numeric characters - $(this).val($(this).val().replace(/[^0-9xX]*/g, '')); - var forSeason = $(this).attr('data-for-season'); - var forEpisode = $(this).attr('data-for-episode'); - var showId = $('#showID').val(); - var indexer = $('#indexer').val(); - - //var sceneEpisode = $('#sceneEpisode_' + showId + '_' + forSeason +'_' + forEpisode).val(); - var m = $(this).val().match(/^(\d+)x(\d+)$/i); - var sceneSeason = null, sceneEpisode = null; - if (m) { - sceneSeason = m[1]; - sceneEpisode = m[2]; - } - setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode); - }); - - $('.sceneAbsolute').on('change', function() { - // Strip non-numeric characters - $(this).val($(this).val().replace(/[^0-9xX]*/g, '')); - var forAbsolute = $(this).attr('data-for-absolute'); - var showId = $('#showID').val(); - var indexer = $('#indexer').val(); - - var m = $(this).val().match(/^(\d{1,3})$/i); - var sceneAbsolute = null; - if (m) { - sceneAbsolute = m[1]; - } - setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute); - }); -}); diff --git a/gui/slick/js/failedDownloads.js b/gui/slick/js/failedDownloads.js index 62b2fea48d175a327bd3ce63adca11ccb7406195..f599e41295952278058651f016dc04ea31bad2eb 100644 --- a/gui/slick/js/failedDownloads.js +++ b/gui/slick/js/failedDownloads.js @@ -8,10 +8,9 @@ $(document).ready(function(){ } }); - if (removeArr.length === 0) return false; + if (removeArr.length === 0) { return false; } - url = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|'); - window.location.href = url; + window.location.href = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|'); }); $('.bulkCheck').on('click', function(){ @@ -23,26 +22,29 @@ $(document).ready(function(){ }); }); - $('.removeCheck').forEach(function(name) { - var lastCheck = null; - $(name).click(function(event) { - if(!lastCheck || !event.shiftKey) { - lastCheck = this; - return; - } + if($('.removeCheck').length){ + $('.removeCheck').each(function(name) { + var lastCheck = null; + $(name).click(function(event) { + if(!lastCheck || !event.shiftKey) { + lastCheck = this; + return; + } - var check = this; - var found = 0; + var check = this; + var found = 0; - $(name+':visible').each(function() { - switch (found) { - case 2: return false; - case 1: - this.checked = lastCheck.checked; - } + $(name+':visible').each(function() { + switch (found) { + case 2: return false; + case 1: + this.checked = lastCheck.checked; + } - if (this == check || this == lastCheck) found++; + if (this === check || this === lastCheck) { found++; } + }); }); }); - }); + } + }); diff --git a/gui/slick/js/lib/bootbox.min.js b/gui/slick/js/lib/bootbox.min.js deleted file mode 100644 index 0dc0cbd5f42ee1df3ab6568b77f0f6366329b2e6..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/bootbox.min.js and /dev/null differ diff --git a/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js b/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js deleted file mode 100644 index 4cffbbccde68a12245af48232e3da4692c36f983..0000000000000000000000000000000000000000 --- a/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js +++ /dev/null @@ -1,8 +0,0 @@ -/** -* bootstrap-formhelpers.js v2.3.0 by @vincentlamanna -* Copyright 2013 Vincent Lamanna -* http://www.apache.org/licenses/LICENSE-2.0 -*/ -if(!jQuery)throw new Error("Bootstrap Form Helpers requires jQuery");var BFHCountriesList={AF:"Afghanistan",AL:"Albania",DZ:"Algeria",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AQ:"Antarctica",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia",AW:"Aruba",AU:"Australia",AT:"Austria",AZ:"Azerbaijan",BH:"Bahrain",BD:"Bangladesh",BB:"Barbados",BY:"Belarus",BE:"Belgium",BZ:"Belize",BJ:"Benin",BM:"Bermuda",BT:"Bhutan",BO:"Bolivia",BA:"Bosnia and Herzegovina",BW:"Botswana",BV:"Bouvet Island",BR:"Brazil",IO:"British Indian Ocean Territory",VG:"British Virgin Islands",BN:"Brunei",BG:"Bulgaria",BF:"Burkina Faso",BI:"Burundi",CI:"Côte d'Ivoire",KH:"Cambodia",CM:"Cameroon",CA:"Canada",CV:"Cape Verde",KY:"Cayman Islands",CF:"Central African Republic",TD:"Chad",CL:"Chile",CN:"China",CX:"Christmas Island",CC:"Cocos (Keeling) Islands",CO:"Colombia",KM:"Comoros",CG:"Congo",CK:"Cook Islands",CR:"Costa Rica",HR:"Croatia",CU:"Cuba",CY:"Cyprus",CZ:"Czech Republic",CD:"Democratic Republic of the Congo",DK:"Denmark",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic",TP:"East Timor",EC:"Ecuador",EG:"Egypt",SV:"El Salvador",GQ:"Equatorial Guinea",ER:"Eritrea",EE:"Estonia",ET:"Ethiopia",FO:"Faeroe Islands",FK:"Falkland Islands",FJ:"Fiji",FI:"Finland",MK:"Former Yugoslav Republic of Macedonia",FR:"France",FX:"France, Metropolitan",GF:"French Guiana",PF:"French Polynesia",TF:"French Southern Territories",GA:"Gabon",GE:"Georgia",DE:"Germany",GH:"Ghana",GI:"Gibraltar",GR:"Greece",GL:"Greenland",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea",GW:"Guinea-Bissau",GY:"Guyana",HT:"Haiti",HM:"Heard and Mc Donald Islands",HN:"Honduras",HK:"Hong Kong",HU:"Hungary",IS:"Iceland",IN:"India",ID:"Indonesia",IR:"Iran",IQ:"Iraq",IE:"Ireland",IL:"Israel",IT:"Italy",JM:"Jamaica",JP:"Japan",JO:"Jordan",KZ:"Kazakhstan",KE:"Kenya",KI:"Kiribati",KW:"Kuwait",KG:"Kyrgyzstan",LA:"Laos",LV:"Latvia",LB:"Lebanon",LS:"Lesotho",LR:"Liberia",LY:"Libya",LI:"Liechtenstein",LT:"Lithuania",LU:"Luxembourg",MO:"Macau",MG:"Madagascar",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania",MU:"Mauritius",YT:"Mayotte",MX:"Mexico",FM:"Micronesia",MD:"Moldova",MC:"Monaco",MN:"Mongolia",ME:"Montenegro",MS:"Montserrat",MA:"Morocco",MZ:"Mozambique",MM:"Myanmar",NA:"Namibia",NR:"Nauru",NP:"Nepal",NL:"Netherlands",AN:"Netherlands Antilles",NC:"New Caledonia",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",KP:"North Korea",MP:"Northern Marianas",NO:"Norway",OM:"Oman",PK:"Pakistan",PW:"Palau",PS:"Palestine",PA:"Panama",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru",PH:"Philippines",PN:"Pitcairn Islands",PL:"Poland",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar",RE:"Reunion",RO:"Romania",RU:"Russia",RW:"Rwanda",ST:"São Tomé and Príncipe",SH:"Saint Helena",PM:"St. Pierre and Miquelon",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",SA:"Saudi Arabia",SN:"Senegal",RS:"Serbia",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SK:"Slovakia",SI:"Slovenia",SB:"Solomon Islands",SO:"Somalia",ZA:"South Africa",GS:"South Georgia and the South Sandwich Islands",KR:"South Korea",ES:"Spain",LK:"Sri Lanka",SD:"Sudan",SR:"Suriname",SJ:"Svalbard and Jan Mayen Islands",SZ:"Swaziland",SE:"Sweden",CH:"Switzerland",SY:"Syria",TW:"Taiwan",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand",BS:"The Bahamas",GM:"The Gambia",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia",TR:"Turkey",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",VI:"US Virgin Islands",UG:"Uganda",UA:"Ukraine",AE:"United Arab Emirates",GB:"United Kingdom",US:"United States",UM:"United States Minor Outlying Islands",UY:"Uruguay",UZ:"Uzbekistan",VU:"Vanuatu",VA:"Vatican City",VE:"Venezuela",VN:"Vietnam",WF:"Wallis and Futuna Islands",EH:"Western Sahara",YE:"Yemen",ZM:"Zambia",ZW:"Zimbabwe"},BFHCurrenciesList={AED:{label:"United Arab Emirates dirham",currencyflag:"",symbol:"د.إ"},AFN:{label:"Afghan afghani",currencyflag:"",symbol:"؋"},ALL:{label:"Albanian lek",currencyflag:"",symbol:"L"},AMD:{label:"Armenian dram",currencyflag:"",symbol:"դր"},AOA:{label:"Angolan kwanza",currencyflag:"",symbol:"Kz"},ARS:{label:"Argentine peso",currencyflag:"",symbol:"$"},AUD:{label:"Australian dollar",currencyflag:"AUD",symbol:"$"},AWG:{label:"Aruban florin",currencyflag:"",symbol:"ƒ"},AZN:{label:"Azerbaijani manat",currencyflag:"",symbol:""},BAM:{label:"Bosnia and Herzegovina convertible mark",currencyflag:"",symbol:"KM"},BBD:{label:"Barbadian dollar",currencyflag:"",symbol:"$"},BDT:{label:"Bangladeshi taka",currencyflag:"",symbol:"৳"},BGN:{label:"Bulgarian lev",currencyflag:"",symbol:"лв"},BHD:{label:"Bahraini dinar",currencyflag:"",symbol:".د.ب"},BIF:{label:"Burundian franc",currencyflag:"",symbol:"Fr"},BMD:{label:"Bermudian dollar",currencyflag:"",symbol:"$"},BND:{label:"Brunei dollar",currencyflag:"",symbol:"$"},BOB:{label:"Bolivian boliviano",currencyflag:"",symbol:"Bs"},BRL:{label:"Brazilian real",currencyflag:"",symbol:"R$"},BSD:{label:"Bahamian dollar",currencyflag:"",symbol:"$"},BTN:{label:"Bhutanese ngultrum",currencyflag:"",symbol:"Nu"},BWP:{label:"Botswana pula",currencyflag:"",symbol:"P"},BYR:{label:"Belarusian ruble",currencyflag:"",symbol:"Br"},BZD:{label:"Belize dollar",currencyflag:"",symbol:"$"},CAD:{label:"Canadian dollar",currencyflag:"",symbol:"$"},CDF:{label:"Congolese franc",currencyflag:"",symbol:"Fr"},CHF:{label:"Swiss franc",currencyflag:"CHF",symbol:"Fr"},CLP:{label:"Chilean peso",currencyflag:"",symbol:"$"},CNY:{label:"Chinese yuan",currencyflag:"",symbol:"¥"},COP:{label:"Colombian peso",currencyflag:"",symbol:"$"},CRC:{label:"Costa Rican colón",currencyflag:"",symbol:"₡"},CUP:{label:"Cuban convertible peso",currencyflag:"",symbol:"$"},CVE:{label:"Cape Verdean escudo",currencyflag:"",symbol:"$"},CZK:{label:"Czech koruna",currencyflag:"",symbol:"Kč"},DJF:{label:"Djiboutian franc",currencyflag:"",symbol:"Fr"},DKK:{label:"Danish krone",currencyflag:"DKK",symbol:"kr"},DOP:{label:"Dominican peso",currencyflag:"",symbol:"$"},DZD:{label:"Algerian dinar",currencyflag:"",symbol:"د.ج"},EGP:{label:"Egyptian pound",currencyflag:"",symbol:"ج.م"},ERN:{label:"Eritrean nakfa",currencyflag:"",symbol:"Nfk"},ETB:{label:"Ethiopian birr",currencyflag:"",symbol:"Br"},EUR:{label:"Euro",currencyflag:"EUR",symbol:"€"},FJD:{label:"Fijian dollar",currencyflag:"",symbol:"$"},FKP:{label:"Falkland Islands pound",currencyflag:"",symbol:"£"},GBP:{label:"British pound",currencyflag:"",symbol:"£"},GEL:{label:"Georgian lari",currencyflag:"",symbol:"ლ"},GHS:{label:"Ghana cedi",currencyflag:"",symbol:"₵"},GMD:{label:"Gambian dalasi",currencyflag:"",symbol:"D"},GNF:{label:"Guinean franc",currencyflag:"",symbol:"Fr"},GTQ:{label:"Guatemalan quetzal",currencyflag:"",symbol:"Q"},GYD:{label:"Guyanese dollar",currencyflag:"",symbol:"$"},HKD:{label:"Hong Kong dollar",currencyflag:"",symbol:"$"},HNL:{label:"Honduran lempira",currencyflag:"",symbol:"L"},HRK:{label:"Croatian kuna",currencyflag:"",symbol:"kn"},HTG:{label:"Haitian gourde",currencyflag:"",symbol:"G"},HUF:{label:"Hungarian forint",currencyflag:"",symbol:"Ft"},IDR:{label:"Indonesian rupiah",currencyflag:"",symbol:"Rp"},ILS:{label:"Israeli new shekel",currencyflag:"",symbol:"₪"},IMP:{label:"Manx pound",currencyflag:"",symbol:"£"},INR:{label:"Indian rupee",currencyflag:"",symbol:""},IQD:{label:"Iraqi dinar",currencyflag:"",symbol:"ع.د"},IRR:{label:"Iranian rial",currencyflag:"",symbol:"﷼"},ISK:{label:"Icelandic króna",currencyflag:"",symbol:"kr"},JEP:{label:"Jersey pound",currencyflag:"",symbol:"£"},JMD:{label:"Jamaican dollar",currencyflag:"",symbol:"$"},JOD:{label:"Jordanian dinar",currencyflag:"",symbol:"د.ا"},JPY:{label:"Japanese yen",currencyflag:"",symbol:"¥"},KES:{label:"Kenyan shilling",currencyflag:"",symbol:"Sh"},KGS:{label:"Kyrgyzstani som",currencyflag:"",symbol:"лв"},KHR:{label:"Cambodian riel",currencyflag:"",symbol:"៛"},KMF:{label:"Comorian franc",currencyflag:"",symbol:"Fr"},KPW:{label:"North Korean won",currencyflag:"",symbol:"₩"},KRW:{label:"South Korean won",currencyflag:"",symbol:"₩"},KWD:{label:"Kuwaiti dinar",currencyflag:"",symbol:"د.ك"},KYD:{label:"Cayman Islands dollar",currencyflag:"",symbol:"$"},KZT:{label:"Kazakhstani tenge",currencyflag:"",symbol:"₸"},LAK:{label:"Lao kip",currencyflag:"",symbol:"₭"},LBP:{label:"Lebanese pound",currencyflag:"",symbol:"ل.ل"},LKR:{label:"Sri Lankan rupee",currencyflag:"",symbol:"Rs"},LRD:{label:"Liberian dollar",currencyflag:"",symbol:"$"},LSL:{label:"Lesotho loti",currencyflag:"",symbol:"L"},LTL:{label:"Lithuanian litas",currencyflag:"",symbol:"Lt"},LVL:{label:"Latvian lats",currencyflag:"",symbol:"Ls"},LYD:{label:"Libyan dinar",currencyflag:"",symbol:"ل.د"},MAD:{label:"Moroccan dirham",currencyflag:"",symbol:"د.م."},MDL:{label:"Moldovan leu",currencyflag:"",symbol:"L"},MGA:{label:"Malagasy ariary",currencyflag:"",symbol:"Ar"},MKD:{label:"Macedonian denar",currencyflag:"",symbol:"ден"},MMK:{label:"Burmese kyat",currencyflag:"",symbol:"Ks"},MNT:{label:"Mongolian tögrög",currencyflag:"",symbol:"₮"},MOP:{label:"Macanese pataca",currencyflag:"",symbol:"P"},MRO:{label:"Mauritanian ouguiya",currencyflag:"",symbol:"UM"},MUR:{label:"Mauritian rupee",currencyflag:"",symbol:"Rs"},MVR:{label:"Maldivian rufiyaa",currencyflag:"",symbol:".ރ"},MWK:{label:"Malawian kwacha",currencyflag:"",symbol:"MK"},MXN:{label:"Mexican peso",currencyflag:"",symbol:"$"},MYR:{label:"Malaysian ringgit",currencyflag:"",symbol:"MR"},MZN:{label:"Mozambican metical",currencyflag:"",symbol:"MT"},NAD:{label:"Namibian dollar",currencyflag:"",symbol:"$"},NGN:{label:"Nigerian naira",currencyflag:"",symbol:"₦"},NIO:{label:"Nicaraguan córdoba",currencyflag:"",symbol:"C$"},NOK:{label:"Norwegian krone",currencyflag:"",symbol:"kr"},NPR:{label:"Nepalese rupee",currencyflag:"",symbol:"Rs"},NZD:{label:"New Zealand dollar",currencyflag:"",symbol:"$"},OMR:{label:"Omani rial",currencyflag:"",symbol:"ر.ع."},PAB:{label:"Panamanian balboa",currencyflag:"",symbol:"B/."},PEN:{label:"Peruvian nuevo sol",currencyflag:"",symbol:"S/."},PGK:{label:"Papua New Guinean kina",currencyflag:"",symbol:"K"},PHP:{label:"Philippine peso",currencyflag:"",symbol:"₱"},PKR:{label:"Pakistani rupee",currencyflag:"",symbol:"Rs"},PLN:{label:"Polish złoty",currencyflag:"",symbol:"zł"},PRB:{label:"Transnistrian ruble",currencyflag:"",symbol:"р."},PYG:{label:"Paraguayan guaraní",currencyflag:"",symbol:"₲"},QAR:{label:"Qatari riyal",currencyflag:"",symbol:"ر.ق"},RON:{label:"Romanian leu",currencyflag:"",symbol:"L"},RSD:{label:"Serbian dinar",currencyflag:"",symbol:"дин"},RUB:{label:"Russian ruble",currencyflag:"",symbol:"руб."},RWF:{label:"Rwandan franc",currencyflag:"",symbol:"Fr"},SAR:{label:"Saudi riyal",currencyflag:"",symbol:"ر.س"},SBD:{label:"Solomon Islands dollar",currencyflag:"",symbol:"$"},SCR:{label:"Seychellois rupee",currencyflag:"",symbol:"Rs"},SDG:{label:"Singapore dollar",currencyflag:"",symbol:"$"},SEK:{label:"Swedish krona",currencyflag:"",symbol:"kr"},SGD:{label:"Singapore dollar",currencyflag:"",symbol:"$"},SHP:{label:"Saint Helena pound",currencyflag:"",symbol:"£"},SLL:{label:"Sierra Leonean leone",currencyflag:"",symbol:"Le"},SOS:{label:"Somali shilling",currencyflag:"",symbol:"Sh"},SRD:{label:"Surinamese dollar",currencyflag:"",symbol:"$"},SSP:{label:"South Sudanese pound",currencyflag:"",symbol:"£"},STD:{label:"São Tomé and Príncipe dobra",currencyflag:"",symbol:"Db"},SVC:{label:"Salvadoran colón",currencyflag:"",symbol:"₡"},SYP:{label:"Syrian pound",currencyflag:"",symbol:"£"},SZL:{label:"Swazi lilangeni",currencyflag:"",symbol:"L"},THB:{label:"Thai baht",currencyflag:"",symbol:"฿"},TJS:{label:"Tajikistani somoni",currencyflag:"",symbol:"SM"},TMT:{label:"Turkmenistan manat",currencyflag:"",symbol:"m"},TND:{label:"Tunisian dinar",currencyflag:"",symbol:"د.ت"},TOP:{label:"Tongan paʻanga",currencyflag:"",symbol:"T$"},TRY:{label:"Turkish lira",currencyflag:"",symbol:"₺"},TTD:{label:"Trinidad and Tobago dollar",currencyflag:"",symbol:"$"},TWD:{label:"New Taiwan dollar",currencyflag:"",symbol:"$"},TZS:{label:"Tanzanian shilling",currencyflag:"",symbol:"Sh"},UAH:{label:"Ukrainian hryvnia",currencyflag:"",symbol:"₴"},UGX:{label:"Ugandan shilling",currencyflag:"",symbol:"Sh"},USD:{label:"United States dollar",currencyflag:"",symbol:"$"},UYU:{label:"Uruguayan peso",currencyflag:"",symbol:"$"},UZS:{label:"Uzbekistani som",currencyflag:"",symbol:"лв"},VEF:{label:"Venezuelan bolívar",currencyflag:"",symbol:"Bs F"},VND:{label:"Vietnamese đồng",currencyflag:"",symbol:"₫"},VUV:{label:"Vanuatu vatu",currencyflag:"",symbol:"Vt"},WST:{label:"Samoan tālā",currencyflag:"",symbol:"T"},XAF:{label:"Central African CFA franc",currencyflag:"XAF",symbol:"Fr"},XCD:{label:"East Caribbean dollar",currencyflag:"XCD",symbol:"$"},XOF:{label:"West African CFA franc",currencyflag:"XOF",symbol:"Fr"},XPF:{label:"CFP franc",currencyflag:"XPF",symbol:"Fr"},YER:{label:"Yemeni rial",currencyflag:"",symbol:"﷼"},ZAR:{label:"South African rand",currencyflag:"ZAR",symbol:"R"},ZMW:{label:"Zambian kwacha",currencyflag:"",symbol:"ZK"},ZWL:{label:"Zimbabwean dollar",currencyflag:"",symbol:"$"}},BFHMonthsList=["January","February","March","April","May","June","July","August","September","October","November","December"],BFHDaysList=["SUN","MON","TUE","WED","THU","FRI","SAT"],BFHDayOfWeekStart=0,BFHFontsList={"Andale Mono":'"Andale Mono", AndaleMono, monospace',Arial:'Arial, "Helvetica Neue", Helvetica, sans-serif',"Arial Black":'"Arial Black", "Arial Bold", Gadget, sans-serif',"Arial Narrow":'"Arial Narrow", Arial, sans-serif',"Arial Rounded MT Bold":'"Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif',"Avant Garde":'"Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif',Baskerville:'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',"Big Caslon":'"Big Caslon", "Book Antiqua", "Palatino Linotype", Georgia, serif',"Bodoni MT":'"Bodoni MT", Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',"Book Antiqua":'"Book Antiqua", Palatino, "Palatino Linotype", "Palatino LT STD", Georgia, serif',"Brush Script MT":'"Brush Script MT", cursive',Calibri:'Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif',"Calisto MT":'"Calisto MT", "Bookman Old Style", Bookman, "Goudy Old Style", Garamond, "Hoefler Text", "Bitstream Charter", Georgia, serif',Cambrio:"Cambria, Georgia, serif",Candara:'Candara, Calibri, Segoe, "Segoe UI", Optima, Arial, sans-serif',"Century Gothic":'"Century Gothic", CenturyGothic, AppleGothic, sans-serif',Consolas:"Consolas, monaco, monospace",Copperplate:'Copperplate, "Copperplate Gothic Light", fantasy',"Courier New":'"Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace',Didot:'Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',"Franklin Gothic Medium":'"Franklin Gothic Medium", "Franklin Gothic", "ITC Franklin Gothic", Arial, sans-serif',Futura:'Futura, "Trebuchet MS", Arial, sans-serif',Garamond:'Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',Geneva:"Geneva, Tahoma, Verdana, sans-serif",Georgia:'Georgia, Times, "Times New Roman", serif',"Gill Sans":'"Gill Sans", "Gill Sans MT", Calibri, sans-serif',"Goudy Old Style":'"Goudy Old Style", Garamond, "Big Caslon", "Times New Roman", serif',Helvetica:'"Helvetica Neue", Helvetica, Arial, sans-serif',"Hoefler Text":'"Hoefler Text", "Baskerville old face", Garamond, "Times New Roman", serif',Impact:'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans serif',"Lucida Bright":'"Lucida Bright", Georgia, serif',"Lucida Console":'"Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace',"Lucida Sans Typewriter":'"Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace',"Lucida Grande":'"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif',Monaco:'Monaco, Consolas, "Lucida Console", monospace',Optima:'Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif',Palatino:'Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif',Papyrus:"Papyrus, fantasy",Perpetua:'Perpetua, Baskerville, "Big Caslon", "Palatino Linotype", Palatino, "URW Palladio L", "Nimbus Roman No9 L", serif',Rockwell:'Rockwell, "Courier Bold", Courier, Georgia, Times, "Times New Roman", serif',"Rockwell Extra Bold":'"Rockwell Extra Bold", "Rockwell Bold", monospace',"Segoe UI":'"Segoe UI", Frutiger, "Frutiger Linotype',Tahoma:"Tahoma, Verdana, Segoe, sans-serif","Times New Roman":'TimesNewRoman, "Times New Roman", Times, Baskerville, Georgia, serif',"Trebuchet MS":'"Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif',Verdana:"Verdana, Geneva, sans-serif"},BFHFontSizesList={8:"8px",9:"9px",10:"10px",11:"11px",12:"12px",14:"14px",16:"16px",18:"18px",20:"20px",24:"24px",28:"28px",36:"36px",48:"48px"},BFHGoogleFontsList={kind:"webfonts#webfontList",items:[{kind:"webfonts#webfont",family:"ABeeZee",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Abel",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Abril Fatface",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aclonica",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Acme",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Actor",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Adamina",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Advent Pro",variants:["100","200","300","regular","500","600","700"],subsets:["latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Aguafina Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Akronim",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aladin",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aldrich",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alegreya",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alegreya SC",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alex Brush",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alfa Slab One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alice",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alike",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alike Angular",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allan",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Allerta",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allerta Stencil",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allura",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra Display",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amarante",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Amaranth",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amatic SC",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amethysta",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anaheim",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Andada",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Andika",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Angkor",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Annie Use Your Telescope",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anonymous Pro",variants:["regular","italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Antic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Antic Didone",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Antic Slab",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anton",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arapey",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arbutus",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arbutus Slab",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Architects Daughter",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Archivo Black",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Archivo Narrow",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arimo",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arizonia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Armata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Artifika",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arvo",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Asap",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Asset",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Astloch",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Asul",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Atomic Age",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Aubrey",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Audiowide",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Autour One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Average",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Average Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Averia Gruesa Libre",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Averia Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Averia Sans Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Averia Serif Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bad Script",variants:["regular"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Balthazar",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bangers",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Basic",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Battambang",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Baumans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bayon",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Belgrano",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Belleza",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"BenchNine",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bentham",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Berkshire Swash",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bevan",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bigelow Rules",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bigshot One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bilbo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bilbo Swash Caps",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bitter",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Black Ops One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bokor",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Bonbon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Boogaloo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bowlby One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bowlby One SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Brawler",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bree Serif",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bubblegum Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bubbler One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Buda",variants:["300"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Buenard",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Butcherman",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Butterfly Kids",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cabin",variants:["regular","italic","500","500italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cabin Condensed",variants:["regular","500","600","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cabin Sketch",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Caesar Dressing",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cagliostro",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Calligraffitti",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cambo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Candal",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cantarell",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cantata One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cantora One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Capriola",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cardo",variants:["regular","italic","700"],subsets:["greek-ext","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Carme",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carrois Gothic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carrois Gothic SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carter One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Caudex",variants:["regular","italic","700","700italic"],subsets:["greek-ext","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Cedarville Cursive",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ceviche One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Changa One",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Chango",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chau Philomene One",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chela One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chelsea Market",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chenla",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Cherry Cream Soda",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cherry Swash",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chewy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Chicle",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chivo",variants:["regular","italic","900","900italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cinzel",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cinzel Decorative",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Clicker Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Coda",variants:["regular","800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Coda Caption",variants:["800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Codystar",variants:["300","regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Combo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Comfortaa",variants:["300","regular","700"],subsets:["cyrillic","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Coming Soon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Concert One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Condiment",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Content",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Contrail One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Convergence",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cookie",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Copse",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Corben",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Courgette",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cousine",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Coustard",variants:["regular","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Covered By Your Grace",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Crafty Girls",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Creepster",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Crete Round",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Crimson Text",variants:["regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Croissant One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Crushed",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cuprum",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cutive",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cutive Mono",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Damion",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dancing Script",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dangrek",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Dawning of a New Day",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Days One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius Swash Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius Unicase",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Della Respira",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Devonshire",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Didact Gothic",variants:["regular"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Diplomata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Diplomata SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Doppio One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dorsa",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dosis",variants:["200","300","regular","500","600","700","800"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dr Sugiyama",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Droid Sans",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Droid Sans Mono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Droid Serif",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Duru Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dynalight",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"EB Garamond",variants:["regular"],subsets:["cyrillic","latin-ext","latin","vietnamese","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Eagle Lake",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Eater",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Economica",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Electrolize",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Emblema One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Emilys Candy",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Engagement",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Englebert",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Enriqueta",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Erica One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Esteban",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Euphoria Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ewert",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Exo",variants:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Expletus Sans",variants:["regular","italic","500","500italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fanwood Text",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fascinate",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fascinate Inline",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Faster One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fasthand",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Federant",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Federo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Felipa",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fenix",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Finger Paint",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fjord One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Flamenco",variants:["300","regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Flavors",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fondamento",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fontdiner Swanky",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Forum",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Francois One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Freckle Face",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fredericka the Great",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fredoka One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Freehand",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Fresca",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Frijole",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fugaz One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"GFS Didot",variants:["regular"],subsets:["greek"]},{kind:"webfonts#webfont",family:"GFS Neohellenic",variants:["regular","italic","700","700italic"],subsets:["greek"]},{kind:"webfonts#webfont",family:"Gafata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Galdeano",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Galindo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gentium Basic",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gentium Book Basic",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Geo",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Geostar",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Geostar Fill",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Germania One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gilda Display",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Give You Glory",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Glass Antiqua",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Glegoo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gloria Hallelujah",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Goblin One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gochi Hand",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gorditas",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Goudy Bookletter 1911",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Graduate",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gravitas One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Great Vibes",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Griffy",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gruppo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gudea",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Habibi",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hammersmith One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hanalei",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hanalei Fill",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Handlee",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Hanuman",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Happy Monkey",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Headland One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Henny Penny",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Herr Von Muellerhoff",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Holtwood One SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Homemade Apple",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Homenaje",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"IM Fell DW Pica",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell DW Pica SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Double Pica",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Double Pica SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell English",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell English SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell French Canon",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell French Canon SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Great Primer",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Great Primer SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Iceberg",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Iceland",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Imprima",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Inconsolata",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Inder",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Indie Flower",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Inika",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Irish Grover",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Istok Web",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Italiana",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Italianno",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jacques Francois",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jacques Francois Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jim Nightshade",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jockey One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jolly Lodger",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Josefin Sans",variants:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Josefin Slab",variants:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Joti One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Judson",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Julee",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Julius Sans One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Junge",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jura",variants:["300","regular","500","600"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Just Another Hand",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Just Me Again Down Here",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kameron",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Karla",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kaushan Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Keania One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kelly Slab",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kenia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Khmer",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Kite One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Knewave",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kotta One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Koulen",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Kranky",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kreon",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kristi",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Krona One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"La Belle Aurore",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lancelot",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lato",variants:["100","100italic","300","300italic","regular","italic","700","700italic","900","900italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"League Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Leckerli One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ledger",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lekton",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lemon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Life Savers",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lilita One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Limelight",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Linden Hill",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lobster",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Lobster Two",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Outline",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Sketch",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Solid",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lora",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Love Ya Like A Sister",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Loved by the King",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lovers Quarrel",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Luckiest Guy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lusitana",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lustria",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Macondo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Macondo Swash Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Magra",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Maiden Orange",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mako",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Marcellus",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marcellus SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marck Script",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Margarine",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marko One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Marmelad",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marvel",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mate",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mate SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Maven Pro",variants:["regular","500","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"McLaren",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Meddon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"MedievalSharp",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Medula One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Megrim",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Meie Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Merienda",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Merienda One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Merriweather",variants:["300","regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Metal",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Metal Mania",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Metamorphous",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Metrophobic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Michroma",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miltonian",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miltonian Tattoo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miniver",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miss Fajardose",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Modern Antiqua",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Molengo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Molle",variants:["italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Monofett",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Monoton",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Monsieur La Doulaise",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Montaga",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montez",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat Alternates",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat Subrayada",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Moul",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Moulpali",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Mountains of Christmas",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mouse Memoirs",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr Bedfort",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr Dafoe",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr De Haviland",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mrs Saint Delafield",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mrs Sheppards",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Muli",variants:["300","300italic","regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mystery Quest",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Neucha",variants:["regular"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Neuton",variants:["200","300","regular","italic","700","800"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"News Cycle",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Niconne",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nixie One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nobile",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nokora",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Norican",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nosifer",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nothing You Could Do",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Noticia Text",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin","vietnamese"]},{kind:"webfonts#webfont",family:"Nova Cut",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Flat",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Mono",variants:["regular"],subsets:["latin","greek"]},{kind:"webfonts#webfont",family:"Nova Oval",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Round",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Slim",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Square",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Numans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nunito",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Odor Mean Chey",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Offside",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Old Standard TT",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oldenburg",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oleo Script",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oleo Script Swash Caps",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Open Sans",variants:["300","300italic","regular","italic","600","600italic","700","700italic","800","800italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","vietnamese","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Open Sans Condensed",variants:["300","300italic","700"],subsets:["cyrillic","greek-ext","latin-ext","latin","vietnamese","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Oranienbaum",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Orbitron",variants:["regular","500","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oregano",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Orienta",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Original Surfer",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oswald",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Over the Rainbow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Overlock",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Overlock SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ovo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oxygen",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oxygen Mono",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Mono",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"PT Sans",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Sans Caption",variants:["regular","700"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Sans Narrow",variants:["regular","700"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Serif",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"PT Serif Caption",variants:["regular","italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Pacifico",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Paprika",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Parisienne",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Passero One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Passion One",variants:["regular","700","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Patrick Hand",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Patua One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Paytone One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Peralta",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Permanent Marker",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Petit Formal Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Petrona",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Philosopher",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Piedra",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Pinyon Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pirata One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Plaster",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Play",variants:["regular","700"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Playball",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Playfair Display",variants:["regular","italic","700","700italic","900","900italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Playfair Display SC",variants:["regular","italic","700","700italic","900","900italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Podkova",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Poiret One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Poller One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Poly",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pompiere",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pontano Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Port Lligat Sans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Port Lligat Slab",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Prata",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Preahvihear",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Press Start 2P",variants:["regular"],subsets:["cyrillic","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Princess Sofia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Prociono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Prosto One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Puritan",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Purple Purse",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quando",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quantico",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quattrocento",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quattrocento Sans",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Questrial",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quicksand",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quintessential",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Qwigley",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Racing Sans One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Radley",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Raleway",variants:["100","200","300","regular","500","600","700","800","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Raleway Dots",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rambla",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rammetto One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ranchers",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rancho",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rationale",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Redressed",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Reenie Beanie",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Revalia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ribeye",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ribeye Marrow",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Righteous",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Risque",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rochester",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rock Salt",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rokkitt",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Romanesco",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ropa Sans",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rosario",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rosarivo",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rouge Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ruda",variants:["regular","700","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rufina",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruge Boogie",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruluko",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rum Raisin",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruslan Display",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Russo One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruthie",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rye",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sacramento",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sail",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Salsa",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sanchez",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sancreek",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sansita One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sarina",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Satisfy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Scada",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Schoolbell",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Seaweed Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sevillana",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Seymour One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Shadows Into Light",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Shadows Into Light Two",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Shanti",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Share",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Share Tech",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Share Tech Mono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Shojumaru",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Short Stack",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Siemreap",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Sigmar One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Signika",variants:["300","regular","600","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Signika Negative",variants:["300","regular","600","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Simonetta",variants:["regular","italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sirin Stencil",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Six Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Skranji",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Slackey",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Smokum",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Smythe",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sniglet",variants:["800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Snippet",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Snowburst One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sofadi One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sofia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sonsie One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sorts Mill Goudy",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Source Code Pro",variants:["200","300","regular","600","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Source Sans Pro",variants:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Special Elite",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Spicy Rice",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Spinnaker",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Spirax",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Squada One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Stalemate",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stalinist One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stardos Stencil",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Stint Ultra Condensed",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stint Ultra Expanded",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stoke",variants:["300","regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Strait",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sue Ellen Francisco",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sunshiney",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Supermercado One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Suwannaphum",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Swanky and Moo Moo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Syncopate",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tangerine",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Taprom",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Telex",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tenor Sans",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Text Me One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"The Girl Next Door",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tienne",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tinos",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Titan One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Titillium Web",variants:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Trade Winds",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Trocchi",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Trochut",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Trykker",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Tulpen One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ubuntu",variants:["300","300italic","regular","italic","500","500italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ubuntu Condensed",variants:["regular"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ubuntu Mono",variants:["regular","italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ultra",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Uncial Antiqua",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Underdog",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Unica One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"UnifrakturCook",variants:["700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"UnifrakturMaguntia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unkempt",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unlock",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unna",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"VT323",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vampiro One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Varela",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Varela Round",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vast Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vibur",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vidaloka",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Viga",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Voces",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Volkhov",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vollkorn",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Voltaire",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Waiting for the Sunrise",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Wallpoet",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Walter Turncoat",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Warnes",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Wellfleet",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Wire One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Yanone Kaffeesatz",variants:["200","300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Yellowtail",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Yeseva One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Yesteryear",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Zeyada",variants:["regular"],subsets:["latin"]}]},BFHLanguagesList={om:"Afaan Oromoo",aa:"Afaraf",af:"Afrikaans",ak:"Akan",an:"aragonés",ig:"Asụsụ Igbo",gn:"Avañe'ẽ",ae:"avesta",ay:"aymar aru",az:"azərbaycan dili",id:"Bahasa Indonesia",ms:"bahasa Melayu",bm:"bamanankan",jv:"basa Jawa",su:"Basa Sunda",bi:"Bislama",bs:"bosanski jezik",br:"brezhoneg",ca:"català",ch:"Chamoru",ny:"chiCheŵa",sn:"chiShona",co:"corsu",cy:"Cymraeg",da:"dansk",se:"Davvisámegiella",de:"Deutsch",nv:"Diné bizaad",et:"eesti",na:"Ekakairũ Naoero",en:"English",es:"español",eo:"Esperanto",eu:"euskara",ee:"Eʋegbe",to:"faka Tonga",mg:"fiteny malagasy",fr:"français",fy:"Frysk",ff:"Fulfulde",fo:"føroyskt",ga:"Gaeilge",gv:"Gaelg",sm:"gagana fa'a Samoa",gl:"galego",sq:"gjuha shqipe",gd:"Gàidhlig",ki:"Gĩkũyũ",ha:"Hausa",ho:"Hiri Motu",hr:"hrvatski jezik",io:"Ido",rw:"Ikinyarwanda",rn:"Ikirundi",ia:"Interlingua",nd:"isiNdebele",nr:"isiNdebele",xh:"isiXhosa",zu:"isiZulu",it:"italiano",ik:"Iñupiaq",pl:"polski",mh:"Kajin M̧ajeļ",kl:"kalaallisut",kr:"Kanuri",kw:"Kernewek",kg:"KiKongo",sw:"Kiswahili",ht:"Kreyòl ayisyen",kj:"Kuanyama",ku:"Kurdî",la:"latine",lv:"latviešu valoda",lt:"lietuvių kalba",ro:"limba română",li:"Limburgs",ln:"Lingála",lg:"Luganda",lb:"Lëtzebuergesch",hu:"magyar",mt:"Malti",nl:"Nederlands",no:"Norsk",nb:"Norsk bokmål",nn:"Norsk nynorsk",uz:"O'zbek",oc:"occitan",ie:"Interlingue",hz:"Otjiherero",ng:"Owambo",pt:"português",ty:"Reo Tahiti",rm:"rumantsch grischun",qu:"Runa Simi",sc:"sardu",za:"Saɯ cueŋƅ",st:"Sesotho",tn:"Setswana",ss:"SiSwati",sl:"slovenski jezik",sk:"slovenčina",so:"Soomaaliga",fi:"suomi",sv:"Svenska",mi:"te reo Māori",vi:"Tiếng Việt",lu:"Tshiluba",ve:"Tshivenḓa",tw:"Twi",tk:"Türkmen",tr:"Türkçe",ug:"Uyƣurqə",vo:"Volapük",fj:"vosa Vakaviti",wa:"walon",tl:"Wikang Tagalog",wo:"Wollof",ts:"Xitsonga",yo:"Yorùbá",sg:"yângâ tî sängö",is:"Íslenska",cs:"čeština",el:"ελληνικά",av:"авар мацӀ",ab:"аҧсуа бызшәа",ba:"башҡорт теле",be:"беларуская мова",bg:"български език",os:"ирон æвзаг",kv:"коми кыв",ky:"Кыргызча",mk:"македонски јазик",mn:"монгол",ce:"нохчийн мотт",ru:"русский язык",sr:"српски језик",tt:"татар теле",tg:"тоҷикӣ",uk:"українська мова",cv:"чӑваш чӗлхи",cu:"ѩзыкъ словѣньскъ",kk:"қазақ тілі",hy:"Հայերեն",yi:"ייִדיש",he:"עברית",ur:"اردو",ar:"العربية",fa:"فارسی",ps:"پښتو",ks:"कश्मीरी",ne:"नेपाली",pi:"पाऴि",bh:"भोजपुरी",mr:"मराठी",sa:"संस्कृतम्",sd:"सिन्धी",hi:"हिन्दी",as:"অসমীয়া",bn:"বাংলা",pa:"ਪੰਜਾਬੀ",gu:"ગુજરાતી",or:"ଓଡ଼ିଆ",ta:"தமிழ்",te:"తెలుగు",kn:"ಕನ್ನಡ",ml:"മലയാളം",si:"සිංහල",th:"ไทย",lo:"ພາສາລາວ",bo:"བོད་ཡིག",dz:"རྫོང་ཁ",my:"ဗမာစာ",ka:"ქართული",ti:"ትግርኛ",am:"አማርኛ",iu:"ᐃᓄᒃᑎᑐᑦ",oj:"ᐊᓂᔑᓈᐯᒧᐎᓐ",cr:"ᓀᐦᐃᔭᐍᐏᐣ",km:"ខ្មែរ",zh:"中文 (Zhōngwén)",ja:"日本語 (にほんご)",ii:"ꆈꌠ꒿ Nuosuhxop",ko:"한국어 (韓國語)"},BFHPhoneFormatList={AF:"+93 0dd ddd dddd",AL:"+355 0dd ddd ddd",DZ:"+213 0ddd dd dd dd",AS:"+1 (ddd) ddd-dddd",AD:"+376 ddddddddd",AO:"+244 ddd ddd ddd",AI:"+1 (ddd) ddd-dddd",AQ:"+672 ddddddddd",AG:"+1 (ddd) ddd-dddd",AR:"+54 ddddddddd",AM:"+374 0dd dddddd",AW:"+297 ddd dddd",AU:"+61 ddd ddd ddd",AT:"+43 0dddd ddddddddd",AZ:"+994 ddddddddd",BH:"+973 ddddddddd",BD:"+880 ddddddddd",BB:"+1 ddddddddd",BY:"+375 ddddddddd",BE:"+32 ddddddddd",BZ:"+501 ddddddddd",BJ:"+229 ddddddddd",BM:"+1 (ddd) ddd-dddd",BT:"+975 ddddddddd",BO:"+591 ddddddddd",BA:"+387 ddddddddd",BW:"+267 ddddddddd",BV:"+0 ddddddddd",BR:"+55 ddddddddd",IO:"+0 ddddddddd",VG:"+1 (ddd) ddd-dddd",BN:"+673 ddddddddd",BG:"+359 ddddddddd",BF:"+226 ddddddddd",BI:"+257 ddddddddd",CI:"+225 ddddddddd",KH:"+855 ddddddddd",CM:"+237 ddddddddd",CA:"+1 (ddd) ddd-dddd",CV:"+238 ddddddddd",KY:"+1 (ddd) ddd-dddd",CF:"+236 ddddddddd",TD:"+235 ddddddddd",CL:"+56 ddddddddd",CN:"+86 ddddddddd",CX:"+61 ddddddddd",CC:"+61 ddddddddd",CO:"+57 ddddddddd",KM:"+269 ddddddddd",CG:"+242 ddddddddd",CK:"+682 ddddddddd",CR:"+506 ddddddddd",HR:"+385 ddddddddd",CU:"+53 ddddddddd",CY:"+357 ddddddddd",CZ:"+420 ddddddddd",CD:"+243 ddddddddd",DK:"+45 ddddddddd",DJ:"+253 ddddddddd",DM:"+1 (ddd) ddd-dddd",DO:"+1 (ddd) ddd-dddd",TL:"+670 ddddddddd",EC:"+593 ddddddddd",EG:"+20 ddddddddd",SV:"+503 ddddddddd",GQ:"+240 ddddddddd",ER:"+291 ddddddddd",EE:"+372 ddddddddd",ET:"+251 ddddddddd",FO:"+298 ddddddddd",FK:"+500 ddddddddd",FJ:"+679 ddddddddd",FI:"+358 ddddddddd",MK:"+389 ddddddddd",FR:"+33 d dd dd dd dd",GF:"+594 ddddddddd",PF:"+689 ddddddddd",TF:"+262 ddddddddd",GA:"+241 ddddddddd",GE:"+995 ddddddddd",DE:"+49 ddddddddd",GH:"+233 ddddddddd",GI:"+350 ddddddddd",GR:"+30 ddddddddd",GL:"+299 ddddddddd",GD:"+1 (ddd) ddd-dddd",GP:"+590 ddddddddd",GU:"+1 (ddd) ddd-dddd",GT:"+502 ddddddddd",GN:"+224 ddddddddd",GW:"+245 ddddddddd",GY:"+592 ddddddddd",HT:"+509 ddddddddd",HM:"+0 ddddddddd",HN:"+504 ddddddddd",HK:"+852 ddddddddd",HU:"+36 ddddddddd",IS:"+354 ddddddddd",IN:"+91 ddddddddd",ID:"+62 ddddddddd",IR:"+98 ddddddddd",IQ:"+964 ddddddddd",IE:"+353 ddddddddd",IL:"+972 ddddddddd",IT:"+39 ddddddddd",JM:"+1 (ddd) ddd-dddd",JP:"+81 ddddddddd",JO:"+962 ddddddddd",KZ:"+7 ddddddddd",KE:"+254 ddddddddd",KI:"+686 ddddddddd",KW:"+965 ddddddddd",KG:"+996 ddddddddd",LA:"+856 ddddddddd",LV:"+371 ddddddddd",LB:"+961 ddddddddd",LS:"+266 ddddddddd",LR:"+231 ddddddddd",LY:"+218 ddddddddd",LI:"+423 ddddddddd",LT:"+370 ddddddddd",LU:"+352 ddddddddd",MO:"+853 ddddddddd",MG:"+261 ddddddddd",MW:"+265 ddddddddd",MY:"+60 ddddddddd",MV:"+960 ddddddddd",ML:"+223 ddddddddd",MT:"+356 ddddddddd",MH:"+692 ddddddddd",MQ:"+596 ddddddddd",MR:"+222 ddddddddd",MU:"+230 ddddddddd",YT:"+262 ddddddddd",MX:"+52 ddddddddd",FM:"+691 ddddddddd",MD:"+373 ddddddddd",MC:"+377 ddddddddd",MN:"+976 ddddddddd",MS:"+1 (ddd) ddd-dddd",MA:"+212 ddddddddd",MZ:"+258 ddddddddd",MM:"+95 ddddddddd",NA:"+264 ddddddddd",NR:"+674 ddddddddd",NP:"+977 ddddddddd",NL:"+31 ddddddddd",AN:"+599 ddddddddd",NC:"+687 ddddddddd",NZ:"+64 ddddddddd",NI:"+505 ddddddddd",NE:"+227 ddddddddd",NG:"+234 ddddddddd",NU:"+683 ddddddddd",NF:"+672 ddddddddd",KP:"+850 ddddddddd",MP:"+1 (ddd) ddd-dddd",NO:"+47 ddddddddd",OM:"+968 ddddddddd",PK:"+92 ddddddddd",PW:"+680 ddddddddd",PA:"+507 ddddddddd",PG:"+675 ddddddddd",PY:"+595 ddddddddd",PE:"+51 ddddddddd",PH:"+63 ddddddddd",PN:"+870 ddddddddd",PL:"+48 ddddddddd",PT:"+351 ddddddddd",PR:"+1 (ddd) ddd-dddd",QA:"+974 ddddddddd",RE:"+262 ddddddddd",RO:"+40 ddddddddd",RU:"+7 ddddddddd",RW:"+250 ddddddddd",ST:"+239 ddddddddd",SH:"+290 ddddddddd",KN:"+1 (ddd) ddd-dddd",LC:"+1 (ddd) ddd-dddd",PM:"+508 ddddddddd",VC:"+1 (ddd) ddd-dddd",WS:"+685 ddddddddd",SM:"+378 ddddddddd",SA:"+966 ddddddddd",SN:"+221 ddddddddd",SC:"+248 ddddddddd",SL:"+232 ddddddddd",SG:"+65 ddddddddd",SK:"+421 ddddddddd",SI:"+386 ddddddddd",SB:"+677 ddddddddd",SO:"+252 ddddddddd",ZA:"+27 ddddddddd",GS:"+0 ddddddddd",KR:"+82 ddddddddd",ES:"+34 ddddddddd",LK:"+94 ddddddddd",SD:"+249 ddddddddd",SR:"+597 ddddddddd",SJ:"+0 ddddddddd",SZ:"+268 ddddddddd",SE:"+46 ddddddddd",CH:"+41 ddddddddd",SY:"+963 ddddddddd",TW:"+886 ddddddddd",TJ:"+992 ddddddddd",TZ:"+255 ddddddddd",TH:"+66 ddddddddd",BS:"+1 (ddd) ddd-dddd",GM:"+220 ddddddddd",TG:"+228 ddddddddd",TK:"+690 ddddddddd",TO:"+676 ddddddddd",TT:"+1 (ddd) ddd-dddd",TN:"+216 ddddddddd",TR:"+90 ddddddddd",TM:"+993 ddddddddd",TC:"+1 (ddd) ddd-dddd",TV:"+688 ddddddddd",VI:"+1 (ddd) ddd-dddd",UG:"+256 ddddddddd",UA:"+380 ddddddddd",AE:"+971 ddddddddd",GB:"+44 (ddd) dddd dddd",US:"+1 (ddd) ddd-dddd",UM:"+0 ddddddddd",UY:"+598 ddddddddd",UZ:"+998 ddddddddd",VU:"+678 ddddddddd",VA:"+39 ddddddddd",VE:"+58 ddddddddd",VN:"+84 ddddddddd",WF:"+681 ddddddddd",EH:"+0 ddddddddd",YE:"+967 ddddddddd",YU:"+0 ddddddddd",ZM:"+260 ddddddddd",ZW:"+263 ddddddddd"},BFHStatesList={AF:{1:{code:"BAL",name:"Balkh"},2:{code:"BAM",name:"Bamian"},3:{code:"BDG",name:"Badghis"},4:{code:"BDS",name:"Badakhshan"},5:{code:"BGL",name:"Baghlan"},6:{code:"FRA",name:"Farah"},7:{code:"FYB",name:"Faryab"},8:{code:"GHA",name:"Ghazni"},9:{code:"GHO",name:"Ghowr"},10:{code:"HEL",name:"Helmand"},11:{code:"HER",name:"Herat"},12:{code:"JOW",name:"Jowzjan"},13:{code:"KAB",name:"Kabul"},14:{code:"KAN",name:"Kandahar"},15:{code:"KAP",name:"Kapisa"},16:{code:"KDZ",name:"Kondoz"},17:{code:"KHO",name:"Khost"},18:{code:"KNR",name:"Konar"},19:{code:"LAG",name:"Laghman"},20:{code:"LOW",name:"Lowgar"},21:{code:"NAN",name:"Nangrahar"},22:{code:"NIM",name:"Nimruz"},23:{code:"NUR",name:"Nurestan"},24:{code:"ORU",name:"Oruzgan"},25:{code:"PAR",name:"Parwan"},26:{code:"PIA",name:"Paktia"},27:{code:"PKA",name:"Paktika"},28:{code:"SAM",name:"Samangan"},29:{code:"SAR",name:"Sar-e Pol"},30:{code:"TAK",name:"Takhar"},31:{code:"WAR",name:"Wardak"},32:{code:"ZAB",name:"Zabol"}},AL:{1:{code:"BR",name:"Berat"},2:{code:"BU",name:"Bulqize"},3:{code:"DI",name:"Diber"},4:{code:"DL",name:"Delvine"},5:{code:"DR",name:"Durres"},6:{code:"DV",name:"Devoll"},7:{code:"EL",name:"Elbasan"},8:{code:"ER",name:"Kolonje"},9:{code:"FR",name:"Fier"},10:{code:"GJ",name:"Gjirokaster"},11:{code:"GR",name:"Gramsh"},12:{code:"HA",name:"Has"},13:{code:"KA",name:"Kavaje"},14:{code:"KB",name:"Kurbin"},15:{code:"KC",name:"Kucove"},16:{code:"KO",name:"Korce"},17:{code:"KR",name:"Kruje"},18:{code:"KU",name:"Kukes"},19:{code:"LB",name:"Librazhd"},20:{code:"LE",name:"Lezhe"},21:{code:"LU",name:"Lushnje"},22:{code:"MK",name:"Mallakaster"},23:{code:"MM",name:"Malesi e Madhe"},24:{code:"MR",name:"Mirdite"},25:{code:"MT",name:"Mat"},26:{code:"PG",name:"Pogradec"},27:{code:"PQ",name:"Peqin"},28:{code:"PR",name:"Permet"},29:{code:"PU",name:"Puke"},30:{code:"SH",name:"Shkoder"},31:{code:"SK",name:"Skrapar"},32:{code:"SR",name:"Sarande"},33:{code:"TE",name:"Tepelene"},34:{code:"TP",name:"Tropoje"},35:{code:"TR",name:"Tirane"},36:{code:"VL",name:"Vlore"}},DZ:{1:{code:"ADE",name:"Ain Defla"},2:{code:"ADR",name:"Adrar"},3:{code:"ALG",name:"Alger"},4:{code:"ANN",name:"Annaba"},5:{code:"ATE",name:"Ain Temouchent"},6:{code:"BAT",name:"Batna"},7:{code:"BBA",name:"Bordj Bou Arreridj"},8:{code:"BEC",name:"Bechar"},9:{code:"BEJ",name:"Bejaia"},10:{code:"BIS",name:"Biskra"},11:{code:"BLI",name:"Blida"},12:{code:"BMD",name:"Boumerdes"},13:{code:"BOA",name:"Bouira"},14:{code:"CHL",name:"Chlef"},15:{code:"CON",name:"Constantine"},16:{code:"DJE",name:"Djelfa"},17:{code:"EBA",name:"El Bayadh"},18:{code:"EOU",name:"El Oued"},19:{code:"ETA",name:"El Tarf"},20:{code:"GHA",name:"Ghardaia"},21:{code:"GUE",name:"Guelma"},22:{code:"ILL",name:"Illizi"},23:{code:"JIJ",name:"Jijel"},24:{code:"KHE",name:"Khenchela"},25:{code:"LAG",name:"Laghouat"},26:{code:"MED",name:"Medea"},27:{code:"MIL",name:"Mila"},28:{code:"MOS",name:"Mostaganem"},29:{code:"MSI",name:"M'Sila"},30:{code:"MUA",name:"Muaskar"},31:{code:"NAA",name:"Naama"},32:{code:"OEB",name:"Oum el-Bouaghi"},33:{code:"ORA",name:"Oran"},34:{code:"OUA",name:"Ouargla"},35:{code:"REL",name:"Relizane"},36:{code:"SAH",name:"Souk Ahras"},37:{code:"SAI",name:"Saida"},38:{code:"SBA",name:"Sidi Bel Abbes"},39:{code:"SET",name:"Setif"},40:{code:"SKI",name:"Skikda"},41:{code:"TAM",name:"Tamanghasset"},42:{code:"TEB",name:"Tebessa"},43:{code:"TIA",name:"Tiaret"},44:{code:"TIN",name:"Tindouf"},45:{code:"TIP",name:"Tipaza"},46:{code:"TIS",name:"Tissemsilt"},47:{code:"TLE",name:"Tlemcen"},48:{code:"TOU",name:"Tizi Ouzou"}},AS:{1:{code:"E",name:"Eastern"},2:{code:"M",name:"Manu'a"},3:{code:"R",name:"Rose Island"},4:{code:"S",name:"Swains Island"},5:{code:"W",name:"Western"}},AD:{1:{code:"ALV",name:"Andorra la Vella"},2:{code:"CAN",name:"Canillo"},3:{code:"ENC",name:"Encamp"},4:{code:"ESE",name:"Escaldes-Engordany"},5:{code:"LMA",name:"La Massana"},6:{code:"ORD",name:"Ordino"},7:{code:"SJL",name:"Sant Julià de Lòria"}},AO:{1:{code:"BGO",name:"Bengo"},2:{code:"BGU",name:"Benguela"},3:{code:"BIE",name:"Bie"},4:{code:"CAB",name:"Cabinda"},5:{code:"CCU",name:"Cuando-Cubango"},6:{code:"CNO",name:"Cuanza Norte"},7:{code:"CUS",name:"Cuanza Sul"},8:{code:"CNN",name:"Cunene"},9:{code:"HUA",name:"Huambo"},10:{code:"HUI",name:"Huila"},11:{code:"LUA",name:"Luanda"},12:{code:"LNO",name:"Lunda Norte"},13:{code:"LSU",name:"Lunda Sul"},14:{code:"MAL",name:"Malange"},15:{code:"MOX",name:"Moxico"},16:{code:"NAM",name:"Namibe"},17:{code:"UIG",name:"Uige"},18:{code:"ZAI",name:"Zaire"}},AI:{1:{code:"ANG",name:"Anguillita"},2:{code:"ANG",name:"Anguila"},3:{code:"DOG",name:"Dog"},4:{code:"LIT",name:"Little Scrub"},5:{code:"PRI",name:"Prickly Pear"},6:{code:"SAN",name:"Sandy"},7:{code:"SCR",name:"Scrub"},8:{code:"SEA",name:"Seal"},9:{code:"SOM",name:"Sombrero"}},AQ:{1:{code:"ASG",name:"Saint George"},2:{code:"ASH",name:"Saint Philip"},3:{code:"ASJ",name:"Saint John"},4:{code:"ASL",name:"Saint Paul"},5:{code:"ASM",name:"Saint Mary"},6:{code:"ASR",name:"Saint Peter"},7:{code:"BAR",name:"Barbuda"},8:{code:"RED",name:"Redonda"}},AR:{1:{code:"AN",name:"Antartida e Islas del Atlantico"},2:{code:"BA",name:"Buenos Aires"},3:{code:"CA",name:"Catamarca"},4:{code:"CH",name:"Chaco"},5:{code:"CU",name:"Chubut"},6:{code:"CO",name:"Cordoba"},7:{code:"CR",name:"Corrientes"},8:{code:"CF",name:"Capital Federal"},9:{code:"ER",name:"Entre Rios"},10:{code:"FO",name:"Formosa"},11:{code:"JU",name:"Jujuy"},12:{code:"LP",name:"La Pampa"},13:{code:"LR",name:"La Rioja"},14:{code:"ME",name:"Mendoza"},15:{code:"MI",name:"Misiones"},16:{code:"NE",name:"Neuquen"},17:{code:"RN",name:"Rio Negro"},18:{code:"SA",name:"Salta"},19:{code:"SJ",name:"San Juan"},20:{code:"SL",name:"San Luis"},21:{code:"SC",name:"Santa Cruz"},22:{code:"SF",name:"Santa Fe"},23:{code:"SD",name:"Santiago del Estero"},24:{code:"TF",name:"Tierra del Fuego"},25:{code:"TU",name:"Tucuman"}},AM:{1:{code:"AGT",name:"Aragatsotn"},2:{code:"ARR",name:"Ararat"},3:{code:"ARM",name:"Armavir"},4:{code:"GEG",name:"Geghark 'unik'"},5:{code:"KOT",name:"Kotayk'"},6:{code:"LOR",name:"Lorri"},7:{code:"SHI",name:"Shirak"},8:{code:"SYU",name:"Syunik'"},9:{code:"TAV",name:"Tavush"},10:{code:"VAY",name:"Vayots' Dzor"},11:{code:"YER",name:"Yerevan"}},AW:{1:{code:"ARU",name:"Aruba"},2:{code:"DRU",name:"Druif Beach"},3:{code:"MAN",name:"Manchebo Beach"},4:{code:"NOO",name:"Noord"},5:{code:"ORA",name:"Oranjestad"},6:{code:"PAL",name:"Palm Beach"},7:{code:"ROO",name:"Rooi Thomas"},8:{code:"SIN",name:"Sint Nicolaas"},9:{code:"SIN",name:"Sint Nicolas"},10:{code:"WAY",name:"Wayaca"}},AU:{1:{code:"ACT",name:"Australian Capital Territory"},2:{code:"NSW",name:"New South Wales"},3:{code:"NT",name:"Northern Territory"},4:{code:"QLD",name:"Queensland"},5:{code:"SA",name:"South Australia"},6:{code:"TAS",name:"Tasmania"},7:{code:"VIC",name:"Victoria"},8:{code:"WA",name:"Western Australia"}},AT:{1:{code:"BUR",name:"Burgenland"},2:{code:"KAR",name:"Krnten"},3:{code:"NOS",name:"Niederöesterreich"},4:{code:"OOS",name:"Oberöesterreich"},5:{code:"SAL",name:"Salzburg"},6:{code:"STE",name:"Steiermark"},7:{code:"TIR",name:"Tirol"},8:{code:"VOR",name:"Vorarlberg"},9:{code:"WIE",name:"Wien"}},AZ:{1:{code:"AB",name:"Ali Bayramli"},2:{code:"ABS",name:"Abseron"},3:{code:"AGC",name:"AgcabAdi"},4:{code:"AGM",name:"Agdam"},5:{code:"AGS",name:"Agdas"},6:{code:"AGA",name:"Agstafa"},7:{code:"AGU",name:"Agsu"},8:{code:"AST",name:"Astara"},9:{code:"BA",name:"Baki"},10:{code:"BAB",name:"BabAk"},11:{code:"BAL",name:"BalakAn"},12:{code:"BAR",name:"BArdA"},13:{code:"BEY",name:"Beylaqan"},14:{code:"BIL",name:"Bilasuvar"},15:{code:"CAB",name:"Cabrayil"},16:{code:"CAL",name:"Calilabab"},17:{code:"CUL",name:"Culfa"},18:{code:"DAS",name:"Daskasan"},19:{code:"DAV",name:"Davaci"},20:{code:"FUZ",name:"Fuzuli"},21:{code:"GA",name:"Ganca"},22:{code:"GAD",name:"Gadabay"},23:{code:"GOR",name:"Goranboy"},24:{code:"GOY",name:"Goycay"},25:{code:"HAC",name:"Haciqabul"},26:{code:"IMI",name:"Imisli"},27:{code:"ISM",name:"Ismayilli"},28:{code:"KAL",name:"Kalbacar"},29:{code:"KUR",name:"Kurdamir"},30:{code:"LA",name:"Lankaran"},31:{code:"LAC",name:"Lacin"},32:{code:"LAN",name:"Lankaran"},33:{code:"LER",name:"Lerik"},34:{code:"MAS",name:"Masalli"},35:{code:"MI",name:"Mingacevir"},36:{code:"NA",name:"Naftalan"},37:{code:"NX",name:"Naxcivan"},38:{code:"NEF",name:"Neftcala"},39:{code:"OGU",name:"Oguz"},40:{code:"ORD",name:"Ordubad"},41:{code:"QAB",name:"Qabala"},42:{code:"QAX",name:"Qax"},43:{code:"QAZ",name:"Qazax"},44:{code:"QOB",name:"Qobustan"},45:{code:"QBA",name:"Quba"},46:{code:"QBI",name:"Qubadli"},47:{code:"QUS",name:"Qusar"},48:{code:"SA",name:"Saki"},49:{code:"SAT",name:"Saatli"},50:{code:"SAB",name:"Sabirabad"},51:{code:"SAD",name:"Sadarak"},52:{code:"SAH",name:"Sahbuz"},53:{code:"SAK",name:"Saki"},54:{code:"SAL",name:"Salyan"},55:{code:"SM",name:"Sumqayit"},56:{code:"SMI",name:"Samaxi"},57:{code:"SKR",name:"Samkir"},58:{code:"SMX",name:"Samux"},59:{code:"SAR",name:"Sarur"},60:{code:"SIY",name:"Siyazan"},61:{code:"SS",name:"Susa"},62:{code:"SUS",name:"Susa"},63:{code:"TAR",name:"Tartar"},64:{code:"TOV",name:"Tovuz"},65:{code:"UCA",name:"Ucar"},66:{code:"XA",name:"Xankandi"},67:{code:"XAC",name:"Xacmaz"},68:{code:"XAN",name:"Xanlar"},69:{code:"XIZ",name:"Xizi"},70:{code:"XCI",name:"Xocali"},71:{code:"XVD",name:"Xocavand"},72:{code:"YAR",name:"Yardimli"},73:{code:"YEV",name:"Yevlax"},74:{code:"ZAN",name:"Zangilan"},75:{code:"ZAQ",name:"Zaqatala"},76:{code:"ZAR",name:"Zardab"}},BS:{1:{code:"ACK",name:"Acklins"},2:{code:"BER",name:"Berry Islands"},3:{code:"BIM",name:"Bimini"},4:{code:"BLK",name:"Black Point"},5:{code:"CAT",name:"Cat Island"},6:{code:"CAB",name:"Central Abaco"},7:{code:"CAN",name:"Central Andros"},8:{code:"CEL",name:"Central Eleuthera"},9:{code:"FRE",name:"City of Freeport"},10:{code:"CRO",name:"Crooked Island"},11:{code:"EGB",name:"East Grand Bahama"},12:{code:"EXU",name:"Exuma"},13:{code:"GRD",name:"Grand Cay"},14:{code:"HAR",name:"Harbour Island"},15:{code:"HOP",name:"Hope Town"},16:{code:"INA",name:"Inagua"},17:{code:"LNG",name:"Long Island"},18:{code:"MAN",name:"Mangrove Cay"},19:{code:"MAY",name:"Mayaguana"},20:{code:"MOO",name:"Moore's Island"},21:{code:"NAB",name:"North Abaco"},22:{code:"NAN",name:"North Andros"},23:{code:"NEL",name:"North Eleuthera"},24:{code:"RAG",name:"Ragged Island"},25:{code:"RUM",name:"Rum Cay"},26:{code:"SAL",name:"San Salvador"},27:{code:"SAB",name:"South Abaco"},28:{code:"SAN",name:"South Andros"},29:{code:"SEL",name:"South Eleuthera"},30:{code:"SWE",name:"Spanish Wells"},31:{code:"WGB",name:"West Grand Bahama"}},BH:{1:{code:"CAP",name:"Capital"},2:{code:"CEN",name:"Central"},3:{code:"MUH",name:"Muharraq"},4:{code:"NOR",name:"Northern"},5:{code:"SOU",name:"Southern"}},BD:{1:{code:"BAR",name:"Barisal"},2:{code:"CHI",name:"Chittagong"},3:{code:"DHA",name:"Dhaka"},4:{code:"KHU",name:"Khulna"},5:{code:"RAJ",name:"Rajshahi"},6:{code:"SYL",name:"Sylhet"}},BB:{1:{code:"CC",name:"Christ Church"},2:{code:"AND",name:"Saint Andrew"},3:{code:"GEO",name:"Saint George"},4:{code:"JAM",name:"Saint James"},5:{code:"JOH",name:"Saint John"},6:{code:"JOS",name:"Saint Joseph"},7:{code:"LUC",name:"Saint Lucy"},8:{code:"MIC",name:"Saint Michael"},9:{code:"PET",name:"Saint Peter"},10:{code:"PHI",name:"Saint Philip"},11:{code:"THO",name:"Saint Thomas"}},BY:{1:{code:"BR",name:"Brestskaya (Brest)"},2:{code:"HO",name:"Homyel'skaya (Homyel')"},3:{code:"HM",name:"Horad Minsk"},4:{code:"HR",name:"Hrodzyenskaya (Hrodna)"},5:{code:"MA",name:"Mahilyowskaya (Mahilyow)"},6:{code:"MI",name:"Minskaya"},7:{code:"VI",name:"Vitsyebskaya (Vitsyebsk)"}},BE:{1:{code:"VAN",name:"Antwerpen"},2:{code:"WBR",name:"Brabant Wallon"},3:{code:"WHT",name:"Hainaut"},4:{code:"WLG",name:"Liege"},5:{code:"VLI",name:"Limburg"},6:{code:"WLX",name:"Luxembourg"},7:{code:"WNA",name:"Namur"},8:{code:"VOV",name:"Oost-Vlaanderen"},9:{code:"VBR",name:"Vlaams Brabant"},10:{code:"VWV",name:"West-Vlaanderen"}},BZ:{1:{code:"BZ",name:"Belize"},2:{code:"CY",name:"Cayo"},3:{code:"CR",name:"Corozal"},4:{code:"OW",name:"Orange Walk"},5:{code:"SC",name:"Stann Creek"},6:{code:"TO",name:"Toledo"}},BJ:{1:{code:"AL",name:"Alibori"},2:{code:"AK",name:"Atakora"},3:{code:"AQ",name:"Atlantique"},4:{code:"BO",name:"Borgou"},5:{code:"CO",name:"Collines"},6:{code:"DO",name:"Donga"},7:{code:"KO",name:"Kouffo"},8:{code:"LI",name:"Littoral"},9:{code:"MO",name:"Mono"},10:{code:"OU",name:"Oueme"},11:{code:"PL",name:"Plateau"},12:{code:"ZO",name:"Zou"}},BM:{1:{code:"DS",name:"Devonshire"},2:{code:"HC",name:"Hamilton City"},3:{code:"HA",name:"Hamilton"},4:{code:"PG",name:"Paget"},5:{code:"PB",name:"Pembroke"},6:{code:"GC",name:"Saint George City"},7:{code:"SG",name:"Saint George's"},8:{code:"SA",name:"Sandys"},9:{code:"SM",name:"Smith's"},10:{code:"SH",name:"Southampton"},11:{code:"WA",name:"Warwick"}},BT:{1:{code:"BUM",name:"Bumthang"},2:{code:"CHU",name:"Chukha"},3:{code:"DAG",name:"Dagana"},4:{code:"GAS",name:"Gasa"},5:{code:"HAA",name:"Haa"},6:{code:"LHU",name:"Lhuntse"},7:{code:"MON",name:"Mongar"},8:{code:"PAR",name:"Paro"},9:{code:"PEM",name:"Pemagatshel"},10:{code:"PUN",name:"Punakha"},11:{code:"SJO",name:"Samdrup Jongkhar"},12:{code:"SAT",name:"Samtse"},13:{code:"SAR",name:"Sarpang"},14:{code:"THI",name:"Thimphu"},15:{code:"TRG",name:"Trashigang"},16:{code:"TRY",name:"Trashiyangste"},17:{code:"TRO",name:"Trongsa"},18:{code:"TSI",name:"Tsirang"},19:{code:"WPH",name:"Wangdue Phodrang"},20:{code:"ZHE",name:"Zhemgang"}},BO:{1:{code:"BEN",name:"Beni"},2:{code:"CHU",name:"Chuquisaca"},3:{code:"COC",name:"Cochabamba"},4:{code:"LPZ",name:"La Paz"},5:{code:"ORU",name:"Oruro"},6:{code:"PAN",name:"Pando"},7:{code:"POT",name:"Potosi"},8:{code:"SCZ",name:"Santa Cruz"},9:{code:"TAR",name:"Tarija"}},BA:{1:{code:"BRO",name:"Brcko district"},2:{code:"FBP",name:"Bosanskopodrinjski Kanton"},3:{code:"FHN",name:"Hercegovacko-neretvanski Kanton"},4:{code:"FPO",name:"Posavski Kanton"},5:{code:"FSA",name:"Kanton Sarajevo"},6:{code:"FSB",name:"Srednjebosanski Kanton"},7:{code:"FTU",name:"Tuzlanski Kanton"},8:{code:"FUS",name:"Unsko-Sanski Kanton"},9:{code:"FZA",name:"Zapadnobosanska"},10:{code:"FZE",name:"Zenicko-Dobojski Kanton"},11:{code:"FZH",name:"Zapadnohercegovacka Zupanija"},12:{code:"SBI",name:"Bijeljina"},13:{code:"SBL",name:"Banja Luka"},14:{code:"SDO",name:"Doboj"},15:{code:"SFO",name:"Foca"},16:{code:"SSR",name:"Sarajevo-Romanija or Sokolac"},17:{code:"STR",name:"Trebinje"},18:{code:"SVL",name:"Vlasenica"}},BW:{1:{code:"CE",name:"Central"},2:{code:"GH",name:"Ghanzi"},3:{code:"KD",name:"Kgalagadi"},4:{code:"KT",name:"Kgatleng"},5:{code:"KW",name:"Kweneng"},6:{code:"NG",name:"Ngamiland"},7:{code:"NE",name:"North East"},8:{code:"NW",name:"North West"},9:{code:"SE",name:"South East"},10:{code:"SO",name:"Southern"}},BR:{1:{code:"AC",name:"Acre"},2:{code:"AL",name:"Alagoas"},3:{code:"AP",name:"Amapa"},4:{code:"AM",name:"Amazonas"},5:{code:"BA",name:"Bahia"},6:{code:"CE",name:"Ceara"},7:{code:"DF",name:"Distrito Federal"},8:{code:"ES",name:"Espirito Santo"},9:{code:"GO",name:"Goias"},10:{code:"MA",name:"Maranhao"},11:{code:"MT",name:"Mato Grosso"},12:{code:"MS",name:"Mato Grosso do Sul"},13:{code:"MG",name:"Minas Gerais"},14:{code:"PA",name:"Para"},15:{code:"PB",name:"Paraiba"},16:{code:"PR",name:"Parana"},17:{code:"PE",name:"Pernambuco"},18:{code:"PI",name:"Piaui"},19:{code:"RJ",name:"Rio de Janeiro"},20:{code:"RN",name:"Rio Grande do Norte"},21:{code:"RS",name:"Rio Grande do Sul"},22:{code:"RO",name:"Rondonia"},23:{code:"RR",name:"Roraima"},24:{code:"SC",name:"Santa Catarina"},25:{code:"SP",name:"Sao Paulo"},26:{code:"SE",name:"Sergipe"},27:{code:"TO",name:"Tocantins"}},IO:{1:{code:"DG",name:"Diego Garcia"},2:{code:"DI",name:"Danger Island"},3:{code:"EA",name:"Eagle Islands"},4:{code:"EG",name:"Egmont Islands"},5:{code:"NI",name:"Nelsons Island"},6:{code:"PB",name:"Peros Banhos"},7:{code:"SI",name:"Salomon Islands"},8:{code:"TB",name:"Three Brothers"}},BN:{1:{code:"BEL",name:"Belait"},2:{code:"BRM",name:"Brunei and Muara"},3:{code:"TEM",name:"Temburong"},4:{code:"TUT",name:"Tutong"}},BG:{1:{code:"BG-01",name:"Blagoevgrad"},2:{code:"BG-02",name:"Burgas"},3:{code:"BG-03",name:"Dobrich"},4:{code:"BG-04",name:"Gabrovo"},5:{code:"BG-05",name:"Haskovo"},6:{code:"BG-06",name:"Kardjali"},7:{code:"BG-07",name:"Kyustendil"},8:{code:"BG-08",name:"Lovech"},9:{code:"BG-09",name:"Montana"},10:{code:"BG-10",name:"Pazardjik"},11:{code:"BG-11",name:"Pernik"},12:{code:"BG-12",name:"Pleven"},13:{code:"BG-13",name:"Plovdiv"},14:{code:"BG-14",name:"Razgrad"},15:{code:"BG-15",name:"Shumen"},16:{code:"BG-16",name:"Silistra"},17:{code:"BG-17",name:"Sliven"},18:{code:"BG-18",name:"Smolyan"},19:{code:"BG-19",name:"Sofia"},20:{code:"BG-20",name:"Sofia - town"},21:{code:"BG-21",name:"Stara Zagora"},22:{code:"BG-22",name:"Targovishte"},23:{code:"BG-23",name:"Varna"},24:{code:"BG-24",name:"Veliko Tarnovo"},25:{code:"BG-25",name:"Vidin"},26:{code:"BG-26",name:"Vratza"},27:{code:"BG-27",name:"Yambol"}},BF:{1:{code:"BAL",name:"Bale"},2:{code:"BAM",name:"Bam"},3:{code:"BAN",name:"Banwa"},4:{code:"BAZ",name:"Bazega"},5:{code:"BOR",name:"Bougouriba"},6:{code:"BLG",name:"Boulgou"},7:{code:"BOK",name:"Boulkiemde"},8:{code:"COM",name:"Comoe"},9:{code:"GAN",name:"Ganzourgou"},10:{code:"GNA",name:"Gnagna"},11:{code:"GOU",name:"Gourma"},12:{code:"HOU",name:"Houet"},13:{code:"IOA",name:"Ioba"},14:{code:"KAD",name:"Kadiogo"},15:{code:"KEN",name:"Kenedougou"},16:{code:"KOD",name:"Komondjari"},17:{code:"KOP",name:"Kompienga"},18:{code:"KOS",name:"Kossi"},19:{code:"KOL",name:"Koulpelogo"},20:{code:"KOT",name:"Kouritenga"},21:{code:"KOW",name:"Kourweogo"},22:{code:"LER",name:"Leraba"},23:{code:"LOR",name:"Loroum"},24:{code:"MOU",name:"Mouhoun"},25:{code:"NAH",name:"Nahouri"},26:{code:"NAM",name:"Namentenga"},27:{code:"NAY",name:"Nayala"},28:{code:"NOU",name:"Noumbiel"},29:{code:"OUB",name:"Oubritenga"},30:{code:"OUD",name:"Oudalan"},31:{code:"PAS",name:"Passore"},32:{code:"PON",name:"Poni"},33:{code:"SAG",name:"Sanguie"},34:{code:"SAM",name:"Sanmatenga"},35:{code:"SEN",name:"Seno"},36:{code:"SIS",name:"Sissili"},37:{code:"SOM",name:"Soum"},38:{code:"SOR",name:"Sourou"},39:{code:"TAP",name:"Tapoa"},40:{code:"TUY",name:"Tuy"},41:{code:"YAG",name:"Yagha"},42:{code:"YAT",name:"Yatenga"},43:{code:"ZIR",name:"Ziro"},44:{code:"ZOD",name:"Zondoma"},45:{code:"ZOW",name:"Zoundweogo"}},BI:{1:{code:"BB",name:"Bubanza"},2:{code:"BJ",name:"Bujumbura"},3:{code:"BR",name:"Bururi"},4:{code:"CA",name:"Cankuzo"},5:{code:"CI",name:"Cibitoke"},6:{code:"GI",name:"Gitega"},7:{code:"KR",name:"Karuzi"},8:{code:"KY",name:"Kayanza"},9:{code:"KI",name:"Kirundo"},10:{code:"MA",name:"Makamba"},11:{code:"MU",name:"Muramvya"},12:{code:"MY",name:"Muyinga"},13:{code:"MW",name:"Mwaro"},14:{code:"NG",name:"Ngozi"},15:{code:"RT",name:"Rutana"},16:{code:"RY",name:"Ruyigi"}},KH:{1:{code:"BA",name:"Battambang"},2:{code:"BM",name:"Banteay Meanchey"},3:{code:"KB",name:"Keb"},4:{code:"KK",name:"Kaoh Kong"},5:{code:"KL",name:"Kandal"},6:{code:"KM",name:"Kampong Cham"},7:{code:"KN",name:"Kampong Chhnang"},8:{code:"KO",name:"Kampong Som"},9:{code:"KP",name:"Kampot"},10:{code:"KR",name:"Kratie"},11:{code:"KT",name:"Kampong Thom"},12:{code:"KU",name:"Kampong Speu"},13:{code:"MK",name:"Mondul Kiri"},14:{code:"OM",name:"Oddar Meancheay"},15:{code:"PA",name:"Pailin"},16:{code:"PG",name:"Prey Veng"},17:{code:"PP",name:"Phnom Penh"},18:{code:"PR",name:"Preah Vihear"},19:{code:"PS",name:"Preah Seihanu (Kompong Som or Si)"},20:{code:"PU",name:"Pursat"},21:{code:"RK",name:"Ratanak Kiri"},22:{code:"SI",name:"Siemreap"},23:{code:"SR",name:"Svay Rieng"},24:{code:"ST",name:"Stung Treng"},25:{code:"TK",name:"Takeo"}},CM:{1:{code:"ADA",name:"Adamawa (Adamaoua)"},2:{code:"CEN",name:"Centre"},3:{code:"EST",name:"East (Est)"},4:{code:"EXN",name:"Extrême-Nord"},5:{code:"LIT",name:"Littoral"},6:{code:"NOR",name:"North (Nord)"},7:{code:"NOT",name:"Northwest (Nord-Ouest)"},8:{code:"OUE",name:"West (Ouest)"},9:{code:"SUD",name:"South (Sud)"},10:{code:"SOU",name:"Southwest (Sud-Ouest)"}},CA:{1:{code:"AB",name:"Alberta"},2:{code:"BC",name:"British Columbia"},3:{code:"MB",name:"Manitoba"},4:{code:"NB",name:"New Brunswick"},5:{code:"NL",name:"Newfoundland and Labrador"},6:{code:"NT",name:"Northwest Territories"},7:{code:"NS",name:"Nova Scotia"},8:{code:"NU",name:"Nunavut"},9:{code:"ON",name:"Ontario"},10:{code:"PE",name:"Prince Edward Island"},11:{code:"QC",name:"Québec"},12:{code:"SK",name:"Saskatchewan"},13:{code:"YT",name:"Yukon Territory"}},CV:{1:{code:"BV",name:"Boa Vista"},2:{code:"BR",name:"Brava"},3:{code:"CS",name:"Calheta de Sao Miguel"},4:{code:"MA",name:"Maio"},5:{code:"MO",name:"Mosteiros"},6:{code:"PA",name:"Paul"},7:{code:"PN",name:"Porto Novo"},8:{code:"PR",name:"Praia"},9:{code:"RG",name:"Ribeira Grande"},10:{code:"SL",name:"Sal"},11:{code:"CA",name:"Santa Catarina"},12:{code:"CR",name:"Santa Cruz"},13:{code:"SD",name:"Sao Domingos"},14:{code:"SF",name:"Sao Filipe"},15:{code:"SN",name:"Sao Nicolau"},16:{code:"SV",name:"Sao Vicente"},17:{code:"TA",name:"Tarrafal"}},KY:{1:{code:"CR",name:"Creek"},2:{code:"EA",name:"Eastern"},3:{code:"ML",name:"Midland"},4:{code:"ST",name:"South Town"},5:{code:"SP",name:"Spot Bay"},6:{code:"SK",name:"Stake Bay"},7:{code:"WD",name:"West End"},8:{code:"WN",name:"Western"}},CF:{1:{code:"BAN",name:"Bangui"},2:{code:"BBA",name:"Bamingui-Bangoran"},3:{code:"BKO",name:"Basse-Kotto"},4:{code:"HKO",name:"Haute-Kotto"},5:{code:"HMB",name:"Haut-Mbomou"},6:{code:"KEM",name:"Kemo"},7:{code:"LOB",name:"Lobaye"},8:{code:"MBO",name:"Mbomou"},9:{code:"MKD",name:"Mambéré-Kadéï"},10:{code:"NGR",name:"Nana-Grebizi"},11:{code:"NMM",name:"Nana-Mambere"},12:{code:"OMP",name:"Ombella-M'Poko"},13:{code:"OPE",name:"Ouham-Pende"},14:{code:"OUH",name:"Ouham"},15:{code:"OUK",name:"Ouaka"},16:{code:"SMB",name:"Sangha-Mbaere"},17:{code:"VAK",name:"Vakaga"}},TD:{1:{code:"BA",name:"Batha"},2:{code:"BI",name:"Biltine"},3:{code:"BE",name:"Borkou-Ennedi-Tibesti"},4:{code:"CB",name:"Chari-Baguirmi"},5:{code:"GU",name:"Guera"},6:{code:"KA",name:"Kanem"},7:{code:"LA",name:"Lac"},8:{code:"LC",name:"Logone Occidental"},9:{code:"LR",name:"Logone Oriental"},10:{code:"MK",name:"Mayo-Kebbi"},11:{code:"MC",name:"Moyen-Chari"},12:{code:"OU",name:"Ouaddai"},13:{code:"SA",name:"Salamat"},14:{code:"TA",name:"Tandjile"}},CL:{1:{code:"AI",name:"Aisen del General Carlos Ibanez"},2:{code:"AN",name:"Antofagasta"},3:{code:"AR",name:"Araucania"},4:{code:"AT",name:"Atacama"},5:{code:"BI",name:"Bio-Bio"},6:{code:"CO",name:"Coquimbo"},7:{code:"LI",name:"Libertador General Bernardo O'Hi"},8:{code:"LL",name:"Los Lagos"},9:{code:"MA",name:"Magallanes y de la Antartica Chi"},10:{code:"ML",name:"Maule"},11:{code:"RM",name:"Region Metropolitana"},12:{code:"TA",name:"Tarapaca"},13:{code:"VS",name:"Valparaiso"}},CN:{1:{code:"AN",name:"Anhui"},2:{code:"BE",name:"Beijing"},3:{code:"CH",name:"Chongqing"},4:{code:"FU",name:"Fujian"},5:{code:"GA",name:"Gansu"},6:{code:"GU",name:"Guangdong"},7:{code:"GX",name:"Guangxi"},8:{code:"GZ",name:"Guizhou"},9:{code:"HA",name:"Hainan"},10:{code:"HB",name:"Hebei"},11:{code:"HL",name:"Heilongjiang"},12:{code:"HE",name:"Henan"},13:{code:"HK",name:"Hong Kong"},14:{code:"HU",name:"Hubei"},15:{code:"HN",name:"Hunan"},16:{code:"IM",name:"Inner Mongolia"},17:{code:"JI",name:"Jiangsu"},18:{code:"JX",name:"Jiangxi"},19:{code:"JL",name:"Jilin"},20:{code:"LI",name:"Liaoning"},21:{code:"MA",name:"Macau"},22:{code:"NI",name:"Ningxia"},23:{code:"SH",name:"Shaanxi"},24:{code:"SA",name:"Shandong"},25:{code:"SG",name:"Shanghai"},26:{code:"SX",name:"Shanxi"},27:{code:"SI",name:"Sichuan"},28:{code:"TI",name:"Tianjin"},29:{code:"XI",name:"Xinjiang"},30:{code:"YU",name:"Yunnan"},31:{code:"ZH",name:"Zhejiang"}},CC:{1:{code:"D",name:"Direction Island"},2:{code:"H",name:"Home Island"},3:{code:"O",name:"Horsburgh Island"},4:{code:"S",name:"South Island"},5:{code:"W",name:"West Island"}},CO:{1:{code:"AMZ",name:"Amazonas"},2:{code:"ANT",name:"Antioquia"},3:{code:"ARA",name:"Arauca"},4:{code:"ATL",name:"Atlantico"},5:{code:"BDC",name:"Bogota D.C."},6:{code:"BOL",name:"Bolivar"},7:{code:"BOY",name:"Boyaca"},8:{code:"CAL",name:"Caldas"},9:{code:"CAQ",name:"Caqueta"},10:{code:"CAS",name:"Casanare"},11:{code:"CAU",name:"Cauca"},12:{code:"CES",name:"Cesar"},13:{code:"CHO",name:"Choco"},14:{code:"COR",name:"Cordoba"},15:{code:"CAM",name:"Cundinamarca"},16:{code:"GNA",name:"Guainia"},17:{code:"GJR",name:"Guajira"},18:{code:"GVR",name:"Guaviare"},19:{code:"HUI",name:"Huila"},20:{code:"MAG",name:"Magdalena"},21:{code:"MET",name:"Meta"},22:{code:"NAR",name:"Narino"},23:{code:"NDS",name:"Norte de Santander"},24:{code:"PUT",name:"Putumayo"},25:{code:"QUI",name:"Quindio"},26:{code:"RIS",name:"Risaralda"},27:{code:"SAP",name:"San Andres y Providencia"},28:{code:"SAN",name:"Santander"},29:{code:"SUC",name:"Sucre"},30:{code:"TOL",name:"Tolima"},31:{code:"VDC",name:"Valle del Cauca"},32:{code:"VAU",name:"Vaupes"},33:{code:"VIC",name:"Vichada"}},KM:{1:{code:"G",name:"Grande Comore"},2:{code:"A",name:"Anjouan"},3:{code:"M",name:"Moheli"}},CG:{1:{code:"BO",name:"Bouenza"},2:{code:"BR",name:"Brazzaville"},3:{code:"CU",name:"Cuvette"},4:{code:"CO",name:"Cuvette-Ouest"},5:{code:"KO",name:"Kouilou"},6:{code:"LE",name:"Lekoumou"},7:{code:"LI",name:"Likouala"},8:{code:"NI",name:"Niari"},9:{code:"PL",name:"Plateaux"},10:{code:"PO",name:"Pool"},11:{code:"SA",name:"Sangha"}},CK:{1:{code:"AI",name:"Aitutaki"},2:{code:"AT",name:"Atiu"},3:{code:"MA",name:"Manuae"},4:{code:"MG",name:"Mangaia"},5:{code:"MK",name:"Manihiki"},6:{code:"MT",name:"Mitiaro"},7:{code:"MU",name:"Mauke"},8:{code:"NI",name:"Nassau Island"},9:{code:"PA",name:"Palmerston"},10:{code:"PE",name:"Penrhyn"},11:{code:"PU",name:"Pukapuka"},12:{code:"RK",name:"Rakahanga"},13:{code:"RR",name:"Rarotonga"},14:{code:"SU",name:"Surwarrow"},15:{code:"TA",name:"Takutea"}},CR:{1:{code:"AL",name:"Alajuela"},2:{code:"CA",name:"Cartago"},3:{code:"GU",name:"Guanacaste"},4:{code:"HE",name:"Heredia"},5:{code:"LI",name:"Limon"},6:{code:"PU",name:"Puntarenas"},7:{code:"SJ",name:"San Jose"}},CI:{1:{code:"ABE",name:"Abengourou"},2:{code:"ABI",name:"Abidjan"},3:{code:"ABO",name:"Aboisso"},4:{code:"ADI",name:"Adiake"},5:{code:"ADZ",name:"Adzope"},6:{code:"AGB",name:"Agboville"},7:{code:"AGN",name:"Agnibilekrou"},8:{code:"ALE",name:"Alepe"},9:{code:"BOC",name:"Bocanda"},10:{code:"BAN",name:"Bangolo"},11:{code:"BEO",name:"Beoumi"},12:{code:"BIA",name:"Biankouma"},13:{code:"BDK",name:"Bondoukou"},14:{code:"BGN",name:"Bongouanou"},15:{code:"BFL",name:"Bouafle"},16:{code:"BKE",name:"Bouake"},17:{code:"BNA",name:"Bouna"},18:{code:"BDL",name:"Boundiali"},19:{code:"DKL",name:"Dabakala"},20:{code:"DBU",name:"Dabou"},21:{code:"DAL",name:"Daloa"},22:{code:"DAN",name:"Danane"},23:{code:"DAO",name:"Daoukro"},24:{code:"DIM",name:"Dimbokro"},25:{code:"DIV",name:"Divo"},26:{code:"DUE",name:"Duekoue"},27:{code:"FER",name:"Ferkessedougou"},28:{code:"GAG",name:"Gagnoa"},29:{code:"GBA",name:"Grand-Bassam"},30:{code:"GLA",name:"Grand-Lahou"},31:{code:"GUI",name:"Guiglo"},32:{code:"ISS",name:"Issia"},33:{code:"JAC",name:"Jacqueville"},34:{code:"KAT",name:"Katiola"},35:{code:"KOR",name:"Korhogo"},36:{code:"LAK",name:"Lakota"},37:{code:"MAN",name:"Man"},38:{code:"MKN",name:"Mankono"},39:{code:"MBA",name:"Mbahiakro"},40:{code:"ODI",name:"Odienne"},41:{code:"OUM",name:"Oume"},42:{code:"SAK",name:"Sakassou"},43:{code:"SPE",name:"San-Pedro"},44:{code:"SAS",name:"Sassandra"},45:{code:"SEG",name:"Seguela"},46:{code:"SIN",name:"Sinfra"},47:{code:"SOU",name:"Soubre"},48:{code:"TAB",name:"Tabou"},49:{code:"TAN",name:"Tanda"},50:{code:"TIE",name:"Tiebissou"},51:{code:"TIN",name:"Tingrela"},52:{code:"TIA",name:"Tiassale"},53:{code:"TBA",name:"Touba"},54:{code:"TLP",name:"Toulepleu"},55:{code:"TMD",name:"Toumodi"},56:{code:"VAV",name:"Vavoua"},57:{code:"YAM",name:"Yamoussoukro"},58:{code:"ZUE",name:"Zuenoula"}},HR:{1:{code:"BB",name:"Bjelovar-Bilogora"},2:{code:"CZ",name:"City of Zagreb"},3:{code:"DN",name:"Dubrovnik-Neretva"},4:{code:"IS",name:"Istra"},5:{code:"KA",name:"Karlovac"},6:{code:"KK",name:"Koprivnica-Krizevci"},7:{code:"KZ",name:"Krapina-Zagorje"},8:{code:"LS",name:"Lika-Senj"},9:{code:"ME",name:"Medimurje"},10:{code:"OB",name:"Osijek-Baranja"},11:{code:"PS",name:"Pozega-Slavonia"},12:{code:"PG",name:"Primorje-Gorski Kotar"},13:{code:"SI",name:"Sibenik"},14:{code:"SM",name:"Sisak-Moslavina"},15:{code:"SB",name:"Slavonski Brod-Posavina"},16:{code:"SD",name:"Split-Dalmatia"},17:{code:"VA",name:"Varazdin"},18:{code:"VP",name:"Virovitica-Podravina"},19:{code:"VS",name:"Vukovar-Srijem"},20:{code:"ZK",name:"Zadar-Knin"},21:{code:"ZA",name:"Zagreb"}},CU:{1:{code:"CA",name:"Camaguey"},2:{code:"CD",name:"Ciego de Avila"},3:{code:"CI",name:"Cienfuegos"},4:{code:"CH",name:"Ciudad de La Habana"},5:{code:"GR",name:"Granma"},6:{code:"GU",name:"Guantanamo"},7:{code:"HO",name:"Holguin"},8:{code:"IJ",name:"Isla de la Juventud"},9:{code:"LH",name:"La Habana"},10:{code:"LT",name:"Las Tunas"},11:{code:"MA",name:"Matanzas"},12:{code:"PR",name:"Pinar del Rio"},13:{code:"SS",name:"Sancti Spiritus"},14:{code:"SC",name:"Santiago de Cuba"},15:{code:"VC",name:"Villa Clara"}},CY:{1:{code:"F",name:"Famagusta"},2:{code:"K",name:"Kyrenia"},3:{code:"A",name:"Larnaca"},4:{code:"I",name:"Limassol"},5:{code:"N",name:"Nicosia"},6:{code:"P",name:"Paphos"}},CZ:{1:{code:"A",name:"Hlavní město Praha"},2:{code:"B",name:"Jihomoravský"},3:{code:"C",name:"Jihočeský"},4:{code:"E",name:"Pardubický"},5:{code:"H",name:"Královéhradecký"},6:{code:"J",name:"Vysočina"},7:{code:"K",name:"Karlovarský"},8:{code:"L",name:"Liberecký"},9:{code:"M",name:"Olomoucký"},10:{code:"P",name:"Plzeňský"},11:{code:"S",name:"Středočeský"},12:{code:"T",name:"Moravskoslezský"},13:{code:"U",name:"Ústecký"},14:{code:"Z",name:"Zlínský"}},DK:{1:{code:"AR",name:"Arhus"},2:{code:"BH",name:"Bornholm"},3:{code:"CO",name:"Copenhagen"},4:{code:"FO",name:"Faroe Islands"},5:{code:"FR",name:"Frederiksborg"},6:{code:"FY",name:"Fyn"},7:{code:"KO",name:"Kobenhavn"},8:{code:"NO",name:"Nordjylland"},9:{code:"RI",name:"Ribe"},10:{code:"RK",name:"Ringkobing"},11:{code:"RO",name:"Roskilde"},12:{code:"SO",name:"Sonderjylland"},13:{code:"ST",name:"Storstrom"},14:{code:"VK",name:"Vejle"},15:{code:"VJ",name:"Vestjælland"},16:{code:"VB",name:"Viborg"}},DJ:{1:{code:"S",name:"'Ali Sabih"},2:{code:"K",name:"Dikhil"},3:{code:"J",name:"Djibouti"},4:{code:"O",name:"Obock"},5:{code:"T",name:"Tadjoura"}},DM:{1:{code:"AND",name:"Saint Andrew Parish"},2:{code:"DAV",name:"Saint David Parish"},3:{code:"GEO",name:"Saint George Parish"},4:{code:"JOH",name:"Saint John Parish"},5:{code:"JOS",name:"Saint Joseph Parish"},6:{code:"LUK",name:"Saint Luke Parish"},7:{code:"MAR",name:"Saint Mark Parish"},8:{code:"PAT",name:"Saint Patrick Parish"},9:{code:"PAU",name:"Saint Paul Parish"},10:{code:"PET",name:"Saint Peter Parish"}},DO:{1:{code:"DN",name:"Distrito Nacional"},2:{code:"AZ",name:"Azua"},3:{code:"BC",name:"Baoruco"},4:{code:"BH",name:"Barahona"},5:{code:"DJ",name:"Dajabon"},6:{code:"DU",name:"Duarte"},7:{code:"EL",name:"Elias Pina"},8:{code:"SY",name:"El Seybo"},9:{code:"ET",name:"Espaillat"},10:{code:"HM",name:"Hato Mayor"},11:{code:"IN",name:"Independencia"},12:{code:"AL",name:"La Altagracia"},13:{code:"RO",name:"La Romana"},14:{code:"VE",name:"La Vega"},15:{code:"MT",name:"Maria Trinidad Sanchez"},16:{code:"MN",name:"Monsenor Nouel"},17:{code:"MC",name:"Monte Cristi"},18:{code:"MP",name:"Monte Plata"},19:{code:"PD",name:"Pedernales"},20:{code:"PR",name:"Peravia (Bani)"},21:{code:"PP",name:"Puerto Plata"},22:{code:"SL",name:"Salcedo"},23:{code:"SM",name:"Samana"},24:{code:"SH",name:"Sanchez Ramirez"},25:{code:"SC",name:"San Cristobal"},26:{code:"JO",name:"San Jose de Ocoa"},27:{code:"SJ",name:"San Juan"},28:{code:"PM",name:"San Pedro de Macoris"},29:{code:"SA",name:"Santiago"},30:{code:"ST",name:"Santiago Rodriguez"},31:{code:"SD",name:"Santo Domingo"},32:{code:"VA",name:"Valverde"}},TP:{1:{code:"AL",name:"Aileu"},2:{code:"AN",name:"Ainaro"},3:{code:"BA",name:"Baucau"},4:{code:"BO",name:"Bobonaro"},5:{code:"CO",name:"Cova Lima"},6:{code:"DI",name:"Dili"},7:{code:"ER",name:"Ermera"},8:{code:"LA",name:"Lautem"},9:{code:"LI",name:"Liquica"},10:{code:"MT",name:"Manatuto"},11:{code:"MF",name:"Manufahi"},12:{code:"OE",name:"Oecussi"},13:{code:"VI",name:"Viqueque"}},EC:{1:{code:"AZU",name:"Azuay"},2:{code:"BOL",name:"Bolivar"},3:{code:"CAN",name:"Cañar"},4:{code:"CAR",name:"Carchi"},5:{code:"CHI",name:"Chimborazo"},6:{code:"COT",name:"Cotopaxi"},7:{code:"EOR",name:"El Oro"},8:{code:"ESM",name:"Esmeraldas"},9:{code:"GPS",name:"Galápagos"},10:{code:"GUA",name:"Guayas"},11:{code:"IMB",name:"Imbabura"},12:{code:"LOJ",name:"Loja"},13:{code:"LRO",name:"Los Ríos"},14:{code:"MAN",name:"Manabí"},15:{code:"MSA",name:"Morona Santiago"},16:{code:"NAP",name:"Napo"},17:{code:"ORE",name:"Orellana"},18:{code:"PAS",name:"Pastaza"},19:{code:"PIC",name:"Pichincha"},20:{code:"SUC",name:"Sucumbíos"},21:{code:"TUN",name:"Tungurahua"},22:{code:"ZCH",name:"Zamora Chinchipe"}},EG:{1:{code:"DHY",name:"Ad Daqahliyah"},2:{code:"BAM",name:"Al Bahr al Ahmar"},3:{code:"BHY",name:"Al Buhayrah"},4:{code:"FYM",name:"Al Fayyum"},5:{code:"GBY",name:"Al Gharbiyah"},6:{code:"IDR",name:"Al Iskandariyah"},7:{code:"IML",name:"Al Isma 'iliyah"},8:{code:"JZH",name:"Al Jizah"},9:{code:"MFY",name:"Al Minufiyah"},10:{code:"MNY",name:"Al Minya"},11:{code:"QHR",name:"Al Qahirah"},12:{code:"QLY",name:"Al Qalyubiyah"},13:{code:"WJD",name:"Al Wadi al Jadid"},14:{code:"SHQ",name:"Ash Sharqiyah"},15:{code:"SWY",name:"As Suways"},16:{code:"ASW",name:"Aswan"},17:{code:"ASY",name:"Asyut"},18:{code:"BSW",name:"Bani Suwayf"},19:{code:"BSD",name:"Bur Sa'id"},20:{code:"DMY",name:"Dumyat"},21:{code:"JNS",name:"Janub Sina'"},22:{code:"KSH",name:"Kafr ash Shaykh"},23:{code:"MAT",name:"Matruh"},24:{code:"QIN",name:"Qina"},25:{code:"SHS",name:"Shamal Sina'"},26:{code:"SUH",name:"Suhaj"}},SV:{1:{code:"AH",name:"Ahuachapan"},2:{code:"CA",name:"Cabanas"},3:{code:"CH",name:"Chalatenango"},4:{code:"CU",name:"Cuscatlan"},5:{code:"LB",name:"La Libertad"},6:{code:"PZ",name:"La Paz"},7:{code:"UN",name:"La Union"},8:{code:"MO",name:"Morazan"},9:{code:"SM",name:"San Miguel"},10:{code:"SS",name:"San Salvador"},11:{code:"SV",name:"San Vicente"},12:{code:"SA",name:"Santa Ana"},13:{code:"SO",name:"Sonsonate"},14:{code:"US",name:"Usulutan"}},GQ:{1:{code:"AN",name:"Provincia Annobon"},2:{code:"BN",name:"Provincia Bioko Norte"},3:{code:"BS",name:"Provincia Bioko Sur"},4:{code:"CS",name:"Provincia Centro Sur"},5:{code:"KN",name:"Provincia Kie-Ntem"},6:{code:"LI",name:"Provincia Litoral"},7:{code:"WN",name:"Provincia Wele-Nzas"}},ER:{1:{code:"MA",name:"Central (Maekel)"},2:{code:"KE",name:"Anseba (Keren)"},3:{code:"DK",name:"Southern Red Sea (Debub-Keih-Bah)"},4:{code:"SK",name:"Northern Red Sea (Semien-Keih-Ba)"},5:{code:"DE",name:"Southern (Debub)"},6:{code:"BR",name:"Gash-Barka (Barentu)"}},EE:{1:{code:"HA",name:"Harjumaa (Tallinn)"},2:{code:"HI",name:"Hiiumaa (Kardla)"},3:{code:"IV",name:"Ida-Virumaa (Johvi)"},4:{code:"JA",name:"Jarvamaa (Paide)"},5:{code:"JO",name:"Jogevamaa (Jogeva)"},6:{code:"LV",name:"Laane-Virumaa (Rakvere)"},7:{code:"LA",name:"Laanemaa (Haapsalu)"},8:{code:"PA",name:"Parnumaa (Parnu)"},9:{code:"PO",name:"Polvamaa (Polva)"},10:{code:"RA",name:"Raplamaa (Rapla)"},11:{code:"SA",name:"Saaremaa (Kuessaare)"},12:{code:"TA",name:"Tartumaa (Tartu)"},13:{code:"VA",name:"Valgamaa (Valga)"},14:{code:"VI",name:"Viljandimaa (Viljandi)"},15:{code:"VO",name:"Vorumaa (Voru)"}},ET:{1:{code:"AF",name:"Afar"},2:{code:"AH",name:"Amhara"},3:{code:"BG",name:"Benishangul-Gumaz"},4:{code:"GB",name:"Gambela"},5:{code:"HR",name:"Hariai"},6:{code:"OR",name:"Oromia"},7:{code:"SM",name:"Somali"},8:{code:"SN",name:"Southern Nations - Nationalities"},9:{code:"TG",name:"Tigray"},10:{code:"AA",name:"Addis Ababa"},11:{code:"DD",name:"Dire Dawa"}},FO:{1:{code:"TÛR",name:"Tûrshavnar Kommuna"},2:{code:"KLA",name:"Klaksvík"},3:{code:"RUN",name:"Runavík"},4:{code:"TVØ",name:"Tvøroyri"},5:{code:"FUG",name:"Fuglafjørður"},6:{code:"SUN",name:"Sunda Kommuna"},7:{code:"VáG",name:"Vágur"},8:{code:"NES",name:"Nes"},9:{code:"VES",name:"Vestmanna"},10:{code:"MIð",name:"Miðvágur"},11:{code:"SØR",name:"Sørvágur"},12:{code:"GØT",name:"Gøtu Kommuna"},13:{code:"SJû",name:"Sjûvar Kommuna"},14:{code:"LEI",name:"Leirvík"},15:{code:"SAN",name:"Sandavágur"},16:{code:"HVA",name:"Hvalba"},17:{code:"EIð",name:"Eiði"},18:{code:"KVí",name:"Kvívík"},19:{code:"SAN",name:"Sandur"},20:{code:"SKO",name:"Skopun"},21:{code:"HVA",name:"Hvannasund"},22:{code:"SUM",name:"Sumba"},23:{code:"VIð",name:"Viðareiði"},24:{code:"POR",name:"Porkeri"},25:{code:"SKá",name:"Skálavík"},26:{code:"KUN",name:"Kunoy"},27:{code:"HÚS",name:"HÚsavík"},28:{code:"HOV",name:"Hov"},29:{code:"FáM",name:"Fámjin"},30:{code:"FUN",name:"Funningur"},31:{code:"HÚS",name:"HÚsar"},32:{code:"SKÚ",name:"SkÚvoy"},33:{code:"SVí",name:"Svínoy"},34:{code:"FUG",name:"Fugloy"}},FJ:{1:{code:"C",name:"Central Division"},2:{code:"E",name:"Eastern Division"},3:{code:"N",name:"Northern Division"},4:{code:"R",name:"Rotuma"},5:{code:"W",name:"Western Division"}},FI:{1:{code:"AL",name:"Ahvenanmaan Laani"},2:{code:"ES",name:"Etela-Suomen Laani"},3:{code:"IS",name:"Ita-Suomen Laani"},4:{code:"LS",name:"Lansi-Suomen Laani"},5:{code:"LA",name:"Lapin Lanani"},6:{code:"OU",name:"Oulun Laani"}},FR:{1:{code:"AL",name:"Alsace"},2:{code:"AQ",name:"Aquitaine"},3:{code:"AU",name:"Auvergne"},4:{code:"BR",name:"Brittany"},5:{code:"BU",name:"Burgundy"},6:{code:"CE",name:"Center Loire Valley"},7:{code:"CH",name:"Champagne"},8:{code:"CO",name:"Corse"},9:{code:"FR",name:"France Comte"},10:{code:"LA",name:"Languedoc Roussillon"},11:{code:"LI",name:"Limousin"},12:{code:"LO",name:"Lorraine"},13:{code:"MI",name:"Midi Pyrenees"},14:{code:"NO",name:"Nord Pas de Calais"},15:{code:"NR",name:"Normandy"},16:{code:"PA",name:"Paris / Ile de France"},17:{code:"PI",name:"Picardie"},18:{code:"PO",name:"Poitou Charente"},19:{code:"PR",name:"Provence"},20:{code:"RH",name:"Rhone Alps"},21:{code:"RI",name:"Riviera"},22:{code:"WE",name:"Western Loire Valley"}},FX:{1:{code:"Et",name:"Etranger"},2:{code:"01",name:"Ain"},3:{code:"02",name:"Aisne"},4:{code:"03",name:"Allier"},5:{code:"04",name:"Alpes de Haute Provence"},6:{code:"05",name:"Hautes-Alpes"},7:{code:"06",name:"Alpes Maritimes"},8:{code:"07",name:"Ardèche"},9:{code:"08",name:"Ardennes"},10:{code:"09",name:"Ariège"},11:{code:"10",name:"Aube"},12:{code:"11",name:"Aude"},13:{code:"12",name:"Aveyron"},14:{code:"13",name:"Bouches du Rhône"},15:{code:"14",name:"Calvados"},16:{code:"15",name:"Cantal"},17:{code:"16",name:"Charente"},18:{code:"17",name:"Charente Maritime"},19:{code:"18",name:"Cher"},20:{code:"19",name:"Corrèze"},21:{code:"2A",name:"Corse du Sud"},22:{code:"2B",name:"Haute Corse"},23:{code:"21",name:"Côte d'or"},24:{code:"22",name:"Côtes d'Armor"},25:{code:"23",name:"Creuse"},26:{code:"24",name:"Dordogne"},27:{code:"25",name:"Doubs"},28:{code:"26",name:"Drôme"},29:{code:"27",name:"Eure"},30:{code:"28",name:"Eure et Loir"},31:{code:"29",name:"Finistère"},32:{code:"30",name:"Gard"},33:{code:"31",name:"Haute Garonne"},34:{code:"32",name:"Gers"},35:{code:"33",name:"Gironde"},36:{code:"34",name:"Hérault"},37:{code:"35",name:"Ille et Vilaine"},38:{code:"36",name:"Indre"},39:{code:"37",name:"Indre et Loire"},40:{code:"38",name:"Isére"},41:{code:"39",name:"Jura"},42:{code:"40",name:"Landes"},43:{code:"41",name:"Loir et Cher"},44:{code:"42",name:"Loire"},45:{code:"43",name:"Haute Loire"},46:{code:"44",name:"Loire Atlantique"},47:{code:"45",name:"Loiret"},48:{code:"46",name:"Lot"},49:{code:"47",name:"Lot et Garonne"},50:{code:"48",name:"Lozère"},51:{code:"49",name:"Maine et Loire"},52:{code:"50",name:"Manche"},53:{code:"51",name:"Marne"},54:{code:"52",name:"Haute Marne"},55:{code:"53",name:"Mayenne"},56:{code:"54",name:"Meurthe et Moselle"},57:{code:"55",name:"Meuse"},58:{code:"56",name:"Morbihan"},59:{code:"57",name:"Moselle"},60:{code:"58",name:"Nièvre"},61:{code:"59",name:"Nord"},62:{code:"60",name:"Oise"},63:{code:"61",name:"Orne"},64:{code:"62",name:"Pas de Calais"},65:{code:"63",name:"Puy de Dôme"},66:{code:"64",name:"Pyrenees Atlantique"},67:{code:"65",name:"Hautes Pyrenees"},68:{code:"66",name:"Pyrenees Orientale"},69:{code:"67",name:"Bas Rhin"},70:{code:"68",name:"Haut Rhin"},71:{code:"69",name:"Rhône"},72:{code:"70",name:"Haute Saône"},73:{code:"71",name:"Saône et Loire"},74:{code:"72",name:"Sarthe"},75:{code:"73",name:"Savoie"},76:{code:"74",name:"Haute Savoie"},77:{code:"75",name:"Paris"},78:{code:"76",name:"Seine Martitime"},79:{code:"77",name:"Seine et Marne"},80:{code:"78",name:"Yvelines"},81:{code:"79",name:"Deux Sèvres"},82:{code:"80",name:"Somme"},83:{code:"81",name:"Tarn"},84:{code:"82",name:"Tarn et Garonne"},85:{code:"83",name:"Var"},86:{code:"84",name:"Vaucluse"},87:{code:"85",name:"Vendée"},88:{code:"86",name:"Vienne"},89:{code:"87",name:"Haute Vienne"},90:{code:"88",name:"Vosges"},91:{code:"89",name:"Yonne"},92:{code:"90",name:"Territoire de Belfort"},93:{code:"91",name:"Essonne"},94:{code:"92",name:"Hauts de Seine"},95:{code:"93",name:"Seine St-Denis"},96:{code:"94",name:"Val de Marne"},97:{code:"95",name:"Val d'oise"}},GF:{1:{code:"AWA",name:"Awala-Yalimapo"},2:{code:"MAN",name:"Mana"},3:{code:"SAI",name:"Saint-Laurent-Du-Maroni"},4:{code:"APA",name:"Apatou"},5:{code:"GRA",name:"Grand-Santi"},6:{code:"PAP",name:"Papaïchton"},7:{code:"SAÜ",name:"SaÜl"},8:{code:"MAR",name:"Maripasoula"},9:{code:"CAM",name:"Camopi"},10:{code:"SAI",name:"Saint-Georges"},11:{code:"OUA",name:"Ouanary"},12:{code:"RéG",name:"Régina"},13:{code:"ROU",name:"Roura"},14:{code:"SAI",name:"Saint-élie"},15:{code:"IRA",name:"Iracoubo"},16:{code:"SIN",name:"Sinnamary"},17:{code:"KOU",name:"Kourou"},18:{code:"MAC",name:"Macouria"},19:{code:"MON",name:"Montsinéry-Tonnegrande"},20:{code:"MAT",name:"Matoury"},21:{code:"CAY",name:"Cayenne"},22:{code:"REM",name:"Remire-Montjoly"}},PF:{1:{code:"M",name:"Archipel des Marquises"},2:{code:"T",name:"Archipel des Tuamotu"},3:{code:"I",name:"Archipel des Tubuai"},4:{code:"V",name:"Iles du Vent"},5:{code:"S",name:"Iles Sous-le-Vent"}},TF:{1:{code:"C",name:"Iles Crozet"},2:{code:"K",name:"Iles Kerguelen"},3:{code:"A",name:"Ile Amsterdam"},4:{code:"P",name:"Ile Saint-Paul"},5:{code:"D",name:"Adelie Land"}},GA:{1:{code:"ES",name:"Estuaire"},2:{code:"HO",name:"Haut-Ogooue"},3:{code:"MO",name:"Moyen-Ogooue"},4:{code:"NG",name:"Ngounie"},5:{code:"NY",name:"Nyanga"},6:{code:"OI",name:"Ogooue-Ivindo"},7:{code:"OL",name:"Ogooue-Lolo"},8:{code:"OM",name:"Ogooue-Maritime"},9:{code:"WN",name:"Woleu-Ntem"}},GM:{1:{code:"BJ",name:"Banjul"},2:{code:"BS",name:"Basse"},3:{code:"BR",name:"Brikama"},4:{code:"JA",name:"Janjangbure"},5:{code:"KA",name:"Kanifeng"},6:{code:"KE",name:"Kerewan"},7:{code:"KU",name:"Kuntaur"},8:{code:"MA",name:"Mansakonko"},9:{code:"LR",name:"Lower River"},10:{code:"CR",name:"Central River"},11:{code:"NB",name:"North Bank"},12:{code:"UR",name:"Upper River"},13:{code:"WE",name:"Western"}},GE:{1:{code:"AB",name:"Abkhazia"},2:{code:"AJ",name:"Ajaria"},3:{code:"GU",name:"Guria"},4:{code:"IM",name:"Imereti"},5:{code:"KA",name:"Kakheti"},6:{code:"KK",name:"Kvemo Kartli"},7:{code:"MM",name:"Mtskheta-Mtianeti"},8:{code:"RL",name:"Racha Lechkhumi and Kvemo Svanet"},9:{code:"SJ",name:"Samtskhe-Javakheti"},10:{code:"SK",name:"Shida Kartli"},11:{code:"SZ",name:"Samegrelo-Zemo Svaneti"},12:{code:"TB",name:"Tbilisi"}},DE:{1:{code:"BAW",name:"Baden-Württemberg"},2:{code:"BAY",name:"Bayern"},3:{code:"BER",name:"Berlin"},4:{code:"BRG",name:"Brandenburg"},5:{code:"BRE",name:"Bremen"},6:{code:"HAM",name:"Hamburg"},7:{code:"HES",name:"Hessen"},8:{code:"MEC",name:"Mecklenburg-Vorpommern"},9:{code:"NDS",name:"Niedersachsen"},10:{code:"NRW",name:"Nordrhein-Westfalen"},11:{code:"RHE",name:"Rheinland-Pfalz"},12:{code:"SAR",name:"Saarland"},13:{code:"SAS",name:"Sachsen"},14:{code:"SAC",name:"Sachsen-Anhalt"},15:{code:"SCN",name:"Schleswig-Holstein"},16:{code:"THE",name:"Thüringen"}},GH:{1:{code:"AS",name:"Ashanti Region"},2:{code:"BA",name:"Brong-Ahafo Region"},3:{code:"CE",name:"Central Region"},4:{code:"EA",name:"Eastern Region"},5:{code:"GA",name:"Greater Accra Region"},6:{code:"NO",name:"Northern Region"},7:{code:"UE",name:"Upper East Region"},8:{code:"UW",name:"Upper West Region"},9:{code:"VO",name:"Volta Region"},10:{code:"WE",name:"Western Region"}},GI:{1:{code:"EAS",name:"East Side"},2:{code:"NOR",name:"North District"},3:{code:"REC",name:"Reclamation Areas"},4:{code:"SAN",name:"Sandpits Area"},5:{code:"SOU",name:"South District"},6:{code:"TOW",name:"Town Area"},7:{code:"UPP",name:"Upper Town"},8:{code:"OTH",name:"Other"}},GR:{1:{code:"AT",name:"Attica"},2:{code:"CN",name:"Central Greece"},3:{code:"CM",name:"Central Macedonia"},4:{code:"CR",name:"Crete"},5:{code:"EM",name:"East Macedonia and Thrace"},6:{code:"EP",name:"Epirus"},7:{code:"II",name:"Ionian Islands"},8:{code:"NA",name:"North Aegean"},9:{code:"PP",name:"Peloponnesos"},10:{code:"SA",name:"South Aegean"},11:{code:"TH",name:"Thessaly"},12:{code:"WG",name:"West Greece"},13:{code:"WM",name:"West Macedonia"}},GL:{1:{code:"A",name:"Avannaa"},2:{code:"T",name:"Tunu"},3:{code:"K",name:"Kitaa"}},86:{1:{code:"A",name:"Saint Andrew"},2:{code:"D",name:"Saint David"},3:{code:"G",name:"Saint George"},4:{code:"J",name:"Saint John"},5:{code:"M",name:"Saint Mark"},6:{code:"P",name:"Saint Patrick"},7:{code:"C",name:"Carriacou"},8:{code:"Q",name:"Petit Martinique"}},GP:{1:{code:"ARR",name:"Arrondissements Of The Guadeloup"},2:{code:"CAN",name:"Cantons Of The Guadeloup Depart"},3:{code:"COM",name:"Communes Of The Guadeloup Depart"}},GU:{1:{code:"AGA",name:"Agana Heights"},2:{code:"AGA",name:"Agat"},3:{code:"ASA",name:"Asan Maina"},4:{code:"BAR",name:"Barrigada"},5:{code:"CHA",name:"Chalan Pago Ordot"},6:{code:"DED",name:"Dededo"},7:{code:"HAG",name:"HagÅtña"},8:{code:"INA",name:"Inarajan"},9:{code:"MAN",name:"Mangilao"},10:{code:"MER",name:"Merizo"},11:{code:"MON",name:"Mongmong Toto Maite"},12:{code:"PIT",name:"Piti"},13:{code:"SAN",name:"Santa Rita"},14:{code:"SIN",name:"Sinajana"},15:{code:"TAL",name:"Talofofo"},16:{code:"TAM",name:"Tamuning"},17:{code:"UMA",name:"Umatac"},18:{code:"YIG",name:"Yigo"},19:{code:"YON",name:"Yona"}},GT:{1:{code:"AV",name:"Alta Verapaz"},2:{code:"BV",name:"Baja Verapaz"},3:{code:"CM",name:"Chimaltenango"},4:{code:"CQ",name:"Chiquimula"},5:{code:"PE",name:"El Peten"},6:{code:"PR",name:"El Progreso"},7:{code:"QC",name:"El Quiche"},8:{code:"ES",name:"Escuintla"},9:{code:"GU",name:"Guatemala"},10:{code:"HU",name:"Huehuetenango"},11:{code:"IZ",name:"Izabal"},12:{code:"JA",name:"Jalapa"},13:{code:"JU",name:"Jutiapa"},14:{code:"QZ",name:"Quetzaltenango"},15:{code:"RE",name:"Retalhuleu"},16:{code:"ST",name:"Sacatepequez"},17:{code:"SM",name:"San Marcos"},18:{code:"SR",name:"Santa Rosa"},19:{code:"SO",name:"Solola"},20:{code:"SU",name:"Suchitepequez"},21:{code:"TO",name:"Totonicapan"},22:{code:"ZA",name:"Zacapa"}},GN:{1:{code:"CNK",name:"Conakry"},2:{code:"BYL",name:"Beyla"},3:{code:"BFA",name:"Boffa"},4:{code:"BOK",name:"Boke"},5:{code:"COY",name:"Coyah"},6:{code:"DBL",name:"Dabola"},7:{code:"DLB",name:"Dalaba"},8:{code:"DGR",name:"Dinguiraye"},9:{code:"DBR",name:"Dubreka"},10:{code:"FRN",name:"Faranah"},11:{code:"FRC",name:"Forecariah"},12:{code:"FRI",name:"Fria"},13:{code:"GAO",name:"Gaoual"},14:{code:"GCD",name:"Gueckedou"},15:{code:"KNK",name:"Kankan"},16:{code:"KRN",name:"Kerouane"},17:{code:"KND",name:"Kindia"},18:{code:"KSD",name:"Kissidougou"},19:{code:"KBA",name:"Koubia"},20:{code:"KDA",name:"Koundara"},21:{code:"KRA",name:"Kouroussa"},22:{code:"LAB",name:"Labe"},23:{code:"LLM",name:"Lelouma"},24:{code:"LOL",name:"Lola"},25:{code:"MCT",name:"Macenta"},26:{code:"MAL",name:"Mali"},27:{code:"MAM",name:"Mamou"},28:{code:"MAN",name:"Mandiana"},29:{code:"NZR",name:"Nzerekore"},30:{code:"PIT",name:"Pita"},31:{code:"SIG",name:"Siguiri"},32:{code:"TLM",name:"Telimele"},33:{code:"TOG",name:"Tougue"},34:{code:"YOM",name:"Yomou"}},GW:{1:{code:"BF",name:"Bafata Region"},2:{code:"BB",name:"Biombo Region"},3:{code:"BS",name:"Bissau Region"},4:{code:"BL",name:"Bolama Region"},5:{code:"CA",name:"Cacheu Region"},6:{code:"GA",name:"Gabu Region"},7:{code:"OI",name:"Oio Region"},8:{code:"QU",name:"Quinara Region"},9:{code:"TO",name:"Tombali Region"}},GY:{1:{code:"BW",name:"Barima-Waini"},2:{code:"CM",name:"Cuyuni-Mazaruni"},3:{code:"DM",name:"Demerara-Mahaica"},4:{code:"EC",name:"East Berbice-Corentyne"},5:{code:"EW",name:"Essequibo Islands-West Demerara"},6:{code:"MB",name:"Mahaica-Berbice"},7:{code:"PM",name:"Pomeroon-Supenaam"},8:{code:"PI",name:"Potaro-Siparuni"},9:{code:"UD",name:"Upper Demerara-Berbice"},10:{code:"UT",name:"Upper Takutu-Upper Essequibo"}},HT:{1:{code:"AR",name:"Artibonite"},2:{code:"CE",name:"Centre"},3:{code:"GA",name:"Grand'Anse"},4:{code:"ND",name:"Nord"},5:{code:"NE",name:"Nord-Est"},6:{code:"NO",name:"Nord-Ouest"},7:{code:"OU",name:"Ouest"},8:{code:"SD",name:"Sud"},9:{code:"SE",name:"Sud-Est"}},HM:{1:{code:"F",name:"Flat Island"},2:{code:"M",name:"McDonald Island"},3:{code:"S",name:"Shag Island"},4:{code:"H",name:"Heard Island"}},HN:{1:{code:"AT",name:"Atlantida"},2:{code:"CH",name:"Choluteca"},3:{code:"CL",name:"Colon"},4:{code:"CM",name:"Comayagua"},5:{code:"CP",name:"Copan"},6:{code:"CR",name:"Cortes"},7:{code:"PA",name:"El Paraiso"},8:{code:"FM",name:"Francisco Morazan"},9:{code:"GD",name:"Gracias a Dios"},10:{code:"IN",name:"Intibuca"},11:{code:"IB",name:"Islas de la Bahia (Bay Islands)"},12:{code:"PZ",name:"La Paz"},13:{code:"LE",name:"Lempira"},14:{code:"OC",name:"Ocotepeque"},15:{code:"OL",name:"Olancho"},16:{code:"SB",name:"Santa Barbara"},17:{code:"VA",name:"Valle"},18:{code:"YO",name:"Yoro"}},HK:{1:{code:"HCW",name:"Central and Western Hong Kong Is"},2:{code:"HEA",name:"Eastern Hong Kong Island"},3:{code:"HSO",name:"Southern Hong Kong Island"},4:{code:"HWC",name:"Wan Chai Hong Kong Island"},5:{code:"KKC",name:"Kowloon City Kowloon"},6:{code:"KKT",name:"Kwun Tong Kowloon"},7:{code:"KSS",name:"Sham Shui Po Kowloon"},8:{code:"KWT",name:"Wong Tai Sin Kowloon"},9:{code:"KYT",name:"Yau Tsim Mong Kowloon"},10:{code:"NIS",name:"Islands New Territories"},11:{code:"NKT",name:"Kwai Tsing New Territories"},12:{code:"NNO",name:"North New Territories"},13:{code:"NSK",name:"Sai Kung New Territories"},14:{code:"NST",name:"Sha Tin New Territories"},15:{code:"NTP",name:"Tai Po New Territories"},16:{code:"NTW",name:"Tsuen Wan New Territories"},17:{code:"NTM",name:"Tuen Mun New Territories"},18:{code:"NYL",name:"Yuen Long New Territories"}},HU:{1:{code:"BK",name:"Bacs-Kiskun"},2:{code:"BA",name:"Baranya"},3:{code:"BE",name:"Bekes"},4:{code:"BS",name:"Bekescsaba"},5:{code:"BZ",name:"Borsod-Abauj-Zemplen"},6:{code:"BU",name:"Budapest"},7:{code:"CS",name:"Csongrad"},8:{code:"DE",name:"Debrecen"},9:{code:"DU",name:"Dunaujvaros"},10:{code:"EG",name:"Eger"},11:{code:"FE",name:"Fejer"},12:{code:"GY",name:"Gyor"},13:{code:"GM",name:"Gyor-Moson-Sopron"},14:{code:"HB",name:"Hajdu-Bihar"},15:{code:"HE",name:"Heves"},16:{code:"HO",name:"Hodmezovasarhely"},17:{code:"JN",name:"Jasz-Nagykun-Szolnok"},18:{code:"KA",name:"Kaposvar"},19:{code:"KE",name:"Kecskemet"},20:{code:"KO",name:"Komarom-Esztergom"},21:{code:"MI",name:"Miskolc"},22:{code:"NA",name:"Nagykanizsa"},23:{code:"NO",name:"Nograd"},24:{code:"NY",name:"Nyiregyhaza"},25:{code:"PE",name:"Pecs"},26:{code:"PS",name:"Pest"},27:{code:"SO",name:"Somogy"},28:{code:"SP",name:"Sopron"},29:{code:"SS",name:"Szabolcs-Szatmar-Bereg"},30:{code:"SZ",name:"Szeged"},31:{code:"SE",name:"Szekesfehervar"},32:{code:"SL",name:"Szolnok"},33:{code:"SM",name:"Szombathely"},34:{code:"TA",name:"Tatabanya"},35:{code:"TO",name:"Tolna"},36:{code:"VA",name:"Vas"},37:{code:"VE",name:"Veszprem"},38:{code:"ZA",name:"Zala"},39:{code:"ZZ",name:"Zalaegerszeg"}},IS:{1:{code:"AL",name:"Austurland"},2:{code:"HF",name:"Hofuoborgarsvaeoi"},3:{code:"NE",name:"Norourland eystra"},4:{code:"NV",name:"Norourland vestra"},5:{code:"SL",name:"Suourland"},6:{code:"SN",name:"Suournes"},7:{code:"VF",name:"Vestfiroir"},8:{code:"VL",name:"Vesturland"}},IN:{1:{code:"AN",name:"Andaman and Nicobar Islands"},2:{code:"AP",name:"Andhra Pradesh"},3:{code:"AR",name:"Arunachal Pradesh"},4:{code:"AS",name:"Assam"},5:{code:"BI",name:"Bihar"},6:{code:"CH",name:"Chandigarh"},7:{code:"DA",name:"Dadra and Nagar Haveli"},8:{code:"DM",name:"Daman and Diu"},9:{code:"DE",name:"Delhi"},10:{code:"GO",name:"Goa"},11:{code:"GU",name:"Gujarat"},12:{code:"HA",name:"Haryana"},13:{code:"HP",name:"Himachal Pradesh"},14:{code:"JA",name:"Jammu and Kashmir"},15:{code:"KA",name:"Karnataka"},16:{code:"KE",name:"Kerala"},17:{code:"LI",name:"Lakshadweep Islands"},18:{code:"MP",name:"Madhya Pradesh"},19:{code:"MA",name:"Maharashtra"},20:{code:"MN",name:"Manipur"},21:{code:"ME",name:"Meghalaya"},22:{code:"MI",name:"Mizoram"},23:{code:"NA",name:"Nagaland"},24:{code:"OR",name:"Orissa"},25:{code:"PO",name:"Pondicherry"},26:{code:"PU",name:"Punjab"},27:{code:"RA",name:"Rajasthan"},28:{code:"SI",name:"Sikkim"},29:{code:"TN",name:"Tamil Nadu"},30:{code:"TR",name:"Tripura"},31:{code:"UP",name:"Uttar Pradesh"},32:{code:"WB",name:"West Bengal"}},ID:{1:{code:"DA",name:"Daista Aceh"},2:{code:"SU",name:"Sumatera Utara"},3:{code:"SB",name:"Sumatera Barat"},4:{code:"SI",name:"Riau"},5:{code:"JA",name:"Jambi"},6:{code:"SS",name:"Sumatera Selatan"},7:{code:"BE",name:"Bengkulu"},8:{code:"LA",name:"Lampung"},9:{code:"JK",name:"Dki Jakarta"},10:{code:"JB",name:"Jawa Barat"},11:{code:"JT",name:"Jawa Tengah"},12:{code:"DY",name:"Daista Yogyakarta"},13:{code:"JT",name:"Jawa Timur"},14:{code:"KB",name:"Kalimantan Barat"},15:{code:"KT",name:"Kalimantan Tengah"},16:{code:"KI",name:"Kalimantan Timur"},17:{code:"KS",name:"Kalimantan Selatan"},18:{code:"BA",name:"Bali"},19:{code:"NB",name:"Nusa Tenggara Barat"},20:{code:"NT",name:"Nusa Tenggara Timur"},21:{code:"SN",name:"Sulawesi Selatan"},22:{code:"ST",name:"Sulawesi Tengah"},23:{code:"SA",name:"Sulawesi Utara"},24:{code:"SG",name:"Sulawesi Tenggara"},25:{code:"MA",name:"Maluku"},26:{code:"MU",name:"Maluku Utara"},27:{code:"IJ",name:"Irian Jaya Timur"},28:{code:"IT",name:"Irian Jaya Tengah"},29:{code:"IB",name:"Irian Jawa Barat"},30:{code:"BT",name:"Banten"},31:{code:"BB",name:"Bangka Belitung"},32:{code:"GO",name:"Gorontalo"}},IR:{1:{code:"ARD",name:"Ardabil"},2:{code:"BSH",name:"Bushehr"},3:{code:"CMB",name:"Chahar Mahaal and Bakhtiari"},4:{code:"EAZ",name:"East Azarbaijan"},5:{code:"EFH",name:"Esfahan"},6:{code:"FAR",name:"Fars"},7:{code:"GIL",name:"Gilan"},8:{code:"GLS",name:"Golestan"},9:{code:"HMD",name:"Hamadan"},10:{code:"HRM",name:"Hormozgan"},11:{code:"ILM",name:"Ilam"},12:{code:"KBA",name:"Kohkiluyeh and Buyer Ahmad"},13:{code:"KRB",name:"Kerman"},14:{code:"KRD",name:"Kurdistan"},15:{code:"KRM",name:"Kermanshah"},16:{code:"KZT",name:"Khuzestan"},17:{code:"LRS",name:"Lorestan"},18:{code:"MKZ",name:"Markazi"},19:{code:"MZD",name:"Mazandaran"},20:{code:"NKH",name:"North Khorasan"},21:{code:"QAZ",name:"Qazvin"},22:{code:"QOM",name:"Qom"},23:{code:"RKH",name:"Razavi Khorasan"},24:{code:"SBL",name:"Sistan and Baluchistan"},25:{code:"SKH",name:"South Khorasan"},26:{code:"SMN",name:"Semnan"},27:{code:"TEH",name:"Tehran"},28:{code:"WEZ",name:"West Azarbaijan"},29:{code:"YZD",name:"Yazd"},30:{code:"ZAN",name:"Zanjan"}},IQ:{1:{code:"AB",name:"Al Anbar"},2:{code:"AL",name:"Arbil"},3:{code:"BA",name:"Al Basrah"},4:{code:"BB",name:"Babil"},5:{code:"BD",name:"Baghdad"},6:{code:"DH",name:"Dahuk"},7:{code:"DQ",name:"Dhi Qar"},8:{code:"DY",name:"Diyala"},9:{code:"KB",name:"Al Karbala"},10:{code:"MU",name:"Al Muthanna"},11:{code:"MY",name:"Maysan"},12:{code:"NJ",name:"An Najaf"},13:{code:"NN",name:"Ninawa"},14:{code:"QA",name:"Al Qadisyah"},15:{code:"SD",name:"Salah ad Din"},16:{code:"SL",name:"As Sulaymaniyah"},17:{code:"TM",name:"At Ta'mim"},18:{code:"WS",name:"Wasit"}},IE:{1:{code:"CA",name:"Carlow"},2:{code:"CV",name:"Cavan"},3:{code:"CL",name:"Clare"},4:{code:"CO",name:"Cork"},5:{code:"DO",name:"Donegal"},6:{code:"DU",name:"Dublin"},7:{code:"GA",name:"Galway"},8:{code:"KE",name:"Kerry"},9:{code:"KI",name:"Kildare"},10:{code:"KL",name:"Kilkenny"},11:{code:"LA",name:"Laois"},12:{code:"LE",name:"Leitrim"},13:{code:"LI",name:"Limerick"},14:{code:"LO",name:"Longford"},15:{code:"LU",name:"Louth"},16:{code:"MA",name:"Mayo"},17:{code:"ME",name:"Meath"},18:{code:"MO",name:"Monaghan"},19:{code:"OF",name:"Offaly"},20:{code:"RO",name:"Roscommon"},21:{code:"SL",name:"Sligo"},22:{code:"TI",name:"Tipperary"},23:{code:"WA",name:"Waterford"},24:{code:"WE",name:"Westmeath"},25:{code:"WX",name:"Wexford"},26:{code:"WI",name:"Wicklow"}},IL:{1:{code:"BS",name:"Be'er Sheva"},2:{code:"BH",name:"Bika'at Hayarden"},3:{code:"EA",name:"Eilat and Arava"},4:{code:"GA",name:"Galil"},5:{code:"HA",name:"Haifa"},6:{code:"JM",name:"Jehuda Mountains"},7:{code:"JE",name:"Jerusalem"},8:{code:"NE",name:"Negev"},10:{code:"SE",name:"Semaria"},11:{code:"SH",name:"Sharon"},12:{code:"TA",name:"Tel Aviv (Gosh Dan)"}},IT:{1:{code:"AG",name:"Agrigento"},2:{code:"AL",name:"Alessandria"},3:{code:"AN",name:"Ancona"},4:{code:"AO",name:"Aosta"},5:{code:"AR",name:"Arezzo"},6:{code:"AP",name:"Ascoli Piceno"},7:{code:"AT",name:"Asti"},8:{code:"AV",name:"Avellino"},9:{code:"BA",name:"Bari"},10:{code:"BL",name:"Belluno"},11:{code:"BN",name:"Benevento"},12:{code:"BG",name:"Bergamo"},13:{code:"BI",name:"Biella"},14:{code:"BO",name:"Bologna"},15:{code:"BZ",name:"Bolzano"},16:{code:"BS",name:"Brescia"},17:{code:"BR",name:"Brindisi"},18:{code:"CA",name:"Cagliari"},19:{code:"CL",name:"Caltanissetta"},20:{code:"CB",name:"Campobasso"},21:{code:"CE",name:"Caserta"},22:{code:"CT",name:"Catania"},23:{code:"CZ",name:"Catanzaro"},24:{code:"CH",name:"Chieti"},25:{code:"CO",name:"Como"},26:{code:"CS",name:"Cosenza"},27:{code:"CR",name:"Cremona"},28:{code:"KR",name:"Crotone"},29:{code:"CN",name:"Cuneo"},30:{code:"EN",name:"Enna"},31:{code:"FE",name:"Ferrara"},32:{code:"FI",name:"Firenze"},33:{code:"FG",name:"Foggia"},34:{code:"FO",name:"Forlì"},35:{code:"FR",name:"Frosinone"},36:{code:"GE",name:"Genova"},37:{code:"GO",name:"Gorizia"},38:{code:"GR",name:"Grosseto"},39:{code:"IM",name:"Imperia"},40:{code:"IS",name:"Isernia"},41:{code:"AQ",name:"Aquila"},42:{code:"SP",name:"La Spezia"},43:{code:"LT",name:"Latina"},44:{code:"LE",name:"Lecce"},45:{code:"LC",name:"Lecco"},46:{code:"LI",name:"Livorno"},47:{code:"LO",name:"Lodi"},48:{code:"LU",name:"Lucca"},49:{code:"MC",name:"Macerata"},50:{code:"MN",name:"Mantova"},51:{code:"MS",name:"Massa-Carrara"},52:{code:"MT",name:"Matera"},53:{code:"ME",name:"Messina"},54:{code:"MI",name:"Milano"},55:{code:"MO",name:"Modena"},56:{code:"NA",name:"Napoli"},57:{code:"NO",name:"Novara"},58:{code:"NU",name:"Nuoro"},59:{code:"OR",name:"Oristano"},60:{code:"PD",name:"Padova"},61:{code:"PA",name:"Palermo"},62:{code:"PR",name:"Parma"},63:{code:"PG",name:"Perugia"},64:{code:"PV",name:"Pavia"},65:{code:"PU",name:"Pesaro Urbino"},66:{code:"PE",name:"Pescara"},67:{code:"PC",name:"Piacenza"},68:{code:"PI",name:"Pisa"},69:{code:"PT",name:"Pistoia"},70:{code:"PN",name:"Pordenone"},71:{code:"PZ",name:"Potenza"},72:{code:"PO",name:"Prato"},73:{code:"RG",name:"Ragusa"},74:{code:"RA",name:"Ravenna"},75:{code:"RC",name:"Reggio Calabria"},76:{code:"RE",name:"Reggio Emilia"},77:{code:"RI",name:"Rieti"},78:{code:"RN",name:"Rimini"},79:{code:"RM",name:"Roma"},80:{code:"RO",name:"Rovigo"},81:{code:"SA",name:"Salerno"},82:{code:"SS",name:"Sassari"},83:{code:"SV",name:"Savona"},84:{code:"SI",name:"Siena"},85:{code:"SR",name:"Siracusa"},86:{code:"SO",name:"Sondrio"},87:{code:"TA",name:"Taranto"},88:{code:"TE",name:"Teramo"},89:{code:"TR",name:"Terni"},90:{code:"TO",name:"Torino"},91:{code:"TP",name:"Trapani"},92:{code:"TN",name:"Trento"},93:{code:"TV",name:"Treviso"},94:{code:"TS",name:"Trieste"},95:{code:"UD",name:"Udine"},96:{code:"VA",name:"Varese"},97:{code:"VE",name:"Venezia"},98:{code:"VB",name:"Verbania"},99:{code:"VC",name:"Vercelli"},100:{code:"VR",name:"Verona"},101:{code:"VV",name:"Vibo Valentia"},102:{code:"VI",name:"Vicenza"},103:{code:"VT",name:"Viterbo"},104:{code:"CI",name:"Carbonia-Iglesias"},105:{code:"VS",name:"Medio Campidano"},106:{code:"OG",name:"Ogliastra"},107:{code:"OT",name:"Olbia-Tempio"},108:{code:"MB",name:"Monza e Brianza"},109:{code:"FM",name:"Fermo"},110:{code:"BT",name:"Barletta-Andria-Trani"}},JM:{1:{code:"CLA",name:"Clarendon Parish"},2:{code:"HAN",name:"Hanover Parish"},3:{code:"KIN",name:"Kingston Parish"},4:{code:"MAN",name:"Manchester Parish"},5:{code:"POR",name:"Portland Parish"},6:{code:"AND",name:"Saint Andrew Parish"},7:{code:"ANN",name:"Saint Ann Parish"},8:{code:"CAT",name:"Saint Catherine Parish"},9:{code:"ELI",name:"Saint Elizabeth Parish"},10:{code:"JAM",name:"Saint James Parish"},11:{code:"MAR",name:"Saint Mary Parish"},12:{code:"THO",name:"Saint Thomas Parish"},13:{code:"TRL",name:"Trelawny Parish"},14:{code:"WML",name:"Westmoreland Parish"}},JP:{1:{code:"AI",name:"Aichi"},2:{code:"AK",name:"Akita"},3:{code:"AO",name:"Aomori"},4:{code:"CH",name:"Chiba"},5:{code:"EH",name:"Ehime"},6:{code:"FK",name:"Fukui"},7:{code:"FU",name:"Fukuoka"},8:{code:"FS",name:"Fukushima"},9:{code:"GI",name:"Gifu"},10:{code:"GU",name:"Gumma"},11:{code:"HI",name:"Hiroshima"},12:{code:"HO",name:"Hokkaido"},13:{code:"HY",name:"Hyogo"},14:{code:"IB",name:"Ibaraki"},15:{code:"IS",name:"Ishikawa"},16:{code:"IW",name:"Iwate"},17:{code:"KA",name:"Kagawa"},18:{code:"KG",name:"Kagoshima"},19:{code:"KN",name:"Kanagawa"},20:{code:"KO",name:"Kochi"},21:{code:"KU",name:"Kumamoto"},22:{code:"KY",name:"Kyoto"},23:{code:"MI",name:"Mie"},24:{code:"MY",name:"Miyagi"},25:{code:"MZ",name:"Miyazaki"},26:{code:"NA",name:"Nagano"},27:{code:"NG",name:"Nagasaki"},28:{code:"NR",name:"Nara"},29:{code:"NI",name:"Niigata"},30:{code:"OI",name:"Oita"},31:{code:"OK",name:"Okayama"},32:{code:"ON",name:"Okinawa"},33:{code:"OS",name:"Osaka"},34:{code:"SA",name:"Saga"},35:{code:"SI",name:"Saitama"},36:{code:"SH",name:"Shiga"},37:{code:"SM",name:"Shimane"},38:{code:"SZ",name:"Shizuoka"},39:{code:"TO",name:"Tochigi"},40:{code:"TS",name:"Tokushima"},41:{code:"TK",name:"Tokyo"},42:{code:"TT",name:"Tottori"},43:{code:"TY",name:"Toyama"},44:{code:"WA",name:"Wakayama"},45:{code:"YA",name:"Yamagata"},46:{code:"YM",name:"Yamaguchi"},47:{code:"YN",name:"Yamanashi"}},JO:{1:{code:"AM",name:"'Amman"},2:{code:"AJ",name:"Ajlun"},3:{code:"AA",name:"Al'Aqabah"},4:{code:"AB",name:"Al Balqa'"},5:{code:"AK",name:"Al Karak"},6:{code:"AL",name:"Al Mafraq"},7:{code:"AT",name:"At Tafilah"},8:{code:"AZ",name:"Az Zarqa'"},9:{code:"IR",name:"Irbid"},10:{code:"JA",name:"Jarash"},11:{code:"MA",name:"Ma'an"},12:{code:"MD",name:"Madaba"}},KZ:{1:{code:"AL",name:"Almaty"},2:{code:"AC",name:"Almaty City"},3:{code:"AM",name:"Aqmola"},4:{code:"AQ",name:"Aqtobe"},5:{code:"AS",name:"Astana City"},6:{code:"AT",name:"Atyrau"},7:{code:"BA",name:"Batys Qazaqstan"},8:{code:"BY",name:"Bayqongyr City"},9:{code:"MA",name:"Mangghystau"},10:{code:"ON",name:"Ongtustik Qazaqstan"},11:{code:"PA",name:"Pavlodar"},12:{code:"QA",name:"Qaraghandy"},13:{code:"QO",name:"Qostanay"},14:{code:"QY",name:"Qyzylorda"},15:{code:"SH",name:"Shyghys Qazaqstan"},16:{code:"SO",name:"Soltustik Qazaqstan"},17:{code:"ZH",name:"Zhambyl"}},KE:{1:{code:"CE",name:"Central"},2:{code:"CO",name:"Coast"},3:{code:"EA",name:"Eastern"},4:{code:"NA",name:"Nairobi Area"},5:{code:"NE",name:"North Eastern"},6:{code:"NY",name:"Nyanza"},7:{code:"RV",name:"Rift Valley"},8:{code:"WE",name:"Western"}},KI:{1:{code:"AG",name:"Abaiang"},2:{code:"AM",name:"Abemama"},3:{code:"AK",name:"Aranuka"},4:{code:"AO",name:"Arorae"},5:{code:"BA",name:"Banaba"},6:{code:"BE",name:"Beru"},7:{code:"bT",name:"Butaritari"},8:{code:"KA",name:"Kanton"},9:{code:"KR",name:"Kiritimati"},10:{code:"KU",name:"Kuria"},11:{code:"MI",name:"Maiana"},12:{code:"MN",name:"Makin"},13:{code:"ME",name:"Marakei"},14:{code:"NI",name:"Nikunau"},15:{code:"NO",name:"Nonouti"},16:{code:"ON",name:"Onotoa"},17:{code:"TT",name:"Tabiteuea"},18:{code:"TR",name:"Tabuaeran"},19:{code:"TM",name:"Tamana"},20:{code:"TW",name:"Tarawa"},21:{code:"TE",name:"Teraina"}},KP:{1:{code:"CHA",name:"Chagang-do"},2:{code:"HAB",name:"Hamgyong-bukto"},3:{code:"HAN",name:"Hamgyong-namdo"},4:{code:"HWB",name:"Hwanghae-bukto"},5:{code:"HWN",name:"Hwanghae-namdo"},6:{code:"KAN",name:"Kangwon-do"},7:{code:"PYB",name:"P'yongan-bukto"},8:{code:"PYN",name:"P'yongan-namdo"},9:{code:"YAN",name:"Ryanggang-do (Yanggang-do)"},10:{code:"NAJ",name:"Rason Directly Governed City"},11:{code:"PYO",name:"P'yongyang Special City"}},KR:{1:{code:"CO",name:"Ch'ungch'ong-bukto"},2:{code:"CH",name:"Ch'ungch'ong-namdo"},3:{code:"CD",name:"Cheju-do"},4:{code:"CB",name:"Cholla-bukto"},5:{code:"CN",name:"Cholla-namdo"},6:{code:"IG",name:"Inch'on-gwangyoksi"},7:{code:"KA",name:"Kangwon-do"},8:{code:"KG",name:"Kwangju-gwangyoksi"},9:{code:"KD",name:"Kyonggi-do"},10:{code:"KB",name:"Kyongsang-bukto"},11:{code:"KN",name:"Kyongsang-namdo"},12:{code:"PG",name:"Pusan-gwangyoksi"},13:{code:"SO",name:"Soul-t'ukpyolsi"},14:{code:"TA",name:"Taegu-gwangyoksi"},15:{code:"TG",name:"Taejon-gwangyoksi"}},KW:{1:{code:"AL",name:"Al'Asimah"},2:{code:"AA",name:"Al Ahmadi"},3:{code:"AF",name:"Al Farwaniyah"},4:{code:"AJ",name:"Al Jahra'"},5:{code:"HA",name:"Hawalli"}},KG:{1:{code:"GB",name:"Bishkek"},2:{code:"B",name:"Batken"},3:{code:"C",name:"Chu"},4:{code:"J",name:"Jalal-Abad"},5:{code:"N",name:"Naryn"},6:{code:"O",name:"Osh"},7:{code:"T",name:"Talas"},8:{code:"Y",name:"Ysyk-Kol"}},LA:{1:{code:"VT",name:"Vientiane"},2:{code:"AT",name:"Attapu"},3:{code:"BK",name:"Bokeo"},4:{code:"BL",name:"Bolikhamxai"},5:{code:"CH",name:"Champasak"},6:{code:"HO",name:"Houaphan"},7:{code:"KH",name:"Khammouan"},8:{code:"LM",name:"Louang Namtha"},9:{code:"LP",name:"Louangphabang"},10:{code:"OU",name:"Oudomxai"},11:{code:"PH",name:"Phongsali"},12:{code:"SL",name:"Salavan"},13:{code:"SV",name:"Savannakhet"},14:{code:"VI",name:"Vientiane"},15:{code:"XA",name:"Xaignabouli"},16:{code:"XE",name:"Xekong"},17:{code:"XI",name:"Xiangkhoang"},18:{code:"XN",name:"Xaisomboun"}},LV:{1:{code:"AIZ",name:"Aizkraukles Rajons"},2:{code:"ALU",name:"Aluksnes Rajons"},3:{code:"BAL",name:"Balvu Rajons"},4:{code:"BAU",name:"Bauskas Rajons"},5:{code:"CES",name:"Cesu Rajons"},6:{code:"DGR",name:"Daugavpils Rajons"},7:{code:"DOB",name:"Dobeles Rajons"},8:{code:"GUL",name:"Gulbenes Rajons"},9:{code:"JEK",name:"Jekabpils Rajons"},10:{code:"JGR",name:"Jelgavas Rajons"},11:{code:"KRA",name:"Kraslavas Rajons"},12:{code:"KUL",name:"Kuldigas Rajons"},13:{code:"LPR",name:"Liepajas Rajons"},14:{code:"LIM",name:"Limbazu Rajons"},15:{code:"LUD",name:"Ludzas Rajons"},16:{code:"MAD",name:"Madonas Rajons"},17:{code:"OGR",name:"Ogres Rajons"},18:{code:"PRE",name:"Preilu Rajons"},19:{code:"RZR",name:"Rezeknes Rajons"},20:{code:"RGR",name:"Rigas Rajons"},21:{code:"SAL",name:"Saldus Rajons"},22:{code:"TAL",name:"Talsu Rajons"},23:{code:"TUK",name:"Tukuma Rajons"},24:{code:"VLK",name:"Valkas Rajons"},25:{code:"VLM",name:"Valmieras Rajons"},26:{code:"VSR",name:"Ventspils Rajons"},27:{code:"DGV",name:"Daugavpils"},28:{code:"JGV",name:"Jelgava"},29:{code:"JUR",name:"Jurmala"},30:{code:"LPK",name:"Liepaja"},31:{code:"RZK",name:"Rezekne"},32:{code:"RGA",name:"Riga"},33:{code:"VSL",name:"Ventspils"}},LB:{1:{code:"BIN",name:"Bint Jbeil"},2:{code:"HAS",name:"Hasbaya"},3:{code:"MAR",name:"Marjeyoun"},4:{code:"NAB",name:"Nabatieh"},5:{code:"BAA",name:"Baalbek"},6:{code:"HER",name:"Hermel"},7:{code:"RAS",name:"Rashaya"},8:{code:"WES",name:"Western Beqaa"},9:{code:"ZAH",name:"Zahle"},10:{code:"AKK",name:"Akkar"},11:{code:"BAT",name:"Batroun"},12:{code:"BSH",name:"Bsharri"},13:{code:"KOU",name:"Koura"},14:{code:"MIN",name:"Miniyeh-Danniyeh"},15:{code:"TRI",name:"Tripoli"},16:{code:"ZGH",name:"Zgharta"},17:{code:"ALE",name:"Aley"},18:{code:"BAA",name:"Baabda"},19:{code:"BYB",name:"Byblos"},20:{code:"CHO",name:"Chouf"},21:{code:"KES",name:"Kesrwan"},22:{code:"MAT",name:"Matn"},23:{code:"JEZ",name:"Jezzine"},24:{code:"SID",name:"Sidon"},25:{code:"TYR",name:"Tyre"}},LS:{1:{code:"BE",name:"Berea"},2:{code:"BB",name:"Butha-Buthe"},3:{code:"LE",name:"Leribe"},4:{code:"MF",name:"Mafeteng"},5:{code:"MS",name:"Maseru"},6:{code:"MH",name:"Mohale's Hoek"},7:{code:"MK",name:"Mokhotlong"},8:{code:"QN",name:"Qacha's Nek"},9:{code:"QT",name:"Quthing"},10:{code:"TT",name:"Thaba-Tseka"}},LR:{1:{code:"BI",name:"Bomi"},2:{code:"BG",name:"Bong"},3:{code:"GB",name:"Grand Bassa"},4:{code:"CM",name:"Grand Cape Mount"},5:{code:"GG",name:"Grand Gedeh"},6:{code:"GK",name:"Grand Kru"},7:{code:"LO",name:"Lofa"},8:{code:"MG",name:"Margibi"},9:{code:"ML",name:"Maryland"},10:{code:"MS",name:"Montserrado"},11:{code:"NB",name:"Nimba"},12:{code:"RC",name:"River Cess"},13:{code:"SN",name:"Sinoe"}},LY:{1:{code:"AJ",name:"Ajdabiya"},2:{code:"AZ",name:"Al 'Aziziyah"},3:{code:"FA",name:"Al Fatih"},4:{code:"JA",name:"Al Jabal al Akhdar"},5:{code:"JU",name:"Al Jufrah"},6:{code:"KH",name:"Al Khums"},7:{code:"KU",name:"Al Kufrah"},8:{code:"NK",name:"An Nuqat al Khams"},9:{code:"AS",name:"Ash Shati'"},10:{code:"AW",name:"Awbari"},11:{code:"ZA",name:"Az Zawiyah"},12:{code:"BA",name:"Banghazi"},13:{code:"DA",name:"Darnah"},14:{code:"GD",name:"Ghadamis"},15:{code:"GY",name:"Gharyan"},16:{code:"MI",name:"Misratah"},17:{code:"MZ",name:"Murzuq"},18:{code:"SB",name:"Sabha"},19:{code:"SW",name:"Sawfajjin"},20:{code:"SU",name:"Surt"},21:{code:"TL",name:"Tarabulus (Tripoli)"},22:{code:"TH",name:"Tarhunah"},23:{code:"TU",name:"Tubruq"},24:{code:"YA",name:"Yafran"},25:{code:"ZL",name:"Zlitan"}},LI:{1:{code:"V",name:"Vaduz"},2:{code:"A",name:"Schaan"},3:{code:"B",name:"Balzers"},4:{code:"N",name:"Triesen"},5:{code:"E",name:"Eschen"},6:{code:"M",name:"Mauren"},7:{code:"T",name:"Triesenberg"},8:{code:"R",name:"Ruggell"},9:{code:"G",name:"Gamprin"},10:{code:"L",name:"Schellenberg"},11:{code:"P",name:"Planken"}},LT:{1:{code:"AL",name:"Alytus"},2:{code:"KA",name:"Kaunas"},3:{code:"KL",name:"Klaipeda"},4:{code:"MA",name:"Marijampole"},5:{code:"PA",name:"Panevezys"},6:{code:"SI",name:"Siauliai"},7:{code:"TA",name:"Taurage"},8:{code:"TE",name:"Telsiai"},9:{code:"UT",name:"Utena"},10:{code:"VI",name:"Vilnius"}},LU:{1:{code:"DD",name:"Diekirch"},2:{code:"DC",name:"Clervaux"},3:{code:"DR",name:"Redange"},4:{code:"DV",name:"Vianden"},5:{code:"DW",name:"Wiltz"},6:{code:"GG",name:"Grevenmacher"},7:{code:"GE",name:"Echternach"},8:{code:"GR",name:"Remich"},9:{code:"LL",name:"Luxembourg"},10:{code:"LC",name:"Capellen"},11:{code:"LE",name:"Esch-sur-Alzette"},12:{code:"LM",name:"Mersch"}},MO:{1:{code:"OLF",name:"Our Lady Fatima Parish"},2:{code:"ANT",name:"St. Anthony Parish"},3:{code:"LAZ",name:"St. Lazarus Parish"},4:{code:"CAT",name:"Cathedral Parish"},5:{code:"LAW",name:"St. Lawrence Parish"}},MK:{1:{code:"AER",name:"Aerodrom"},2:{code:"ARA",name:"Aračinovo"},3:{code:"BER",name:"Berovo"},4:{code:"BIT",name:"Bitola"},5:{code:"BOG",name:"Bogdanci"},6:{code:"BOG",name:"Bogovinje"},7:{code:"BOS",name:"Bosilovo"},8:{code:"BRV",name:"Brvenica"},9:{code:"BUT",name:"Butel"},10:{code:"ČAI",name:"Čair"},11:{code:"ČAš",name:"Čaška"},12:{code:"CEN",name:"Centar"},13:{code:"CEN",name:"Centar Župa"},14:{code:"Češ",name:"Češinovo-Obleš"},15:{code:"ČUČ",name:"Čučer-Sandevo"},16:{code:"DEB",name:"Debar"},17:{code:"DEB",name:"Debarca"},18:{code:"DEL",name:"Delčevo"},19:{code:"DEM",name:"Demir Hisar"},20:{code:"DEM",name:"Demir Kapija"},21:{code:"DOL",name:"Dolneni"},22:{code:"DRU",name:"Drugovo"},23:{code:"GAZ",name:"Gazi Baba"},24:{code:"GEV",name:"Gevgelija"},25:{code:"GJO",name:"Gjorče Petrov"},26:{code:"GOS",name:"Gostivar"},27:{code:"GRA",name:"Gradsko"},28:{code:"ILI",name:"Ilinden"},29:{code:"JEG",name:"Jegunovce"},30:{code:"KAR",name:"Karbinci"},31:{code:"KAR",name:"Karpoš"},32:{code:"KAV",name:"Kavadarci"},33:{code:"KIČ",name:"Kičevo"},34:{code:"KIS",name:"Kisela Voda"},35:{code:"KOč",name:"Kočani"},36:{code:"KON",name:"Konče"},37:{code:"KRA",name:"Kratovo"},38:{code:"KRI",name:"Kriva Palanka"},39:{code:"KRI",name:"Krivogaštani"},40:{code:"KRU",name:"Kruševo"},41:{code:"KUM",name:"Kumanovo"},42:{code:"LIP",name:"Lipkovo"},43:{code:"LOZ",name:"Lozovo"},44:{code:"MAK",name:"Makedonska Kamenica"},45:{code:"MAK",name:"Makedonski Brod"},46:{code:"MAV",name:"Mavrovo and Rostuša"},47:{code:"MOG",name:"Mogila"},48:{code:"NEG",name:"Negotino"},49:{code:"NOV",name:"Novaci"},50:{code:"NOV",name:"Novo Selo"},51:{code:"OHR",name:"Ohrid"},52:{code:"OSL",name:"Oslomej"},53:{code:"PEH",name:"Pehčevo"},54:{code:"PET",name:"Petrovec"},55:{code:"PLA",name:"Plasnica"},56:{code:"PRI",name:"Prilep"},57:{code:"PRO",name:"Probištip"},58:{code:"RAD",name:"Radoviš"},59:{code:"RAN",name:"Rankovce"},60:{code:"RES",name:"Resen"},61:{code:"ROS",name:"Rosoman"},62:{code:"SAR",name:"Saraj"},63:{code:"SOP",name:"Sopište"},64:{code:"STA",name:"Star Dojran"},65:{code:"STA",name:"Staro Nagoričane"},66:{code:"ŠTI",name:"Štip"},67:{code:"STR",name:"Struga"},68:{code:"STR",name:"Strumica"},69:{code:"STU",name:"Studeničani"},70:{code:"ŠUT",name:"Šuto Orizari"},71:{code:"SVE",name:"Sveti Nikole"},72:{code:"TEA",name:"Tearce"},73:{code:"TET",name:"Tetovo"},74:{code:"VAL",name:"Valandovo"},75:{code:"VAS",name:"Vasilevo"},76:{code:"VEL",name:"Veles"},77:{code:"VEV",name:"Vevčani"},78:{code:"VIN",name:"Vinica"},79:{code:"VRA",name:"Vraneštica"},80:{code:"VRA",name:"Vrapčište"},81:{code:"ZAJ",name:"Zajas"},82:{code:"ZEL",name:"Zelenikovo"},83:{code:"ŽEL",name:"Želino"},84:{code:"ZRN",name:"Zrnovci"}},MG:{1:{code:"AN",name:"Antananarivo"},2:{code:"AS",name:"Antsiranana"},3:{code:"FN",name:"Fianarantsoa"},4:{code:"MJ",name:"Mahajanga"},5:{code:"TM",name:"Toamasina"},6:{code:"TL",name:"Toliara"}},MW:{1:{code:"BLK",name:"Balaka"},2:{code:"BLT",name:"Blantyre"},3:{code:"CKW",name:"Chikwawa"},4:{code:"CRD",name:"Chiradzulu"},5:{code:"CTP",name:"Chitipa"},6:{code:"DDZ",name:"Dedza"},7:{code:"DWA",name:"Dowa"},8:{code:"KRG",name:"Karonga"},9:{code:"KSG",name:"Kasungu"},10:{code:"LKM",name:"Likoma"},11:{code:"LLG",name:"Lilongwe"},12:{code:"MCG",name:"Machinga"},13:{code:"MGC",name:"Mangochi"},14:{code:"MCH",name:"Mchinji"},15:{code:"MLJ",name:"Mulanje"},16:{code:"MWZ",name:"Mwanza"},17:{code:"MZM",name:"Mzimba"},18:{code:"NTU",name:"Ntcheu"},19:{code:"NKB",name:"Nkhata Bay"},20:{code:"NKH",name:"Nkhotakota"},21:{code:"NSJ",name:"Nsanje"},22:{code:"NTI",name:"Ntchisi"},23:{code:"PHL",name:"Phalombe"},24:{code:"RMP",name:"Rumphi"},25:{code:"SLM",name:"Salima"},26:{code:"THY",name:"Thyolo"},27:{code:"ZBA",name:"Zomba"}},MY:{1:{code:"Johor",name:"Johor"},2:{code:"Kedah",name:"Kedah"},3:{code:"Kelantan",name:"Kelantan"},4:{code:"Labuan",name:"Labuan"},5:{code:"Melaka",name:"Melaka"},6:{code:"Negeri Sembilan",name:"Negeri Sembilan"},7:{code:"Pahang",name:"Pahang"},8:{code:"Perak",name:"Perak"},9:{code:"Perlis",name:"Perlis"},10:{code:"Pulau Pinang",name:"Pulau Pinang"},11:{code:"Sabah",name:"Sabah"},12:{code:"Sarawak",name:"Sarawak"},13:{code:"Selangor",name:"Selangor"},14:{code:"Terengganu",name:"Terengganu"},15:{code:"Kuala Lumpur",name:"Kuala Lumpur"}},MV:{1:{code:"AAD",name:"Ari Atoll Dheknu"},2:{code:"AAU",name:"Ari Atoll Uthuru"},3:{code:"ADD",name:"Addu"},4:{code:"FAA",name:"Faadhippolhu"},5:{code:"FEA",name:"Felidhe Atoll"},6:{code:"FMU",name:"Fua Mulaku"},7:{code:"HAD",name:"Huvadhu Atoll Dhekunu"},8:{code:"HAU",name:"Huvadhu Atoll Uthuru"},9:{code:"HDH",name:"Hadhdhunmathi"},10:{code:"KLH",name:"Kolhumadulu"},11:{code:"MAA",name:"Male Atoll"},12:{code:"MAD",name:"Maalhosmadulu Dhekunu"},13:{code:"MAU",name:"Maalhosmadulu Uthuru"},14:{code:"MLD",name:"Miladhunmadulu Dhekunu"},15:{code:"MLU",name:"Miladhunmadulu Uthuru"},16:{code:"MUA",name:"Mulaku Atoll"},17:{code:"NAD",name:"Nilandhe Atoll Dhekunu"},18:{code:"NAU",name:"Nilandhe Atoll Uthuru"},19:{code:"THD",name:"Thiladhunmathi Dhekunu"},20:{code:"THU",name:"Thiladhunmathi Uthuru"}},ML:{1:{code:"GA",name:"Gao"},2:{code:"KY",name:"Kayes"},3:{code:"KD",name:"Kidal"},4:{code:"KL",name:"Koulikoro"},5:{code:"MP",name:"Mopti"},6:{code:"SG",name:"Segou"},7:{code:"SK",name:"Sikasso"},8:{code:"TB",name:"Tombouctou"},9:{code:"CD",name:"Bamako Capital District"}},MT:{1:{code:"ATT",name:"Attard"},2:{code:"BAL",name:"Balzan"},3:{code:"BGU",name:"Birgu"},4:{code:"BKK",name:"Birkirkara"},5:{code:"BRZ",name:"Birzebbuga"},6:{code:"BOR",name:"Bormla"},7:{code:"DIN",name:"Dingli"},8:{code:"FGU",name:"Fgura"},9:{code:"FLO",name:"Floriana"},10:{code:"GDJ",name:"Gudja"},11:{code:"GZR",name:"Gzira"},12:{code:"GRG",name:"Gargur"},13:{code:"GXQ",name:"Gaxaq"},14:{code:"HMR",name:"Hamrun"},15:{code:"IKL",name:"Iklin"},16:{code:"ISL",name:"Isla"},17:{code:"KLK",name:"Kalkara"},18:{code:"KRK",name:"Kirkop"},19:{code:"LIJ",name:"Lija"},20:{code:"LUQ",name:"Luqa"},21:{code:"MRS",name:"Marsa"},22:{code:"MKL",name:"Marsaskala"},23:{code:"MXL",name:"Marsaxlokk"},24:{code:"MDN",name:"Mdina"},25:{code:"MEL",name:"Melliea"},26:{code:"MGR",name:"Mgarr"},27:{code:"MST",name:"Mosta"},28:{code:"MQA",name:"Mqabba"},29:{code:"MSI",name:"Msida"},30:{code:"MTF",name:"Mtarfa"},31:{code:"NAX",name:"Naxxar"},32:{code:"PAO",name:"Paola"},33:{code:"PEM",name:"Pembroke"},34:{code:"PIE",name:"Pieta"},35:{code:"QOR",name:"Qormi"},36:{code:"QRE",name:"Qrendi"},37:{code:"RAB",name:"Rabat"},38:{code:"SAF",name:"Safi"},39:{code:"SGI",name:"San Giljan"},40:{code:"SLU",name:"Santa Lucija"},41:{code:"SPB",name:"San Pawl il-Bahar"},42:{code:"SGW",name:"San Gwann"},43:{code:"SVE",name:"Santa Venera"},44:{code:"SIG",name:"Siggiewi"},45:{code:"SLM",name:"Sliema"},46:{code:"SWQ",name:"Swieqi"},47:{code:"TXB",name:"Ta Xbiex"},48:{code:"TRX",name:"Tarxien"},49:{code:"VLT",name:"Valletta"},50:{code:"XGJ",name:"Xgajra"},51:{code:"ZBR",name:"Zabbar"},52:{code:"ZBG",name:"Zebbug"},53:{code:"ZJT",name:"Zejtun"},54:{code:"ZRQ",name:"Zurrieq"},55:{code:"FNT",name:"Fontana"},56:{code:"GHJ",name:"Ghajnsielem"},57:{code:"GHR",name:"Gharb"},58:{code:"GHS",name:"Ghasri"},59:{code:"KRC",name:"Kercem"},60:{code:"MUN",name:"Munxar"},61:{code:"NAD",name:"Nadur"},62:{code:"QAL",name:"Qala"},63:{code:"VIC",name:"Victoria"},64:{code:"SLA",name:"San Lawrenz"},65:{code:"SNT",name:"Sannat"},66:{code:"ZAG",name:"Xagra"},67:{code:"XEW",name:"Xewkija"},68:{code:"ZEB",name:"Zebbug"}},MH:{1:{code:"ALG",name:"Ailinginae"},2:{code:"ALL",name:"Ailinglaplap"},3:{code:"ALK",name:"Ailuk"},4:{code:"ARN",name:"Arno"},5:{code:"AUR",name:"Aur"},6:{code:"BKR",name:"Bikar"},7:{code:"BKN",name:"Bikini"},8:{code:"BKK",name:"Bokak"},9:{code:"EBN",name:"Ebon"},10:{code:"ENT",name:"Enewetak"},11:{code:"EKB",name:"Erikub"},12:{code:"JBT",name:"Jabat"},13:{code:"JLT",name:"Jaluit"},14:{code:"JEM",name:"Jemo"},15:{code:"KIL",name:"Kili"},16:{code:"KWJ",name:"Kwajalein"},17:{code:"LAE",name:"Lae"},18:{code:"LIB",name:"Lib"},19:{code:"LKP",name:"Likiep"},20:{code:"MJR",name:"Majuro"},21:{code:"MLP",name:"Maloelap"},22:{code:"MJT",name:"Mejit"},23:{code:"MIL",name:"Mili"},24:{code:"NMK",name:"Namorik"},25:{code:"NAM",name:"Namu"},26:{code:"RGL",name:"Rongelap"},27:{code:"RGK",name:"Rongrik"},28:{code:"TOK",name:"Toke"},29:{code:"UJA",name:"Ujae"},30:{code:"UJL",name:"Ujelang"},31:{code:"UTK",name:"Utirik"},32:{code:"WTH",name:"Wotho"},33:{code:"WTJ",name:"Wotje"}},MQ:{1:{code:"LAJ",name:"L'Ajoupa-Bouillon"},2:{code:"LES",name:"Les Anses-d'Arlet"},3:{code:"BAS",name:"Basse-Pointe"},4:{code:"BEL",name:"Bellefontaine"},5:{code:"LE",name:"Le Carbet"},6:{code:"CAS",name:"Case-Pilote"},7:{code:"LE",name:"Le Diamant"},8:{code:"DUC",name:"Ducos"},9:{code:"FON",name:"Fonds-Saint-Denis"},10:{code:"FOR",name:"Fort-De-France"},11:{code:"LE",name:"Le François"},12:{code:"GRA",name:"Grand'Rivière"},13:{code:"GRO",name:"Gros-Morne"},14:{code:"LE",name:"Le Lamentin"},15:{code:"LE",name:"Le Lorrain"},16:{code:"MAC",name:"Macouba"},17:{code:"LE",name:"Le Marigot"},18:{code:"LE",name:"Le Marin"},19:{code:"LE",name:"Le Morne-Rouge"},20:{code:"LE",name:"Le Morne-Vert"},21:{code:"LE",name:"Le Prêcheur"},22:{code:"RIV",name:"Rivière-Pilote"},23:{code:"RIV",name:"Rivière-Salée"},24:{code:"LE",name:"Le Robert"},25:{code:"SAI",name:"Sainte-Anne"},26:{code:"SAI",name:"Sainte-Luce"},27:{code:"SAI",name:"Sainte-Marie"},28:{code:"SAI",name:"Saint-Esprit"},29:{code:"SAI",name:"Saint-Joseph"},30:{code:"SAI",name:"Saint-Pierre"},31:{code:"SCH",name:"Schœlcher"},32:{code:"LA",name:"La Trinité"},33:{code:"LES",name:"Les Trois-Îlets"},34:{code:"LE",name:"Le Vauclin"}},MR:{1:{code:"AD",name:"Adrar"},2:{code:"AS",name:"Assaba"},3:{code:"BR",name:"Brakna"},4:{code:"DN",name:"Dakhlet Nouadhibou"},5:{code:"GO",name:"Gorgol"},6:{code:"GM",name:"Guidimaka"},7:{code:"HC",name:"Hodh Ech Chargui"},8:{code:"HG",name:"Hodh El Gharbi"},9:{code:"IN",name:"Inchiri"},10:{code:"TA",name:"Tagant"},11:{code:"TZ",name:"Tiris Zemmour"},12:{code:"TR",name:"Trarza"},13:{code:"NO",name:"Nouakchott"}},MU:{1:{code:"AG",name:"Agalega Islands"},2:{code:"BL",name:"Black River"},3:{code:"BR",name:"Beau Bassin-Rose Hill"},4:{code:"CC",name:"Cargados Carajos Shoals (Saint B)"},5:{code:"CU",name:"Curepipe"},6:{code:"FL",name:"Flacq"},7:{code:"GP",name:"Grand Port"},8:{code:"MO",name:"Moka"},9:{code:"PA",name:"Pamplemousses"},10:{code:"PL",name:"Port Louis"},11:{code:"PU",name:"Port Louis"},12:{code:"PW",name:"Plaines Wilhems"},13:{code:"QB",name:"Quatre Bornes"},14:{code:"RO",name:"Rodrigues"},15:{code:"RR",name:"Riviere du Rempart"},16:{code:"SA",name:"Savanne"},17:{code:"VP",name:"Vacoas-Phoenix"}},YT:{1:{code:"DZA",name:"Dzaoudzi"},2:{code:"PAM",name:"Pamandzi"},3:{code:"MAM",name:"Mamoudzou"},4:{code:"DEM",name:"Dembeni"},5:{code:"BAN",name:"Bandrele"},6:{code:"KAN",name:"Kani-Kéli"},7:{code:"BOU",name:"Bouéni"},8:{code:"CHI",name:"Chirongui"},9:{code:"SAD",name:"Sada"},10:{code:"OUA",name:"Ouangani"},11:{code:"CHI",name:"Chiconi"},12:{code:"TSI",name:"Tsingoni"},13:{code:"MTS",name:"M'Tsangamouji"},14:{code:"ACO",name:"Acoua"},15:{code:"MTS",name:"Mtsamboro"},16:{code:"BAN",name:"Bandraboua"},17:{code:"KOU",name:"Koungou"}},MX:{1:{code:"AGU",name:"Aguascalientes"},2:{code:"BCN",name:"Baja California Norte"},3:{code:"BCS",name:"Baja California Sur"},4:{code:"CAM",name:"Campeche"},5:{code:"CHP",name:"Chiapas"},6:{code:"CHH",name:"Chihuahua"},7:{code:"COA",name:"Coahuila de Zaragoza"},8:{code:"COL",name:"Colima"},9:{code:"DIF",name:"Distrito Federal"},10:{code:"DUR",name:"Durango"},11:{code:"GUA",name:"Guanajuato"},12:{code:"GRO",name:"Guerrero"},13:{code:"HID",name:"Hidalgo"},14:{code:"JAL",name:"Jalisco"},15:{code:"MEX",name:"Mexico"},16:{code:"MIC",name:"Michoacan de Ocampo"},17:{code:"MOR",name:"Morelos"},18:{code:"NAY",name:"Nayarit"},19:{code:"NLE",name:"Nuevo Leon"},20:{code:"OAX",name:"Oaxaca"},21:{code:"PUE",name:"Puebla"},22:{code:"QUE",name:"Queretaro de Arteaga"},23:{code:"ROO",name:"Quintana Roo"},24:{code:"SLP",name:"San Luis Potosi"},25:{code:"SIN",name:"Sinaloa"},26:{code:"SON",name:"Sonora"},27:{code:"TAB",name:"Tabasco"},28:{code:"TAM",name:"Tamaulipas"},29:{code:"TLA",name:"Tlaxcala"},30:{code:"VER",name:"Veracruz-Llave"},31:{code:"YUC",name:"Yucatan"},32:{code:"ZAC",name:"Zacatecas"}},FM:{1:{code:"C",name:"Chuuk"},2:{code:"K",name:"Kosrae"},3:{code:"P",name:"Pohnpei"},4:{code:"Y",name:"Yap"}},MD:{1:{code:"GA",name:"Gagauzia"},2:{code:"CU",name:"Chisinau"},3:{code:"BA",name:"Balti"},4:{code:"CA",name:"Cahul"},5:{code:"ED",name:"Edinet"},6:{code:"LA",name:"Lapusna"},7:{code:"OR",name:"Orhei"},8:{code:"SO",name:"Soroca"},9:{code:"TI",name:"Tighina"},10:{code:"UN",name:"Ungheni"},11:{code:"SN",name:"Stânga Nistrului"}},MC:{1:{code:"FV",name:"Fontvieille"},2:{code:"LC",name:"La Condamine"},3:{code:"MV",name:"Monaco-Ville"},4:{code:"MC",name:"Monte-Carlo"}},MN:{1:{code:"1",name:"Ulanbaatar"},2:{code:"035",name:"Orhon"},3:{code:"037",name:"Darhan uul"},4:{code:"039",name:"Hentiy"},5:{code:"041",name:"Hovsgol"},6:{code:"043",name:"Hovd"},7:{code:"046",name:"Uvs"},8:{code:"047",name:"Tov"},9:{code:"049",name:"Selenge"},10:{code:"051",name:"Suhbaatar"},11:{code:"053",name:"Omnogovi"},12:{code:"055",name:"Ovorhangay"},13:{code:"057",name:"Dzavhan"},14:{code:"059",name:"DundgovL"},15:{code:"061",name:"Dornod"},16:{code:"063",name:"Dornogov"},17:{code:"064",name:"Govi-Sumber"},18:{code:"065",name:"Govi-Altay"},19:{code:"067",name:"Bulgan"},20:{code:"069",name:"Bayanhongor"},21:{code:"071",name:"Bayan-Olgiy"},22:{code:"073",name:"Arhangay"}},MS:{1:{code:"A",name:"Saint Anthony"},2:{code:"G",name:"Saint Georges"},3:{code:"P",name:"Saint Peter"}},MA:{1:{code:"AGD",name:"Agadir"},2:{code:"HOC",name:"Al Hoceima"},3:{code:"AZI",name:"Azilal"},4:{code:"BME",name:"Beni Mellal"},5:{code:"BSL",name:"Ben Slimane"},6:{code:"BLM",name:"Boulemane"},7:{code:"CBL",name:"Casablanca"},8:{code:"CHA",name:"Chaouen"},9:{code:"EJA",name:"El Jadida"},10:{code:"EKS",name:"El Kelaa des Sraghna"},11:{code:"ERA",name:"Er Rachidia"},12:{code:"ESS",name:"Essaouira"},13:{code:"FES",name:"Fes"},14:{code:"FIG",name:"Figuig"},15:{code:"GLM",name:"Guelmim"},16:{code:"IFR",name:"Ifrane"},17:{code:"KEN",name:"Kenitra"},18:{code:"KHM",name:"Khemisset"},19:{code:"KHN",name:"Khenifra"},20:{code:"KHO",name:"Khouribga"},21:{code:"LYN",name:"Laayoune"},22:{code:"LAR",name:"Larache"},23:{code:"MRK",name:"Marrakech"},24:{code:"MKN",name:"Meknes"},25:{code:"NAD",name:"Nador"},26:{code:"ORZ",name:"Ouarzazate"},27:{code:"OUJ",name:"Oujda"},28:{code:"RSA",name:"Rabat-Sale"},29:{code:"SAF",name:"Safi"},30:{code:"SET",name:"Settat"},31:{code:"SKA",name:"Sidi Kacem"},32:{code:"TGR",name:"Tangier"},33:{code:"TAN",name:"Tan-Tan"},34:{code:"TAO",name:"Taounate"},35:{code:"TRD",name:"Taroudannt"},36:{code:"TAT",name:"Tata"},37:{code:"TAZ",name:"Taza"},38:{code:"TET",name:"Tetouan"},39:{code:"TIZ",name:"Tiznit"},40:{code:"ADK",name:"Ad Dakhla"},41:{code:"BJD",name:"Boujdour"},42:{code:"ESM",name:"Es Smara"}},MZ:{1:{code:"CD",name:"Cabo Delgado"},2:{code:"GZ",name:"Gaza"},3:{code:"IN",name:"Inhambane"},4:{code:"MN",name:"Manica"},5:{code:"MC",name:"Maputo (city)"},6:{code:"MP",name:"Maputo"},7:{code:"NA",name:"Nampula"},8:{code:"NI",name:"Niassa"},9:{code:"SO",name:"Sofala"},10:{code:"TE",name:"Tete"},11:{code:"ZA",name:"Zambezia"}},MM:{1:{code:"AY",name:"Ayeyarwady"},2:{code:"BG",name:"Bago"},3:{code:"MG",name:"Magway"},4:{code:"MD",name:"Mandalay"},5:{code:"SG",name:"Sagaing"},6:{code:"TN",name:"Tanintharyi"},7:{code:"YG",name:"Yangon"},8:{code:"CH",name:"Chin State"},9:{code:"KC",name:"Kachin State"},10:{code:"KH",name:"Kayah State"},11:{code:"KN",name:"Kayin State"},12:{code:"MN",name:"Mon State"},13:{code:"RK",name:"Rakhine State"},14:{code:"SH",name:"Shan State"}},NA:{1:{code:"CA",name:"Caprivi"},2:{code:"ER",name:"Erongo"},3:{code:"HA",name:"Hardap"},4:{code:"KR",name:"Karas"},5:{code:"KV",name:"Kavango"},6:{code:"KH",name:"Khomas"},7:{code:"KU",name:"Kunene"},8:{code:"OW",name:"Ohangwena"},9:{code:"OK",name:"Omaheke"},10:{code:"OT",name:"Omusati"},11:{code:"ON",name:"Oshana"},12:{code:"OO",name:"Oshikoto"},13:{code:"OJ",name:"Otjozondjupa"}},NR:{1:{code:"AO",name:"Aiwo"},2:{code:"AA",name:"Anabar"},3:{code:"AT",name:"Anetan"},4:{code:"AI",name:"Anibare"},5:{code:"BA",name:"Baiti"},6:{code:"BO",name:"Boe"},7:{code:"BU",name:"Buada"},8:{code:"DE",name:"Denigomodu"},9:{code:"EW",name:"Ewa"},10:{code:"IJ",name:"Ijuw"},11:{code:"ME",name:"Meneng"},12:{code:"NI",name:"Nibok"},13:{code:"UA",name:"Uaboe"},14:{code:"YA",name:"Yaren"}},NP:{1:{code:"BA",name:"Bagmati"},2:{code:"BH",name:"Bheri"},3:{code:"DH",name:"Dhawalagiri"},4:{code:"GA",name:"Gandaki"},5:{code:"JA",name:"Janakpur"},6:{code:"KA",name:"Karnali"},7:{code:"KO",name:"Kosi"},8:{code:"LU",name:"Lumbini"},9:{code:"MA",name:"Mahakali"},10:{code:"ME",name:"Mechi"},11:{code:"NA",name:"Narayani"},12:{code:"RA",name:"Rapti"},13:{code:"SA",name:"Sagarmatha"},14:{code:"SE",name:"Seti"}},NL:{1:{code:"DR",name:"Drenthe"},2:{code:"FL",name:"Flevoland"},3:{code:"FR",name:"Friesland"},4:{code:"GE",name:"Gelderland"},5:{code:"GR",name:"Groningen"},6:{code:"LI",name:"Limburg"},7:{code:"NB",name:"Noord Brabant"},8:{code:"NH",name:"Noord Holland"},9:{code:"OV",name:"Overijssel"},10:{code:"UT",name:"Utrecht"},11:{code:"ZE",name:"Zeeland"},12:{code:"ZH",name:"Zuid Holland"}},AN:{1:{code:"BON",name:"Bonaire"},2:{code:"CUR",name:"Curaçao"},3:{code:"SAB",name:"Saba"},4:{code:"SEU",name:"Sint Eustatius"},5:{code:"SMA",name:"Sint Maarten"}},NC:{1:{code:"L",name:"Iles Loyaute"},2:{code:"N",name:"Nord"},3:{code:"S",name:"Sud"}},NZ:{1:{code:"AUK",name:"Auckland"},2:{code:"BOP",name:"Bay of Plenty"},3:{code:"CAN",name:"Canterbury"},4:{code:"COR",name:"Coromandel"},5:{code:"GIS",name:"Gisborne"},6:{code:"FIO",name:"Fiordland"},7:{code:"HKB",name:"Hawke's Bay"},8:{code:"MBH",name:"Marlborough"},9:{code:"MWT",name:"Manawatu-Wanganui"},10:{code:"MCM",name:"Mt Cook-Mackenzie"},11:{code:"NSN",name:"Nelson"},12:{code:"NTL",name:"Northland"},13:{code:"OTA",name:"Otago"},14:{code:"STL",name:"Southland"},15:{code:"TKI",name:"Taranaki"},16:{code:"WGN",name:"Wellington"},17:{code:"WKO",name:"Waikato"},18:{code:"WAI",name:"Wairprarapa"},19:{code:"WTC",name:"West Coast"}},NI:{1:{code:"AN",name:"Atlantico Norte"},2:{code:"AS",name:"Atlantico Sur"},3:{code:"BO",name:"Boaco"},4:{code:"CA",name:"Carazo"},5:{code:"CI",name:"Chinandega"},6:{code:"CO",name:"Chontales"},7:{code:"ES",name:"Esteli"},8:{code:"GR",name:"Granada"},9:{code:"JI",name:"Jinotega"},10:{code:"LE",name:"Leon"},11:{code:"MD",name:"Madriz"},12:{code:"MN",name:"Managua"},13:{code:"MS",name:"Masaya"},14:{code:"MT",name:"Matagalpa"},15:{code:"NS",name:"Nuevo Segovia"},16:{code:"RS",name:"Rio San Juan"},17:{code:"RI",name:"Rivas"}},NE:{1:{code:"AG",name:"Agadez"},2:{code:"DF",name:"Diffa"},3:{code:"DS",name:"Dosso"},4:{code:"MA",name:"Maradi"},5:{code:"NM",name:"Niamey"},6:{code:"TH",name:"Tahoua"},7:{code:"TL",name:"Tillaberi"},8:{code:"ZD",name:"Zinder"}},NG:{1:{code:"AB",name:"Abia"},2:{code:"CT",name:"Abuja Federal Capital Territory"},3:{code:"AD",name:"Adamawa"},4:{code:"AK",name:"Akwa Ibom"},5:{code:"AN",name:"Anambra"},6:{code:"BC",name:"Bauchi"},7:{code:"BY",name:"Bayelsa"},8:{code:"BN",name:"Benue"},9:{code:"BO",name:"Borno"},10:{code:"CR",name:"Cross River"},11:{code:"DE",name:"Delta"},12:{code:"EB",name:"Ebonyi"},13:{code:"ED",name:"Edo"},14:{code:"EK",name:"Ekiti"},15:{code:"EN",name:"Enugu"},16:{code:"GO",name:"Gombe"},17:{code:"IM",name:"Imo"},18:{code:"JI",name:"Jigawa"},19:{code:"KD",name:"Kaduna"},20:{code:"KN",name:"Kano"},21:{code:"KT",name:"Katsina"},22:{code:"KE",name:"Kebbi"},23:{code:"KO",name:"Kogi"},24:{code:"KW",name:"Kwara"},25:{code:"LA",name:"Lagos"},26:{code:"NA",name:"Nassarawa"},27:{code:"NI",name:"Niger"},28:{code:"OG",name:"Ogun"},29:{code:"ONG",name:"Ondo"},30:{code:"OS",name:"Osun"},31:{code:"OY",name:"Oyo"},32:{code:"PL",name:"Plateau"},33:{code:"RI",name:"Rivers"},34:{code:"SO",name:"Sokoto"},35:{code:"TA",name:"Taraba"},36:{code:"YO",name:"Yobe"},37:{code:"ZA",name:"Zamfara"}},NU:{1:{code:"MAK",name:"Makefu"},2:{code:"TUA",name:"Tuapa"},3:{code:"NAM",name:"Namukulu"},4:{code:"HIK",name:"Hikutavake"},5:{code:"TOI",name:"Toi"},6:{code:"MUT",name:"Mutalau"},7:{code:"LAK",name:"Lakepa"},8:{code:"LIK",name:"Liku"},9:{code:"HAK",name:"Hakupu"},10:{code:"VAI",name:"Vaiea"},11:{code:"AVA",name:"Avatele"},12:{code:"TAM",name:"Tamakautoga"},13:{code:"ALO",name:"Alofi South"},14:{code:"ALO",name:"Alofi North"}},NF:{1:{code:"NOR",name:"Norfolk Island"}},MP:{1:{code:"N",name:"Northern Islands"},2:{code:"R",name:"Rota"},3:{code:"S",name:"Saipan"},4:{code:"T",name:"Tinian"}},NO:{1:{code:"AK",name:"Akershus"},2:{code:"AA",name:"Aust-Agder"},3:{code:"BU",name:"Buskerud"},4:{code:"FM",name:"Finnmark"},5:{code:"HM",name:"Hedmark"},6:{code:"HL",name:"Hordaland"},7:{code:"MR",name:"Møre og Romsdal"},8:{code:"NL",name:"Nordland"},9:{code:"NT",name:"Nord-Trøndelag"},10:{code:"OP",name:"Oppland"},11:{code:"OL",name:"Oslo"},12:{code:"RL",name:"Rogaland"},13:{code:"SJ",name:"Sogn og Fjordane"},14:{code:"ST",name:"Sør-Trøndelag"},15:{code:"SV",name:"Svalbard"},16:{code:"TM",name:"Telemark"},17:{code:"TR",name:"Troms"},18:{code:"VA",name:"Vest-Agder"},19:{code:"VF",name:"Vestfold"},20:{code:"OF",name:"Østfold"}},OM:{1:{code:"DA",name:"Ad Dakhiliyah"},2:{code:"BA",name:"Al Batinah"},3:{code:"WU",name:"Al Wusta"},4:{code:"SH",name:"Ash Sharqiyah"},5:{code:"ZA",name:"Az Zahirah"},6:{code:"MA",name:"Masqat"},7:{code:"MU",name:"Musandam"},8:{code:"ZU",name:"Zufar"}},PK:{1:{code:"B",name:"Balochistan"},2:{code:"T",name:"Federally Administered Tribal Ar"},3:{code:"I",name:"Islamabad Capital Territory"},4:{code:"N",name:"North-West Frontier"},5:{code:"P",name:"Punjab"},6:{code:"S",name:"Sindh"}},PW:{1:{code:"AM",name:"Aimeliik"},2:{code:"AR",name:"Airai"},3:{code:"AN",name:"Angaur"},4:{code:"HA",name:"Hatohobei"},5:{code:"KA",name:"Kayangel"},6:{code:"KO",name:"Koror"},7:{code:"ME",name:"Melekeok"},8:{code:"NA",name:"Ngaraard"},9:{code:"NG",name:"Ngarchelong"},10:{code:"ND",name:"Ngardmau"},11:{code:"NT",name:"Ngatpang"},12:{code:"NC",name:"Ngchesar"},13:{code:"NR",name:"Ngeremlengui"},14:{code:"NW",name:"Ngiwal"},15:{code:"PE",name:"Peleliu"},16:{code:"SO",name:"Sonsorol"}},PA:{1:{code:"BT",name:"Bocas del Toro"},2:{code:"CH",name:"Chiriqui"},3:{code:"CC",name:"Cocle"},4:{code:"CL",name:"Colon"},5:{code:"DA",name:"Darien"},6:{code:"HE",name:"Herrera"},7:{code:"LS",name:"Los Santos"},8:{code:"PA",name:"Panama"},9:{code:"SB",name:"San Blas"},10:{code:"VG",name:"Veraguas"}},PG:{1:{code:"BV",name:"Bougainville"},2:{code:"CE",name:"Central"},3:{code:"CH",name:"Chimbu"},4:{code:"EH",name:"Eastern Highlands"},5:{code:"EB",name:"East New Britain"},6:{code:"ES",name:"East Sepik"},7:{code:"EN",name:"Enga"},8:{code:"GU",name:"Gulf"},9:{code:"MD",name:"Madang"},10:{code:"MN",name:"Manus"},11:{code:"MB",name:"Milne Bay"},12:{code:"MR",name:"Morobe"},13:{code:"NC",name:"National Capital"},14:{code:"NI",name:"New Ireland"},15:{code:"NO",name:"Northern"},16:{code:"SA",name:"Sandaun"},17:{code:"SH",name:"Southern Highlands"},18:{code:"WE",name:"Western"},19:{code:"WH",name:"Western Highlands"},20:{code:"WB",name:"West New Britain"}},PY:{1:{code:"AG",name:"Alto Paraguay"},2:{code:"AN",name:"Alto Parana"},3:{code:"AM",name:"Amambay"},4:{code:"AS",name:"Asuncion"},5:{code:"BO",name:"Boqueron"},6:{code:"CG",name:"Caaguazu"},7:{code:"CZ",name:"Caazapa"},8:{code:"CN",name:"Canindeyu"},9:{code:"CE",name:"Central"},10:{code:"CC",name:"Concepcion"},11:{code:"CD",name:"Cordillera"},12:{code:"GU",name:"Guaira"},13:{code:"IT",name:"Itapua"},14:{code:"MI",name:"Misiones"},15:{code:"NE",name:"Neembucu"},16:{code:"PA",name:"Paraguari"},17:{code:"PH",name:"Presidente Hayes"},18:{code:"SP",name:"San Pedro"}},PE:{1:{code:"AM",name:"Amazonas"},2:{code:"AN",name:"Ancash"},3:{code:"AP",name:"Apurimac"},4:{code:"AR",name:"Arequipa"},5:{code:"AY",name:"Ayacucho"},6:{code:"CJ",name:"Cajamarca"},7:{code:"CL",name:"Callao"},8:{code:"CU",name:"Cusco"},9:{code:"HV",name:"Huancavelica"},10:{code:"HO",name:"Huanuco"},11:{code:"IC",name:"Ica"},12:{code:"JU",name:"Junin"},13:{code:"LD",name:"La Libertad"},14:{code:"LY",name:"Lambayeque"},15:{code:"LI",name:"Lima"},16:{code:"LO",name:"Loreto"},17:{code:"MD",name:"Madre de Dios"},18:{code:"MO",name:"Moquegua"},19:{code:"PA",name:"Pasco"},20:{code:"PI",name:"Piura"},21:{code:"PU",name:"Puno"},22:{code:"SM",name:"San Martin"},23:{code:"TA",name:"Tacna"},24:{code:"TU",name:"Tumbes"},25:{code:"UC",name:"Ucayali"}},PH:{1:{code:"ABR",name:"Abra"},2:{code:"ANO",name:"Agusan del Norte"},3:{code:"ASU",name:"Agusan del Sur"},4:{code:"AKL",name:"Aklan"},5:{code:"ALB",name:"Albay"},6:{code:"ANT",name:"Antique"},7:{code:"APY",name:"Apayao"},8:{code:"AUR",name:"Aurora"},9:{code:"BAS",name:"Basilan"},10:{code:"BTA",name:"Bataan"},11:{code:"BTE",name:"Batanes"},12:{code:"BTG",name:"Batangas"},13:{code:"BLR",name:"Biliran"},14:{code:"BEN",name:"Benguet"},15:{code:"BOL",name:"Bohol"},16:{code:"BUK",name:"Bukidnon"},17:{code:"BUL",name:"Bulacan"},18:{code:"CAG",name:"Cagayan"},19:{code:"CNO",name:"Camarines Norte"},20:{code:"CSU",name:"Camarines Sur"},21:{code:"CAM",name:"Camiguin"},22:{code:"CAP",name:"Capiz"},23:{code:"CAT",name:"Catanduanes"},24:{code:"CAV",name:"Cavite"},25:{code:"CEB",name:"Cebu"},26:{code:"CMP",name:"Compostela"},27:{code:"DNO",name:"Davao del Norte"},28:{code:"DSU",name:"Davao del Sur"},29:{code:"DOR",name:"Davao Oriental"},30:{code:"ESA",name:"Eastern Samar"},31:{code:"GUI",name:"Guimaras"},32:{code:"IFU",name:"Ifugao"},33:{code:"INO",name:"Ilocos Norte"},34:{code:"ISU",name:"Ilocos Sur"},35:{code:"ILO",name:"Iloilo"},36:{code:"ISA",name:"Isabela"},37:{code:"KAL",name:"Kalinga"},38:{code:"LAG",name:"Laguna"},39:{code:"LNO",name:"Lanao del Norte"},40:{code:"LSU",name:"Lanao del Sur"},41:{code:"UNI",name:"La Union"},42:{code:"LEY",name:"Leyte"},43:{code:"MAG",name:"Maguindanao"},44:{code:"MRN",name:"Marinduque"},45:{code:"MSB",name:"Masbate"},46:{code:"MIC",name:"Mindoro Occidental"},47:{code:"MIR",name:"Mindoro Oriental"},48:{code:"MSC",name:"Misamis Occidental"},49:{code:"MOR",name:"Misamis Oriental"},50:{code:"MOP",name:"Mountain"},51:{code:"NOC",name:"Negros Occidental"},52:{code:"NOR",name:"Negros Oriental"},53:{code:"NCT",name:"North Cotabato"},54:{code:"NSM",name:"Northern Samar"},55:{code:"NEC",name:"Nueva Ecija"},56:{code:"NVZ",name:"Nueva Vizcaya"},57:{code:"PLW",name:"Palawan"},58:{code:"PMP",name:"Pampanga"},59:{code:"PNG",name:"Pangasinan"},60:{code:"QZN",name:"Quezon"},61:{code:"QRN",name:"Quirino"},62:{code:"RIZ",name:"Rizal"},63:{code:"ROM",name:"Romblon"},64:{code:"SMR",name:"Samar"},65:{code:"SRG",name:"Sarangani"},66:{code:"SQJ",name:"Siquijor"},67:{code:"SRS",name:"Sorsogon"},68:{code:"SCO",name:"South Cotabato"},69:{code:"SLE",name:"Southern Leyte"},70:{code:"SKU",name:"Sultan Kudarat"},71:{code:"SLU",name:"Sulu"},72:{code:"SNO",name:"Surigao del Norte"},73:{code:"SSU",name:"Surigao del Sur"},74:{code:"TAR",name:"Tarlac"},75:{code:"TAW",name:"Tawi-Tawi"},76:{code:"ZBL",name:"Zambales"},77:{code:"ZNO",name:"Zamboanga del Norte"},78:{code:"ZSU",name:"Zamboanga del Sur"},79:{code:"ZSI",name:"Zamboanga Sibugay"}},PN:{1:{code:"PIT",name:"Pitcairn Island"}},PL:{1:{code:"DO",name:"Dolnośląskie"},2:{code:"KP",name:"Kujawsko-Pomorskie"},3:{code:"LL",name:"Lubelskie"},4:{code:"LU",name:"Lubuskie"},5:{code:"LO",name:"Łódzkie"},6:{code:"ML",name:"Małopolskie"},7:{code:"MZ",name:"Mazowieckie"},8:{code:"OP",name:"Opolskie"},9:{code:"PP",name:"Podkarpackie"},10:{code:"PL",name:"Podlaskie"},11:{code:"PM",name:"Pomorskie"},12:{code:"SL",name:"Śląskie"},13:{code:"SW",name:"Świętokrzyskie"},14:{code:"WM",name:"Warmińsko-Mazurskie"},15:{code:"WP",name:"Wielkopolskie"},16:{code:"ZA",name:"Zachodniopomorskie"}},PT:{1:{code:"AC",name:"Açores"},2:{code:"AV",name:"Aveiro"},3:{code:"BE",name:"Beja"},4:{code:"BR",name:"Braga"},5:{code:"BA",name:"Bragança"},6:{code:"CB",name:"Castelo Branco"},7:{code:"CO",name:"Coimbra"},8:{code:"EV",name:"évora"},9:{code:"FA",name:"Faro"},10:{code:"GU",name:"Guarda"},12:{code:"LE",name:"Leiria"},13:{code:"LI",name:"Lisboa"},14:{code:"ME",name:"Madeira"},15:{code:"PO",name:"Portalegre"},16:{code:"PR",name:"Porto"},17:{code:"SA",name:"Santarém"},18:{code:"SE",name:"SetÚbal"},19:{code:"VC",name:"Viana do Castelo"},20:{code:"VR",name:"Vila Real"},21:{code:"VI",name:"Viseu"}},PR:{1:{code:"A-A",name:"Añasco"},2:{code:"ADJ",name:"Adjuntas"},3:{code:"AGU",name:"Aguada"},4:{code:"AGU",name:"Aguadilla"},5:{code:"AGU",name:"Aguas Buenas"},6:{code:"AIB",name:"Aibonito"},7:{code:"ARE",name:"Arecibo"},8:{code:"ARR",name:"Arroyo"},9:{code:"BAR",name:"Barceloneta"},10:{code:"BAR",name:"Barranquitas"},11:{code:"BAY",name:"Bayamón"},12:{code:"CAB",name:"Cabo Rojo"},13:{code:"CAG",name:"Caguas"},14:{code:"CAM",name:"Camuy"},15:{code:"CAN",name:"Canóvanas"},16:{code:"CAR",name:"Carolina"},17:{code:"CAT",name:"Cataño"},18:{code:"CAY",name:"Cayey"},19:{code:"CEI",name:"Ceiba"},20:{code:"CIA",name:"Ciales"},21:{code:"CID",name:"Cidra"},22:{code:"COA",name:"Coamo"},23:{code:"COM",name:"Comerío"},24:{code:"COR",name:"Corozal"},25:{code:"CUL",name:"Culebra"},26:{code:"DOR",name:"Dorado"},27:{code:"FAJ",name:"Fajardo"},28:{code:"FLO",name:"Florida"},29:{code:"GUA",name:"Guayama"},30:{code:"GUA",name:"Guayanilla"},31:{code:"GUA",name:"Guaynabo"},32:{code:"GUR",name:"Gurabo"},33:{code:"GU¡",name:"Guánica"},34:{code:"HAT",name:"Hatillo"},35:{code:"HOR",name:"Hormigueros"},36:{code:"HUM",name:"Humacao"},37:{code:"ISA",name:"Isabela"},38:{code:"JAY",name:"Jayuya"},39:{code:"JUA",name:"Juana Díaz"},40:{code:"JUN",name:"Juncos"},41:{code:"LAJ",name:"Lajas"},42:{code:"LAR",name:"Lares"},43:{code:"LAS",name:"Las Marías"},44:{code:"LAS",name:"Las Piedras"},45:{code:"LOÕ",name:"Loíza"},46:{code:"LUQ",name:"Luquillo"},47:{code:"MAN",name:"Manatí"},48:{code:"MAR",name:"Maricao"},49:{code:"MAU",name:"Maunabo"},50:{code:"MAY",name:"Mayagüez"},51:{code:"MOC",name:"Moca"},52:{code:"MOR",name:"Morovis"},53:{code:"NAG",name:"Naguabo"},54:{code:"NAR",name:"Naranjito"},55:{code:"ORO",name:"Orocovis"},56:{code:"PAT",name:"Patillas"},57:{code:"PE-",name:"Peñuelas"},58:{code:"PON",name:"Ponce"},59:{code:"QUE",name:"Quebradillas"},60:{code:"RIN",name:"Rincón"},61:{code:"RIO",name:"Rio Grande"},62:{code:"SAB",name:"Sabana Grande"},63:{code:"SAL",name:"Salinas"},64:{code:"SAN",name:"San Germàn"},65:{code:"SAN",name:"San Juan"},66:{code:"SAN",name:"San Lorenzo"},67:{code:"SAN",name:"San Sebastiàn"},68:{code:"SAN",name:"Santa Isabel"},69:{code:"TOA",name:"Toa Alta"},70:{code:"TOA",name:"Toa Baja"},71:{code:"TRU",name:"Trujillo Alto"},72:{code:"UTU",name:"Utuado"},73:{code:"VEG",name:"Vega Alta"},74:{code:"VEG",name:"Vega Baja"},75:{code:"VIE",name:"Vieques"},76:{code:"VIL",name:"Villalba"},77:{code:"YAB",name:"Yabucoa"},78:{code:"YAU",name:"Yauco"}},QA:{1:{code:"DW",name:"Ad Dawhah"},2:{code:"GW",name:"Al Ghuwayriyah"},3:{code:"JM",name:"Al Jumayliyah"},4:{code:"KR",name:"Al Khawr"},5:{code:"WK",name:"Al Wakrah"},6:{code:"RN",name:"Ar Rayyan"},7:{code:"JB",name:"Jarayan al Batinah"},8:{code:"MS",name:"Madinat ash Shamal"},9:{code:"UD",name:"Umm Sa'id"},10:{code:"UL",name:"Umm Salal"}},RO:{1:{code:"AB",name:"Alba"},2:{code:"AR",name:"Arad"},3:{code:"AG",name:"Arges"},4:{code:"BC",name:"Bacau"},5:{code:"BH",name:"Bihor"},6:{code:"BN",name:"Bistrita-Nasaud"},7:{code:"BT",name:"Botosani"},8:{code:"BV",name:"Brasov"},9:{code:"BR",name:"Braila"},10:{code:"B",name:"Bucuresti"},11:{code:"BZ",name:"Buzau"},12:{code:"CS",name:"Caras-Severin"},13:{code:"CL",name:"Calarasi"},14:{code:"CJ",name:"Cluj"},15:{code:"CT",name:"Constanta"},16:{code:"CV",name:"Covasna"},17:{code:"DB",name:"Dimbovita"},18:{code:"DJ",name:"Dolj"},19:{code:"GL",name:"Galati"},20:{code:"GR",name:"Giurgiu"},21:{code:"GJ",name:"Gorj"},22:{code:"HR",name:"Harghita"},23:{code:"HD",name:"Hunedoara"},24:{code:"IL",name:"Ialomita"},25:{code:"IS",name:"Iasi"},26:{code:"IF",name:"Ilfov"},27:{code:"MM",name:"Maramures"},28:{code:"MH",name:"Mehedinti"},29:{code:"MS",name:"Mures"},30:{code:"NT",name:"Neamt"},31:{code:"OT",name:"Olt"},32:{code:"PH",name:"Prahova"},33:{code:"SM",name:"Satu-Mare"},34:{code:"SJ",name:"Salaj"},35:{code:"SB",name:"Sibiu"},36:{code:"SV",name:"Suceava"},37:{code:"TR",name:"Teleorman"},38:{code:"TM",name:"Timis"},39:{code:"TL",name:"Tulcea"},40:{code:"VS",name:"Vaslui"},41:{code:"VL",name:"Valcea"},42:{code:"VN",name:"Vrancea"}},RU:{1:{code:"AB",name:"Abakan"},2:{code:"AG",name:"Aginskoye"},3:{code:"AN",name:"Anadyr"},4:{code:"AR",name:"Arkahangelsk"},5:{code:"AS",name:"Astrakhan"},6:{code:"BA",name:"Barnaul"},7:{code:"BE",name:"Belgorod"},8:{code:"BI",name:"Birobidzhan"},9:{code:"BL",name:"Blagoveshchensk"},10:{code:"BR",name:"Bryansk"},11:{code:"CH",name:"Cheboksary"},12:{code:"CL",name:"Chelyabinsk"},13:{code:"CR",name:"Cherkessk"},14:{code:"CI",name:"Chita"},15:{code:"DU",name:"Dudinka"},16:{code:"EL",name:"Elista"},17:{code:"GO",name:"Gomo-Altaysk"},18:{code:"GA",name:"Gorno-Altaysk"},19:{code:"GR",name:"Groznyy"},20:{code:"IR",name:"Irkutsk"},21:{code:"IV",name:"Ivanovo"},22:{code:"IZ",name:"Izhevsk"},23:{code:"KA",name:"Kalinigrad"},24:{code:"KL",name:"Kaluga"},25:{code:"KS",name:"Kasnodar"},26:{code:"KZ",name:"Kazan"},27:{code:"KE",name:"Kemerovo"},28:{code:"KH",name:"Khabarovsk"},29:{code:"KM",name:"Khanty-Mansiysk"},30:{code:"KO",name:"Kostroma"},31:{code:"KR",name:"Krasnodar"},32:{code:"KN",name:"Krasnoyarsk"},33:{code:"KU",name:"Kudymkar"},34:{code:"KG",name:"Kurgan"},35:{code:"KK",name:"Kursk"},36:{code:"KY",name:"Kyzyl"},37:{code:"LI",name:"Lipetsk"},38:{code:"MA",name:"Magadan"},39:{code:"MK",name:"Makhachkala"},40:{code:"MY",name:"Maykop"},41:{code:"MO",name:"Moscow"},42:{code:"MU",name:"Murmansk"},43:{code:"NA",name:"Nalchik"},44:{code:"NR",name:"Naryan Mar"},45:{code:"NZ",name:"Nazran"},46:{code:"NI",name:"Nizhniy Novgorod"},47:{code:"NO",name:"Novgorod"},48:{code:"NV",name:"Novosibirsk"},49:{code:"OM",name:"Omsk"},50:{code:"OR",name:"Orel"},51:{code:"OE",name:"Orenburg"},52:{code:"PA",name:"Palana"},53:{code:"PE",name:"Penza"},54:{code:"PR",name:"Perm"},55:{code:"PK",name:"Petropavlovsk-Kamchatskiy"},56:{code:"PT",name:"Petrozavodsk"},57:{code:"PS",name:"Pskov"},58:{code:"RO",name:"Rostov-na-Donu"},59:{code:"RY",name:"Ryazan"},60:{code:"SL",name:"Salekhard"},61:{code:"SA",name:"Samara"},62:{code:"SR",name:"Saransk"},63:{code:"SV",name:"Saratov"},64:{code:"SM",name:"Smolensk"},65:{code:"SP",name:"St. Petersburg"},66:{code:"ST",name:"Stavropol"},67:{code:"SY",name:"Syktyvkar"},68:{code:"TA",name:"Tambov"},69:{code:"TO",name:"Tomsk"},70:{code:"TU",name:"Tula"},71:{code:"TR",name:"Tura"},72:{code:"TV",name:"Tver"},73:{code:"TY",name:"Tyumen"},74:{code:"UF",name:"Ufa"},75:{code:"UL",name:"Ul'yanovsk"},76:{code:"UU",name:"Ulan-Ude"},77:{code:"US",name:"Ust'-Ordynskiy"},78:{code:"VL",name:"Vladikavkaz"},79:{code:"VA",name:"Vladimir"},80:{code:"VV",name:"Vladivostok"},81:{code:"VG",name:"Volgograd"},82:{code:"VD",name:"Vologda"},83:{code:"VO",name:"Voronezh"},84:{code:"VY",name:"Vyatka"},85:{code:"YA",name:"Yakutsk"},86:{code:"YR",name:"Yaroslavl"},87:{code:"YE",name:"Yekaterinburg"},88:{code:"YO",name:"Yoshkar-Ola"}},RW:{1:{code:"BU",name:"Butare"},2:{code:"BY",name:"Byumba"},3:{code:"CY",name:"Cyangugu"},4:{code:"GK",name:"Gikongoro"},5:{code:"GS",name:"Gisenyi"},6:{code:"GT",name:"Gitarama"},7:{code:"KG",name:"Kibungo"},8:{code:"KY",name:"Kibuye"},9:{code:"KR",name:"Kigali Rurale"},10:{code:"KV",name:"Kigali-ville"},11:{code:"RU",name:"Ruhengeri"},12:{code:"UM",name:"Umutara"}},KN:{1:{code:"CCN",name:"Christ Church Nichola Town"},2:{code:"SAS",name:"Saint Anne Sandy Point"},3:{code:"SGB",name:"Saint George Basseterre"},4:{code:"SGG",name:"Saint George Gingerland"},5:{code:"SJW",name:"Saint James Windward"},6:{code:"SJC",name:"Saint John Capesterre"},7:{code:"SJF",name:"Saint John Figtree"},8:{code:"SMC",name:"Saint Mary Cayon"},9:{code:"CAP",name:"Saint Paul Capesterre"},10:{code:"CHA",name:"Saint Paul Charlestown"},11:{code:"SPB",name:"Saint Peter Basseterre"},12:{code:"STL",name:"Saint Thomas Lowland"},13:{code:"STM",name:"Saint Thomas Middle Island"},14:{code:"TPP",name:"Trinity Palmetto Point"}},LC:{1:{code:"AR",name:"Anse-la-Raye"},2:{code:"CA",name:"Castries"},3:{code:"CH",name:"Choiseul"},4:{code:"DA",name:"Dauphin"},5:{code:"DE",name:"Dennery"},6:{code:"GI",name:"Gros-Islet"},7:{code:"LA",name:"Laborie"},8:{code:"MI",name:"Micoud"},9:{code:"PR",name:"Praslin"},10:{code:"SO",name:"Soufriere"},11:{code:"VF",name:"Vieux-Fort"}},VC:{1:{code:"C",name:"Charlotte"},2:{code:"R",name:"Grenadines"},3:{code:"A",name:"Saint Andrew"},4:{code:"D",name:"Saint David"},5:{code:"G",name:"Saint George"},6:{code:"P",name:"Saint Patrick"}},WS:{1:{code:"AN",name:"A'ana"},2:{code:"AI",name:"Aiga-i-le-Tai"},3:{code:"AT",name:"Atua"},4:{code:"FA",name:"Fa'asaleleaga"},5:{code:"GE",name:"Gaga'emauga"},6:{code:"GF",name:"Gagaifomauga"},7:{code:"PA",name:"Palauli"},8:{code:"SA",name:"Satupa'itea"},9:{code:"TU",name:"Tuamasaga"},10:{code:"VF",name:"Va'a-o-Fonoti"},11:{code:"VS",name:"Vaisigano"}},SM:{1:{code:"AC",name:"Acquaviva"},2:{code:"BM",name:"Borgo Maggiore"},3:{code:"CH",name:"Chiesanuova"},4:{code:"DO",name:"Domagnano"},5:{code:"FA",name:"Faetano"},6:{code:"FI",name:"Fiorentino"},7:{code:"MO",name:"Montegiardino"},8:{code:"SM",name:"Citta di San Marino"},9:{code:"SE",name:"Serravalle"}},ST:{1:{code:"S",name:"Sao Tome"},2:{code:"P",name:"Principe"}},SA:{1:{code:"BH",name:"Al Bahah"},2:{code:"HS",name:"Al Hudud ash Shamaliyah"},3:{code:"JF",name:"Al Jawf"},4:{code:"MD",name:"Al Madinah"},5:{code:"QS",name:"Al Qasim"},6:{code:"RD",name:"Ar Riyad"},7:{code:"AQ",name:"Ash Sharqiyah (Eastern)"},8:{code:"AS",name:"'Asir"},9:{code:"HL",name:"Ha'il"},10:{code:"JZ",name:"Jizan"},11:{code:"ML",name:"Makkah"},12:{code:"NR",name:"Najran"},13:{code:"TB",name:"Tabuk"}},SN:{1:{code:"DA",name:"Dakar"},2:{code:"DI",name:"Diourbel"},3:{code:"FA",name:"Fatick"},4:{code:"KA",name:"Kaolack"},5:{code:"KO",name:"Kolda"},6:{code:"LO",name:"Louga"},7:{code:"MA",name:"Matam"},8:{code:"SL",name:"Saint-Louis"},9:{code:"TA",name:"Tambacounda"},10:{code:"TH",name:"Thies"},11:{code:"ZI",name:"Ziguinchor"}},SC:{1:{code:"AP",name:"Anse aux Pins"},2:{code:"AB",name:"Anse Boileau"},3:{code:"AE",name:"Anse Etoile"},4:{code:"AL",name:"Anse Louis"},5:{code:"AR",name:"Anse Royale"},6:{code:"BL",name:"Baie Lazare"},7:{code:"BS",name:"Baie Sainte Anne"},8:{code:"BV",name:"Beau Vallon"},9:{code:"BA",name:"Bel Air"},10:{code:"BO",name:"Bel Ombre"},11:{code:"CA",name:"Cascade"},12:{code:"GL",name:"Glacis"},13:{code:"GM",name:"Grand' Anse (on Mahe)"},14:{code:"GP",name:"Grand' Anse (on Praslin)"},15:{code:"DG",name:"La Digue"},16:{code:"RA",name:"La Riviere Anglaise"},17:{code:"MB",name:"Mont Buxton"},18:{code:"MF",name:"Mont Fleuri"},19:{code:"PL",name:"Plaisance"},20:{code:"PR",name:"Pointe La Rue"},21:{code:"PG",name:"Port Glaud"},22:{code:"SL",name:"Saint Louis"},23:{code:"TA",name:"Takamaka"}},SL:{1:{code:"E",name:"Eastern"},2:{code:"N",name:"Northern"},3:{code:"S",name:"Southern"},4:{code:"W",name:"Western"}},SK:{1:{code:"BA",name:"Banskobystricky"},2:{code:"BR",name:"Bratislavsky"},3:{code:"KO",name:"Kosicky"},4:{code:"NI",name:"Nitriansky"},5:{code:"PR",name:"Presovsky"},6:{code:"TC",name:"Trenciansky"},7:{code:"TV",name:"Trnavsky"},8:{code:"ZI",name:"Zilinsky"}},SI:{1:{code:"4",name:"Štajerska"},2:{code:"2A",name:"Gorenjska"},3:{code:"5",name:"Prekmurje"},4:{code:"3",name:"Koroška"},5:{code:"2B",name:"Notranjska"},6:{code:"1",name:"Primorska"},7:{code:"2C",name:"Dolenjska"},8:{code:"2C",name:"Bela Krajina"}},SB:{1:{code:"CE",name:"Central"},2:{code:"CH",name:"Choiseul"},3:{code:"GC",name:"Guadalcanal"},4:{code:"HO",name:"Honiara"},5:{code:"IS",name:"Isabel"},6:{code:"MK",name:"Makira"},7:{code:"ML",name:"Malaita"},8:{code:"RB",name:"Rennell and Bellona"},9:{code:"TM",name:"Temotu"},10:{code:"WE",name:"Western"}},SO:{1:{code:"AW",name:"Awdal"},2:{code:"BK",name:"Bakool"},3:{code:"BN",name:"Banaadir"},4:{code:"BR",name:"Bari"},5:{code:"BY",name:"Bay"},6:{code:"GA",name:"Galguduud"},7:{code:"GE",name:"Gedo"},8:{code:"HI",name:"Hiiraan"},9:{code:"JD",name:"Jubbada Dhexe"},10:{code:"JH",name:"Jubbada Hoose"},11:{code:"MU",name:"Mudug"},12:{code:"NU",name:"Nugaal"},13:{code:"SA",name:"Sanaag"},14:{code:"SD",name:"Shabeellaha Dhexe"},15:{code:"SH",name:"Shabeellaha Hoose"},16:{code:"SL",name:"Sool"},17:{code:"TO",name:"Togdheer"},18:{code:"WG",name:"Woqooyi Galbeed"}},ZA:{1:{code:"EC",name:"Eastern Cape"},2:{code:"FS",name:"Free State"},3:{code:"GT",name:"Gauteng"},4:{code:"KN",name:"KwaZulu-Natal"},5:{code:"LP",name:"Limpopo"},6:{code:"MP",name:"Mpumalanga"},7:{code:"NW",name:"North West"},8:{code:"NC",name:"Northern Cape"},9:{code:"WC",name:"Western Cape"}},ES:{1:{code:"CA",name:"La Coruña"},2:{code:"AL",name:"Álava"},3:{code:"AB",name:"Albacete"},4:{code:"AC",name:"Alicante"},5:{code:"AM",name:"Almeria"},6:{code:"AS",name:"Asturias"},7:{code:"AV",name:"Ávila"},8:{code:"BJ",name:"Badajoz"},9:{code:"IB",name:"Baleares"},10:{code:"BA",name:"Barcelona"},11:{code:"BU",name:"Burgos"},12:{code:"CC",name:"Cáceres"},13:{code:"CZ",name:"Cádiz"},14:{code:"CT",name:"Cantabria"},15:{code:"CL",name:"Castellón"},16:{code:"CE",name:"Ceuta"},17:{code:"CR",name:"Ciudad Real"},18:{code:"CD",name:"Córdoba"},19:{code:"CU",name:"Cuenca"},20:{code:"GI",name:"Gerona"},21:{code:"GD",name:"Granada"},22:{code:"GJ",name:"Guadalajara"},23:{code:"GP",name:"Guipúzcoa"},24:{code:"HL",name:"Huelva"},25:{code:"HS",name:"Huesca"},26:{code:"JN",name:"Jaén"},27:{code:"RJ",name:"La Rioja"},28:{code:"PM",name:"Las Palmas"},29:{code:"LE",name:"León"},30:{code:"LL",name:"Lérida"},31:{code:"LG",name:"Lugo"},32:{code:"MD",name:"Madrid"},33:{code:"MA",name:"Málaga"},34:{code:"ML",name:"Melilla"},35:{code:"MU",name:"Murcia"},36:{code:"NV",name:"Navarra"},37:{code:"OU",name:"Ourense"},38:{code:"PL",name:"Palencia"},39:{code:"PO",name:"Pontevedra"},40:{code:"SL",name:"Salamanca"},41:{code:"SC",name:"Santa Cruz de Tenerife"},42:{code:"SG",name:"Segovia"},43:{code:"SV",name:"Sevilla"},44:{code:"SO",name:"Soria"},45:{code:"TA",name:"Tarragona"},46:{code:"TE",name:"Teruel"},47:{code:"TO",name:"Toledo"},48:{code:"VC",name:"Valencia"},49:{code:"VD",name:"Valladolid"},50:{code:"VZ",name:"Vizcaya"},51:{code:"ZM",name:"Zamora"},52:{code:"ZR",name:"Zaragoza"}},LK:{1:{code:"CE",name:"Central"},2:{code:"EA",name:"Eastern"},3:{code:"NC",name:"North Central"},4:{code:"NO",name:"Northern"},5:{code:"NW",name:"North Western"},6:{code:"SA",name:"Sabaragamuwa"},7:{code:"SO",name:"Southern"},8:{code:"UV",name:"Uva"},9:{code:"WE",name:"Western"}},SH:{1:{code:"A",name:"Ascension"},2:{code:"S",name:"Saint Helena"},3:{code:"T",name:"Tristan da Cunha"}},PM:{1:{code:"P",name:"Saint Pierre"},2:{code:"M",name:"Miquelon"}},SD:{1:{code:"ANL",name:"A'ali an Nil"},2:{code:"BAM",name:"Al Bahr al Ahmar"},3:{code:"BRT",name:"Al Buhayrat"},4:{code:"JZR",name:"Al Jazirah"},5:{code:"KRT",name:"Al Khartum"},6:{code:"QDR",name:"Al Qadarif"},7:{code:"WDH",name:"Al Wahdah"},8:{code:"ANB",name:"An Nil al Abyad"},9:{code:"ANZ",name:"An Nil al Azraq"},10:{code:"ASH",name:"Ash Shamaliyah"},11:{code:"BJA",name:"Bahr al Jabal"},12:{code:"GIS",name:"Gharb al Istiwa'iyah"},13:{code:"GBG",name:"Gharb Bahr al Ghazal"},14:{code:"GDA",name:"Gharb Darfur"},15:{code:"GKU",name:"Gharb Kurdufan"},16:{code:"JDA",name:"Janub Darfur"},17:{code:"JKU",name:"Janub Kurdufan"},18:{code:"JQL",name:"Junqali"},19:{code:"KSL",name:"Kassala"},20:{code:"NNL",name:"Nahr an Nil"},21:{code:"SBG",name:"Shamal Bahr al Ghazal"},22:{code:"SDA",name:"Shamal Darfur"},23:{code:"SKU",name:"Shamal Kurdufan"},24:{code:"SIS",name:"Sharq al Istiwa'iyah"},25:{code:"SNR",name:"Sinnar"},26:{code:"WRB",name:"Warab"}},SR:{1:{code:"BR",name:"Brokopondo"},2:{code:"CM",name:"Commewijne"},3:{code:"CR",name:"Coronie"},4:{code:"MA",name:"Marowijne"},5:{code:"NI",name:"Nickerie"},6:{code:"PA",name:"Para"},7:{code:"PM",name:"Paramaribo"},9:{code:"SA",name:"Saramacca"},10:{code:"SI",name:"Sipaliwini"},11:{code:"WA",name:"Wanica"}},SZ:{1:{code:"H",name:"Hhohho"},2:{code:"L",name:"Lubombo"},3:{code:"M",name:"Manzini"},4:{code:"S",name:"Shishelweni"}},SE:{1:{code:"K",name:"Blekinge"},2:{code:"W",name:"Dalama"},3:{code:"I",name:"Gotland"},4:{code:"X",name:"Gävleborg"},5:{code:"N",name:"Halland"},6:{code:"Z",name:"Jämtland"},7:{code:"F",name:"Jönköping"},8:{code:"H",name:"Kalmar"},9:{code:"G",name:"Kronoberg"},10:{code:"BD",name:"Norrbotten"},11:{code:"M",name:"Skåne"},12:{code:"AB",name:"Stockholm"},13:{code:"D",name:"Södermanland"},14:{code:"C",name:"Uppsala"},15:{code:"S",name:"Värmland"},16:{code:"AC",name:"Västerbotten"},17:{code:"Y",name:"Västernorrland"},18:{code:"U",name:"Västmanland"},19:{code:"O",name:"Västra Götaland"},20:{code:"T",name:"Örebro"},21:{code:"E",name:"Östergötland"}},CH:{1:{code:"AG",name:"Aargau"},2:{code:"AR",name:"Appenzell Ausserrhoden"},3:{code:"AI",name:"Appenzell Innerrhoden"},4:{code:"BS",name:"Basel-Stadt"},5:{code:"BL",name:"Basel-Landschaft"},6:{code:"BE",name:"Bern"},7:{code:"FR",name:"Fribourg"},8:{code:"GE",name:"Genève"},9:{code:"GL",name:"Glarus"},10:{code:"GR",name:"Graubünden"},11:{code:"JU",name:"Jura"},12:{code:"LU",name:"Lucerne"},13:{code:"NE",name:"Neuchâtel"},14:{code:"NW",name:"Nidwalden"},15:{code:"OW",name:"Obwalden"},16:{code:"SG",name:"St. Gallen"},17:{code:"SH",name:"Schaffhausen"},18:{code:"SZ",name:"Schwyz"},19:{code:"SO",name:"Solothurn"},20:{code:"TG",name:"Thurgau"},21:{code:"TI",name:"Ticino"},22:{code:"UR",name:"Uri"},23:{code:"VS",name:"Valais"},24:{code:"VD",name:"Vaud"},25:{code:"ZG",name:"Zug"},26:{code:"ZH",name:"Zürich"}},SY:{1:{code:"HA",name:"Al Hasakah"},2:{code:"LA",name:"Al Ladhiqiyah"},3:{code:"QU",name:"Al Qunaytirah"},4:{code:"RQ",name:"Ar Raqqah"},5:{code:"SU",name:"As Suwayda"},6:{code:"DA",name:"Dara"},7:{code:"DZ",name:"Dayr az Zawr"},8:{code:"DI",name:"Dimashq"},9:{code:"HL",name:"Halab"},10:{code:"HM",name:"Hamah"},11:{code:"HI",name:"Hims"},12:{code:"ID",name:"Idlib"},13:{code:"RD",name:"Rif Dimashq"},14:{code:"TA",name:"Tartus"}},TW:{1:{code:"CH",name:"Chang-hua"},2:{code:"CI",name:"Chia-i"},3:{code:"HS",name:"Hsin-chu"},4:{code:"HL",name:"Hua-lien"},5:{code:"IL",name:"I-lan"},6:{code:"KH",name:"Kao-hsiung county"},7:{code:"KM",name:"Kin-men"},8:{code:"LC",name:"Lien-chiang"},9:{code:"ML",name:"Miao-li"},10:{code:"NT",name:"Nan-t'ou"},11:{code:"PH",name:"P'eng-hu"},12:{code:"PT",name:"P'ing-tung"},13:{code:"TG",name:"T'ai-chung"},14:{code:"TA",name:"T'ai-nan"},15:{code:"TP",name:"T'ai-pei county"},16:{code:"TT",name:"T'ai-tung"},17:{code:"TY",name:"T'ao-yuan"},18:{code:"YL",name:"Yun-lin"},19:{code:"CC",name:"Chia-i city"},20:{code:"CL",name:"Chi-lung"},21:{code:"HC",name:"Hsin-chu"},22:{code:"TH",name:"T'ai-chung"},23:{code:"TN",name:"T'ai-nan"},24:{code:"KC",name:"Kao-hsiung city"},25:{code:"TC",name:"T'ai-pei city"}},TJ:{1:{code:"GB",name:"Gorno-Badakhstan"},2:{code:"KT",name:"Khatlon"},3:{code:"SU",name:"Sughd"}},TZ:{1:{code:"AR",name:"Arusha"},2:{code:"DS",name:"Dar es Salaam"},3:{code:"DO",name:"Dodoma"},4:{code:"IR",name:"Iringa"},5:{code:"KA",name:"Kagera"},6:{code:"KI",name:"Kigoma"},7:{code:"KJ",name:"Kilimanjaro"},8:{code:"LN",name:"Lindi"},9:{code:"MY",name:"Manyara"},10:{code:"MR",name:"Mara"},11:{code:"MB",name:"Mbeya"},12:{code:"MO",name:"Morogoro"},13:{code:"MT",name:"Mtwara"},14:{code:"MW",name:"Mwanza"},15:{code:"PN",name:"Pemba North"},16:{code:"PS",name:"Pemba South"},17:{code:"PW",name:"Pwani"},18:{code:"RK",name:"Rukwa"},19:{code:"RV",name:"Ruvuma"},20:{code:"SH",name:"Shinyanga"},21:{code:"SI",name:"Singida"},22:{code:"TB",name:"Tabora"},23:{code:"TN",name:"Tanga"},24:{code:"ZC",name:"Zanzibar Central/South"},25:{code:"ZN",name:"Zanzibar North"},26:{code:"ZU",name:"Zanzibar Urban/West"}},TH:{1:{code:"Amnat Charoen",name:"Amnat Charoen"},2:{code:"Ang Thong",name:"Ang Thong"},3:{code:"Ayutthaya",name:"Ayutthaya"},4:{code:"Bangkok",name:"Bangkok"},5:{code:"Buriram",name:"Buriram"},6:{code:"Chachoengsao",name:"Chachoengsao"},7:{code:"Chai Nat",name:"Chai Nat"},8:{code:"Chaiyaphum",name:"Chaiyaphum"},9:{code:"Chanthaburi",name:"Chanthaburi"},10:{code:"Chiang Mai",name:"Chiang Mai"},11:{code:"Chiang Rai",name:"Chiang Rai"},12:{code:"Chon Buri",name:"Chon Buri"},13:{code:"Chumphon",name:"Chumphon"},14:{code:"Kalasin",name:"Kalasin"},15:{code:"Kamphaeng Phet",name:"Kamphaeng Phet"},16:{code:"Kanchanaburi",name:"Kanchanaburi"},17:{code:"Khon Kaen",name:"Khon Kaen"},18:{code:"Krabi",name:"Krabi"},19:{code:"Lampang",name:"Lampang"},20:{code:"Lamphun",name:"Lamphun"},21:{code:"Loei",name:"Loei"},22:{code:"Lop Buri",name:"Lop Buri"},23:{code:"Mae Hong Son",name:"Mae Hong Son"},24:{code:"Maha Sarakham",name:"Maha Sarakham"},25:{code:"Mukdahan",name:"Mukdahan"},26:{code:"Nakhon Nayok",name:"Nakhon Nayok"},27:{code:"Nakhon Pathom",name:"Nakhon Pathom"},28:{code:"Nakhon Phanom",name:"Nakhon Phanom"},29:{code:"Nakhon Ratchasima",name:"Nakhon Ratchasima"},30:{code:"Nakhon Sawan",name:"Nakhon Sawan"},31:{code:"Nakhon Si Thammarat",name:"Nakhon Si Thammarat"},32:{code:"Nan",name:"Nan"},33:{code:"Narathiwat",name:"Narathiwat"},34:{code:"Nong Bua Lamphu",name:"Nong Bua Lamphu"},35:{code:"Nong Khai",name:"Nong Khai"},36:{code:"Nonthaburi",name:"Nonthaburi"},37:{code:"Pathum Thani",name:"Pathum Thani"},38:{code:"Pattani",name:"Pattani"},39:{code:"Phangnga",name:"Phangnga"},40:{code:"Phatthalung",name:"Phatthalung"},41:{code:"Phayao",name:"Phayao"},42:{code:"Phetchabun",name:"Phetchabun"},43:{code:"Phetchaburi",name:"Phetchaburi"},44:{code:"Phichit",name:"Phichit"},45:{code:"Phitsanulok",name:"Phitsanulok"},46:{code:"Phrae",name:"Phrae"},47:{code:"Phuket",name:"Phuket"},48:{code:"Prachin Buri",name:"Prachin Buri"},49:{code:"Prachuap Khiri Khan",name:"Prachuap Khiri Khan"},50:{code:"Ranong",name:"Ranong"},51:{code:"Ratchaburi",name:"Ratchaburi"},52:{code:"Rayong",name:"Rayong"},53:{code:"Roi Et",name:"Roi Et"},54:{code:"Sa Kaeo",name:"Sa Kaeo"},55:{code:"Sakon Nakhon",name:"Sakon Nakhon"},56:{code:"Samut Prakan",name:"Samut Prakan"},57:{code:"Samut Sakhon",name:"Samut Sakhon"},58:{code:"Samut Songkhram",name:"Samut Songkhram"},59:{code:"Sara Buri",name:"Sara Buri"},60:{code:"Satun",name:"Satun"},61:{code:"Sing Buri",name:"Sing Buri"},62:{code:"Sisaket",name:"Sisaket"},63:{code:"Songkhla",name:"Songkhla"},64:{code:"Sukhothai",name:"Sukhothai"},65:{code:"Suphan Buri",name:"Suphan Buri"},66:{code:"Surat Thani",name:"Surat Thani"},67:{code:"Surin",name:"Surin"},68:{code:"Tak",name:"Tak"},69:{code:"Trang",name:"Trang"},70:{code:"Trat",name:"Trat"},71:{code:"Ubon Ratchathani",name:"Ubon Ratchathani"},72:{code:"Udon Thani",name:"Udon Thani"},73:{code:"Uthai Thani",name:"Uthai Thani"},74:{code:"Uttaradit",name:"Uttaradit"},75:{code:"Yala",name:"Yala"},76:{code:"Yasothon",name:"Yasothon"}},TG:{1:{code:"K",name:"Kara"},2:{code:"P",name:"Plateaux"},3:{code:"S",name:"Savanes"},4:{code:"C",name:"Centrale"},5:{code:"M",name:"Maritime"}},TK:{1:{code:"A",name:"Atafu"},2:{code:"F",name:"Fakaofo"},3:{code:"N",name:"Nukunonu"}},TO:{1:{code:"H",name:"Ha'apai"},2:{code:"T",name:"Tongatapu"},3:{code:"V",name:"Vava'u"}},TT:{1:{code:"CT",name:"Couva/Tabaquite/Talparo"},2:{code:"DM",name:"Diego Martin"},3:{code:"MR",name:"Mayaro/Rio Claro"},4:{code:"PD",name:"Penal/Debe"},5:{code:"PT",name:"Princes Town"},6:{code:"SG",name:"Sangre Grande"},7:{code:"SL",name:"San Juan/Laventille"},8:{code:"SI",name:"Siparia"},9:{code:"TP",name:"Tunapuna/Piarco"},10:{code:"PS",name:"Port of Spain"},11:{code:"SF",name:"San Fernando"},12:{code:"AR",name:"Arima"},13:{code:"PF",name:"Point Fortin"},14:{code:"CH",name:"Chaguanas"},15:{code:"TO",name:"Tobago"}},TN:{1:{code:"AR",name:"Ariana"},2:{code:"BJ",name:"Beja"},3:{code:"BA",name:"Ben Arous"},4:{code:"BI",name:"Bizerte"},5:{code:"GB",name:"Gabes"},6:{code:"GF",name:"Gafsa"},7:{code:"JE",name:"Jendouba"},8:{code:"KR",name:"Kairouan"},9:{code:"KS",name:"Kasserine"},10:{code:"KB",name:"Kebili"},11:{code:"KF",name:"Kef"},12:{code:"MH",name:"Mahdia"},13:{code:"MN",name:"Manouba"},14:{code:"ME",name:"Medenine"},15:{code:"MO",name:"Monastir"},16:{code:"NA",name:"Nabeul"},17:{code:"SF",name:"Sfax"},18:{code:"SD",name:"Sidi"},19:{code:"SL",name:"Siliana"},20:{code:"SO",name:"Sousse"},21:{code:"TA",name:"Tataouine"},22:{code:"TO",name:"Tozeur"},23:{code:"TU",name:"Tunis"},24:{code:"ZA",name:"Zaghouan"}},TR:{1:{code:"ADA",name:"Adana"},2:{code:"ADI",name:"Adiyaman"},3:{code:"AFY",name:"Afyonkarahisar"},4:{code:"AGR",name:"Agri"},5:{code:"AKS",name:"Aksaray"},6:{code:"AMA",name:"Amasya"},7:{code:"ANK",name:"Ankara"},8:{code:"ANT",name:"Antalya"},9:{code:"ARD",name:"Ardahan"},10:{code:"ART",name:"Artvin"},11:{code:"AYI",name:"Aydin"},12:{code:"BAL",name:"Balikesir"},13:{code:"BAR",name:"Bartin"},14:{code:"BAT",name:"Batman"},15:{code:"BAY",name:"Bayburt"},16:{code:"BIL",name:"Bilecik"},17:{code:"BIN",name:"Bingol"},18:{code:"BIT",name:"Bitlis"},19:{code:"BOL",name:"Bolu"},20:{code:"BRD",name:"Burdur"},21:{code:"BRS",name:"Bursa"},22:{code:"CKL",name:"Canakkale"},23:{code:"CKR",name:"Cankiri"},24:{code:"COR",name:"Corum"},25:{code:"DEN",name:"Denizli"},26:{code:"DIY",name:"Diyarbakir"},27:{code:"DUZ",name:"Duzce"},28:{code:"EDI",name:"Edirne"},29:{code:"ELA",name:"Elazig"},30:{code:"EZC",name:"Erzincan"},31:{code:"EZR",name:"Erzurum"},32:{code:"ESK",name:"Eskisehir"},33:{code:"GAZ",name:"Gaziantep"},34:{code:"GIR",name:"Giresun"},35:{code:"GMS",name:"Gumushane"},36:{code:"HKR",name:"Hakkari"},37:{code:"HTY",name:"Hatay"},38:{code:"IGD",name:"Igdir"},39:{code:"ISP",name:"Isparta"},40:{code:"IST",name:"Istanbul"},41:{code:"IZM",name:"Izmir"},42:{code:"KAH",name:"Kahramanmaras"},43:{code:"KRB",name:"Karabuk"},44:{code:"KRM",name:"Karaman"},45:{code:"KRS",name:"Kars"},46:{code:"KAS",name:"Kastamonu"},47:{code:"KAY",name:"Kayseri"},48:{code:"KLS",name:"Kilis"},49:{code:"KRK",name:"Kirikkale"},50:{code:"KLR",name:"Kirklareli"},51:{code:"KRH",name:"Kirsehir"},52:{code:"KOC",name:"Kocaeli"},53:{code:"KON",name:"Konya"},54:{code:"KUT",name:"Kutahya"},55:{code:"MAL",name:"Malatya"},56:{code:"MAN",name:"Manisa"},57:{code:"MAR",name:"Mardin"},58:{code:"MER",name:"Mersin"},59:{code:"MUG",name:"Mugla"},60:{code:"MUS",name:"Mus"},61:{code:"NEV",name:"Nevsehir"},62:{code:"NIG",name:"Nigde"},63:{code:"ORD",name:"Ordu"},64:{code:"OSM",name:"Osmaniye"},65:{code:"RIZ",name:"Rize"},66:{code:"SAK",name:"Sakarya"},67:{code:"SAM",name:"Samsun"},68:{code:"SAN",name:"Sanliurfa"},69:{code:"SII",name:"Siirt"},70:{code:"SIN",name:"Sinop"},71:{code:"SIR",name:"Sirnak"},72:{code:"SIV",name:"Sivas"},73:{code:"TEL",name:"Tekirdag"},74:{code:"TOK",name:"Tokat"},75:{code:"TRA",name:"Trabzon"},76:{code:"TUN",name:"Tunceli"},77:{code:"USK",name:"Usak"},78:{code:"VAN",name:"Van"},79:{code:"YAL",name:"Yalova"},80:{code:"YOZ",name:"Yozgat"},81:{code:"ZON",name:"Zonguldak"}},TM:{1:{code:"A",name:"Ahal Welayaty"},2:{code:"B",name:"Balkan Welayaty"},3:{code:"D",name:"Dashhowuz Welayaty"},4:{code:"L",name:"Lebap Welayaty"},5:{code:"M",name:"Mary Welayaty"}},TC:{1:{code:"AC",name:"Ambergris Cays"},2:{code:"DC",name:"Dellis Cay"},3:{code:"FC",name:"French Cay"},4:{code:"LW",name:"Little Water Cay"},5:{code:"RC",name:"Parrot Cay"},6:{code:"PN",name:"Pine Cay"},7:{code:"SL",name:"Salt Cay"},8:{code:"GT",name:"Grand Turk"},9:{code:"SC",name:"South Caicos"},10:{code:"EC",name:"East Caicos"},11:{code:"MC",name:"Middle Caicos"},12:{code:"NC",name:"North Caicos"},13:{code:"PR",name:"Providenciales"},14:{code:"WC",name:"West Caicos"}},TV:{1:{code:"NMG",name:"Nanumanga"},2:{code:"NLK",name:"Niulakita"},3:{code:"NTO",name:"Niutao"},4:{code:"FUN",name:"Funafuti"},5:{code:"NME",name:"Nanumea"},6:{code:"NUI",name:"Nui"},7:{code:"NFT",name:"Nukufetau"},8:{code:"NLL",name:"Nukulaelae"},9:{code:"VAI",name:"Vaitupu"}},UG:{1:{code:"KAL",name:"Kalangala"},2:{code:"KMP",name:"Kampala"},3:{code:"KAY",name:"Kayunga"},4:{code:"KIB",name:"Kiboga"},5:{code:"LUW",name:"Luwero"},6:{code:"MAS",name:"Masaka"},7:{code:"MPI",name:"Mpigi"},8:{code:"MUB",name:"Mubende"},9:{code:"MUK",name:"Mukono"},10:{code:"NKS",name:"Nakasongola"},11:{code:"RAK",name:"Rakai"},12:{code:"SEM",name:"Sembabule"},13:{code:"WAK",name:"Wakiso"},14:{code:"BUG",name:"Bugiri"},15:{code:"BUS",name:"Busia"},16:{code:"IGA",name:"Iganga"},17:{code:"JIN",name:"Jinja"},18:{code:"KAB",name:"Kaberamaido"},19:{code:"KML",name:"Kamuli"},20:{code:"KPC",name:"Kapchorwa"},21:{code:"KTK",name:"Katakwi"},22:{code:"KUM",name:"Kumi"},23:{code:"MAY",name:"Mayuge"},24:{code:"MBA",name:"Mbale"},25:{code:"PAL",name:"Pallisa"},26:{code:"SIR",name:"Sironko"},27:{code:"SOR",name:"Soroti"},28:{code:"TOR",name:"Tororo"},29:{code:"ADJ",name:"Adjumani"},30:{code:"APC",name:"Apac"},31:{code:"ARU",name:"Arua"},32:{code:"GUL",name:"Gulu"},33:{code:"KIT",name:"Kitgum"},34:{code:"KOT",name:"Kotido"},35:{code:"LIR",name:"Lira"},36:{code:"MRT",name:"Moroto"},37:{code:"MOY",name:"Moyo"},38:{code:"NAK",name:"Nakapiripirit"},39:{code:"NEB",name:"Nebbi"},40:{code:"PAD",name:"Pader"},41:{code:"YUM",name:"Yumbe"},42:{code:"BUN",name:"Bundibugyo"},43:{code:"BSH",name:"Bushenyi"},44:{code:"HOI",name:"Hoima"},45:{code:"KBL",name:"Kabale"},46:{code:"KAR",name:"Kabarole"},47:{code:"KAM",name:"Kamwenge"},48:{code:"KAN",name:"Kanungu"},49:{code:"KAS",name:"Kasese"},50:{code:"KBA",name:"Kibaale"},51:{code:"KIS",name:"Kisoro"},52:{code:"KYE",name:"Kyenjojo"},53:{code:"MSN",name:"Masindi"},54:{code:"MBR",name:"Mbarara"},55:{code:"NTU",name:"Ntungamo"},56:{code:"RUK",name:"Rukungiri"}},UA:{1:{code:"CK",name:"Cherkasy"},2:{code:"CH",name:"Chernihiv"},3:{code:"CV",name:"Chernivtsi"},4:{code:"CR",name:"Crimea"},5:{code:"DN",name:"Dnipropetrovs'k"},6:{code:"DO",name:"Donets'k"},7:{code:"IV",name:"Ivano-Frankivs'k"},8:{code:"KL",name:"Kharkiv Kherson"},9:{code:"KM",name:"Khmel'nyts'kyy"},10:{code:"KR",name:"Kirovohrad"},11:{code:"KV",name:"Kiev"},12:{code:"KY",name:"Kyyiv"},13:{code:"LU",name:"Luhans'k"},14:{code:"LV",name:"L'viv"},15:{code:"MY",name:"Mykolayiv"},16:{code:"OD",name:"Odesa"},17:{code:"PO",name:"Poltava"},18:{code:"RI",name:"Rivne"},19:{code:"SE",name:"Sevastopol"},20:{code:"SU",name:"Sumy"},21:{code:"TE",name:"Ternopil'"},22:{code:"VI",name:"Vinnytsya"},23:{code:"VO",name:"Volyn'"},24:{code:"ZK",name:"Zakarpattya"},25:{code:"ZA",name:"Zaporizhzhya"},26:{code:"ZH",name:"Zhytomyr"}},AE:{1:{code:"AZ",name:"Abu Zaby"},2:{code:"AJ",name:"'Ajman"},3:{code:"FU",name:"Al Fujayrah"},4:{code:"SH",name:"Ash Shariqah"},5:{code:"DU",name:"Dubayy"},6:{code:"RK",name:"R'as al Khaymah"},7:{code:"UQ",name:"Umm al Qaywayn"}},GB:{1:{code:"ABN",name:"Aberdeen"},2:{code:"ABNS",name:"Aberdeenshire"},3:{code:"ANG",name:"Anglesey"},4:{code:"AGS",name:"Angus"},5:{code:"ARY",name:"Argyll and Bute"},6:{code:"BEDS",name:"Bedfordshire"},7:{code:"BERKS",name:"Berkshire"},8:{code:"BLA",name:"Blaenau Gwent"},9:{code:"BRI",name:"Bridgend"},10:{code:"BSTL",name:"Bristol"},11:{code:"BUCKS",name:"Buckinghamshire"},12:{code:"CAE",name:"Caerphilly"},13:{code:"CAMBS",name:"Cambridgeshire"},14:{code:"CDF",name:"Cardiff"},15:{code:"CARM",name:"Carmarthenshire"},16:{code:"CDGN",name:"Ceredigion"},17:{code:"CHES",name:"Cheshire"},18:{code:"CLACK",name:"Clackmannanshire"},19:{code:"CON",name:"Conwy"},20:{code:"CORN",name:"Cornwall"},21:{code:"DNBG",name:"Denbighshire"},22:{code:"DERBY",name:"Derbyshire"},23:{code:"DVN",name:"Devon"},24:{code:"DOR",name:"Dorset"},25:{code:"DGL",name:"Dumfries and Galloway"},26:{code:"DUND",name:"Dundee"},27:{code:"DHM",name:"Durham"},28:{code:"ARYE",name:"East Ayrshire"},29:{code:"DUNBE",name:"East Dunbartonshire"},30:{code:"LOTE",name:"East Lothian"},31:{code:"RENE",name:"East Renfrewshire"},32:{code:"ERYS",name:"East Riding of Yorkshire"},33:{code:"SXE",name:"East Sussex"},34:{code:"EDIN",name:"Edinburgh"},35:{code:"ESX",name:"Essex"},36:{code:"FALK",name:"Falkirk"},37:{code:"FFE",name:"Fife"},38:{code:"FLINT",name:"Flintshire"},39:{code:"GLAS",name:"Glasgow"},40:{code:"GLOS",name:"Gloucestershire"},41:{code:"LDN",name:"Greater London"},42:{code:"MCH",name:"Greater Manchester"},43:{code:"GDD",name:"Gwynedd"},44:{code:"HANTS",name:"Hampshire"},45:{code:"HWR",name:"Herefordshire"},46:{code:"HERTS",name:"Hertfordshire"},47:{code:"HLD",name:"Highlands"},48:{code:"IVER",name:"Inverclyde"},49:{code:"IOW",name:"Isle of Wight"},50:{code:"KNT",name:"Kent"},51:{code:"LANCS",name:"Lancashire"},52:{code:"LEICS",name:"Leicestershire"},53:{code:"LINCS",name:"Lincolnshire"},54:{code:"MSY",name:"Merseyside"},55:{code:"MERT",name:"Merthyr Tydfil"},56:{code:"MLOT",name:"Midlothian"},57:{code:"MMOUTH",name:"Monmouthshire"},58:{code:"MORAY",name:"Moray"},59:{code:"NPRTAL",name:"Neath Port Talbot"},60:{code:"NEWPT",name:"Newport"},61:{code:"NOR",name:"Norfolk"},62:{code:"ARYN",name:"North Ayrshire"},63:{code:"LANN",name:"North Lanarkshire"},64:{code:"YSN",name:"North Yorkshire"},65:{code:"NHM",name:"Northamptonshire"},66:{code:"NLD",name:"Northumberland"},67:{code:"NOT",name:"Nottinghamshire"},68:{code:"ORK",name:"Orkney Islands"},69:{code:"OFE",name:"Oxfordshire"},70:{code:"PEM",name:"Pembrokeshire"},71:{code:"PERTH",name:"Perth and Kinross"},72:{code:"PWS",name:"Powys"},73:{code:"REN",name:"Renfrewshire"},74:{code:"RHON",name:"Rhondda Cynon Taff"},75:{code:"RUT",name:"Rutland"},76:{code:"BOR",name:"Scottish Borders"},77:{code:"SHET",name:"Shetland Islands"},78:{code:"SPE",name:"Shropshire"},79:{code:"SOM",name:"Somerset"},80:{code:"ARYS",name:"South Ayrshire"},81:{code:"LANS",name:"South Lanarkshire"},82:{code:"YSS",name:"South Yorkshire"},83:{code:"SFD",name:"Staffordshire"},84:{code:"STIR",name:"Stirling"},85:{code:"SFK",name:"Suffolk"},86:{code:"SRY",name:"Surrey"},87:{code:"SWAN",name:"Swansea"},88:{code:"TORF",name:"Torfaen"},89:{code:"TWR",name:"Tyne and Wear"},90:{code:"VGLAM",name:"Vale of Glamorgan"},91:{code:"WARKS",name:"Warwickshire"},92:{code:"WDUN",name:"West Dunbartonshire"},93:{code:"WLOT",name:"West Lothian"},94:{code:"WMD",name:"West Midlands"},95:{code:"SXW",name:"West Sussex"},96:{code:"YSW",name:"West Yorkshire"},97:{code:"WIL",name:"Western Isles"},98:{code:"WLT",name:"Wiltshire"},99:{code:"WORCS",name:"Worcestershire"},100:{code:"WRX",name:"Wrexham"}},US:{1:{code:"AL",name:"Alabama"},2:{code:"AK",name:"Alaska"},3:{code:"AS",name:"American Samoa"},4:{code:"AZ",name:"Arizona"},5:{code:"AR",name:"Arkansas"},6:{code:"AF",name:"Armed Forces Africa"},7:{code:"AA",name:"Armed Forces Americas"},8:{code:"AC",name:"Armed Forces Canada"},9:{code:"AE",name:"Armed Forces Europe"},10:{code:"AM",name:"Armed Forces Middle East"},11:{code:"AP",name:"Armed Forces Pacific"},12:{code:"CA",name:"California"},13:{code:"CO",name:"Colorado"},14:{code:"CT",name:"Connecticut"},15:{code:"DE",name:"Delaware"},16:{code:"DC",name:"District of Columbia"},17:{code:"FM",name:"Federated States Of Micronesia"},18:{code:"FL",name:"Florida"},19:{code:"GA",name:"Georgia"},20:{code:"GU",name:"Guam"},21:{code:"HI",name:"Hawaii"},22:{code:"ID",name:"Idaho"},23:{code:"IL",name:"Illinois"},24:{code:"IN",name:"Indiana"},25:{code:"IA",name:"Iowa"},26:{code:"KS",name:"Kansas"},27:{code:"KY",name:"Kentucky"},28:{code:"LA",name:"Louisiana"},29:{code:"ME",name:"Maine"},30:{code:"MH",name:"Marshall Islands"},31:{code:"MD",name:"Maryland"},32:{code:"MA",name:"Massachusetts"},33:{code:"MI",name:"Michigan"},34:{code:"MN",name:"Minnesota"},35:{code:"MS",name:"Mississippi"},36:{code:"MO",name:"Missouri"},37:{code:"MT",name:"Montana"},38:{code:"NE",name:"Nebraska"},39:{code:"NV",name:"Nevada"},40:{code:"NH",name:"New Hampshire"},41:{code:"NJ",name:"New Jersey"},42:{code:"NM",name:"New Mexico"},43:{code:"NY",name:"New York"},44:{code:"NC",name:"North Carolina"},45:{code:"ND",name:"North Dakota"},46:{code:"MP",name:"Northern Mariana Islands"},47:{code:"OH",name:"Ohio"},48:{code:"OK",name:"Oklahoma"},49:{code:"OR",name:"Oregon"},50:{code:"PW",name:"Palau"},51:{code:"PA",name:"Pennsylvania"},52:{code:"PR",name:"Puerto Rico"},53:{code:"RI",name:"Rhode Island"},54:{code:"SC",name:"South Carolina"},55:{code:"SD",name:"South Dakota"},56:{code:"TN",name:"Tennessee"},57:{code:"TX",name:"Texas"},58:{code:"UT",name:"Utah"},59:{code:"VT",name:"Vermont"},60:{code:"VI",name:"Virgin Islands"},61:{code:"VA",name:"Virginia"},62:{code:"WA",name:"Washington"},63:{code:"WV",name:"West Virginia"},64:{code:"WI",name:"Wisconsin"},65:{code:"WY",name:"Wyoming"}},UM:{1:{code:"BI",name:"Baker Island"},2:{code:"HI",name:"Howland Island"},3:{code:"JI",name:"Jarvis Island"},4:{code:"JA",name:"Johnston Atoll"},5:{code:"KR",name:"Kingman Reef"},6:{code:"MA",name:"Midway Atoll"},7:{code:"NI",name:"Navassa Island"},8:{code:"PA",name:"Palmyra Atoll"},9:{code:"WI",name:"Wake Island"}},UY:{1:{code:"AR",name:"Artigas"},2:{code:"CA",name:"Canelones"},3:{code:"CL",name:"Cerro Largo"},4:{code:"CO",name:"Colonia"},5:{code:"DU",name:"Durazno"},6:{code:"FS",name:"Flores"},7:{code:"FA",name:"Florida"},8:{code:"LA",name:"Lavalleja"},9:{code:"MA",name:"Maldonado"},10:{code:"MO",name:"Montevideo"},11:{code:"PA",name:"Paysandu"},12:{code:"RN",name:"Rio Negro"},13:{code:"RV",name:"Rivera"},14:{code:"RO",name:"Rocha"},15:{code:"SL",name:"Salto"},16:{code:"SJ",name:"San Jose"},17:{code:"SO",name:"Soriano"},18:{code:"TA",name:"Tacuarembo"},19:{code:"TT",name:"Treinta y Tres"}},UZ:{1:{code:"AN",name:"Andijon"},2:{code:"BU",name:"Buxoro"},3:{code:"FA",name:"Farg'ona"},4:{code:"JI",name:"Jizzax"},5:{code:"NG",name:"Namangan"},6:{code:"NW",name:"Navoiy"},7:{code:"QA",name:"Qashqadaryo"},8:{code:"QR",name:"Qoraqalpog'iston Republikasi"},9:{code:"SA",name:"Samarqand"},10:{code:"SI",name:"Sirdaryo"},11:{code:"SU",name:"Surxondaryo"},12:{code:"TK",name:"Toshkent City"},13:{code:"TO",name:"Toshkent Region"},14:{code:"XO",name:"Xorazm"}},VU:{1:{code:"MA",name:"Malampa"},2:{code:"PE",name:"Penama"},3:{code:"SA",name:"Sanma"},4:{code:"SH",name:"Shefa"},5:{code:"TA",name:"Tafea"},6:{code:"TO",name:"Torba"}},VE:{1:{code:"AM",name:"Amazonas"},2:{code:"AN",name:"Anzoategui"},3:{code:"AP",name:"Apure"},4:{code:"AR",name:"Aragua"},5:{code:"BA",name:"Barinas"},6:{code:"BO",name:"Bolivar"},7:{code:"CA",name:"Carabobo"},8:{code:"CO",name:"Cojedes"},9:{code:"DA",name:"Delta Amacuro"},10:{code:"DF",name:"Dependencias Federales"},11:{code:"DI",name:"Distrito Federal"},12:{code:"FA",name:"Falcon"},13:{code:"GU",name:"Guarico"},14:{code:"LA",name:"Lara"},15:{code:"ME",name:"Merida"},16:{code:"MI",name:"Miranda"},17:{code:"MO",name:"Monagas"},18:{code:"NE",name:"Nueva Esparta"},19:{code:"PO",name:"Portuguesa"},20:{code:"SU",name:"Sucre"},21:{code:"TA",name:"Tachira"},22:{code:"TR",name:"Trujillo"},23:{code:"VA",name:"Vargas"},24:{code:"YA",name:"Yaracuy"},25:{code:"ZU",name:"Zulia"}},VN:{1:{code:"AG",name:"An Giang"},2:{code:"BG",name:"Bac Giang"},3:{code:"BK",name:"Bac Kan"},4:{code:"BL",name:"Bac Lieu"},5:{code:"BC",name:"Bac Ninh"},6:{code:"BR",name:"Ba Ria-Vung Tau"},7:{code:"BN",name:"Ben Tre"},8:{code:"BH",name:"Binh Dinh"},9:{code:"BU",name:"Binh Duong"},10:{code:"BP",name:"Binh Phuoc"},11:{code:"BT",name:"Binh Thuan"},12:{code:"CM",name:"Ca Mau"},13:{code:"CT",name:"Can Tho"},14:{code:"CB",name:"Cao Bang"},15:{code:"DL",name:"Dak Lak"},16:{code:"DG",name:"Dak Nong"},17:{code:"DN",name:"Da Nang"},18:{code:"DB",name:"Dien Bien"},19:{code:"DI",name:"Dong Nai"},20:{code:"DT",name:"Dong Thap"},21:{code:"GL",name:"Gia Lai"},22:{code:"HG",name:"Ha Giang"},23:{code:"HD",name:"Hai Duong"},24:{code:"HP",name:"Hai Phong"},25:{code:"HM",name:"Ha Nam"},26:{code:"HI",name:"Ha Noi"},27:{code:"HT",name:"Ha Tay"},28:{code:"HH",name:"Ha Tinh"},29:{code:"HB",name:"Hoa Binh"},30:{code:"HC",name:"Ho Chin Minh"},31:{code:"HU",name:"Hau Giang"},32:{code:"HY",name:"Hung Yen"}},VI:{1:{code:"C",name:"Saint Croix"},2:{code:"J",name:"Saint John"},3:{code:"T",name:"Saint Thomas"}},WF:{1:{code:"A",name:"Alo"},2:{code:"S",name:"Sigave"},3:{code:"W",name:"Wallis"}},YE:{1:{code:"AB",name:"Abyan"},2:{code:"AD",name:"Adan"},3:{code:"AM",name:"Amran"},4:{code:"BA",name:"Al Bayda"},5:{code:"DA",name:"Ad Dali"},6:{code:"DH",name:"Dhamar"},7:{code:"HD",name:"Hadramawt"},8:{code:"HJ",name:"Hajjah"},9:{code:"HU",name:"Al Hudaydah"},10:{code:"IB",name:"Ibb"},11:{code:"JA",name:"Al Jawf"},12:{code:"LA",name:"Lahij"},13:{code:"MA",name:"Ma'rib"},14:{code:"MR",name:"Al Mahrah"},15:{code:"MW",name:"Al Mahwit"},16:{code:"SD",name:"Sa'dah"},17:{code:"SN",name:"San'a"},18:{code:"SH",name:"Shabwah"},19:{code:"TA",name:"Ta'izz"}},YU:{1:{code:"KOS",name:"Kosovo"},2:{code:"MON",name:"Montenegro"},3:{code:"SER",name:"Serbia"},4:{code:"VOJ",name:"Vojvodina"}},ZR:{1:{code:"BC",name:"Bas-Congo"},2:{code:"BN",name:"Bandundu"},3:{code:"EQ",name:"Equateur"},4:{code:"KA",name:"Katanga"},5:{code:"KE",name:"Kasai-Oriental"},6:{code:"KN",name:"Kinshasa"},7:{code:"KW",name:"Kasai-Occidental"},8:{code:"MA",name:"Maniema"},9:{code:"NK",name:"Nord-Kivu"},10:{code:"OR",name:"Orientale"},11:{code:"SK",name:"Sud-Kivu"}},ZM:{1:{code:"CE",name:"Central"},2:{code:"CB",name:"Copperbelt"},3:{code:"EA",name:"Eastern"},4:{code:"LP",name:"Luapula"},5:{code:"LK",name:"Lusaka"},6:{code:"NO",name:"Northern"},7:{code:"NW",name:"North-Western"},8:{code:"SO",name:"Southern"},9:{code:"WE",name:"Western"}},ZW:{1:{code:"BU",name:"Bulawayo"},2:{code:"HA",name:"Harare"},3:{code:"ML",name:"Manicaland"},4:{code:"MC",name:"Mashonaland Central"},5:{code:"ME",name:"Mashonaland East"},6:{code:"MW",name:"Mashonaland West"},7:{code:"MV",name:"Masvingo"},8:{code:"MN",name:"Matabeleland North"},9:{code:"MS",name:"Matabeleland South"},10:{code:"MD",name:"Midlands"}}},BFHTimePickerDelimiter=":",BFHTimePickerModes={am:"AM",pm:"PM"},BFHTimezonesList={AF:{"Asia/Kabul":"Kabul"},AL:{"Europe/Tirane":"Tirane"},DZ:{"Africa/Algiers":"Algiers"},AS:{"Pacific/Pago_Pago":"Pago Pago"},AD:{"Europe/Andorra":"Andorra"},AO:{"Africa/Luanda":"Luanda"},AI:{"America/Anguilla":"Anguilla"},AQ:{"Antarctica/Casey":"Casey","Antarctica/Davis":"Davis","Antarctica/DumontDUrville":"DumontDUrville","Antarctica/Macquarie":"Macquarie","Antarctica/Mawson":"Mawson","Antarctica/McMurdo":"McMurdo","Antarctica/Palmer":"Palmer","Antarctica/Rothera":"Rothera","Antarctica/South_Pole":"South Pole","Antarctica/Syowa":"Syowa","Antarctica/Vostok":"Vostok"},AG:{"America/Antigua":"Antigua"},AR:{"America/Argentina/Buenos_Aires":"Argentina / Buenos Aires","America/Argentina/Catamarca":"Argentina / Catamarca","America/Argentina/Cordoba":"Argentina / Cordoba","America/Argentina/Jujuy":"Argentina / Jujuy","America/Argentina/La_Rioja":"Argentina / La Rioja","America/Argentina/Mendoza":"Argentina / Mendoza","America/Argentina/Rio_Gallegos":"Argentina / Rio Gallegos","America/Argentina/Salta":"Argentina / Salta","America/Argentina/San_Juan":"Argentina / San Juan","America/Argentina/San_Luis":"Argentina / San Luis","America/Argentina/Tucuman":"Argentina / Tucuman","America/Argentina/Ushuaia":"Argentina / Ushuaia"},AM:{"Asia/Yerevan":"Yerevan"},AW:{"America/Aruba":"Aruba"},AU:{"Australia/Adelaide":"Adelaide","Australia/Brisbane":"Brisbane","Australia/Broken_Hill":"Broken Hill","Australia/Currie":"Currie","Australia/Darwin":"Darwin","Australia/Eucla":"Eucla","Australia/Hobart":"Hobart","Australia/Lindeman":"Lindeman","Australia/Lord_Howe":"Lord Howe","Australia/Melbourne":"Melbourne","Australia/Perth":"Perth","Australia/Sydney":"Sydney"},AT:{"Europe/Vienna":"Vienna"},AZ:{"Asia/Baku":"Baku"},BH:{"Asia/Bahrain":"Bahrain"},BD:{"Asia/Dhaka":"Dhaka"},BB:{"America/Barbados":"Barbados"},BY:{"Europe/Minsk":"Minsk"},BE:{"Europe/Brussels":"Brussels"},BZ:{"America/Belize":"Belize"},BJ:{"Africa/Porto-Novo":"Porto-Novo"},BM:{"Atlantic/Bermuda":"Bermuda"},BT:{"Asia/Thimphu":"Thimphu"},BO:{"America/La_Paz":"La Paz"},BA:{"Europe/Sarajevo":"Sarajevo"},BW:{"Africa/Gaborone":"Gaborone"},BR:{"America/Araguaina":"Araguaina","America/Bahia":"Bahia","America/Belem":"Belem","America/Boa_Vista":"Boa Vista","America/Campo_Grande":"Campo Grande","America/Cuiaba":"Cuiaba","America/Eirunepe":"Eirunepe","America/Fortaleza":"Fortaleza","America/Maceio":"Maceio","America/Manaus":"Manaus","America/Noronha":"Noronha","America/Porto_Velho":"Porto Velho","America/Recife":"Recife","America/Rio_Branco":"Rio Branco","America/Santarem":"Santarem","America/Sao_Paulo":"Sao Paulo"},VG:{"America/Tortola":"Tortola"},BN:{"Asia/Brunei":"Brunei"},BG:{"Europe/Sofia":"Sofia"},BF:{"Africa/Ouagadougou":"Ouagadougou"},BI:{"Africa/Bujumbura":"Bujumbura"},CI:{"Africa/Abidjan":"Abidjan"},KH:{"Asia/Phnom_Penh":"Phnom Penh"},CM:{"Africa/Douala":"Douala"},CA:{"America/Atikokan":"Atikokan","America/Blanc-Sablon":"Blanc-Sablon","America/Cambridge_Bay":"Cambridge Bay","America/Creston":"Creston","America/Dawson":"Dawson","America/Dawson_Creek":"Dawson Creek","America/Edmonton":"Edmonton","America/Glace_Bay":"Glace Bay","America/Goose_Bay":"Goose Bay","America/Halifax":"Halifax","America/Inuvik":"Inuvik","America/Iqaluit":"Iqaluit","America/Moncton":"Moncton","America/Montreal":"Montreal","America/Nipigon":"Nipigon","America/Pangnirtung":"Pangnirtung","America/Rainy_River":"Rainy River","America/Rankin_Inlet":"Rankin Inlet","America/Regina":"Regina","America/Resolute":"Resolute","America/St_Johns":"St Johns","America/Swift_Current":"Swift Current","America/Thunder_Bay":"Thunder Bay","America/Toronto":"Toronto","America/Vancouver":"Vancouver","America/Whitehorse":"Whitehorse","America/Winnipeg":"Winnipeg","America/Yellowknife":"Yellowknife"},CV:{"Atlantic/Cape_Verde":"Cape Verde"},KY:{"America/Cayman":"Cayman"},CF:{"Africa/Bangui":"Bangui"},TD:{"Africa/Ndjamena":"Ndjamena"},CL:{"America/Santiago":"Santiago","Pacific/Easter":"Easter"},CN:{"Asia/Chongqing":"Chongqing","Asia/Harbin":"Harbin","Asia/Kashgar":"Kashgar","Asia/Shanghai":"Shanghai","Asia/Urumqi":"Urumqi"},CO:{"America/Bogota":"Bogota"},KM:{"Indian/Comoro":"Comoro"},CG:{"Africa/Brazzaville":"Brazzaville"},CR:{"America/Costa_Rica":"Costa Rica"},HR:{"Europe/Zagreb":"Zagreb"},CU:{"America/Havana":"Havana"},CY:{"Asia/Nicosia":"Nicosia"},CZ:{"Europe/Prague":"Prague"},CD:{"Africa/Kinshasa":"Kinshasa","Africa/Lubumbashi":"Lubumbashi"},DK:{"Europe/Copenhagen":"Copenhagen"},DJ:{"Africa/Djibouti":"Djibouti"},DM:{"America/Dominica":"Dominica"},DO:{"America/Santo_Domingo":"Santo Domingo"},TP:{},EC:{"America/Guayaquil":"Guayaquil","Pacific/Galapagos":"Galapagos"},EG:{"Africa/Cairo":"Cairo"},SV:{"America/El_Salvador":"El Salvador"},GQ:{"Africa/Malabo":"Malabo"},ER:{"Africa/Asmara":"Asmara"},EE:{"Europe/Tallinn":"Tallinn"},ET:{"Africa/Addis_Ababa":"Addis Ababa"},FO:{"Atlantic/Faroe":"Faroe"},FK:{"Atlantic/Stanley":"Stanley"},FJ:{"Pacific/Fiji":"Fiji"},FI:{"Europe/Helsinki":"Helsinki"},MK:{"Europe/Skopje":"Skopje"},FR:{"Europe/Paris":"Paris"},GA:{"Africa/Libreville":"Libreville"},GE:{"Asia/Tbilisi":"Tbilisi"},DE:{"Europe/Berlin":"Berlin"},GH:{"Africa/Accra":"Accra"},GR:{"Europe/Athens":"Athens"},GL:{"America/Danmarkshavn":"Danmarkshavn","America/Godthab":"Godthab","America/Scoresbysund":"Scoresbysund","America/Thule":"Thule"},GD:{"America/Grenada":"Grenada"},GU:{"Pacific/Guam":"Guam"},GT:{"America/Guatemala":"Guatemala"},GN:{"Africa/Conakry":"Conakry"},GW:{"Africa/Bissau":"Bissau"},GY:{"America/Guyana":"Guyana"},HT:{"America/Port-au-Prince":"Port-au-Prince"},HN:{"America/Tegucigalpa":"Tegucigalpa"},HK:{"Asia/Hong_Kong":"Hong Kong"},HU:{"Europe/Budapest":"Budapest"},IS:{"Atlantic/Reykjavik":"Reykjavik"},IN:{"Asia/Kolkata":"Kolkata"},ID:{"Asia/Jakarta":"Jakarta","Asia/Jayapura":"Jayapura","Asia/Makassar":"Makassar","Asia/Pontianak":"Pontianak"},IR:{"Asia/Tehran":"Tehran"},IQ:{"Asia/Baghdad":"Baghdad"},IE:{"Europe/Dublin":"Dublin"},IL:{"Asia/Jerusalem":"Jerusalem"},IT:{"Europe/Rome":"Rome"},JM:{"America/Jamaica":"Jamaica"},JP:{"Asia/Tokyo":"Tokyo"},JO:{"Asia/Amman":"Amman"},KZ:{"Asia/Almaty":"Almaty","Asia/Aqtau":"Aqtau","Asia/Aqtobe":"Aqtobe","Asia/Oral":"Oral","Asia/Qyzylorda":"Qyzylorda"},KE:{"Africa/Nairobi":"Nairobi"},KI:{"Pacific/Enderbury":"Enderbury","Pacific/Kiritimati":"Kiritimati","Pacific/Tarawa":"Tarawa"},KW:{"Asia/Kuwait":"Kuwait"},KG:{"Asia/Bishkek":"Bishkek"},LA:{"Asia/Vientiane":"Vientiane"},LV:{"Europe/Riga":"Riga"},LB:{"Asia/Beirut":"Beirut"},LS:{"Africa/Maseru":"Maseru"},LR:{"Africa/Monrovia":"Monrovia"},LY:{"Africa/Tripoli":"Tripoli"},LI:{"Europe/Vaduz":"Vaduz"},LT:{"Europe/Vilnius":"Vilnius"},LU:{"Europe/Luxembourg":"Luxembourg"},MO:{"Asia/Macau":"Macau"},MG:{"Indian/Antananarivo":"Antananarivo"},MW:{"Africa/Blantyre":"Blantyre"},MY:{"Asia/Kuala_Lumpur":"Kuala Lumpur","Asia/Kuching":"Kuching"},MV:{"Indian/Maldives":"Maldives"},ML:{"Africa/Bamako":"Bamako"},MT:{"Europe/Malta":"Malta"},MH:{"Pacific/Kwajalein":"Kwajalein","Pacific/Majuro":"Majuro"},MR:{"Africa/Nouakchott":"Nouakchott"},MU:{"Indian/Mauritius":"Mauritius"},MX:{"America/Bahia_Banderas":"Bahia Banderas","America/Cancun":"Cancun","America/Chihuahua":"Chihuahua","America/Hermosillo":"Hermosillo","America/Matamoros":"Matamoros","America/Mazatlan":"Mazatlan","America/Merida":"Merida","America/Mexico_City":"Mexico City","America/Monterrey":"Monterrey","America/Ojinaga":"Ojinaga","America/Santa_Isabel":"Santa Isabel","America/Tijuana":"Tijuana"},FM:{"Pacific/Chuuk":"Chuuk","Pacific/Kosrae":"Kosrae","Pacific/Pohnpei":"Pohnpei"},MD:{"Europe/Chisinau":"Chisinau"},MC:{"Europe/Monaco":"Monaco"},MN:{"Asia/Choibalsan":"Choibalsan","Asia/Hovd":"Hovd","Asia/Ulaanbaatar":"Ulaanbaatar"},ME:{"Europe/Podgorica":"Podgorica"},MS:{"America/Montserrat":"Montserrat"},MA:{"Africa/Casablanca":"Casablanca"},MZ:{"Africa/Maputo":"Maputo"},MM:{"Asia/Rangoon":"Rangoon"},NA:{"Africa/Windhoek":"Windhoek"},NR:{"Pacific/Nauru":"Nauru"},NP:{"Asia/Kathmandu":"Kathmandu"},NL:{"Europe/Amsterdam":"Amsterdam"},AN:{},NZ:{"Pacific/Auckland":"Auckland","Pacific/Chatham":"Chatham"},NI:{"America/Managua":"Managua"},NE:{"Africa/Niamey":"Niamey"},NG:{"Africa/Lagos":"Lagos"},NF:{"Pacific/Norfolk":"Norfolk"},KP:{"Asia/Pyongyang":"Pyongyang"},MP:{"Pacific/Saipan":"Saipan"},NO:{"Europe/Oslo":"Oslo"},OM:{"Asia/Muscat":"Muscat"},PK:{"Asia/Karachi":"Karachi"},PW:{"Pacific/Palau":"Palau"},PA:{"America/Panama":"Panama"},PG:{"Pacific/Port_Moresby":"Port Moresby"},PY:{"America/Asuncion":"Asuncion"},PE:{"America/Lima":"Lima"},PH:{"Asia/Manila":"Manila"},PN:{"Pacific/Pitcairn":"Pitcairn"},PL:{"Europe/Warsaw":"Warsaw"},PT:{"Atlantic/Azores":"Azores","Atlantic/Madeira":"Madeira","Europe/Lisbon":"Lisbon"},PR:{"America/Puerto_Rico":"Puerto Rico"},QA:{"Asia/Qatar":"Qatar"},RO:{"Europe/Bucharest":"Bucharest"},RU:{"Asia/Anadyr":"Anadyr","Asia/Irkutsk":"Irkutsk","Asia/Kamchatka":"Kamchatka","Asia/Krasnoyarsk":"Krasnoyarsk","Asia/Magadan":"Magadan","Asia/Novokuznetsk":"Novokuznetsk","Asia/Novosibirsk":"Novosibirsk","Asia/Omsk":"Omsk","Asia/Sakhalin":"Sakhalin","Asia/Vladivostok":"Vladivostok","Asia/Yakutsk":"Yakutsk","Asia/Yekaterinburg":"Yekaterinburg","Europe/Kaliningrad":"Kaliningrad","Europe/Moscow":"Moscow","Europe/Samara":"Samara","Europe/Volgograd":"Volgograd"},RW:{"Africa/Kigali":"Kigali"},ST:{"Africa/Sao_Tome":"Sao Tome"},SH:{"Atlantic/St_Helena":"St Helena"},KN:{"America/St_Kitts":"St Kitts"},LC:{"America/St_Lucia":"St Lucia"},VC:{"America/St_Vincent":"St Vincent"},WS:{"Pacific/Apia":"Apia"},SM:{"Europe/San_Marino":"San Marino"},SA:{"Asia/Riyadh":"Riyadh"},SN:{"Africa/Dakar":"Dakar"},RS:{"Europe/Belgrade":"Belgrade"},SC:{"Indian/Mahe":"Mahe"},SL:{"Africa/Freetown":"Freetown"},SG:{"Asia/Singapore":"Singapore"},SK:{"Europe/Bratislava":"Bratislava"},SI:{"Europe/Ljubljana":"Ljubljana"},SB:{"Pacific/Guadalcanal":"Guadalcanal"},SO:{"Africa/Mogadishu":"Mogadishu"},ZA:{"Africa/Johannesburg":"Johannesburg"},GS:{"Atlantic/South_Georgia":"South Georgia"},KR:{"Asia/Seoul":"Seoul"},ES:{"Africa/Ceuta":"Ceuta","Atlantic/Canary":"Canary","Europe/Madrid":"Madrid"},LK:{"Asia/Colombo":"Colombo"},SD:{"Africa/Khartoum":"Khartoum"},SR:{"America/Paramaribo":"Paramaribo"},SZ:{"Africa/Mbabane":"Mbabane"},SE:{"Europe/Stockholm":"Stockholm"},CH:{"Europe/Zurich":"Zurich"},SY:{"Asia/Damascus":"Damascus"},TW:{"Asia/Taipei":"Taipei"},TJ:{"Asia/Dushanbe":"Dushanbe"},TZ:{"Africa/Dar_es_Salaam":"Dar es Salaam"},TH:{"Asia/Bangkok":"Bangkok"},BS:{"America/Nassau":"Nassau"},GM:{"Africa/Banjul":"Banjul"},TG:{"Africa/Lome":"Lome"},TO:{"Pacific/Tongatapu":"Tongatapu"},TT:{"America/Port_of_Spain":"Port of Spain"},TN:{"Africa/Tunis":"Tunis"},TR:{"Europe/Istanbul":"Istanbul"},TM:{"Asia/Ashgabat":"Ashgabat"},TC:{"America/Grand_Turk":"Grand Turk"},TV:{"Pacific/Funafuti":"Funafuti"},VI:{"America/St_Thomas":"St Thomas"},UG:{"Africa/Kampala":"Kampala"},UA:{"Europe/Kiev":"Kiev","Europe/Simferopol":"Simferopol","Europe/Uzhgorod":"Uzhgorod","Europe/Zaporozhye":"Zaporozhye"},AE:{"Asia/Dubai":"Dubai"},GB:{"Europe/London":"London"},US:{"America/Adak":"Adak","America/Anchorage":"Anchorage","America/Boise":"Boise","America/Chicago":"Chicago","America/Denver":"Denver","America/Detroit":"Detroit","America/Indiana/Indianapolis":"Indiana / Indianapolis","America/Indiana/Knox":"Indiana / Knox","America/Indiana/Marengo":"Indiana / Marengo","America/Indiana/Petersburg":"Indiana / Petersburg","America/Indiana/Tell_City":"Indiana / Tell City","America/Indiana/Vevay":"Indiana / Vevay","America/Indiana/Vincennes":"Indiana / Vincennes","America/Indiana/Winamac":"Indiana / Winamac","America/Juneau":"Juneau","America/Kentucky/Louisville":"Kentucky / Louisville","America/Kentucky/Monticello":"Kentucky / Monticello","America/Los_Angeles":"Los Angeles","America/Menominee":"Menominee","America/Metlakatla":"Metlakatla","America/New_York":"New York","America/Nome":"Nome","America/North_Dakota/Beulah":"North Dakota / Beulah","America/North_Dakota/Center":"North Dakota / Center","America/North_Dakota/New_Salem":"North Dakota / New Salem","America/Phoenix":"Phoenix","America/Shiprock":"Shiprock","America/Sitka":"Sitka","America/Yakutat":"Yakutat","Pacific/Honolulu":"Honolulu"},UY:{"America/Montevideo":"Montevideo"},UZ:{"Asia/Samarkand":"Samarkand","Asia/Tashkent":"Tashkent"},VU:{"Pacific/Efate":"Efate"},VA:{"Europe/Vatican":"Vatican"},VE:{"America/Caracas":"Caracas"},VN:{"Asia/Ho_Chi_Minh":"Ho Chi Minh"},EH:{"Africa/El_Aaiun":"El Aaiun"},YE:{"Asia/Aden":"Aden"},ZM:{"Africa/Lusaka":"Lusaka"},ZW:{"Africa/Harare":"Harare"}}; -+function(a){"use strict";function b(a){var b=a.toString(16);return 1===b.length?"0"+b:b}function c(a,c,d){return"#"+b(a)+b(c)+b(d)}function d(){var b;a(f).each(function(c){return b=e(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhcolorpicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhcolorpicker"),void 0)):!0})}function e(a){return a.closest(".bfh-colorpicker")}var f="[data-toggle=bfh-colorpicker]",g=function(b,c){this.options=a.extend({},a.fn.bfhcolorpicker.defaults,c),this.$element=a(b),this.initPopover()};g.prototype={constructor:g,initPalette:function(){var a,b,c;a=this.$element.find("canvas"),b=a[0].getContext("2d"),c=b.createLinearGradient(0,0,a.width(),0),c.addColorStop(0,"rgb(255, 255, 255)"),c.addColorStop(.1,"rgb(255, 0, 0)"),c.addColorStop(.25,"rgb(255, 0, 255)"),c.addColorStop(.4,"rgb(0, 0, 255)"),c.addColorStop(.55,"rgb(0, 255, 255)"),c.addColorStop(.7,"rgb(0, 255, 0)"),c.addColorStop(.85,"rgb(255, 255, 0)"),c.addColorStop(1,"rgb(255, 0, 0)"),b.fillStyle=c,b.fillRect(0,0,b.canvas.width,b.canvas.height),c=b.createLinearGradient(0,0,0,a.height()),c.addColorStop(0,"rgba(255, 255, 255, 1)"),c.addColorStop(.5,"rgba(255, 255, 255, 0)"),c.addColorStop(.5,"rgba(0, 0, 0, 0)"),c.addColorStop(1,"rgba(0, 0, 0, 1)"),b.fillStyle=c,b.fillRect(0,0,b.canvas.width,b.canvas.height)},initPopover:function(){var a,b;a="",b="","right"===this.options.align?b='<span class="input-group-addon"><span class="bfh-colorpicker-icon"></span></span>':a='<span class="input-group-addon"><span class="bfh-colorpicker-icon"></span></span>',this.$element.html('<div class="input-group bfh-colorpicker-toggle" data-toggle="bfh-colorpicker">'+a+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+b+"</div>"+'<div class="bfh-colorpicker-popover">'+'<canvas class="bfh-colorpicker-palette" width="384" height="256"></canvas>'+"</div>"),this.$element.on("click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api",f,g.prototype.toggle).on("mousedown.bfhcolorpicker.data-api","canvas",g.prototype.mouseDown).on("click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api",".bfh-colorpicker-popover",function(){return!1}),this.initPalette(),this.$element.val(this.options.color)},updateVal:function(a,b){var d,e,f,g,h,i,j;h=5,d=this.$element.find("canvas"),e=d[0].getContext("2d"),f=a-d.offset().left,g=b-d.offset().top,f=Math.round(f/h)*h,g=Math.round(g/h)*h,0>f&&(f=0),f>=d.width()&&(f=d.width()-1),0>g&&(g=0),g>d.height()&&(g=d.height()),i=e.getImageData(f,g,1,1),j=c(i.data[0],i.data[1],i.data[2]),j!==this.$element.val()&&(this.$element.val(j),this.$element.trigger("change.bfhcolorpicker"))},mouseDown:function(){var b,c;b=a(this),c=e(b),a(document).on("mousemove.bfhcolorpicker.data-api",{colorpicker:c},g.prototype.mouseMove).one("mouseup.bfhcolorpicker.data-api",{colorpicker:c},g.prototype.mouseUp)},mouseMove:function(a){var b;b=a.data.colorpicker,b.data("bfhcolorpicker").updateVal(a.pageX,a.pageY)},mouseUp:function(b){var c;c=b.data.colorpicker,c.data("bfhcolorpicker").updateVal(b.pageX,b.pageY),a(document).off("mousemove.bfhcolorpicker.data-api"),c.data("bfhcolorpicker").options.close===!0&&d()},toggle:function(b){var c,f,g;if(c=a(this),f=e(c),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),d(),!g){if(f.trigger(b=a.Event("show.bfhcolorpicker")),b.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhcolorpicker"),c.focus()}return!1}};var h=a.fn.bfhcolorpicker;a.fn.bfhcolorpicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhcolorpicker"),e="object"==typeof b&&b,this.type="bfhcolorpicker",d||c.data("bfhcolorpicker",d=new g(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhcolorpicker.Constructor=g,a.fn.bfhcolorpicker.defaults={align:"left",input:"form-control",placeholder:"",name:"",color:"#000000",close:!0},a.fn.bfhcolorpicker.noConflict=function(){return a.fn.bfhcolorpicker=h,this};var i;a.valHooks.div&&(i=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-colorpicker")?a(b).find('input[type="text"]').val():i?i.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-colorpicker"))a(b).find(".bfh-colorpicker-icon").css("background-color",c),a(b).find('input[type="text"]').val(c);else if(i)return i.set(b,c)}},a(document).ready(function(){a("div.bfh-colorpicker").each(function(){var b;b=a(this),b.bfhcolorpicker(b.data())})}),a(document).on("click.bfhcolorpicker.data-api",d)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhcountries.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addCountries(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapCountries(),this.$element.is("span")&&this.displayCountry()};b.prototype={constructor:b,getCountries:function(){var b,c;if(this.options.available){if("string"==typeof this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHCountriesList)BFHCountriesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHCountriesList[b])}else c=this.options.available;return c}return BFHCountriesList},addCountries:function(){var a,b,c;a=this.options.country,c=this.getCountries(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b]+"</option>");this.$element.val(a)},addBootstrapCountries:function(){var a,b,c,d,e,f;d=this.options.country,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getCountries(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&(this.options.flags===!0?c.append('<li><a tabindex="-1" href="#" data-option="'+e+'"><i class="glyphicon bfh-flag-'+e+'"></i>'+f[e]+"</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e]+"</a></li>"));this.$element.val(d)},displayCountry:function(){var a;a=this.options.country,this.options.flags===!0?this.$element.html('<i class="glyphicon bfh-flag-'+a+'"></i> '+BFHCountriesList[a]):this.$element.html(BFHCountriesList[a])}};var c=a.fn.bfhcountries;a.fn.bfhcountries=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhcountries"),f="object"==typeof c&&c,e||d.data("bfhcountries",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhcountries.Constructor=b,a.fn.bfhcountries.defaults={country:"",available:"",flags:!1,blank:!0},a.fn.bfhcountries.noConflict=function(){return a.fn.bfhcountries=c,this},a(document).ready(function(){a("form select.bfh-countries, span.bfh-countries, div.bfh-countries").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhcountries(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhcurrencies.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addCurrencies(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapCurrencies(),this.$element.is("span")&&this.displayCurrency()};b.prototype={constructor:b,getCurrencies:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHCurrenciesList)BFHCurrenciesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHCurrenciesList[b]);return c}return BFHCurrenciesList},addCurrencies:function(){var a,b,c;a=this.options.currency,c=this.getCurrencies(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b].label+"</option>");this.$element.val(a)},addBootstrapCurrencies:function(){var a,b,c,d,e,f,g;d=this.options.currency,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getCurrencies(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&(this.options.flags===!0?(g=f[e].currencyflag?f[e].currencyflag:e.substr(0,2),c.append('<li><a tabindex="-1" href="#" data-option="'+e+'"><i class="glyphicon bfh-flag-'+g+'"></i>'+f[e].label+"</a></li>")):c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e].label+"</a></li>"));this.$element.val(d)},displayCurrency:function(){var a,b;a=this.options.currency,this.options.flags===!0?(b=BFHCurrenciesList[a].currencyflag?BFHCurrenciesList[a].currencyflag:a.substr(0,2),this.$element.html('<i class="glyphicon bfh-flag-'+b+'"></i> '+BFHCurrenciesList[a].label)):this.$element.html(BFHCurrenciesList[a].label)}};var c=a.fn.bfhcurrencies;a.fn.bfhcurrencies=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhcurrencies"),f="object"==typeof c&&c,e||d.data("bfhcurrencies",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhcurrencies.Constructor=b,a.fn.bfhcurrencies.defaults={currency:"",available:"",flags:!1,blank:!0},a.fn.bfhcurrencies.noConflict=function(){return a.fn.bfhcurrencies=c,this},a(document).ready(function(){a("form select.bfh-currencies, span.bfh-currencies, div.bfh-currencies").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhcurrencies(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){return new Date(b,a,0).getDate()}function c(a,b,c){return new Date(b,a,c).getDay()}function d(a,b,c,d){return b+=1,b=String(b),d=String(d),1===b.length&&(b="0"+b),1===d.length&&(d="0"+d),a.replace("m",b).replace("y",c).replace("d",d)}function e(a,b,c){var d,e,f;d=[{part:"m",position:a.indexOf("m")},{part:"y",position:a.indexOf("y")},{part:"d",position:a.indexOf("d")}],d.sort(function(a,b){return a.position-b.position}),f=b.match(/(\d+)/g);for(e in d)if(d.hasOwnProperty(e)&&d[e].part===c)return Number(f[e]).toString()}function f(){var b;a(h).each(function(c){return b=g(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhdatepicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhdatepicker"),void 0)):!0})}function g(a){return a.closest(".bfh-datepicker")}var h="[data-toggle=bfh-datepicker]",i=function(b,c){this.options=a.extend({},a.fn.bfhdatepicker.defaults,c),this.$element=a(b),this.initCalendar()};i.prototype={constructor:i,setDate:function(){var a,b,c;a=this.options.date,c=this.options.format,""===a||"today"===a||void 0===a?(b=new Date,"today"===a&&this.$element.val(d(c,b.getMonth(),b.getFullYear(),b.getDate())),this.$element.data("month",b.getMonth()),this.$element.data("year",b.getFullYear())):(this.$element.val(a),this.$element.data("month",Number(e(c,a,"m")-1)),this.$element.data("year",Number(e(c,a,"y"))))},setDateLimit:function(a,b){var c,d;d=this.options.format,""!==a?(this.$element.data(b+"limit",!0),"today"===a?(c=new Date,this.$element.data(b+"day",c.getDate()),this.$element.data(b+"month",c.getMonth()),this.$element.data(b+"year",c.getFullYear())):(this.$element.data(b+"day",Number(e(d,a,"d"))),this.$element.data(b+"month",Number(e(d,a,"m")-1)),this.$element.data(b+"year",Number(e(d,a,"y"))))):this.$element.data(b+"limit",!1)},initCalendar:function(){var a,b,c;a="",b="",c="",""!==this.options.icon&&("right"===this.options.align?b='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>':a='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>',c="input-group"),this.$element.html('<div class="'+c+' bfh-datepicker-toggle" data-toggle="bfh-datepicker">'+a+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+b+"</div>"+'<div class="bfh-datepicker-calendar">'+'<table class="calendar table table-bordered">'+"<thead>"+'<tr class="months-header">'+'<th class="month" colspan="4">'+'<a class="previous" href="#"><i class="glyphicon glyphicon-chevron-left"></i></a>'+"<span></span>"+'<a class="next" href="#"><i class="glyphicon glyphicon-chevron-right"></i></a>'+"</th>"+'<th class="year" colspan="3">'+'<a class="previous" href="#"><i class="glyphicon glyphicon-chevron-left"></i></a>'+"<span></span>"+'<a class="next" href="#"><i class="glyphicon glyphicon-chevron-right"></i></a>'+"</th>"+"</tr>"+'<tr class="days-header">'+"</tr>"+"</thead>"+"<tbody>"+"</tbody>"+"</table>"+"</div>"),this.$element.on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",h,i.prototype.toggle).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .month > .previous",i.prototype.previousMonth).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .month > .next",i.prototype.nextMonth).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .year > .previous",i.prototype.previousYear).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .year > .next",i.prototype.nextYear).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar td:not(.off)",i.prototype.select).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar",function(){return!1}),this.setDate(),this.setDateLimit(this.options.min,"lower"),this.setDateLimit(this.options.max,"higher"),this.updateCalendar()},updateCalendarHeader:function(a,b,c){var d,e;for(a.find("table > thead > tr > th.month > span").text(BFHMonthsList[b]),a.find("table > thead > tr > th.year > span").text(c),d=a.find("table > thead > tr.days-header"),d.html(""),e=BFHDayOfWeekStart;e<BFHDaysList.length;e+=1)d.append("<th>"+BFHDaysList[e]+"</th>");for(e=0;BFHDayOfWeekStart>e;e+=1)d.append("<th>"+BFHDaysList[e]+"</th>")},checkMinDate:function(a,b,c){var d,e,f,g;return d=this.$element.data("lowerlimit"),d===!0&&(e=this.$element.data("lowerday"),f=this.$element.data("lowermonth"),g=this.$element.data("loweryear"),e>a&&b===f&&c===g||f>b&&c===g||g>c)?!0:!1},checkMaxDate:function(a,b,c){var d,e,f,g;return d=this.$element.data("higherlimit"),d===!0&&(e=this.$element.data("higherday"),f=this.$element.data("highermonth"),g=this.$element.data("higheryear"),a>e&&b===f&&c===g||b>f&&c===g||c>g)?!0:!1},checkToday:function(a,b,c){var d;return d=new Date,a===d.getDate()&&b===d.getMonth()&&c===d.getFullYear()?!0:!1},updateCalendarDays:function(a,d,e){var f,g,h,i,j,k,l;for(f=a.find("table > tbody").html(""),g=b(d,e),h=b(d+1,e),i=c(d,e,1),j=c(d,e,h),k="",l=0;(i-BFHDayOfWeekStart+7)%7>l;l+=1)k+='<td class="off">'+(g-(i-BFHDayOfWeekStart+7)%7+l+1)+"</td>";for(l=1;h>=l;l+=1)k+=this.checkMinDate(l,d,e)?'<td data-day="'+l+'" class="off">'+l+"</td>":this.checkMaxDate(l,d,e)?'<td data-day="'+l+'" class="off">'+l+"</td>":this.checkToday(l,d,e)?'<td data-day="'+l+'" class="today">'+l+"</td>":'<td data-day="'+l+'">'+l+"</td>",c(d,e,l)===(6+BFHDayOfWeekStart)%7&&(f.append("<tr>"+k+"</tr>"),k="");for(l=1;(7-(j+1-BFHDayOfWeekStart+7)%7)%7+1>=l;l+=1)k+='<td class="off">'+l+"</td>",l===(7-(j+1-BFHDayOfWeekStart+7)%7)%7&&f.append("<tr>"+k+"</tr>")},updateCalendar:function(){var a,b,c;a=this.$element.find(".bfh-datepicker-calendar"),b=this.$element.data("month"),c=this.$element.data("year"),this.updateCalendarHeader(a,b,c),this.updateCalendarDays(a,b,c)},previousMonth:function(){var b,c,d;return b=a(this),c=g(b),0===Number(c.data("month"))?(c.data("month",11),c.data("year",Number(c.data("year"))-1)):c.data("month",Number(c.data("month"))-1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},nextMonth:function(){var b,c,d;return b=a(this),c=g(b),11===Number(c.data("month"))?(c.data("month",0),c.data("year",Number(c.data("year"))+1)):c.data("month",Number(c.data("month"))+1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},previousYear:function(){var b,c,d;return b=a(this),c=g(b),c.data("year",Number(c.data("year"))-1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},nextYear:function(){var b,c,d;return b=a(this),c=g(b),c.data("year",Number(c.data("year"))+1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},select:function(b){var c,e,h,i,j,k;c=a(this),b.preventDefault(),b.stopPropagation(),e=g(c),h=e.data("bfhdatepicker"),i=e.data("month"),j=e.data("year"),k=c.data("day"),e.val(d(h.options.format,i,j,k)),e.trigger("change.bfhdatepicker"),h.options.close===!0&&f()},toggle:function(b){var c,d,e;if(c=a(this),d=g(c),d.is(".disabled")||void 0!==d.attr("disabled"))return!0;if(e=d.hasClass("open"),f(),!e){if(d.trigger(b=a.Event("show.bfhdatepicker")),b.isDefaultPrevented())return!0;d.toggleClass("open").trigger("shown.bfhdatepicker"),c.focus()}return!1}};var j=a.fn.bfhdatepicker;a.fn.bfhdatepicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhdatepicker"),e="object"==typeof b&&b,this.type="bfhdatepicker",d||c.data("bfhdatepicker",d=new i(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhdatepicker.Constructor=i,a.fn.bfhdatepicker.defaults={icon:"glyphicon glyphicon-calendar",align:"left",input:"form-control",placeholder:"",name:"",date:"today",format:"m/d/y",min:"",max:"",close:!0},a.fn.bfhdatepicker.noConflict=function(){return a.fn.bfhdatepicker=j,this};var k;a.valHooks.div&&(k=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-datepicker")?a(b).find('input[type="text"]').val():k?k.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-datepicker"))a(b).find('input[type="text"]').val(c);else if(k)return k.set(b,c)}},a(document).ready(function(){a("div.bfh-datepicker").each(function(){var b;b=a(this),b.bfhdatepicker(b.data())})}),a(document).on("click.bfhdatepicker.data-api",f)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhfonts.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFonts(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFonts()};b.prototype={constructor:b,getFonts:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHFontsList)BFHFontsList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHFontsList[b]);return c}return BFHFontsList},addFonts:function(){var a,b,c;a=this.options.font,c=this.getFonts(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+b+"</option>");this.$element.val(a)},addBootstrapFonts:function(){var a,b,c,d,e,f;d=this.options.font,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFonts(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" style=\'font-family: '+f[e]+"' data-option=\""+e+'">'+e+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhfonts;a.fn.bfhfonts=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhfonts"),f="object"==typeof c&&c,e||d.data("bfhfonts",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhfonts.Constructor=b,a.fn.bfhfonts.defaults={font:"",available:"",blank:!0},a.fn.bfhfonts.noConflict=function(){return a.fn.bfhfonts=c,this},a(document).ready(function(){a("form select.bfh-fonts, span.bfh-fonts, div.bfh-fonts").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhfonts(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhfontsizes.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFontSizes(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFontSizes()};b.prototype={constructor:b,getFontsizes:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHFontSizesList)BFHFontSizesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHFontSizesList[b]);return c}return BFHFontSizesList},addFontSizes:function(){var a,b,c;a=this.options.fontsize,c=this.getFontsizes(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b]+"</option>");this.$element.val(a)},addBootstrapFontSizes:function(){var a,b,c,d,e,f;d=this.options.fontsize,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFontsizes(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e]+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhfontsizes;a.fn.bfhfontsizes=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhfontsizes"),f="object"==typeof c&&c,e||d.data("bfhfontsizes",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhfontsizes.Constructor=b,a.fn.bfhfontsizes.defaults={fontsize:"",available:"",blank:!0},a.fn.bfhfontsizes.noConflict=function(){return a.fn.bfhfontsizes=c,this},a(document).ready(function(){a("form select.bfh-fontsizes, span.bfh-fontsizes, div.bfh-fontsizes").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhfontsizes(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhgooglefonts.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFonts(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFonts()};b.prototype={constructor:b,getFonts:function(){var b,c;if(c=[],this.options.subset)for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&a.inArray(this.options.subset,BFHGoogleFontsList.items[b].subsets)>=0&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)});else if(this.options.available){this.options.available=this.options.available.split(",");for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&a.inArray(BFHGoogleFontsList.items[b].family,this.options.available)>=0&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)})}else for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)});return c},addFonts:function(){var a,b,c;a=this.options.font,c=this.getFonts(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+c[b].info.family+'">'+c[b].info.family+"</option>");this.$element.val(a)},addBootstrapFonts:function(){var a,b,c,d,e,f;d=this.options.font,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFonts(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option="" style="background-image: none;"></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" style="background-position: 0 -'+(30*f[e].index-2)+'px;" data-option="'+f[e].info.family+'">'+f[e].info.family+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhgooglefonts;a.fn.bfhgooglefonts=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhgooglefonts"),f="object"==typeof c&&c,e||d.data("bfhgooglefonts",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhgooglefonts.Constructor=b,a.fn.bfhgooglefonts.defaults={font:"",available:"",subset:"",blank:!0},a.fn.bfhgooglefonts.noConflict=function(){return a.fn.bfhgooglefonts=c,this},a(document).ready(function(){a("form select.bfh-googlefonts, span.bfh-googlefonts, div.bfh-googlefonts").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhgooglefonts(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhlanguages.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addLanguages(),this.$element.is("span")&&this.displayLanguage(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapLanguages()};b.prototype={constructor:b,getLanguages:function(){var a,b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in this.options.available)this.options.available.hasOwnProperty(b)&&(-1!==this.options.available[b].indexOf("_")?(a=this.options.available[b].split("_"),c[a[0]]={name:BFHLanguagesList[a[0]],country:a[1]}):c[this.options.available[b]]=BFHLanguagesList[this.options.available[b]]);return c}return BFHLanguagesList},addLanguages:function(){var a,b,c;a=this.options.language,b=this.getLanguages(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in b)b.hasOwnProperty(c)&&(b[c].hasOwnProperty("name")?this.$element.append('<option value="'+c+"_"+b[c].country+'">'+b[c].name.toProperCase()+" ("+BFHCountriesList[b[c].country]+")</option>"):this.$element.append('<option value="'+c+'">'+b[c].toProperCase()+"</option>"));this.$element.val(a)},addBootstrapLanguages:function(){var a,b,c,d,e,f;d=this.options.language,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),e=this.getLanguages(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(f in e)e.hasOwnProperty(f)&&(e[f].hasOwnProperty("name")?this.options.flags===!0?c.append('<li><a tabindex="-1" href="#" data-option="'+f+"_"+e[f].country+'"><i class="glyphicon bfh-flag-'+e[f].country+'"></i>'+e[f].name.toProperCase()+"</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+f+"_"+e[f].country+'">'+e[f].name.toProperCase()+" ("+BFHCountriesList[e[f].country]+")</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+f+'">'+e[f]+"</a></li>"));this.$element.val(d)},displayLanguage:function(){var a;a=this.options.language,-1!==a.indexOf("_")?(a=a.split("_"),this.options.flags===!0?this.$element.html('<i class="glyphicon bfh-flag-'+a[1]+'"></i> '+BFHLanguagesList[a[0]].toProperCase()):this.$element.html(BFHLanguagesList[a[0]].toProperCase()+" ("+BFHCountriesList[a[1]]+")")):this.$element.html(BFHLanguagesList[a].toProperCase())}};var c=a.fn.bfhlanguages;a.fn.bfhlanguages=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhlanguages"),f="object"==typeof c&&c,e||d.data("bfhlanguages",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhlanguages.Constructor=b,a.fn.bfhlanguages.defaults={language:"",available:"",flags:!1,blank:!0},a.fn.bfhlanguages.noConflict=function(){return a.fn.bfhlanguages=c,this},a(document).ready(function(){a("form select.bfh-languages, span.bfh-languages, div.bfh-languages").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhlanguages(b.data())})}),String.prototype.toProperCase=function(){return this.replace(/\w\S*/g,function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()})}}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhnumber.defaults,c),this.$element=a(b),this.initInput()};b.prototype={constructor:b,initInput:function(){this.options.buttons===!0&&(this.$element.wrap('<div class="input-group"></div>'),this.$element.parent().append('<span class="input-group-addon bfh-number-btn inc"><span class="glyphicon glyphicon-chevron-up"></span></span>'),this.$element.parent().append('<span class="input-group-addon bfh-number-btn dec"><span class="glyphicon glyphicon-chevron-down"></span></span>')),this.$element.on("change.bfhnumber.data-api",b.prototype.change),this.options.keyboard===!0&&this.$element.on("keydown.bfhnumber.data-api",b.prototype.keydown),this.options.buttons===!0&&this.$element.parent().on("mousedown.bfhnumber.data-api",".inc",b.prototype.btninc).on("mousedown.bfhnumber.data-api",".dec",b.prototype.btndec),this.formatNumber()},keydown:function(b){var c;if(c=a(this).data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled"))return!0;switch(b.which){case 38:c.increment();break;case 40:c.decrement()}return!0},mouseup:function(a){var b,c,d;b=a.data.btn,c=b.$element.data("timer"),d=b.$element.data("interval"),clearTimeout(c),clearInterval(d)},btninc:function(){var c,d;return c=a(this).parent().find(".bfh-number").data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled")?!0:(c.increment(),d=setTimeout(function(){var a;a=setInterval(function(){c.increment()},80),c.$element.data("interval",a)},750),c.$element.data("timer",d),a(document).one("mouseup",{btn:c},b.prototype.mouseup),!0)},btndec:function(){var c,d;return c=a(this).parent().find(".bfh-number").data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled")?!0:(c.decrement(),d=setTimeout(function(){var a;a=setInterval(function(){c.decrement()},80),c.$element.data("interval",a)},750),c.$element.data("timer",d),a(document).one("mouseup",{btn:c},b.prototype.mouseup),!0)},change:function(){var b;return b=a(this).data("bfhnumber"),b.$element.is(".disabled")||void 0!==b.$element.attr("disabled")?!0:(b.formatNumber(),!0)},increment:function(){var a;a=this.getValue(),a+=1,this.$element.val(a).change()},decrement:function(){var a;a=this.getValue(),a-=1,this.$element.val(a).change()},getValue:function(){var a;return a=this.$element.val(),"-1"!==a&&(a=String(a).replace(/\D/g,"")),0===String(a).length&&(a=this.options.min),parseInt(a)},formatNumber:function(){var a,b,c,d;if(a=this.getValue(),a>this.options.max&&(a=this.options.wrap===!0?this.options.min:this.options.max),a<this.options.min&&(a=this.options.wrap===!0?this.options.max:this.options.min),this.options.zeros===!0)for(b=String(this.options.max).length,c=String(a).length,d=c;b>d;d+=1)a="0"+a;a!==this.$element.val()&&this.$element.val(a)}};var c=a.fn.bfhnumber;a.fn.bfhnumber=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhnumber"),f="object"==typeof c&&c,e||d.data("bfhnumber",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhnumber.Constructor=b,a.fn.bfhnumber.defaults={min:0,max:9999,zeros:!1,keyboard:!0,buttons:!0,wrap:!1},a.fn.bfhnumber.noConflict=function(){return a.fn.bfhnumber=c,this},a(document).ready(function(){a('form input[type="text"].bfh-number, form input[type="number"].bfh-number').each(function(){var b;b=a(this),b.bfhnumber(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){var c,d,e,f;for(c="",b=String(b).replace(/\D/g,""),d=0,e=0;d<a.length;d+=1)/\d/g.test(a.charAt(d))?a.charAt(d)===b.charAt(e)?(c+=b.charAt(e),e+=1):c+=a.charAt(d):"d"!==a.charAt(d)?(""!==b.charAt(e)||"+"===a.charAt(d))&&(c+=a.charAt(d)):""===b.charAt(e)?c+="":(c+=b.charAt(e),e+=1);return f=a.charAt(c.length),"d"!==f&&(c+=f),c}function c(a){var b,c=0;return document.selection?(a.focus(),b=document.selection.createRange(),b.moveStart("character",-a.value.length),c=b.text.length):(a.selectionStart||0===a.selectionStart)&&(c=a.selectionStart),c}function d(a,b){var c;document.selection?(a.focus(),c=document.selection.createRange(),c.moveStart("character",-a.value.length),c.moveStart("character",b),c.moveEnd("character",0),c.select()):(a.selectionStart||0===a.selectionStart)&&(a.selectionStart=b,a.selectionEnd=b,a.focus())}var e=function(b,c){this.options=a.extend({},a.fn.bfhphone.defaults,c),this.$element=a(b),(this.$element.is('input[type="text"]')||this.$element.is('input[type="tel"]'))&&this.addFormatter(),this.$element.is("span")&&this.displayFormatter() -};e.prototype={constructor:e,addFormatter:function(){var b;""!==this.options.country&&(b=a(document).find("#"+this.options.country),0!==b.length?(this.options.format=BFHPhoneFormatList[b.val()],b.on("change",{phone:this},this.changeCountry)):this.options.format=BFHPhoneFormatList[this.options.country]),this.$element.on("keyup.bfhphone.data-api",e.prototype.change),this.loadFormatter()},loadFormatter:function(){var a;a=b(this.options.format,this.$element.val()),this.$element.val(a)},displayFormatter:function(){var a;""!==this.options.country&&(this.options.format=BFHPhoneFormatList[this.options.country]),a=b(this.options.format,this.options.number),this.$element.html(a)},changeCountry:function(b){var c,d;c=a(this),d=b.data.phone,d.$element.val(String(d.$element.val()).replace(/\+\d*/g,"")),d.options.format=BFHPhoneFormatList[c.val()],d.loadFormatter()},change:function(e){var f,g,h,i;return f=a(this).data("bfhphone"),f.$element.is(".disabled")||void 0!==f.$element.attr("disabled")?!0:(g=c(f.$element[0]),h=!1,g===f.$element.val().length&&(h=!0),8===e.which&&"d"!==f.options.format.charAt(f.$element.val().length)&&f.$element.val(String(f.$element.val()).substring(0,f.$element.val().length-1)),i=b(f.options.format,f.$element.val()),i===f.$element.val()?!0:(f.$element.val(i),h&&(g=f.$element.val().length),d(f.$element[0],g),!0))}};var f=a.fn.bfhphone;a.fn.bfhphone=function(b){return this.each(function(){var c,d,f;c=a(this),d=c.data("bfhphone"),f="object"==typeof b&&b,d||c.data("bfhphone",d=new e(this,f)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhphone.Constructor=e,a.fn.bfhphone.defaults={format:"",number:"",country:""},a.fn.bfhphone.noConflict=function(){return a.fn.bfhphone=f,this},a(document).ready(function(){a('form input[type="text"].bfh-phone, form input[type="tel"].bfh-phone, span.bfh-phone').each(function(){var b;b=a(this),b.bfhphone(b.data())})})}(window.jQuery),+function(a){"use strict";function b(){var b;a(d).each(function(d){return b=c(a(this)),b.hasClass("open")?(b.trigger(d=a.Event("hide.bfhselectbox")),d.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhselectbox"),void 0)):!0})}function c(a){return a.closest(".bfh-selectbox")}var d="[data-toggle=bfh-selectbox]",e=function(b,c){this.options=a.extend({},a.fn.bfhselectbox.defaults,c),this.$element=a(b),this.initSelectBox()};e.prototype={constructor:e,initSelectBox:function(){var b;b="",this.$element.find("div").each(function(){b=b+'<li><a tabindex="-1" href="#" data-option="'+a(this).data("value")+'">'+a(this).html()+"</a></li>"}),this.$element.html('<input type="hidden" name="'+this.options.name+'" value="">'+'<a class="bfh-selectbox-toggle '+this.options.input+'" role="button" data-toggle="bfh-selectbox" href="#">'+'<span class="bfh-selectbox-option"></span>'+'<span class="'+this.options.icon+' selectbox-caret"></span>'+"</a>"+'<div class="bfh-selectbox-options">'+'<div role="listbox">'+'<ul role="option">'+"</ul>"+"</div>"+"</div>"),this.$element.find("[role=option]").html(b),this.options.filter===!0&&this.$element.find(".bfh-selectbox-options").prepend('<div class="bfh-selectbox-filter-container"><input type="text" class="bfh-selectbox-filter form-control"></div>'),this.$element.val(this.options.value),this.$element.on("click.bfhselectbox.data-api touchstart.bfhselectbox.data-api",d,e.prototype.toggle).on("keydown.bfhselectbox.data-api",d+", [role=option]",e.prototype.keydown).on("mouseenter.bfhselectbox.data-api","[role=option] > li > a",e.prototype.mouseenter).on("click.bfhselectbox.data-api","[role=option] > li > a",e.prototype.select).on("click.bfhselectbox.data-api",".bfh-selectbox-filter",function(){return!1}).on("propertychange.bfhselectbox.data-api change.bfhselectbox.data-api input.bfhselectbox.data-api paste.bfhselectbox.data-api",".bfh-selectbox-filter",e.prototype.filter)},toggle:function(d){var e,f,g;if(e=a(this),f=c(e),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),b(),!g){if(f.trigger(d=a.Event("show.bfhselectbox")),d.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhselectbox").find('[role=option] > li > [data-option="'+f.val()+'"]').focus()}return!1},filter:function(){var b,d,e;b=a(this),d=c(b),e=a("[role=option] li a",d),e.hide().filter(function(){return-1!==a(this).text().toUpperCase().indexOf(b.val().toUpperCase())}).show()},keydown:function(b){var f,g,h,i,j;return/(38|40|27)/.test(b.keyCode)?(f=a(this),b.preventDefault(),b.stopPropagation(),h=c(f),i=h.hasClass("open"),!i||i&&27===b.keyCode?(27===b.which&&h.find(d).focus(),f.click()):(g=a("[role=option] li:not(.divider) a:visible",h),g.length?(a("body").off("mouseenter.bfh-selectbox.data-api","[role=option] > li > a",e.prototype.mouseenter),j=g.index(g.filter(":focus")),38===b.keyCode&&j>0&&(j-=1),40===b.keyCode&&j<g.length-1&&(j+=1),j||(j=0),g.eq(j).focus(),a("body").on("mouseenter.bfh-selectbox.data-api","[role=option] > li > a",e.prototype.mouseenter),void 0):!0)):!0},mouseenter:function(){var b;b=a(this),b.focus()},select:function(d){var e,f;return e=a(this),d.preventDefault(),d.stopPropagation(),e.is(".disabled")||void 0!==e.attr("disabled")?!0:(f=c(e),f.val(e.data("option")),f.trigger("change.bfhselectbox"),b(),void 0)}};var f=a.fn.bfhselectbox;a.fn.bfhselectbox=function(b){return this.each(function(){var c,d,f;c=a(this),d=c.data("bfhselectbox"),f="object"==typeof b&&b,this.type="bfhselectbox",d||c.data("bfhselectbox",d=new e(this,f)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhselectbox.Constructor=e,a.fn.bfhselectbox.defaults={icon:"caret",input:"form-control",name:"",value:"",filter:!1},a.fn.bfhselectbox.noConflict=function(){return a.fn.bfhselectbox=f,this};var g;a.valHooks.div&&(g=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-selectbox")?a(b).find('input[type="hidden"]').val():g?g.get(b):void 0},set:function(b,c){var d,e;if(a(b).hasClass("bfh-selectbox"))d=a(b),d.find("li a[data-option='"+c+"']").length>0?e=d.find("li a[data-option='"+c+"']").html():d.find("li a").length>0?e=d.find("li a").eq(0).html():(c="",e=""),d.find('input[type="hidden"]').val(c),d.find(".bfh-selectbox-option").html(e);else if(g)return g.set(b,c)}},a(document).ready(function(){a("div.bfh-selectbox").each(function(){var b;b=a(this),b.bfhselectbox(b.data())})}),a(document).on("click.bfhselectbox.data-api",b)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhslider.defaults,c),this.$element=a(b),this.initSlider()};b.prototype={constructor:b,initSlider:function(){""===this.options.value&&(this.options.value=this.options.min),this.$element.html('<input type="hidden" name="'+this.options.name+'" value="">'+'<div class="bfh-slider-handle"><div class="bfh-slider-value"></div></div>'),this.$element.find('input[type="hidden"]').val(this.options.value),this.updateHandle(this.options.value),this.$element.on("mousedown.bfhslider.data-api",b.prototype.mouseDown)},updateHandle:function(a){var b,c,d,e;e=this.options.max-this.options.min,c=this.$element.width(),d=this.$element.position().left,b=Math.round((a-this.options.min)*(c-20)/e+d),this.$element.find(".bfh-slider-handle").css("left",b+"px"),this.$element.find(".bfh-slider-value").text(a)},updateVal:function(a){var b,c,d,e,f;return f=this.options.max-this.options.min,b=this.$element.width(),c=this.$element.offset().left,d=c+b,c>a&&(a=c),a+20>d&&(a=d),e=(a-c)/b,e=Math.ceil(e*f+this.options.min),e===this.$element.val()?!0:(this.$element.val(e),this.$element.trigger("change.bfhslider"),void 0)},mouseDown:function(){var c;return c=a(this),c.is(".disabled")||void 0!==c.attr("disabled")?!0:(a(document).on("mousemove.bfhslider.data-api",{slider:c},b.prototype.mouseMove).one("mouseup.bfhslider.data-api",{slider:c},b.prototype.mouseUp),void 0)},mouseMove:function(a){var b;b=a.data.slider,b.data("bfhslider").updateVal(a.pageX)},mouseUp:function(b){var c;c=b.data.slider,c.data("bfhslider").updateVal(b.pageX),a(document).off("mousemove.bfhslider.data-api")}};var c=a.fn.bfhslider;a.fn.bfhslider=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhslider"),f="object"==typeof c&&c,this.type="bfhslider",e||d.data("bfhslider",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhslider.Constructor=b,a.fn.bfhslider.defaults={name:"",value:"",min:0,max:100},a.fn.bfhslider.noConflict=function(){return a.fn.bfhslider=c,this};var d;a.valHooks.div&&(d=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-slider")?a(b).find('input[type="hidden"]').val():d?d.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-slider"))a(b).find('input[type="hidden"]').val(c),a(b).data("bfhslider").updateHandle(c);else if(d)return d.set(b,c)}},a(document).ready(function(){a("div.bfh-slider").each(function(){var b;b=a(this),b.bfhslider(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhstates.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addStates(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapStates(),this.$element.is("span")&&this.displayState()};b.prototype={constructor:b,addStates:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.val(),c.on("change",{state:this},this.changeCountry))),this.loadStates(b)},loadStates:function(a){var b,c;b=this.options.state,this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in BFHStatesList[a])BFHStatesList[a].hasOwnProperty(c)&&this.$element.append('<option value="'+BFHStatesList[a][c].code+'">'+BFHStatesList[a][c].name+"</option>");this.$element.val(b)},changeCountry:function(b){var c,d,e;c=a(this),d=b.data.state,e=c.val(),d.loadStates(e)},addBootstrapStates:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.find('input[type="hidden"]').val(),c.on("change.bfhselectbox",{state:this},this.changeBootstrapCountry))),this.loadBootstrapStates(b)},loadBootstrapStates:function(a){var b,c,d,e,f,g;e=this.options.state,f="",b=this.$element.find('input[type="hidden"]'),c=this.$element.find(".bfh-selectbox-option"),d=this.$element.find("[role=option]"),d.html(""),this.options.blank===!0&&d.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(g in BFHStatesList[a])BFHStatesList[a].hasOwnProperty(g)&&(d.append('<li><a tabindex="-1" href="#" data-option="'+BFHStatesList[a][g].code+'">'+BFHStatesList[a][g].name+"</a></li>"),BFHStatesList[a][g].code===e&&(f=BFHStatesList[a][g].name));this.$element.val(e)},changeBootstrapCountry:function(b){var c,d,e;c=a(this),d=b.data.state,e=c.val(),d.loadBootstrapStates(e)},displayState:function(){var a,b,c,d;a=this.options.country,b=this.options.state,c="";for(d in BFHStatesList[a])if(BFHStatesList[a].hasOwnProperty(d)&&BFHStatesList[a][d].code===b){c=BFHStatesList[a][d].name;break}this.$element.html(c)}};var c=a.fn.bfhstates;a.fn.bfhstates=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhstates"),f="object"==typeof c&&c,e||d.data("bfhstates",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhstates.Constructor=b,a.fn.bfhstates.defaults={country:"",state:"",blank:!0},a.fn.bfhstates.noConflict=function(){return a.fn.bfhstates=c,this},a(document).ready(function(){a("form select.bfh-states, span.bfh-states, div.bfh-states").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhstates(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){return a=String(a),1===a.length&&(a="0"+a),b=String(b),1===b.length&&(b="0"+b),a+BFHTimePickerDelimiter+b}function c(){var b;a(e).each(function(c){return b=d(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhtimepicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhtimepicker"),void 0)):!0})}function d(a){return a.closest(".bfh-timepicker")}var e="[data-toggle=bfh-timepicker]",f=function(b,c){this.options=a.extend({},a.fn.bfhtimepicker.defaults,c),this.$element=a(b),this.initPopover()};f.prototype={constructor:f,setTime:function(){var a,c,d,e,f,g,h;a=this.options.time,g="",h="",""===a||"now"===a||void 0===a?(c=new Date,e=c.getHours(),f=c.getMinutes(),"12h"===this.options.mode&&(e>12?(e-=12,g=" "+BFHTimePickerModes.pm,h="pm"):(g=" "+BFHTimePickerModes.am,h="am")),"now"===a&&this.$element.find('.bfh-timepicker-toggle > input[type="text"]').val(b(e,f)+g),this.$element.data("hour",e),this.$element.data("minute",f),this.$element.data("mode",h)):(d=String(a).split(BFHTimePickerDelimiter),e=d[0],f=d[1],"12h"===this.options.mode&&(d=String(f).split(" "),f=d[0],h=d[1]===BFHTimePickerModes.pm?"pm":"am"),this.$element.find('.bfh-timepicker-toggle > input[type="text"]').val(a),this.$element.data("hour",e),this.$element.data("minute",f),this.$element.data("mode",h))},initPopover:function(){var b,c,d,g,h;b="",c="",d="",""!==this.options.icon&&("right"===this.options.align?c='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>':b='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>',d="input-group"),g="",h="23","12h"===this.options.mode&&(g='<td><div class="bfh-selectbox" data-input="'+this.options.input+'" data-value="am">'+'<div data-value="am">'+BFHTimePickerModes.am+"</div>"+'<div data-value="pm">'+BFHTimePickerModes.pm+"</div>"+"</div>",h="11"),this.$element.html('<div class="'+d+' bfh-timepicker-toggle" data-toggle="bfh-timepicker">'+b+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+c+"</div>"+'<div class="bfh-timepicker-popover">'+'<table class="table">'+"<tbody>"+"<tr>"+'<td class="hour">'+'<input type="text" class="'+this.options.input+' bfh-number" data-min="0" data-max="'+h+'" data-zeros="true" data-wrap="true">'+"</td>"+'<td class="separator">'+BFHTimePickerDelimiter+"</td>"+'<td class="minute">'+'<input type="text" class="'+this.options.input+' bfh-number" data-min="0" data-max="59" data-zeros="true" data-wrap="true">'+"</td>"+g+"</tr>"+"</tbody>"+"</table>"+"</div>"),this.$element.on("click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api",e,f.prototype.toggle).on("click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api",".bfh-timepicker-popover > table",function(){return!1}),this.$element.find(".bfh-number").each(function(){var b;b=a(this),b.bfhnumber(b.data()),b.on("change",f.prototype.change)}),this.$element.find(".bfh-selectbox").each(function(){var b;b=a(this),b.bfhselectbox(b.data()),b.on("change.bfhselectbox",f.prototype.change)}),this.setTime(),this.updatePopover()},updatePopover:function(){var a,b,c;a=this.$element.data("hour"),b=this.$element.data("minute"),c=this.$element.data("mode"),this.$element.find(".hour input[type=text]").val(a).change(),this.$element.find(".minute input[type=text]").val(b).change(),this.$element.find(".bfh-selectbox").val(c)},change:function(){var b,c,e,f;return b=a(this),c=d(b),e=c.data("bfhtimepicker"),e&&"undefined"!==e&&(f="","12h"===e.options.mode&&(f=" "+BFHTimePickerModes[c.find(".bfh-selectbox").val()]),c.find('.bfh-timepicker-toggle > input[type="text"]').val(c.find(".hour input[type=text]").val()+BFHTimePickerDelimiter+c.find(".minute input[type=text]").val()+f),c.trigger("change.bfhtimepicker")),!1},toggle:function(b){var e,f,g;if(e=a(this),f=d(e),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),c(),!g){if(f.trigger(b=a.Event("show.bfhtimepicker")),b.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhtimepicker"),e.focus()}return!1}};var g=a.fn.bfhtimepicker;a.fn.bfhtimepicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhtimepicker"),e="object"==typeof b&&b,this.type="bfhtimepicker",d||c.data("bfhtimepicker",d=new f(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhtimepicker.Constructor=f,a.fn.bfhtimepicker.defaults={icon:"glyphicon glyphicon-time",align:"left",input:"form-control",placeholder:"",name:"",time:"now",mode:"24h"},a.fn.bfhtimepicker.noConflict=function(){return a.fn.bfhtimepicker=g,this};var h;a.valHooks.div&&(h=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-timepicker")?a(b).find('.bfh-timepicker-toggle > input[type="text"]').val():h?h.get(b):void 0},set:function(b,c){var d;if(a(b).hasClass("bfh-timepicker"))d=a(b).data("bfhtimepicker"),d.options.time=c,d.setTime(),d.updatePopover();else if(h)return h.set(b,c)}},a(document).ready(function(){a("div.bfh-timepicker").each(function(){var b;b=a(this),b.bfhtimepicker(b.data())})}),a(document).on("click.bfhtimepicker.data-api",c)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhtimezones.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addTimezones(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapTimezones()};b.prototype={constructor:b,addTimezones:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.val(),c.on("change",{timezone:this},this.changeCountry))),this.loadTimezones(b)},loadTimezones:function(a){var b,c;b=this.options.timezone,this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in BFHTimezonesList[a])BFHTimezonesList[a].hasOwnProperty(c)&&this.$element.append('<option value="'+c+'">'+BFHTimezonesList[a][c]+"</option>");this.$element.val(b)},changeCountry:function(b){var c,d,e;c=a(this),d=b.data.timezone,e=c.val(),d.loadTimezones(e)},addBootstrapTimezones:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.find('input[type="hidden"]').val(),c.on("change.bfhselectbox",{timezone:this},this.changeBootstrapCountry))),this.loadBootstrapTimezones(b)},loadBootstrapTimezones:function(a){var b,c,d,e,f;e=this.options.timezone,b=this.$element.find('input[type="hidden"]'),c=this.$element.find(".bfh-selectbox-option"),d=this.$element.find("[role=option]"),d.html(""),this.options.blank===!0&&d.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(f in BFHTimezonesList[a])BFHTimezonesList[a].hasOwnProperty(f)&&d.append('<li><a tabindex="-1" href="#" data-option="'+f+'">'+BFHTimezonesList[a][f]+"</a></li>");this.$element.val(e)},changeBootstrapCountry:function(b){var c,d,e;c=a(this),d=b.data.timezone,e=c.val(),d.loadBootstrapTimezones(e)}};var c=a.fn.bfhtimezones;a.fn.bfhtimezones=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhtimezones"),f="object"==typeof c&&c,e||d.data("bfhtimezones",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhtimezones.Constructor=b,a.fn.bfhtimezones.defaults={country:"",timezone:"",blank:!0},a.fn.bfhtimezones.noConflict=function(){return a.fn.bfhtimezones=c,this},a(document).ready(function(){a("form select.bfh-timezones, div.bfh-timezones").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhtimezones(b.data())})})}(window.jQuery); \ No newline at end of file diff --git a/gui/slick/js/lib/bootstrap-hover-dropdown.min.js b/gui/slick/js/lib/bootstrap-hover-dropdown.min.js deleted file mode 100644 index 0f5f1d1318116a86b4af68eb28adff332f4fe62d..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/bootstrap-hover-dropdown.min.js and /dev/null differ diff --git a/gui/slick/js/lib/bootstrap.min.js b/gui/slick/js/lib/bootstrap.min.js deleted file mode 100644 index 133aeecb98aa2b05d2dc1fcd623afcb37204828a..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/bootstrap.min.js and /dev/null differ diff --git a/gui/slick/js/lib/bootstrap3-typeahead.min.js b/gui/slick/js/lib/bootstrap3-typeahead.min.js deleted file mode 100644 index 89959ab83d2f84143b287846dcf0c5c41d39200d..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/bootstrap3-typeahead.min.js and /dev/null differ diff --git a/gui/slick/js/lib/jquery-2.1.4.min.js b/gui/slick/js/lib/jquery-2.1.4.min.js deleted file mode 100644 index 49990d6e14503798f142dcb0d5b23cb0c8f80244..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/jquery-2.1.4.min.js and /dev/null differ diff --git a/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js b/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js deleted file mode 100644 index ce23cf3e604b1ce1abbdf84d3cb40d6bf3eaa2af..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js and /dev/null differ diff --git a/gui/slick/js/lib/jquery.confirm.js b/gui/slick/js/lib/jquery.confirm.js deleted file mode 100644 index 7eb12024361940b51c37421b061f246c79008509..0000000000000000000000000000000000000000 --- a/gui/slick/js/lib/jquery.confirm.js +++ /dev/null @@ -1,56 +0,0 @@ -(function($){ - - $.confirm = function(params){ - - if($('#confirmOverlay').length){ - // A confirm is already shown on the page: - return false; - } - - var buttonHTML = ''; - $.each(params.buttons,function(name,obj){ - - // Generating the markup for the buttons: - - buttonHTML += '<a href="#" class="button '+obj['class']+'">'+name+'<span></span></a>'; - - if(!obj.action){ - obj.action = function(){}; - } - }); - - var markup = [ - '<div id="confirmOverlay">', - '<div id="confirmBox">', - '<h1>',params.title,'</h1>', - '<p>',params.message,'</p>', - '<div id="confirmButtons">', - buttonHTML, - '</div></div></div>' - ].join(''); - - $(markup).hide().appendTo('body').fadeIn(); - - var buttons = $('#confirmBox .button'), - i = 0; - - $.each(params.buttons,function(name,obj){ - buttons.eq(i++).click(function(){ - - // Calling the action attribute when a - // click occurs, and hiding the confirm. - - obj.action(); - $.confirm.hide(); - return false; - }); - }); - } - - $.confirm.hide = function(){ - $('#confirmOverlay').fadeOut(function(){ - $(this).remove(); - }); - } - -})(jQuery); \ No newline at end of file diff --git a/gui/slick/js/lib/jquery.cookie.js b/gui/slick/js/lib/jquery.cookie.js deleted file mode 100644 index dc031611f2c0c3c9b70b7cfa9e317f5f17ccacd7..0000000000000000000000000000000000000000 --- a/gui/slick/js/lib/jquery.cookie.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * jQuery Cookie plugin - * - * Copyright (c) 2010 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - */ -(function($) { - $.cookie = function(key, value, options) { - - // key and at least value given, set cookie... - if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) { - options = $.extend({}, options); - - if (value === null || value === undefined) { - options.expires = -1; - } - - if (typeof options.expires === 'number') { - var days = options.expires, t = options.expires = new Date(); - t.setDate(t.getDate() + days); - } - - value = String(value); - - return (document.cookie = [ - encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), - options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE - options.path ? '; path=' + options.path : '', - options.domain ? '; domain=' + options.domain : '', - options.secure ? '; secure' : '' - ].join('')); - } - - // key and possibly options given, get cookie... - options = value || {}; - var decode = options.raw ? function(s) { return s; } : decodeURIComponent; - - var pairs = document.cookie.split('; '); - for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) { - if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined - } - return null; - }; -})(jQuery); diff --git a/gui/slick/js/lib/jquery.qtip-2.2.1.min.js b/gui/slick/js/lib/jquery.qtip-2.2.1.min.js deleted file mode 100644 index 411a0f8f98f112b9319f0d6696d6951641d587ec..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/jquery.qtip-2.2.1.min.js and /dev/null differ diff --git a/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js b/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js index a914012a03db2ea885fff998706878bb4a4735ae..c53a58f7caf2f932f8430f700c12773c9191bfd1 100644 --- a/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js +++ b/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js @@ -2,75 +2,78 @@ //** Available/ usage terms at http://www.dynamicdrive.com (March 30th, 09') //** v1.1 (April 7th, 09'): //** 1) Adds ability to scroll to an absolute position (from top of page) or specific element on the page instead. -//** 2) Fixes scroll animation not working in Opera. +//** 2) Fixes scroll animation not working in Opera. var scrolltotop={ - //startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control - //scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top). - setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]}, - controlHTML: top_image_html,//set in inc_top.tmpl so it can be $srRooted - controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner - anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links + //startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control + //scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top). + setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]}, + controlHTML: topImageHtml, // jshint ignore:line + controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner + anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links - state: {isvisible:false, shouldvisible:false}, + state: {isvisible:false, shouldvisible:false}, - scrollup:function(){ - if (!this.cssfixedsupport) //if control is positioned using JavaScript - this.$control.css({opacity:0}) //hide control immediately after clicking it - var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto) - if (typeof dest=="string" && jQuery('#'+dest).length==1) //check element set by string exists - dest=jQuery('#'+dest).offset().top - else - dest=0 - this.$body.animate({scrollTop: dest}, this.setting.scrollduration); - }, + scrollup:function(){ + if (!this.cssfixedsupport) { //if control is positioned using JavaScript + this.$control.css({opacity:0}); //hide control immediately after clicking it + } + var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto); + if (typeof dest === "string" && jQuery('#'+dest).length === 1){ //check element set by string exists + dest=jQuery('#'+dest).offset().top; + } else { + dest = 0; + } + this.$body.animate({scrollTop: dest}, this.setting.scrollduration); + }, - keepfixed:function(){ - var $window=jQuery(window) - var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx - var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety - this.$control.css({left:controlx+'px', top:controly+'px'}) - }, + keepfixed:function(){ + var $window=jQuery(window); + var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx; + var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety; + this.$control.css({left:controlx+'px', top:controly+'px'}); + }, - togglecontrol:function(){ - var scrolltop=jQuery(window).scrollTop() - if (!this.cssfixedsupport) - this.keepfixed() - this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false - if (this.state.shouldvisible && !this.state.isvisible){ - this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0]) - this.state.isvisible=true - } - else if (this.state.shouldvisible==false && this.state.isvisible){ - this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1]) - this.state.isvisible=false - } - }, - - init:function(){ - jQuery(document).ready(function($){ - var mainobj=scrolltotop - var iebrws=document.all - mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode=="CSS1Compat" && window.XMLHttpRequest //not IE or IE7+ browsers in standards mode - mainobj.$body=(window.opera)? (document.compatMode=="CSS1Compat"? $('html') : $('body')) : $('html,body') - mainobj.$control=$('<div id="topcontrol">'+mainobj.controlHTML+'</div>') - .css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'}) - .attr({title:'Scroll Back to Top'}) - .click(function(){mainobj.scrollup(); return false}) - .appendTo('body') - if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!='') //loose check for IE6 and below, plus whether control contains any text - mainobj.$control.css({width:mainobj.$control.width()}) //IE6- seems to require an explicit width on a DIV containing text - mainobj.togglecontrol() - $('a[href="' + mainobj.anchorkeyword +'"]').click(function(){ - mainobj.scrollup() - return false - }) - $(window).bind('scroll resize', function(e){ - mainobj.togglecontrol() - }) - }) - } -} + togglecontrol:function(){ + var scrolltop=jQuery(window).scrollTop(); + if (!this.cssfixedsupport) { + this.keepfixed(); + } + this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false; + if (this.state.shouldvisible && !this.state.isvisible){ + this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0]); + this.state.isvisible = true; + } else if (this.state.shouldvisible === false && this.state.isvisible){ + this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1]); + this.state.isvisible=false; + } + }, -scrolltotop.init() \ No newline at end of file + init:function(){ + jQuery(document).ready(function($){ + var mainobj = scrolltotop; + var iebrws = document.all; + mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode.toLowerCase() === "CSS1Compat".toLowerCase() && window.XMLHttpRequest; //not IE or IE7+ browsers in standards mode + mainobj.$body=(window.opera)? (document.compatMode.toLowerCase() === "CSS1Compat".toLowerCase() ? $('html') : $('body')) : $('html,body'); + mainobj.$control=$('<div id="topcontrol">'+mainobj.controlHTML+'</div>') + .css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'}) + .attr({title:'Scroll Back to Top'}) + .click(function(){mainobj.scrollup(); return false;}) + .appendTo('body'); + if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!==''){ //loose check for IE6 and below, plus whether control contains any text + mainobj.$control.css({width:mainobj.$control.width()}); //IE6- seems to require an explicit width on a DIV containing text + } + mainobj.togglecontrol(); + $('a[href="' + mainobj.anchorkeyword +'"]').click(function(){ + mainobj.scrollup(); + return false; + }); + $(window).bind('scroll resize', function(){ + mainobj.togglecontrol(); + }); + }); + } +}; + +scrolltotop.init(); diff --git a/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js b/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js deleted file mode 100644 index 8ac7a9c071f3c9d92d57b2fbd61e53a1654a3e62..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js and /dev/null differ diff --git a/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js b/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js deleted file mode 100644 index 22d641b83eeda0c3453995426da262916872ec58..0000000000000000000000000000000000000000 --- a/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js +++ /dev/null @@ -1,317 +0,0 @@ -/* Column Selector/Responsive table widget (beta) for TableSorter 5/22/2014 (v2.17.0) - * Requires tablesorter v2.8+ and jQuery 1.7+ - * by Justin Hallett & Rob Garrison - */ -/*jshint browser:true, jquery:true, unused:false */ -/*global jQuery: false */ -;(function($){ -"use strict"; - -var ts = $.tablesorter, -namespace = '.tscolsel', -tsColSel = ts.columnSelector = { - - queryAll : '@media only all { [columns] { display: none; } }', - queryBreak : '@media all and (min-width: [size]) { [columns] { display: table-cell; } }', - - init: function(table, c, wo) { - var $t, colSel; - - // abort if no input is contained within the layout - $t = $(wo.columnSelector_layout); - if (!$t.find('input').add( $t.filter('input') ).length) { - if (c.debug) { - ts.log('*** ERROR: Column Selector aborting, no input found in the layout! ***'); - } - return; - } - - // unique table class name - c.tableId = 'tablesorter' + new Date().getTime(); - c.$table.addClass( c.tableId ); - - // build column selector/state array - colSel = c.selector = { $container : $(wo.columnSelector_container || '<div>') }; - colSel.$style = $('<style></style>').prop('disabled', true).appendTo('head'); - colSel.$breakpoints = $('<style></style>').prop('disabled', true).appendTo('head'); - - colSel.isInitializing = true; - tsColSel.setupSelector(table, c, wo); - - if (wo.columnSelector_mediaquery) { - tsColSel.setupBreakpoints(c, wo); - } - - colSel.isInitializing = false; - if (colSel.$container.length) { - tsColSel.updateCols(c, wo); - } - - c.$table - .off('refreshColumnSelector' + namespace) - .on('refreshColumnSelector' + namespace, function(){ - // make sure we're using current config settings - var c = this.config; - tsColSel.updateBreakpoints(c, c.widgetOptions); - tsColSel.updateCols(c, c.widgetOptions); - }); - - }, - - setupSelector: function(table, c, wo) { - var name, - colSel = c.selector, - $container = colSel.$container, - useStorage = wo.columnSelector_saveColumns && ts.storage, - // get stored column states - saved = useStorage ? ts.storage( table, 'tablesorter-columnSelector' ) : [], - state = useStorage ? ts.storage( table, 'tablesorter-columnSelector-auto') : {}; - - // initial states - colSel.auto = $.isEmptyObject(state) || $.type(state.auto) !== "boolean" ? wo.columnSelector_mediaqueryState : state.auto; - colSel.states = []; - colSel.$column = []; - colSel.$wrapper = []; - colSel.$checkbox = []; - // populate the selector container - c.$table.children('thead').find('tr:first th', table).each(function() { - var $this = $(this), - // if no data-priority is assigned, default to 1, but don't remove it from the selector list - priority = $this.attr(wo.columnSelector_priority) || 1, - colId = $this.attr('data-column'), - state = ts.getData(this, c.headers[colId], 'columnSelector'); - - - // if this column not hidable at all - // include getData check (includes "columnSelector-false" class, data attribute, etc) - if ( isNaN(priority) && priority.length > 0 || state === 'disable' || - ( wo.columnSelector_columns[colId] && wo.columnSelector_columns[colId] === 'disable') ) { - return true; // goto next - } - - // set default state; storage takes priority - colSel.states[colId] = saved && typeof(saved[colId]) !== 'undefined' ? - saved[colId] : typeof(wo.columnSelector_columns[colId]) !== 'undefined' ? - wo.columnSelector_columns[colId] : (state === 'true' || !(state === 'false')); - colSel.$column[colId] = $(this); - - // set default col title - name = $this.attr(wo.columnSelector_name) || $this.text(); - - if ($container.length) { - colSel.$wrapper[colId] = $(wo.columnSelector_layout.replace(/\{name\}/g, name)).appendTo($container); - colSel.$checkbox[colId] = colSel.$wrapper[colId] - // input may not be wrapped within the layout template - .find('input').add( colSel.$wrapper[colId].filter('input') ) - .attr('data-column', colId) - .prop('checked', colSel.states[colId]) - .on('change', function(){ - colSel.states[colId] = this.checked; - tsColSel.updateCols(c, wo); - }).change(); - } - }); - - }, - - setupBreakpoints: function(c, wo){ - var colSel = c.selector; - - // add responsive breakpoints - if (wo.columnSelector_mediaquery) { - // used by window resize function - colSel.lastIndex = -1; - wo.columnSelector_breakpoints.sort(); - tsColSel.updateBreakpoints(c, wo); - c.$table - .off('updateAll' + namespace) - .on('updateAll' + namespace, function(){ - tsColSel.updateBreakpoints(c, wo); - tsColSel.updateCols(c, wo); - }); - } - - if (colSel.$container.length) { - // Add media queries toggle - if (wo.columnSelector_mediaquery) { - colSel.$auto = $( wo.columnSelector_layout.replace(/\{name\}/g, wo.columnSelector_mediaqueryName) ).prependTo(colSel.$container); - colSel.$auto - // needed in case the input in the layout is not wrapped - .find('input').add( colSel.$auto.filter('input') ) - .attr('data-column', 'auto') - .prop('checked', colSel.auto) - .on('change', function(){ - colSel.auto = this.checked; - $.each( colSel.$checkbox, function(i, $cb){ - if ($cb) { - $cb[0].disabled = colSel.auto; - colSel.$wrapper[i].toggleClass('disabled', colSel.auto); - } - }); - if (wo.columnSelector_mediaquery) { - tsColSel.updateBreakpoints(c, wo); - } - tsColSel.updateCols(c, wo); - // copy the column selector to a popup/tooltip - if (c.selector.$popup) { - c.selector.$popup.find('.tablesorter-column-selector') - .html( colSel.$container.html() ) - .find('input').each(function(){ - var indx = $(this).attr('data-column'); - $(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] ); - }); - } - if (wo.columnSelector_saveColumns && ts.storage) { - ts.storage( c.$table[0], 'tablesorter-columnSelector-auto', { auto : colSel.auto } ); - } - }).change(); - } - // Add a bind on update to re-run col setup - c.$table.off('update' + namespace).on('update' + namespace, function() { - tsColSel.updateCols(c, wo); - }); - } - }, - - updateBreakpoints: function(c, wo) { - var priority, column, breaks, - colSel = c.selector, - prefix = '.' + c.tableId, - mediaAll = [], - breakpts = ''; - if (wo.columnSelector_mediaquery && !colSel.auto) { - colSel.$breakpoints.prop('disabled', true); - colSel.$style.prop('disabled', false); - return; - } - - // only 6 breakpoints (same as jQuery Mobile) - for (priority = 0; priority < 6; priority++){ - /*jshint loopfunc:true */ - breaks = []; - c.$headers.filter('[' + wo.columnSelector_priority + '=' + (priority + 1) + ']').each(function(){ - column = parseInt($(this).attr('data-column'), 10) + 1; - breaks.push(prefix + ' tr th:nth-child(' + column + ')'); - breaks.push(prefix + ' tr td:nth-child(' + column + ')'); - }); - if (breaks.length) { - mediaAll = mediaAll.concat( breaks ); - breakpts += tsColSel.queryBreak - .replace(/\[size\]/g, wo.columnSelector_breakpoints[priority]) - .replace(/\[columns\]/g, breaks.join(',')); - } - } - if (colSel.$style) { - colSel.$style.prop('disabled', true); - } - colSel.$breakpoints - .prop('disabled', false) - .html( tsColSel.queryAll.replace(/\[columns\]/g, mediaAll.join(',')) + breakpts ); - }, - - updateCols: function(c, wo) { - if (wo.columnSelector_mediaquery && c.selector.auto || c.selector.isInitializing) { - return; - } - var column, - colSel = c.selector, - styles = [], - prefix = '.' + c.tableId; - colSel.$container.find('input[data-column]').filter('[data-column!="auto"]').each(function(){ - if (!this.checked) { - column = parseInt( $(this).attr('data-column'), 10 ) + 1; - styles.push(prefix + ' tr th:nth-child(' + column + ')'); - styles.push(prefix + ' tr td:nth-child(' + column + ')'); - } - }); - if (wo.columnSelector_mediaquery){ - colSel.$breakpoints.prop('disabled', true); - } - if (colSel.$style) { - colSel.$style.prop('disabled', false).html( styles.length ? styles.join(',') + ' { display: none; }' : '' ); - } - if (wo.columnSelector_saveColumns && ts.storage) { - ts.storage( c.$table[0], 'tablesorter-columnSelector', colSel.states ); - } - }, - - attachTo : function(table, elm) { - table = $(table)[0]; - var colSel, wo, indx, - c = table.config, - $popup = $(elm); - if ($popup.length && c) { - if (!$popup.find('.tablesorter-column-selector').length) { - // add a wrapper to add the selector into, in case the popup has other content - $popup.append('<span class="tablesorter-column-selector"></span>'); - } - colSel = c.selector; - wo = c.widgetOptions; - $popup.find('.tablesorter-column-selector') - .html( colSel.$container.html() ) - .find('input').each(function(){ - var indx = $(this).attr('data-column'); - $(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] ); - }); - colSel.$popup = $popup.on('change', 'input', function(){ - // data input - indx = $(this).attr('data-column'); - // update original popup - colSel.$container.find('input[data-column="' + indx + '"]') - .prop('checked', this.checked) - .trigger('change'); - }); - } - } - -}; - -ts.addWidget({ - id: "columnSelector", - priority: 10, - options: { - // target the column selector markup - columnSelector_container : null, - // column status, true = display, false = hide - // disable = do not display on list - columnSelector_columns : {}, - // remember selected columns - columnSelector_saveColumns: true, - - // container layout - columnSelector_layout : '<label><input type="checkbox">{name}</label>', - // data attribute containing column name to use in the selector container - columnSelector_name : 'data-selector-name', - - /* Responsive Media Query settings */ - // enable/disable mediaquery breakpoints - columnSelector_mediaquery: true, - // toggle checkbox name - columnSelector_mediaqueryName: 'Auto: ', - // breakpoints checkbox initial setting - columnSelector_mediaqueryState: true, - // responsive table hides columns with priority 1-6 at these breakpoints - // see http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/#Applyingapresetbreakpoint - // *** set to false to disable *** - columnSelector_breakpoints : [ '20em', '30em', '40em', '50em', '60em', '70em' ], - // data attribute containing column priority - // duplicates how jQuery mobile uses priorities: - // http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/ - columnSelector_priority : 'data-priority' - - }, - init: function(table, thisWidget, c, wo) { - tsColSel.init(table, c, wo); - }, - remove: function(table, c){ - var csel = c.selector; - csel.$container.empty(); - if (csel.$popup) { csel.$popup.empty(); } - csel.$style.remove(); - csel.$breakpoints.remove(); - c.$table.off('updateAll' + namespace + ' update' + namespace); - } - -}); - -})(jQuery); diff --git a/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js b/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js deleted file mode 100644 index 18996733f54b6a0ddd4a7c38a870633426d3a447..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js and /dev/null differ diff --git a/gui/slick/js/lib/jquery.timeago.js b/gui/slick/js/lib/jquery.timeago.js deleted file mode 100644 index a8ad067eb39da390b62df845fdf4a36240a86b4f..0000000000000000000000000000000000000000 --- a/gui/slick/js/lib/jquery.timeago.js +++ /dev/null @@ -1,223 +0,0 @@ -/** - * Timeago is a jQuery plugin that makes it easy to support automatically - * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). - * - * @name timeago - * @version 1.4.2 - * @requires jQuery v1.2.3+ - * @author Ryan McGeary - * @license MIT License - http://www.opensource.org/licenses/mit-license.php - * - * For usage and examples, visit: - * http://timeago.yarp.com/ - * - * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) - */ - -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } if (typeof module === 'object' && typeof module.exports === 'object') { - factory(require('jquery')); - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - $.timeago = function(timestamp) { - if (timestamp instanceof Date) { - return inWords(timestamp); - } else if (typeof timestamp === "string") { - return inWords($.timeago.parse(timestamp)); - } else if (typeof timestamp === "number") { - return inWords(new Date(timestamp)); - } else { - return inWords($.timeago.datetime(timestamp)); - } - }; - var $t = $.timeago; - - $.extend($.timeago, { - settings: { - refreshMillis: 60000, - allowPast: true, - allowFuture: false, - localeTitle: false, - cutoff: 0, - strings: { - prefixAgo: null, - prefixFromNow: null, - suffixAgo: "ago", - suffixFromNow: "from now", - inPast: 'any moment now', - seconds: "less than a minute", - minute: "about a minute", - minutes: "%d minutes", - hour: "about an hour", - hours: "about %d hours", - day: "a day", - days: "%d days", - month: "about a month", - months: "%d months", - year: "about a year", - years: "%d years", - wordSeparator: " ", - numbers: [] - } - }, - - inWords: function(distanceMillis) { - if(!this.settings.allowPast && ! this.settings.allowFuture) { - throw 'timeago allowPast and allowFuture settings can not both be set to false.'; - } - - var $l = this.settings.strings; - var prefix = $l.prefixAgo; - var suffix = $l.suffixAgo; - if (this.settings.allowFuture) { - if (distanceMillis < 0) { - prefix = $l.prefixFromNow; - suffix = $l.suffixFromNow; - } - } - - if(!this.settings.allowPast && distanceMillis >= 0) { - return this.settings.strings.inPast; - } - - var seconds = Math.abs(distanceMillis) / 1000; - var minutes = seconds / 60; - var hours = minutes / 60; - var days = hours / 24; - var years = days / 365; - - function substitute(stringOrFunction, number) { - var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; - var value = ($l.numbers && $l.numbers[number]) || number; - return string.replace(/%d/i, value); - } - - var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || - seconds < 90 && substitute($l.minute, 1) || - minutes < 45 && substitute($l.minutes, Math.round(minutes)) || - minutes < 90 && substitute($l.hour, 1) || - hours < 24 && substitute($l.hours, Math.round(hours)) || - hours < 42 && substitute($l.day, 1) || - days < 30 && substitute($l.days, Math.round(days)) || - days < 45 && substitute($l.month, 1) || - days < 365 && substitute($l.months, Math.round(days / 30)) || - years < 1.5 && substitute($l.year, 1) || - substitute($l.years, Math.round(years)); - - var separator = $l.wordSeparator || ""; - if ($l.wordSeparator === undefined) { separator = " "; } - return $.trim([prefix, words, suffix].join(separator)); - }, - - parse: function(iso8601) { - var s = $.trim(iso8601); - s = s.replace(/\.\d+/,""); // remove milliseconds - s = s.replace(/-/,"/").replace(/-/,"/"); - s = s.replace(/T/," ").replace(/Z/," UTC"); - s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 - s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900 - return new Date(s); - }, - datetime: function(elem) { - var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); - return $t.parse(iso8601); - }, - isTime: function(elem) { - // jQuery's `is()` doesn't play well with HTML5 in IE - return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); - } - }); - - // functions that can be called via $(el).timeago('action') - // init is default when no action is given - // functions are called with context of a single element - var functions = { - init: function(){ - var refresh_el = $.proxy(refresh, this); - refresh_el(); - var $s = $t.settings; - if ($s.refreshMillis > 0) { - this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis); - } - }, - update: function(time){ - var parsedTime = $t.parse(time); - $(this).data('timeago', { datetime: parsedTime }); - if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString()); - refresh.apply(this); - }, - updateFromDOM: function(){ - $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) }); - refresh.apply(this); - }, - dispose: function () { - if (this._timeagoInterval) { - window.clearInterval(this._timeagoInterval); - this._timeagoInterval = null; - } - } - }; - - $.fn.timeago = function(action, options) { - var fn = action ? functions[action] : functions.init; - if(!fn){ - throw new Error("Unknown function name '"+ action +"' for timeago"); - } - // each over objects here and call the requested function - this.each(function(){ - fn.call(this, options); - }); - return this; - }; - - function refresh() { - //check if it's still visible - if(!$.contains(document.documentElement,this)){ - //stop if it has been removed - $(this).timeago("dispose"); - return this; - } - - var data = prepareData(this); - var $s = $t.settings; - - if (!isNaN(data.datetime)) { - if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) { - $(this).text(inWords(data.datetime)); - } - } - return this; - } - - function prepareData(element) { - element = $(element); - if (!element.data("timeago")) { - element.data("timeago", { datetime: $t.datetime(element) }); - var text = $.trim(element.text()); - if ($t.settings.localeTitle) { - element.attr("title", element.data('timeago').datetime.toLocaleString()); - } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { - element.attr("title", text); - } - } - return element.data("timeago"); - } - - function inWords(date) { - return $t.inWords(distance(date)); - } - - function distance(date) { - return (new Date().getTime() - date.getTime()); - } - - // fix for IE6 suckage - document.createElement("abbr"); - document.createElement("time"); -})); diff --git a/gui/slick/js/lib/jquery.tokeninput.js b/gui/slick/js/lib/jquery.tokeninput.js deleted file mode 100644 index 5eec491e16278debb91c5e53173a7583382b408c..0000000000000000000000000000000000000000 --- a/gui/slick/js/lib/jquery.tokeninput.js +++ /dev/null @@ -1,861 +0,0 @@ -/* - * jQuery Plugin: Tokenizing Autocomplete Text Entry - * Version 1.6.0 - * - * Copyright (c) 2009 James Smith (http://loopj.com) - * Licensed jointly under the GPL and MIT licenses, - * choose which one suits your project best! - * - */ - -(function ($) { -// Default settings -var DEFAULT_SETTINGS = { - // Search settings - method: "GET", - contentType: "json", - queryParam: "q", - searchDelay: 300, - minChars: 1, - propertyToSearch: "name", - jsonContainer: null, - - // Display settings - hintText: "Type in a search term", - noResultsText: "No results", - searchingText: "Searching...", - deleteText: "×", - animateDropdown: true, - - // Tokenization settings - tokenLimit: null, - tokenDelimiter: ",", - preventDuplicates: false, - - // Output settings - tokenValue: "id", - - // Prepopulation settings - prePopulate: null, - processPrePopulate: true, - - // Manipulation settings - idPrefix: "token-input-", - - // Formatters - resultsFormatter: function(item){ return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> " + item[this.propertyToSearch]+ "</li>" }, - tokenFormatter: function(item) { return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> <p>" + item[this.propertyToSearch] + "</p></li>" }, - flag: "flag", - - // Callbacks - onResult: null, - onAdd: null, - onDelete: null, - onReady: null -}; - -// Default classes to use when theming -var DEFAULT_CLASSES = { - tokenList: "token-input-list", - token: "token-input-token", - tokenDelete: "token-input-delete-token", - selectedToken: "token-input-selected-token", - highlightedToken: "token-input-highlighted-token", - dropdown: "token-input-dropdown", - dropdownItem: "token-input-dropdown-item", - dropdownItem2: "token-input-dropdown-item2", - selectedDropdownItem: "token-input-selected-dropdown-item", - inputToken: "token-input-input-token" -}; - -// Input box position "enum" -var POSITION = { - BEFORE: 0, - AFTER: 1, - END: 2 -}; - -// Keys "enum" -var KEY = { - BACKSPACE: 8, - TAB: 9, - ENTER: 13, - ESCAPE: 27, - SPACE: 32, - PAGE_UP: 33, - PAGE_DOWN: 34, - END: 35, - HOME: 36, - LEFT: 37, - UP: 38, - RIGHT: 39, - DOWN: 40, - NUMPAD_ENTER: 108, - COMMA: 188 -}; - -// Additional public (exposed) methods -var methods = { - init: function(url_or_data_or_function, options) { - var settings = $.extend({}, DEFAULT_SETTINGS, options || {}); - - return this.each(function () { - $(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings)); - }); - }, - clear: function() { - this.data("tokenInputObject").clear(); - return this; - }, - add: function(item) { - this.data("tokenInputObject").add(item); - return this; - }, - remove: function(item) { - this.data("tokenInputObject").remove(item); - return this; - }, - get: function() { - return this.data("tokenInputObject").getTokens(); - } -} - -// Expose the .tokenInput function to jQuery as a plugin -$.fn.tokenInput = function (method) { - // Method calling and initialization logic - if(methods[method]) { - return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); - } else { - return methods.init.apply(this, arguments); - } -}; - -// TokenList class for each input -$.TokenList = function (input, url_or_data, settings) { - // - // Initialization - // - - // Configure the data source - if($.type(url_or_data) === "string" || $.type(url_or_data) === "function") { - // Set the url to query against - settings.url = url_or_data; - - // If the URL is a function, evaluate it here to do our initalization work - var url = computeURL(); - - // Make a smart guess about cross-domain if it wasn't explicitly specified - if(settings.crossDomain === undefined) { - if(url.indexOf("://") === -1) { - settings.crossDomain = false; - } else { - settings.crossDomain = (location.href.split(/\/+/g)[1] !== url.split(/\/+/g)[1]); - } - } - } else if(typeof(url_or_data) === "object") { - // Set the local data to search through - settings.local_data = url_or_data; - } - - // Build class names - if(settings.classes) { - // Use custom class names - settings.classes = $.extend({}, DEFAULT_CLASSES, settings.classes); - } else if(settings.theme) { - // Use theme-suffixed default class names - settings.classes = {}; - $.each(DEFAULT_CLASSES, function(key, value) { - settings.classes[key] = value + "-" + settings.theme; - }); - } else { - settings.classes = DEFAULT_CLASSES; - } - - - // Save the tokens - var saved_tokens = []; - - // Keep track of the number of tokens in the list - var token_count = 0; - - // Basic cache to save on db hits - var cache = new $.TokenList.Cache(); - - // Keep track of the timeout, old vals - var timeout; - var input_val; - - // Create a new text input an attach keyup events - var input_box = $("<input type=\"text\" autocomplete=\"off\" >") - .css({ - outline: "none" - }) - .attr("id", settings.idPrefix + input.id) - .focus(function () { - if (settings.tokenLimit === null || settings.tokenLimit !== token_count) { - show_dropdown_hint(); - } - }) - .blur(function () { - hide_dropdown(); - $(this).val(""); - }) - .bind("keyup keydown blur update", resize_input) - .keydown(function (event) { - var previous_token; - var next_token; - - switch(event.keyCode) { - case KEY.LEFT: - case KEY.RIGHT: - case KEY.UP: - case KEY.DOWN: - if(!$(this).val()) { - previous_token = input_token.prev(); - next_token = input_token.next(); - - if((previous_token.length && previous_token.get(0) === selected_token) || (next_token.length && next_token.get(0) === selected_token)) { - // Check if there is a previous/next token and it is selected - if(event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) { - deselect_token($(selected_token), POSITION.BEFORE); - } else { - deselect_token($(selected_token), POSITION.AFTER); - } - } else if((event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) && previous_token.length) { - // We are moving left, select the previous token if it exists - select_token($(previous_token.get(0))); - } else if((event.keyCode === KEY.RIGHT || event.keyCode === KEY.DOWN) && next_token.length) { - // We are moving right, select the next token if it exists - select_token($(next_token.get(0))); - } - } else { - var dropdown_item = null; - - if(event.keyCode === KEY.DOWN || event.keyCode === KEY.RIGHT) { - dropdown_item = $(selected_dropdown_item).next(); - } else { - dropdown_item = $(selected_dropdown_item).prev(); - } - - if(dropdown_item.length) { - select_dropdown_item(dropdown_item); - } - return false; - } - break; - - case KEY.BACKSPACE: - previous_token = input_token.prev(); - - if(!$(this).val().length) { - if(selected_token) { - delete_token($(selected_token)); - hidden_input.change(); - } else if(previous_token.length) { - select_token($(previous_token.get(0))); - } - - return false; - } else if($(this).val().length === 1) { - hide_dropdown(); - } else { - // set a timeout just long enough to let this function finish. - setTimeout(function(){do_search();}, 5); - } - break; - - case KEY.TAB: - case KEY.ENTER: - case KEY.NUMPAD_ENTER: - case KEY.COMMA: - if(selected_dropdown_item) { - add_token($(selected_dropdown_item).data("tokeninput")); - hidden_input.change(); - return false; - } - break; - - case KEY.ESCAPE: - hide_dropdown(); - return true; - - default: - if(String.fromCharCode(event.which)) { - // set a timeout just long enough to let this function finish. - setTimeout(function(){do_search();}, 5); - } - break; - } - }); - - // Keep a reference to the original input box - var hidden_input = $(input) - .hide() - .val("") - .focus(function () { - input_box.focus(); - }) - .blur(function () { - input_box.blur(); - }); - - // Keep a reference to the selected token and dropdown item - var selected_token = null; - var selected_token_index = 0; - var selected_dropdown_item = null; - - // The list to store the token items in - var token_list = $("<ul />") - .addClass(settings.classes.tokenList) - .click(function (event) { - var li = $(event.target).closest("li"); - if(li && li.get(0) && $.data(li.get(0), "tokeninput")) { - toggle_select_token(li); - } else { - // Deselect selected token - if(selected_token) { - deselect_token($(selected_token), POSITION.END); - } - - // Focus input box - input_box.focus(); - } - }) - .mouseover(function (event) { - var li = $(event.target).closest("li"); - if(li && selected_token !== this) { - li.addClass(settings.classes.highlightedToken); - } - }) - .mouseout(function (event) { - var li = $(event.target).closest("li"); - if(li && selected_token !== this) { - li.removeClass(settings.classes.highlightedToken); - } - }) - .insertBefore(hidden_input); - - // The token holding the input box - var input_token = $("<li />") - .addClass(settings.classes.inputToken) - .appendTo(token_list) - .append(input_box); - - // The list to store the dropdown items in - var dropdown = $("<div>") - .addClass(settings.classes.dropdown) - .appendTo("body") - .hide(); - - // Magic element to help us resize the text input - var input_resizer = $("<tester/>") - .insertAfter(input_box) - .css({ - position: "absolute", - top: -9999, - left: -9999, - width: "auto", - fontSize: input_box.css("fontSize"), - fontFamily: input_box.css("fontFamily"), - fontWeight: input_box.css("fontWeight"), - letterSpacing: input_box.css("letterSpacing"), - whiteSpace: "nowrap" - }); - - // Pre-populate list if items exist - hidden_input.val(""); - var li_data = settings.prePopulate || hidden_input.data("pre"); - if(settings.processPrePopulate && $.isFunction(settings.onResult)) { - li_data = settings.onResult.call(hidden_input, li_data); - } - if(li_data && li_data.length) { - $.each(li_data, function (index, value) { - insert_token(value); - checkTokenLimit(); - }); - } - - // Initialization is done - if($.isFunction(settings.onReady)) { - settings.onReady.call(); - } - - // - // Public functions - // - - this.clear = function() { - token_list.children("li").each(function() { - if ($(this).children("input").length === 0) { - delete_token($(this)); - } - }); - } - - this.add = function(item) { - add_token(item); - } - - this.remove = function(item) { - token_list.children("li").each(function() { - if ($(this).children("input").length === 0) { - var currToken = $(this).data("tokeninput"); - var match = true; - for (var prop in item) { - if (item[prop] !== currToken[prop]) { - match = false; - break; - } - } - if (match) { - delete_token($(this)); - } - } - }); - } - - this.getTokens = function() { - return saved_tokens; - } - - // - // Private functions - // - - function checkTokenLimit() { - if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) { - input_box.hide(); - hide_dropdown(); - return; - } - } - - function resize_input() { - if(input_val === (input_val = input_box.val())) {return;} - - // Enter new content into resizer and resize input accordingly - var escaped = input_val.replace(/&/g, '&').replace(/\s/g,' ').replace(/</g, '<').replace(/>/g, '>'); - input_resizer.html(escaped); - input_box.width(input_resizer.width() + 30); - } - - function is_printable_character(keycode) { - return ((keycode >= 48 && keycode <= 90) || // 0-1a-z - (keycode >= 96 && keycode <= 111) || // numpad 0-9 + - / * . - (keycode >= 186 && keycode <= 192) || // ; = , - . / ^ - (keycode >= 219 && keycode <= 222)); // ( \ ) ' - } - - // Inner function to a token to the list - function insert_token(item) { - var this_token = settings.tokenFormatter(item); - this_token = $(this_token) - .addClass(settings.classes.token) - .insertBefore(input_token); - - // The 'delete token' button - $("<span>" + settings.deleteText + "</span>") - .addClass(settings.classes.tokenDelete) - .appendTo(this_token) - .click(function () { - delete_token($(this).parent()); - hidden_input.change(); - return false; - }); - - // Store data on the token - var token_data = {"id": item.id}; - token_data[settings.propertyToSearch] = item[settings.propertyToSearch]; - $.data(this_token.get(0), "tokeninput", item); - - // Save this token for duplicate checking - saved_tokens = saved_tokens.slice(0,selected_token_index).concat([token_data]).concat(saved_tokens.slice(selected_token_index)); - selected_token_index++; - - // Update the hidden input - update_hidden_input(saved_tokens, hidden_input); - - token_count += 1; - - // Check the token limit - if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) { - input_box.hide(); - hide_dropdown(); - } - - return this_token; - } - - // Add a token to the token list based on user input - function add_token (item) { - var callback = settings.onAdd; - - // See if the token already exists and select it if we don't want duplicates - if(token_count > 0 && settings.preventDuplicates) { - var found_existing_token = null; - token_list.children().each(function () { - var existing_token = $(this); - var existing_data = $.data(existing_token.get(0), "tokeninput"); - if(existing_data && existing_data.id === item.id) { - found_existing_token = existing_token; - return false; - } - }); - - if(found_existing_token) { - select_token(found_existing_token); - input_token.insertAfter(found_existing_token); - input_box.focus(); - return; - } - } - - // Insert the new tokens - if(settings.tokenLimit == null || token_count < settings.tokenLimit) { - insert_token(item); - checkTokenLimit(); - } - - // Clear input box - input_box.val(""); - - // Don't show the help dropdown, they've got the idea - hide_dropdown(); - - // Execute the onAdd callback if defined - if($.isFunction(callback)) { - callback.call(hidden_input,item); - } - } - - // Select a token in the token list - function select_token (token) { - token.addClass(settings.classes.selectedToken); - selected_token = token.get(0); - - // Hide input box - input_box.val(""); - - // Hide dropdown if it is visible (eg if we clicked to select token) - hide_dropdown(); - } - - // Deselect a token in the token list - function deselect_token (token, position) { - token.removeClass(settings.classes.selectedToken); - selected_token = null; - - if(position === POSITION.BEFORE) { - input_token.insertBefore(token); - selected_token_index--; - } else if(position === POSITION.AFTER) { - input_token.insertAfter(token); - selected_token_index++; - } else { - input_token.appendTo(token_list); - selected_token_index = token_count; - } - - // Show the input box and give it focus again - input_box.focus(); - } - - // Toggle selection of a token in the token list - function toggle_select_token(token) { - var previous_selected_token = selected_token; - - if(selected_token) { - deselect_token($(selected_token), POSITION.END); - } - - if(previous_selected_token === token.get(0)) { - deselect_token(token, POSITION.END); - } else { - select_token(token); - } - } - - // Delete a token from the token list - function delete_token (token) { - // Remove the id from the saved list - var token_data = $.data(token.get(0), "tokeninput"); - var callback = settings.onDelete; - - var index = token.prevAll().length; - if(index > selected_token_index) index--; - - // Delete the token - token.remove(); - selected_token = null; - - // Show the input box and give it focus again - input_box.focus(); - - // Remove this token from the saved list - saved_tokens = saved_tokens.slice(0,index).concat(saved_tokens.slice(index+1)); - if(index < selected_token_index) selected_token_index--; - - // Update the hidden input - update_hidden_input(saved_tokens, hidden_input); - - token_count -= 1; - - if(settings.tokenLimit !== null) { - input_box - .show() - .val("") - .focus(); - } - - // Execute the onDelete callback if defined - if($.isFunction(callback)) { - callback.call(hidden_input,token_data); - } - } - - // Update the hidden input box value - function update_hidden_input(saved_tokens, hidden_input) { - var token_values = $.map(saved_tokens, function (el) { - return el[settings.tokenValue]; - }); - hidden_input.val(token_values.join(settings.tokenDelimiter)); - - } - - // Hide and clear the results dropdown - function hide_dropdown () { - dropdown.hide().empty(); - selected_dropdown_item = null; - } - - function show_dropdown() { - dropdown - .css({ - position: "absolute", - top: $(token_list).offset().top + $(token_list).outerHeight(), - left: $(token_list).offset().left, - zindex: 999 - }) - .show(); - } - - function show_dropdown_searching () { - if(settings.searchingText) { - dropdown.html("<p>"+settings.searchingText+"</p>"); - show_dropdown(); - } - } - - function show_dropdown_hint () { - if(settings.hintText) { - dropdown.html("<p>"+settings.hintText+"</p>"); - show_dropdown(); - } - } - - // Highlight the query part of the search term - function highlight_term(value, term) { - return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<b>$1</b>"); - } - - function find_value_and_highlight_term(template, value, term) { - return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term)); - } - - // Populate the results dropdown with some results - function populate_dropdown (query, results) { - if(results && results.length) { - dropdown.empty(); - var dropdown_ul = $("<ul>") - .appendTo(dropdown) - .mouseover(function (event) { - select_dropdown_item($(event.target).closest("li")); - }) - .mousedown(function (event) { - add_token($(event.target).closest("li").data("tokeninput")); - hidden_input.change(); - return false; - }) - .hide(); - - $.each(results, function(index, value) { - var this_li = settings.resultsFormatter(value); - - this_li = find_value_and_highlight_term(this_li ,value[settings.propertyToSearch], query); - - this_li = $(this_li).appendTo(dropdown_ul); - - if(index % 2) { - this_li.addClass(settings.classes.dropdownItem); - } else { - this_li.addClass(settings.classes.dropdownItem2); - } - - if(index === 0) { - select_dropdown_item(this_li); - } - - $.data(this_li.get(0), "tokeninput", value); - }); - - show_dropdown(); - - if(settings.animateDropdown) { - dropdown_ul.slideDown("fast"); - } else { - dropdown_ul.show(); - } - } else { - if(settings.noResultsText) { - dropdown.html("<p>"+settings.noResultsText+"</p>"); - show_dropdown(); - } - } - } - - // Highlight an item in the results dropdown - function select_dropdown_item (item) { - if(item) { - if(selected_dropdown_item) { - deselect_dropdown_item($(selected_dropdown_item)); - } - - item.addClass(settings.classes.selectedDropdownItem); - selected_dropdown_item = item.get(0); - } - } - - // Remove highlighting from an item in the results dropdown - function deselect_dropdown_item (item) { - item.removeClass(settings.classes.selectedDropdownItem); - selected_dropdown_item = null; - } - - // Do a search and show the "searching" dropdown if the input is longer - // than settings.minChars - function do_search() { - var query = input_box.val().toLowerCase(); - - if(query && query.length) { - if(selected_token) { - deselect_token($(selected_token), POSITION.AFTER); - } - - if(query.length >= settings.minChars) { - show_dropdown_searching(); - clearTimeout(timeout); - - timeout = setTimeout(function(){ - run_search(query); - }, settings.searchDelay); - } else { - hide_dropdown(); - } - } - } - - // Do the actual search - function run_search(query) { - var cache_key = query + computeURL(); - var cached_results = cache.get(cache_key); - if(cached_results) { - populate_dropdown(query, cached_results); - } else { - // Are we doing an ajax search or local data search? - if(settings.url) { - var url = computeURL(); - // Extract exisiting get params - var ajax_params = {}; - ajax_params.data = {}; - if(url.indexOf("?") > -1) { - var parts = url.split("?"); - ajax_params.url = parts[0]; - - var param_array = parts[1].split("&"); - $.each(param_array, function (index, value) { - var kv = value.split("="); - ajax_params.data[kv[0]] = kv[1]; - }); - } else { - ajax_params.url = url; - } - - // Prepare the request - ajax_params.data[settings.queryParam] = query; - ajax_params.type = settings.method; - ajax_params.dataType = settings.contentType; - if(settings.crossDomain) { - ajax_params.dataType = "jsonp"; - } - - // Attach the success callback - ajax_params.success = function(results) { - if($.isFunction(settings.onResult)) { - results = settings.onResult.call(hidden_input, results); - } - cache.add(cache_key, settings.jsonContainer ? results[settings.jsonContainer] : results); - - // only populate the dropdown if the results are associated with the active search query - if(input_box.val().toLowerCase() === query) { - populate_dropdown(query, settings.jsonContainer ? results[settings.jsonContainer] : results); - } - }; - - // Make the request - $.ajax(ajax_params); - } else if(settings.local_data) { - // Do the search through local data - var results = $.grep(settings.local_data, function (row) { - return row[settings.propertyToSearch].toLowerCase().indexOf(query.toLowerCase()) > -1; - }); - - if($.isFunction(settings.onResult)) { - results = settings.onResult.call(hidden_input, results); - } - cache.add(cache_key, results); - populate_dropdown(query, results); - } - } - } - - // compute the dynamic URL - function computeURL() { - var url = settings.url; - if(typeof settings.url == 'function') { - url = settings.url.call(); - } - return url; - } -}; - -// Really basic cache for the results -$.TokenList.Cache = function (options) { - var settings = $.extend({ - max_size: 500 - }, options); - - var data = {}; - var size = 0; - - var flush = function () { - data = {}; - size = 0; - }; - - this.add = function (query, results) { - if(size > settings.max_size) { - flush(); - } - - if(!data[query]) { - size += 1; - } - - data[query] = results; - }; - - this.get = function (query) { - return data[query]; - }; -}; -}(jQuery)); diff --git a/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js b/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js deleted file mode 100644 index 33d6f97e5e6da98a226d5c223e70b014932fd3de..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js and /dev/null differ diff --git a/gui/slick/js/lib/pnotify.custom.min.js b/gui/slick/js/lib/pnotify.custom.min.js deleted file mode 100644 index f927d92712aa970d3baeabde56c84448bb888a33..0000000000000000000000000000000000000000 Binary files a/gui/slick/js/lib/pnotify.custom.min.js and /dev/null differ diff --git a/gui/slick/js/manageEpisodeStatuses.js b/gui/slick/js/manageEpisodeStatuses.js index 313087e304d70118e8fce0284910cea75c99af3d..74b148338d32cf28fd0317b39e5b3fc9955e6953 100644 --- a/gui/slick/js/manageEpisodeStatuses.js +++ b/gui/slick/js/manageEpisodeStatuses.js @@ -1,75 +1,4 @@ $(document).ready(function() { - function make_row(indexer_id, season, episode, name, checked) { - checked = checked ? ' checked' : ''; - - var row_class = $('#row_class').val(); - - var row = ''; - row += ' <tr class="'+row_class+' show-'+indexer_id+'">'; - row += ' <td class="tableleft" align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>'; - row += ' <td>'+season+'x'+episode+'</td>'; - row += ' <td class="tableright" style="width: 100%">'+name+'</td>'; - row += ' </tr>'; - - return row; - } - - $('.allCheck').click(function(){ - var indexer_id = $(this).attr('id').split('-')[1]; - $('.'+indexer_id+'-epcheck').prop('checked', $(this).prop('checked')); - }); - - $('.get_more_eps').click(function(){ - var cur_indexer_id = $(this).attr('id'); - var checked = $('#allCheck-'+cur_indexer_id).prop('checked'); - var last_row = $('tr#'+cur_indexer_id); - var clicked = $(this).attr('data-clicked'); - var action = $(this).attr('value'); - - if (!clicked) { - $.getJSON(srRoot+'/manage/showEpisodeStatuses',{ - indexer_id: cur_indexer_id, - whichStatus: $('#oldStatus').val() - }, function (data) { - $.each(data, function(season,eps){ - $.each(eps, function(episode, name) { - //alert(season+'x'+episode+': '+name); - last_row.after(make_row(cur_indexer_id, season, episode, name, checked)); - }); - }); - }); - $(this).attr('data-clicked',1); - $(this).prop('value', 'Collapse'); - } else { - if (action === 'Collapse') { - $('table tr').filter('.show-'+cur_indexer_id).hide(); - $(this).prop('value', 'Expand'); - } else if (action === 'Expand') { - $('table tr').filter('.show-'+cur_indexer_id).show(); - $(this).prop('value', 'Collapse'); - } - } - }); - - // selects all visible episode checkboxes. - $('.selectAllShows').click(function(){ - $('.allCheck').each(function(){ - this.checked = true; - }); - $('input[class*="-epcheck"]').each(function(){ - this.checked = true; - }); - }); - - // clears all visible episode checkboxes and the season selectors - $('.unselectAllShows').click(function(){ - $('.allCheck').each(function(){ - this.checked = false; - }); - $('input[class*="-epcheck"]').each(function(){ - this.checked = false; - }); - }); }); diff --git a/gui/slick/js/manageSubtitleMissed.js b/gui/slick/js/manageSubtitleMissed.js index 228b3f171a3368379f88dce97151b63586483493..2f6d65c2b74364ddb304ebfe3ac94c45c58c2b9c 100644 --- a/gui/slick/js/manageSubtitleMissed.js +++ b/gui/slick/js/manageSubtitleMissed.js @@ -1,11 +1,11 @@ $(document).ready(function() { - function make_row(indexer_id, season, episode, name, subtitles, checked) { + function makeRow(indexerId, season, episode, name, subtitles, checked) { checked = checked ? ' checked' : ''; var row = ''; - row += ' <tr class="good show-' + indexer_id + '">'; - row += ' <td align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>'; + row += ' <tr class="good show-' + indexerId + '">'; + row += ' <td align="center"><input type="checkbox" class="'+indexerId+'-epcheck" name="'+indexerId+'-'+season+'x'+episode+'"'+checked+'></td>'; row += ' <td style="width: 1%;">'+season+'x'+episode+'</td>'; row += ' <td>'+name+'</td>'; row += ' </tr>'; @@ -14,26 +14,26 @@ $(document).ready(function() { } $('.allCheck').click(function(){ - var indexer_id = $(this).attr('id').split('-')[1]; - $('.'+indexer_id+'-epcheck').prop('checked', $(this).prop('checked')); + var indexerId = $(this).attr('id').split('-')[1]; + $('.'+indexerId+'-epcheck').prop('checked', $(this).prop('checked')); }); $('.get_more_eps').click(function(){ - var cur_indexer_id = $(this).attr('id'); - var checked = $('#allCheck-'+cur_indexer_id).prop('checked'); - var last_row = $('tr#'+cur_indexer_id); + var indexerId = $(this).attr('id'); + var checked = $('#allCheck-'+indexerId).prop('checked'); + var lastRow = $('tr#'+indexerId); var clicked = $(this).attr('data-clicked'); var action = $(this).attr('value'); if (!clicked) { $.getJSON(srRoot + '/manage/showSubtitleMissed', { - indexer_id: cur_indexer_id, + indexer_id: indexerId, // jshint ignore:line whichSubs: $('#selectSubLang').val() }, function(data) { $.each(data, function(season, eps) { $.each(eps, function(episode, data) { //alert(season+'x'+episode+': '+name); - last_row.after(make_row(cur_indexer_id, season, episode, data.name, data.subtitles, checked)); + lastRow.after(makeRow(indexerId, season, episode, data.name, data.subtitles, checked)); }); }); }); @@ -41,10 +41,10 @@ $(document).ready(function() { $(this).prop('value', 'Collapse'); } else { if (action === 'Collapse') { - $('table tr').filter('.show-' + cur_indexer_id).hide(); + $('table tr').filter('.show-' + indexerId).hide(); $(this).prop('value', 'Expand'); } else if (action === 'Expand') { - $('table tr').filter('.show-' + cur_indexer_id).show(); + $('table tr').filter('.show-' + indexerId).show(); $(this).prop('value', 'Collapse'); } } diff --git a/gui/slick/js/massEdit.js b/gui/slick/js/massEdit.js index 116792887eaf4d95a1bce6655e8b532a143e0108..1a8c7b334cd4d0d5cadaaa20acdbe164cc22cd2a 100644 --- a/gui/slick/js/massEdit.js +++ b/gui/slick/js/massEdit.js @@ -1,28 +1,28 @@ $(document).ready(function(){ - function find_dir_index(which){ - var dir_parts = which.split('_'); - return dir_parts[dir_parts.length-1]; + function findDirIndex(which){ + var dirParts = which.split('_'); + return dirParts[dirParts.length-1]; } - function edit_root_dir(path, options){ - $('#new_root_dir_'+options.which_id).val(path); - $('#new_root_dir_'+options.which_id).change(); + function editRootDir(path, options){ + $('#new_root_dir_'+options.whichId).val(path); + $('#new_root_dir_'+options.whichId).change(); } $('.new_root_dir').change(function(){ - var cur_index = find_dir_index($(this).attr('id')); - $('#display_new_root_dir_'+cur_index).html('<b>'+$(this).val()+'</b>'); + var curIndex = findDirIndex($(this).attr('id')); + $('#display_new_root_dir_'+curIndex).html('<b>'+$(this).val()+'</b>'); }); $('.edit_root_dir').click(function(){ - var cur_id = find_dir_index($(this).attr('id')); - var initial_dir = $("#new_root_dir_"+cur_id).val(); - $(this).nFileBrowser(edit_root_dir, {initialDir: initial_dir, which_id: cur_id}); + var curIndex = findDirIndex($(this).attr('id')); + var initialDir = $("#new_root_dir_"+curIndex).val(); + $(this).nFileBrowser(editRootDir, {initialDir: initialDir, whichId: curIndex}); }); $('.delete_root_dir').click(function(){ - var cur_id = find_dir_index($(this).attr('id')); - $('#new_root_dir_'+cur_id).val(null); - $('#display_new_root_dir_'+cur_id).html('<b>DELETED</b>'); + var curIndex = findDirIndex($(this).attr('id')); + $('#new_root_dir_'+curIndex).val(null); + $('#display_new_root_dir_'+curIndex).html('<b>DELETED</b>'); }); }); diff --git a/gui/slick/js/massUpdate.js b/gui/slick/js/massUpdate.js index 3d390c9cc1502b795b784e2ae20c840d98cb5d0f..b539e1ef6d66f65cc6d77b6359badf075e799269 100644 --- a/gui/slick/js/massUpdate.js +++ b/gui/slick/js/massUpdate.js @@ -3,85 +3,74 @@ $(document).ready(function(){ var editArr = []; $('.editCheck').each(function() { - if(this.checked === true) editArr.push($(this).attr('id').split('-')[1]); + if(this.checked === true) { editArr.push($(this).attr('id').split('-')[1]); } }); - if(editArr.length === 0) return; + if(editArr.length === 0) { return; } - url = 'massEdit?toEdit='+editArr.join('|'); - window.location.href = url; + window.location.href = 'massEdit?toEdit='+editArr.join('|'); }); $('#submitMassUpdate').on('click', function(){ + var updateArr = []; + var refreshArr = []; + var renameArr = []; + var subtitleArr = []; + var deleteArr = []; + var removeArr = []; + var metadataArr = []; + + $('.updateCheck').each(function() { + if(this.checked === true) { updateArr.push($(this).attr('id').split('-')[1]); } + }); - var updateArr = []; - var refreshArr = []; - var renameArr = []; - var subtitleArr = []; - var deleteArr = []; - var removeArr = []; - var metadataArr = []; - - $('.updateCheck').each(function() { - if(this.checked === true) updateArr.push($(this).attr('id').split('-')[1]); - }); + $('.refreshCheck').each(function() { + if(this.checked === true) { refreshArr.push($(this).attr('id').split('-')[1]); } + }); - $('.refreshCheck').each(function() { - if(this.checked === true) refreshArr.push($(this).attr('id').split('-')[1]); - }); + $('.renameCheck').each(function() { + if(this.checked === true) { renameArr.push($(this).attr('id').split('-')[1]); } + }); - $('.renameCheck').each(function() { - if(this.checked === true) renameArr.push($(this).attr('id').split('-')[1]); - }); + $('.subtitleCheck').each(function() { + if(this.checked === true) { subtitleArr.push($(this).attr('id').split('-')[1]); } + }); - $('.subtitleCheck').each(function() { - if(this.checked === true) subtitleArr.push($(this).attr('id').split('-')[1]); - }); + $('.removeCheck').each(function() { + if(this.checked === true) { removeArr.push($(this).attr('id').split('-')[1]); } + }); - $('.removeCheck').each(function() { - if(this.checked === true) removeArr.push($(this).attr('id').split('-')[1]); - }); + var deleteCount = 0; - var deleteCount = 0; + $('.deleteCheck').each(function() { + if(this.checked === true) { deleteCount++; } + }); - $('.deleteCheck').each(function() { - if(this.checked === true) deleteCount++; - }); + if(deleteCount >= 1) { + bootbox.confirm("You have selected to delete " + deleteCount + " show(s). Are you sure you wish to continue? All files will be removed from your system.", function(result) { + if(result) { + $('.deleteCheck').each(function() { + if(this.checked === true) { + deleteArr.push($(this).attr('id').split('-')[1]); + } + }); + } + if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) { return false; } - if(deleteCount >= 1) { - bootbox.confirm("You have selected to delete " + deleteCount + " show(s). Are you sure you wish to continue? All files will be removed from your system.", function(result) { - if(result) { - $('.deleteCheck').each(function() { - if(this.checked === true) { - deleteArr.push($(this).attr('id').split('-')[1]); - } - }); - } - if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) return false; - url = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|'); - window.location.href = url; - }); - } else { - if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) return false; - url = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|'); - window.location.href = url; - } -/* - $('.metadataCheck').each(function() { - if(this.checked == true) { - metadataArr.push($(this).attr('id').split('-')[1]) - } + window.location.href = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|'); + }); + } else { + if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) { return false; } + window.location.href = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|'); + } }); -*/ - - }); $('.bulkCheck').on('click', function(){ var bulkCheck = this; var whichBulkCheck = $(bulkCheck).attr('id'); $('.'+whichBulkCheck).each(function(){ - if(!this.disabled) this.checked = !this.checked; + if(!this.disabled) { this.checked = !this.checked; } }); }); @@ -101,11 +90,10 @@ $(document).ready(function(){ switch (found) { case 2: return false; case 1: - if(!this.disabled) this.checked = lastCheck.checked; + if(!this.disabled) { this.checked = lastCheck.checked; } } - if(this == check || this == lastCheck) found++; + if(this === check || this === lastCheck) { found++; } }); - lastClick = this; }); }); }); diff --git a/gui/slick/js/new/config_backuprestore.js b/gui/slick/js/new/config_backuprestore.js deleted file mode 100644 index b721fac147cc1fea041a1b08c7a84f4e3b948618..0000000000000000000000000000000000000000 --- a/gui/slick/js/new/config_backuprestore.js +++ /dev/null @@ -1,119 +0,0 @@ -$(document).ready(function(){ - $('#backupDir').fileBrowser({ title: 'Select backup folder to save to', key: 'backupPath' }); - $('#backupFile').fileBrowser({ title: 'Select backup files to restore', key: 'backupFile', includeFiles: 1 }); - $('#config-components').tabs(); - - $(".enabler").each(function(){ - if (!$(this).prop('checked')) $('#content_'+$(this).attr('id')).hide(); - }); - - $(".enabler").click(function() { - if ($(this).prop('checked')){ - $('#content_'+$(this).attr('id')).fadeIn("fast", "linear"); - } else { - $('#content_'+$(this).attr('id')).fadeOut("fast", "linear"); - } - }); - - $(".viewIf").click(function() { - if ($(this).prop('checked')) { - $('.hide_if_'+$(this).attr('id')).css('display','none'); - $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear"); - } else { - $('.show_if_'+$(this).attr('id')).css('display','none'); - $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear"); - } - }); - - $(".datePresets").click(function() { - var def = $('#date_presets').val(); - if ($(this).prop('checked') && '%x' == def) { - def = '%a, %b %d, %Y'; - $('#date_use_system_default').html('1'); - } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){ - def = '%x'; - } - - $('#date_presets').attr('name', 'date_preset_old'); - $('#date_presets').attr('id', 'date_presets_old'); - - $('#date_presets_na').attr('name', 'date_preset'); - $('#date_presets_na').attr('id', 'date_presets'); - - $('#date_presets_old').attr('name', 'date_preset_na'); - $('#date_presets_old').attr('id', 'date_presets_na'); - - if (def) $('#date_presets').val(def); - }); - - // bind 'myForm' and provide a simple callback function - $('#configForm').ajaxForm({ - beforeSubmit: function(){ - $('.config_submitter .config_submitter_refresh').each(function(){ - $(this).attr("disabled", "disabled"); - $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>'); - $(this).hide(); - }); - }, - success: function(){ - setTimeout(function () { - "use strict"; - config_success(); - }, 2000); - } - }); - - $('#api_key').click(function(){ - $('#api_key').select(); - }); - - $("#generate_new_apikey").click(function(){ - $.get(srRoot + '/config/general/generateApiKey', - function(data){ - if (data.error !== undefined) { - alert(data.error); - return; - } - $('#api_key').val(data); - }); - }); - - $('#branchCheckout').click(function() { - var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val(); - var checkDBversion = srRoot + "/home/getDBcompare"; - $.getJSON(checkDBversion, function(data){ - if (data.status == "success") { - if (data.message == "equal") { - //Checkout Branch - window.location.href = url; - } - if (data.message == "upgrade") { - if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) { - //Checkout Branch - window.location.href = url; - } - } - if (data.message == "downgrade") { - alert("Can't switch branch as this will result in a database downgrade."); - } - } - }); - }); - -}); - -function config_success(){ - $('.config_submitter').each(function(){ - $(this).removeAttr("disabled"); - $(this).next().remove(); - $(this).show(); - }); - $('.config_submitter_refresh').each(function(){ - $(this).removeAttr("disabled"); - $(this).next().remove(); - $(this).show(); - url = srRoot+'/config/providers/'; - window.location.href = url; - }); - $('#email_show').trigger('notify'); -} diff --git a/gui/slick/js/new/config_general.js b/gui/slick/js/new/config_general.js deleted file mode 100644 index 98b5a603ce851ec8a6643d9abd1c682cdcdb485a..0000000000000000000000000000000000000000 --- a/gui/slick/js/new/config_general.js +++ /dev/null @@ -1,18 +0,0 @@ -$(document).ready(function(){ - if ($("input[name='proxy_setting']").val().length === 0) { - $("input[id='proxy_indexers']").prop('checked', false); - $("label[for='proxy_indexers']").hide(); - } - - $("input[name='proxy_setting']").on('input', function() { - if($(this).val().length === 0) { - $("input[id='proxy_indexers']").prop('checked', false); - $("label[for='proxy_indexers']").hide(); - } else { - $("label[for='proxy_indexers']").show(); - } - }); - - $('#log_dir').fileBrowser({ title: 'Select log file folder location' }); - $('#config-components').tabs(); -}); diff --git a/gui/slick/js/new/config_notifications.js b/gui/slick/js/new/config_notifications.js deleted file mode 100644 index c9762b0429a8f53ef0ce419bba01c493bd9eedc1..0000000000000000000000000000000000000000 --- a/gui/slick/js/new/config_notifications.js +++ /dev/null @@ -1,3 +0,0 @@ -$(document).load(function(){ - $('#config-components').tabs(); -}); diff --git a/gui/slick/js/new/config_postProcessing.js b/gui/slick/js/new/config_postProcessing.js deleted file mode 100644 index b09818bbde162ac33d4ccf2226e67b51f05a3a58..0000000000000000000000000000000000000000 --- a/gui/slick/js/new/config_postProcessing.js +++ /dev/null @@ -1,2 +0,0 @@ -$('#config-components').tabs(); -$('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' }); diff --git a/gui/slick/js/new/config_search.js b/gui/slick/js/new/config_search.js deleted file mode 100644 index 0c706f7da055fa4edc217225f169d57f2db60efa..0000000000000000000000000000000000000000 --- a/gui/slick/js/new/config_search.js +++ /dev/null @@ -1,4 +0,0 @@ -$('#config-components').tabs(); -$('#nzb_dir').fileBrowser({ title: 'Select .nzb black hole/watch location' }); -$('#torrent_dir').fileBrowser({ title: 'Select .torrent black hole/watch location' }); -$('#torrent_path').fileBrowser({ title: 'Select .torrent download location' }); diff --git a/gui/slick/js/new/core.js b/gui/slick/js/new/core.js deleted file mode 100644 index 69215279dcb135eceb91ce3c511b9e2bf99f14aa..0000000000000000000000000000000000000000 --- a/gui/slick/js/new/core.js +++ /dev/null @@ -1,73 +0,0 @@ -var srRoot = getMeta('srRoot'), - themeSpinner = getMeta('themeSpinner'), - anonURL = getMeta('anonURL'), - top_image_html = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />'; - -$(document).ready(function () { - $("#config-components").tabs({ - activate: function (event, ui) { - var lastOpenedPanel = $(this).data("lastOpenedPanel"), - selected = $(this).tabs('option', 'selected'); - - if (!lastOpenedPanel) lastOpenedPanel = $(ui.oldPanel); - - if (!$(this).data("topPositionTab")) $(this).data("topPositionTab", $(ui.newPanel).position().top); - - //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that - //Fadein the new tab yourself - $(ui.newPanel).hide().fadeIn(0); - - if (lastOpenedPanel) { - // 1. Show the previous opened tab by removing the jQuery UI class - // 2. Make the tab temporary position:absolute so the two tabs will overlap - // 3. Set topposition so they will overlap if you go from tab 1 to tab 0 - // 4. Remove position:absolute after animation - lastOpenedPanel - .toggleClass("ui-tabs-hide") - .css("position", "absolute") - .css("top", $(this).data("topPositionTab") + "px") - .fadeOut(0, function () { - $(this) - .css("position", ""); - }); - } - - //Saving the last tab has been opened - $(this).data("lastOpenedPanel", $(ui.newPanel)); - } - }); - - // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle - if ((navigator.maxTouchPoints || 0) < 2) { - $('.dropdown-toggle').on('click', function(e) { - var $this = $(this); - if ($this.attr('aria-expanded') === 'true') { - window.location.href = $this.attr('href'); - } - }); - } - - if(metaToBool('sickbeard.FUZZY_DATING')){ - $.timeago.settings.allowFuture = true; - $.timeago.settings.strings = { - prefixAgo: null, - prefixFromNow: 'In ', - suffixAgo: "ago", - suffixFromNow: "", - seconds: "less than a minute", - minute: "about a minute", - minutes: "%d minutes", - hour: "an hour", - hours: "%d hours", - day: "a day", - days: "%d days", - month: "a month", - months: "%d months", - year: "a year", - years: "%d years", - wordSeparator: " ", - numbers: [] - }; - $("[datetime]").timeago(); - } -}); diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js index 17344f7c692cf79bd3389eec25f05b4f0e090d11..dc83839e81d842a9384c5050a03c2750f57d8cbe 100644 --- a/gui/slick/js/new/displayShow.js +++ b/gui/slick/js/new/displayShow.js @@ -1,4 +1,247 @@ $(document).ready(function(){ + + $('#srRoot').ajaxEpSearch({'colorRow': true}); + + $('#srRoot').ajaxEpSubtitlesSearch(); + + $('#seasonJump').on('change', function(){ + var id = $('#seasonJump option:selected').val(); + if (id && id !== 'jump') { + var season = $('#seasonJump option:selected').data('season'); + $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow'); + $('#collapseSeason-' + season).collapse('show'); + location.hash = id; + } + $(this).val('jump'); + }); + + $("#prevShow").on('click', function(){ + $('#pickShow option:selected').prev('option').prop('selected', 'selected'); + $("#pickShow").change(); + }); + + $("#nextShow").on('click', function(){ + $('#pickShow option:selected').next('option').prop('selected', 'selected'); + $("#pickShow").change(); + }); + + $('#changeStatus').on('click', function(){ + var srRoot = $('#srRoot').val(); + var epArr = []; + + $('.epCheck').each(function () { + if (this.checked === true) { + epArr.push($(this).attr('id')); + } + }); + + if (epArr.length === 0) { return false; } + + window.location.href = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val(); + }); + + $('.seasonCheck').on('click', function(){ + var seasCheck = this; + var seasNo = $(seasCheck).attr('id'); + + $('#collapseSeason-' + seasNo).collapse('show'); + $('.epCheck:visible').each(function () { + var epParts = $(this).attr('id').split('x'); + if (epParts[0] === seasNo) { + this.checked = seasCheck.checked; + } + }); + }); + + var lastCheck = null; + $('.epCheck').on('click', function (event) { + + if (!lastCheck || !event.shiftKey) { + lastCheck = this; + return; + } + + var check = this; + var found = 0; + + $('.epCheck').each(function() { + switch (found) { + case 2: + return false; + case 1: + this.checked = lastCheck.checked; + } + + if (this === check || this === lastCheck) { + found++; + } + }); + }); + + // selects all visible episode checkboxes. + $('.seriesCheck').on('click', function () { + $('.epCheck:visible').each(function () { + this.checked = true; + }); + $('.seasonCheck:visible').each(function () { + this.checked = true; + }); + }); + + // clears all visible episode checkboxes and the season selectors + $('.clearAll').on('click', function () { + $('.epCheck:visible').each(function () { + this.checked = false; + }); + $('.seasonCheck:visible').each(function () { + this.checked = false; + }); + }); + + // handle the show selection dropbox + $('#pickShow').on('change', function () { + var srRoot = $('#srRoot').val(); + var val = $(this).val(); + if (val === 0) { + return; + } + window.location.href = srRoot + '/home/displayShow?show=' + val; + }); + + // show/hide different types of rows when the checkboxes are changed + $("#checkboxControls input").change(function () { + var whichClass = $(this).attr('id'); + $(this).showHideRows(whichClass); + }); + + // initially show/hide all the rows according to the checkboxes + $("#checkboxControls input").each(function() { + var status = $(this).prop('checked'); + $("tr." + $(this).attr('id')).each(function() { + if(status) { + $(this).show(); + } else { + $(this).hide(); + } + }); + }); + + $.fn.showHideRows = function(whichClass) { + var status = $('#checkboxControls > input, #' + whichClass).prop('checked'); + $("tr." + whichClass).each(function() { + if (status) { + $(this).show(); + } else { + $(this).hide(); + } + }); + + // hide season headers with no episodes under them + $('tr.seasonheader').each(function () { + var numRows = 0; + var seasonNo = $(this).attr('id'); + $('tr.' + seasonNo + ' :visible').each(function () { + numRows++; + }); + if (numRows === 0) { + $(this).hide(); + $('#' + seasonNo + '-cols').hide(); + } else { + $(this).show(); + $('#' + seasonNo + '-cols').show(); + } + }); + }; + + function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) { + var srRoot = $('#srRoot').val(); + var showId = $('#showID').val(); + var indexer = $('#indexer').val(); + + if (sceneSeason === '') { sceneSeason = null; } + if (sceneEpisode === '') { sceneEpisode = null; } + + $.getJSON(srRoot + '/home/setSceneNumbering',{ + 'show': showId, + 'indexer': indexer, + 'forSeason': forSeason, + 'forEpisode': forEpisode, + 'sceneSeason': sceneSeason, + 'sceneEpisode': sceneEpisode + }, function(data) { + // Set the values we get back + if (data.sceneSeason === null || data.sceneEpisode === null) { + $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(''); + } else { + $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode); + } + if (!data.success) { + if (data.errorMessage) { + alert(data.errorMessage); + } else { + alert('Update failed.'); + } + } + }); + } + + function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) { + var srRoot = $('#srRoot').val(); + var showId = $('#showID').val(); + var indexer = $('#indexer').val(); + + if (sceneAbsolute === '') { sceneAbsolute = null; } + + $.getJSON(srRoot + '/home/setSceneNumbering', { + 'show': showId, + 'indexer': indexer, + 'forAbsolute': forAbsolute, + 'sceneAbsolute': sceneAbsolute + }, + function(data) { + // Set the values we get back + if (data.sceneAbsolute === null) { + $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(''); + } else { + $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute); + } + if (!data.success) { + if (data.errorMessage) { + alert(data.errorMessage); + } else { + alert('Update failed.'); + } + } + }); + } + + $('.sceneSeasonXEpisode').on('change', function() { + // Strip non-numeric characters + $(this).val($(this).val().replace(/[^0-9xX]*/g, '')); + var forSeason = $(this).attr('data-for-season'); + var forEpisode = $(this).attr('data-for-episode'); + var m = $(this).val().match(/^(\d+)x(\d+)$/i); + var sceneSeason = null, sceneEpisode = null; + if (m) { + sceneSeason = m[1]; + sceneEpisode = m[2]; + } + setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode); + }); + + $('.sceneAbsolute').on('change', function() { + // Strip non-numeric characters + $(this).val($(this).val().replace(/[^0-9xX]*/g, '')); + var forAbsolute = $(this).attr('data-for-absolute'); + + var m = $(this).val().match(/^(\d{1,3})$/i); + var sceneAbsolute = null; + if (m) { + sceneAbsolute = m[1]; + } + setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute); + }); + $('.addQTip').each(function () { $(this).css({'cursor':'help', 'text-shadow':'0px 0px 0.5px #666'}); $(this).qtip({ @@ -16,11 +259,11 @@ $(document).ready(function(){ $("#showTable, #animeTable").tablesorter({ widgets: ['saveSort', 'stickyHeaders', 'columnSelector'], widgetOptions : { - columnSelector_saveColumns: true, - columnSelector_layout : '<br/><label><input type="checkbox">{name}</label>', - columnSelector_mediaquery: false, - columnSelector_cssChecked : 'checked' - }, + columnSelector_saveColumns: true, // jshint ignore:line + columnSelector_layout : '<br><label><input type="checkbox">{name}</label>', // jshint ignore:line + columnSelector_mediaquery: false, // jshint ignore:line + columnSelector_cssChecked : 'checked' // jshint ignore:line + } }); $('#popover').popover({ @@ -29,7 +272,7 @@ $(document).ready(function(){ content: '<div id="popover-target"></div>' }) // bootstrap popover event triggered when the popover opens - .on('shown.bs.popover', function () { - $.tablesorter.columnSelector.attachTo( $("#showTable, #animeTable"), '#popover-target'); + .on('shown.bs.popover', function (){ + $.tablesorter.columnSelector.attachTo($("#showTable, #animeTable"), '#popover-target'); }); }); diff --git a/gui/slick/js/new/editShow.js b/gui/slick/js/new/editShow.js index 3b566547940e47aa57064ba8666a27356bde7c91..73789ef0d67dfec3fc2278ffea6ce8b1800272c3 100644 --- a/gui/slick/js/new/editShow.js +++ b/gui/slick/js/new/editShow.js @@ -1,56 +1,56 @@ -var all_exceptions = []; +var allExceptions = []; $('#location').fileBrowser({ title: 'Select Show Location' }); -$('#submit').click(function(){ - all_exceptions = []; +$('#submit').click(function() { + var allExceptions = []; - $("#exceptions_list option").each ( function() { - all_exceptions.push( $(this).val() ); + $("#exceptions_list option").each(function() { + allExceptions.push( $(this).val() ); }); - $("#exceptions_list").val(all_exceptions); + $("#exceptions_list").val(allExceptions); - if(metaToBool('show.is_anime')) generate_bwlist(); + if(metaToBool('show.is_anime')) { generate_bwlist(); } }); $('#addSceneName').click(function() { - var scene_ex = $('#SceneName').val(); + var sceneEx = $('#SceneName').val(); var option = $("<option>"); - all_exceptions = []; + allExceptions = []; - $("#exceptions_list option").each ( function() { - all_exceptions.push($(this).val()); + $("#exceptions_list option").each(function() { + allExceptions.push($(this).val()); }); $('#SceneName').val(''); - if ($.inArray(scene_ex, all_exceptions) > -1 || (scene_ex === '')) return; + if ($.inArray(sceneEx, allExceptions) > -1 || (sceneEx === '')) { return; } $("#SceneException").show(); - option.attr("value",scene_ex); - option.html(scene_ex); + option.attr("value",sceneEx); + option.html(sceneEx); return option.appendTo('#exceptions_list'); }); $('#removeSceneName').click(function() { $('#exceptions_list option:selected').remove(); - $(this).toggle_SceneException(); + $(this).toggleSceneException(); }); -$.fn.toggle_SceneException = function() { - all_exceptions = []; +$.fn.toggleSceneException = function() { + allExceptions = []; $("#exceptions_list option").each ( function() { - all_exceptions.push( $(this).val() ); + allExceptions.push( $(this).val() ); }); - if (all_exceptions === ''){ + if (allExceptions === ''){ $("#SceneException").hide(); } else { $("#SceneException").show(); } }; -$(this).toggle_SceneException(); +$(this).toggleSceneException(); diff --git a/gui/slick/js/new/home.js b/gui/slick/js/new/home.js index f4f09593afcd82f2d4a12aa4495407c5e6b9a8f9..1df0a5edb2e506fc43b6603010f9049499b6a367 100644 --- a/gui/slick/js/new/home.js +++ b/gui/slick/js/new/home.js @@ -8,9 +8,11 @@ $(document).ready(function(){ $('.progressbar').each(function(progressbar){ var showId = $(this).data('show-id'); var percentage = $(this).data('progress-percentage'); - var classToAdd = percentage == 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20; + var classToAdd = percentage === 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20; $(this).progressbar({ value: percentage }); - if($(this).data('progress-text')) $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>'); + if($(this).data('progress-text')) { + $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>'); + } $(this).find('.ui-progressbar-value').addClass('progress-' + classToAdd); }); @@ -53,10 +55,10 @@ $(document).ready(function(){ widgetOptions: (function(){ if(metaToBool('sickbeard.FILTER_ROW')){ return { - filter_columnFilters: true, - filter_hideFilters : true, - filter_saveFilters : true, - filter_functions : { + filter_columnFilters: true, // jshint ignore:line + filter_hideFilters : true, // jshint ignore:line + filter_saveFilters : true, // jshint ignore:line + filter_functions : { // jshint ignore:line 5:function(e, n, f, i, r, c) { var test = false; var pct = Math.floor((n % 1) * 1000); diff --git a/gui/slick/js/new/home_recommendedShows.js b/gui/slick/js/new/home_recommendedShows.js index 31d9535234cca1094d32ef460cc1a5e283250b79..fa82ab85cd0eb6f55b0099621a8f6769ace9978e 100644 --- a/gui/slick/js/new/home_recommendedShows.js +++ b/gui/slick/js/new/home_recommendedShows.js @@ -9,7 +9,7 @@ $(document).ready(function(){ $('#showsortdirection').val('asc'); var $container = [$('#container')]; - $.each($container, function (j) { + $.each($container, function() { this.isotope({ itemSelector: '.trakt_show', sortBy: 'original-order', @@ -52,6 +52,6 @@ $(document).ready(function(){ }); $('#showsortdirection').on( 'change', function() { - $('#container').isotope({sortAscending: ('asc' == this.value)}); + $('#container').isotope({sortAscending: ('asc' === this.value)}); }); }); diff --git a/gui/slick/js/new/home_trendingShows.js b/gui/slick/js/new/home_trendingShows.js index 51e1e49b11cfc7808e4b570e99701e5d8136e566..3f21b696a5f69b6e58891a7def52a1262fb2fa8e 100644 --- a/gui/slick/js/new/home_trendingShows.js +++ b/gui/slick/js/new/home_trendingShows.js @@ -49,6 +49,6 @@ $(document).ready(function(){ }); $('#showsortdirection').on( 'change', function() { - $('#container').isotope({sortAscending: ('asc' == this.value)}); + $('#container').isotope({sortAscending: ('asc' === this.value)}); }); }); diff --git a/gui/slick/js/new/manage.js b/gui/slick/js/new/manage.js index a601c7b5e39c5568204587b188d0166c47e0417f..b8ac98a50fce09876c400f10b515d03bd9cbfc20 100644 --- a/gui/slick/js/new/manage.js +++ b/gui/slick/js/new/manage.js @@ -1,36 +1,2 @@ $(document).ready(function(){ - $("#massUpdateTable:has(tbody tr)").tablesorter({ - sortList: [[1,0]], - textExtraction: { - 2: function(node) { return $(node).find("span").text().toLowerCase(); }, - 3: function(node) { return $(node).find("img").attr("alt"); }, - 4: function(node) { return $(node).find("img").attr("alt"); }, - 5: function(node) { return $(node).find("img").attr("alt"); }, - 6: function(node) { return $(node).find("img").attr("alt"); }, - 7: function(node) { return $(node).find("img").attr("alt"); }, - 8: function(node) { return $(node).find("img").attr("alt"); }, - 9: function(node) { return $(node).find("img").attr("alt"); }, - }, - widgets: ['zebra'], - headers: { - 0: { sorter: false}, - 1: { sorter: 'showNames'}, - 2: { sorter: 'quality'}, - 3: { sorter: 'sports'}, - 4: { sorter: 'scene'}, - 5: { sorter: 'anime'}, - 6: { sorter: 'flatfold'}, - 7: { sorter: 'archive_firstmatch'}, - 8: { sorter: 'paused'}, - 9: { sorter: 'subtitle'}, - 10: { sorter: 'default_ep_status'}, - 11: { sorter: 'status'}, - 12: { sorter: false}, - 13: { sorter: false}, - 14: { sorter: false}, - 15: { sorter: false}, - 16: { sorter: false}, - 17: { sorter: false} - } }); -}); diff --git a/gui/slick/js/new/manage_backlogOverview.js b/gui/slick/js/new/manage_backlogOverview.js index d61b28a48d8b8fe2ce6c9996a5c937c6b44a0f3a..38637c688885a101f0267ee66b3cfe8b4442465d 100644 --- a/gui/slick/js/new/manage_backlogOverview.js +++ b/gui/slick/js/new/manage_backlogOverview.js @@ -1,8 +1,3 @@ $(document).ready(function(){ - $('#pickShow').change(function(){ - var id = $(this).val(); - if (id) { - $('html,body').animate({scrollTop: $('#show-' + id).offset().top -25},'slow'); - } - }); + }); diff --git a/gui/slick/js/new/manage_failedDownloads.js b/gui/slick/js/new/manage_failedDownloads.js index 9186bac811cd71d3f6f9d2f8c803093c9198671d..38637c688885a101f0267ee66b3cfe8b4442465d 100644 --- a/gui/slick/js/new/manage_failedDownloads.js +++ b/gui/slick/js/new/manage_failedDownloads.js @@ -1,11 +1,3 @@ $(document).ready(function(){ - $("#failedTable:has(tbody tr)").tablesorter({ - widgets: ['zebra'], - sortList: [[0,0]], - headers: { 3: { sorter: false } } - }); - $('#limit').change(function(){ - url = srRoot + '/manage/failedDownloads/?limit='+$(this).val(); - window.location.href = url; - }); + }); diff --git a/gui/slick/js/new/manage_massEdit.js b/gui/slick/js/new/manage_massEdit.js index c5406abafaec22c07b604edfe2f726ebcf6525c8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/gui/slick/js/new/manage_massEdit.js +++ b/gui/slick/js/new/manage_massEdit.js @@ -1 +0,0 @@ -$('#location').fileBrowser({ title: 'Select Show Location' }); diff --git a/gui/slick/js/new/parsers.js b/gui/slick/js/new/parsers.js index 5c46465712677c1473ea8facce7d1b579fc6a56c..b7be826ea345a3ba6d6aa7340bdc2e3773a68d2b 100644 --- a/gui/slick/js/new/parsers.js +++ b/gui/slick/js/new/parsers.js @@ -1,6 +1,6 @@ $.tablesorter.addParser({ id: 'loadingNames', - is: function(s) { + is: function() { return false; }, format: function(s) { @@ -14,7 +14,7 @@ $.tablesorter.addParser({ }); $.tablesorter.addParser({ id: 'quality', - is: function(s) { + is: function() { return false; }, format: function(s) { @@ -24,7 +24,7 @@ $.tablesorter.addParser({ }); $.tablesorter.addParser({ id: 'realISODate', - is: function(s) { + is: function() { return false; }, format: function(s) { @@ -35,7 +35,7 @@ $.tablesorter.addParser({ $.tablesorter.addParser({ id: 'cDate', - is: function(s) { + is: function() { return false; }, format: function(s) { @@ -45,27 +45,27 @@ $.tablesorter.addParser({ }); $.tablesorter.addParser({ id: 'eps', - is: function(s) { + is: function() { return false; }, format: function(s) { - match = s.match(/^(.*)/); + var match = s.match(/^(.*)/); - if (match === null || match[1] == "?") return -10; + if (match === null || match[1] === "?") { return -10; } var nums = match[1].split(" / "); - if (nums[0].indexOf("+") != -1) { - var num_parts = nums[0].split("+"); - nums[0] = num_parts[0]; + if (nums[0].indexOf("+") !== -1) { + var numParts = nums[0].split("+"); + nums[0] = numParts[0]; } nums[0] = parseInt(nums[0]); nums[1] = parseInt(nums[1]); - if (nums[0] === 0) return nums[1]; + if (nums[0] === 0) { return nums[1]; } var finalNum = parseInt((getMeta('max_download_count'))*nums[0]/nums[1]); var pct = Math.round((nums[0]/nums[1])*100) / 1000; - if (finalNum > 0) finalNum += nums[0]; + if (finalNum > 0) { finalNum += nums[0]; } return finalNum + pct; }, diff --git a/gui/slick/js/new/recommendedShows.js b/gui/slick/js/new/recommendedShows.js index 17a78a4649dd6b982de8a90f2606e072712dd631..c64be8e6fefc1b65861f506622479ea82be846c6 100644 --- a/gui/slick/js/new/recommendedShows.js +++ b/gui/slick/js/new/recommendedShows.js @@ -1,7 +1,7 @@ $.fn.loadContent = function(path, loadingTxt, errorTxt) { $(this).html('<img id="searchingAnim" src="' + srRoot + '/images/loading32' + themeSpinner + '.gif" height="32" width="32" /> ' + loadingTxt); - $(this).load(srRoot + path + ' #container', function(response, status, xhr) { - if (status == "error") $(this).empty().html(errorTxt); + $(this).load(srRoot + path + ' #container', function(response, status) { + if (status === "error") { $(this).empty().html(errorTxt); } }); }; diff --git a/gui/slick/js/new/trendingShows.js b/gui/slick/js/new/trendingShows.js index b65df539d17e4b370036a55bc452a4f6ac3f976c..b60a5068f35d73347702badca7b94d898713d127 100644 --- a/gui/slick/js/new/trendingShows.js +++ b/gui/slick/js/new/trendingShows.js @@ -4,7 +4,7 @@ $(document).ready(function(){ $('#showsortdirection').val('asc'); var $container = [$('#container')]; - $.each($container, function (j) { + $.each($container, function () { this.isotope({ itemSelector: '.trakt_show', sortBy: 'original-order', diff --git a/gui/slick/js/new/viewlogs.js b/gui/slick/js/new/viewlogs.js index d0ed8eee15b3e348826ea5336e9711271ae2a898..d8437eebf8e11c4cf0a49cb90e64ed9f60777b3d 100644 --- a/gui/slick/js/new/viewlogs.js +++ b/gui/slick/js/new/viewlogs.js @@ -7,7 +7,7 @@ $(document).ready(function(){ $('#minLevel').prop('disabled', true); $('#logFilter').prop('disabled', true); document.body.style.cursor='wait'; - url = srRoot + '/errorlogs/viewlog/?minLevel='+$('select[name=minLevel]').val()+'&logFilter='+$('select[name=logFilter]').val()+'&logSearch='+$('#logSearch').val(); + var url = srRoot + '/errorlogs/viewlog/?minLevel='+$('select[name=minLevel]').val()+'&logFilter='+$('select[name=logFilter]').val()+'&logSearch='+$('#logSearch').val(); $.get(url, function(data){ history.pushState('data', '', url); $('pre').html($(data).find('pre').html()); diff --git a/gui/slick/js/newShow.js b/gui/slick/js/newShow.js index c347253fb5164bc715aac310501c510bc0b0cbfe..65135532dd8651830c42b0f77f6c669234e9a2aa 100644 --- a/gui/slick/js/newShow.js +++ b/gui/slick/js/newShow.js @@ -58,7 +58,7 @@ $(document).ready(function () { resultStr += ' [' + obj[0] + ']'; } - resultStr += '<br />'; + resultStr += '<br>'; }); resultStr += '</ul>'; } diff --git a/gui/slick/js/plotTooltip.js b/gui/slick/js/plotTooltip.js index a29e5f86919457eb1f28cb359196c6145bd1c869..57e7b94cdb52499347df9d811e03d2e5086392d5 100644 --- a/gui/slick/js/plotTooltip.js +++ b/gui/slick/js/plotTooltip.js @@ -1,6 +1,6 @@ $(function () { $('.plotInfo').each(function () { - match = $(this).attr("id").match(/^plot_info_(\d+)_(\d+)_(\d+)$/); + var match = $(this).attr("id").match(/^plot_info_(\d+)_(\d+)_(\d+)$/); $(this).qtip({ content: { text: 'Loading...', @@ -12,7 +12,7 @@ $(function () { episode: match[3], season: match[2] }, - success: function (data, status) { + success: function (data) { this.set('content.text', data); } } diff --git a/gui/slick/js/qualityChooser.js b/gui/slick/js/qualityChooser.js index 8cf90a5d32b6b49c97654756e47f5ebff65333df..7242113d7aa3fdd11db73b9799d63321c9c03571 100644 --- a/gui/slick/js/qualityChooser.js +++ b/gui/slick/js/qualityChooser.js @@ -8,7 +8,7 @@ $(document).ready(function() { } $('#anyQualities option').each(function(i) { - var result = preset & $(this).val(); + var result = preset & $(this).val(); // I have no clue what the & does here if (result > 0) { $(this).attr('selected', 'selected'); } else { @@ -17,7 +17,7 @@ $(document).ready(function() { }); $('#bestQualities option').each(function(i) { - var result = preset & ($(this).val() << 16); + var result = preset & ($(this).val() << 16); // I have no clue what the & does here if (result > 0) { $(this).attr('selected', 'selected'); } else { diff --git a/gui/slick/js/ratingTooltip.js b/gui/slick/js/ratingTooltip.js index 5c106db24cd8f890572524affcd71156af6bbd05..4d9352e960900fb915b72e1087729a0d8caf301f 100644 --- a/gui/slick/js/ratingTooltip.js +++ b/gui/slick/js/ratingTooltip.js @@ -1,7 +1,7 @@ $(function () { $('.imdbstars').qtip({ content: { - text: function(event, api) { + text: function() { // Retrieve content from custom attribute of the $('.selector') elements. return $(this).attr('qtip-content'); } diff --git a/gui/slick/js/restart.js b/gui/slick/js/restart.js index 7e6fd4b7a528cebb424ff599dd5439dd85bb6134..f51c67b86a5d42a140cb015e800b9ba8c32d1df3 100644 --- a/gui/slick/js/restart.js +++ b/gui/slick/js/restart.js @@ -1,39 +1,39 @@ $(document).ready(function() { - window.console_debug = false; - window.console_prefix = 'Restart: '; - window.current_pid = ''; + window.console_debug = false; // jshint ignore:line + window.console_prefix = 'Restart: '; // jshint ignore:line + window.current_pid = ''; // jshint ignore:line - var is_alive_url = srRoot + '/home/is_alive/'; + var isAliveUrl = srRoot + '/home/is_alive/'; - var check_isAlive = setInterval(is_alive, 1000); + var checkIsAlive = setInterval(isAlive, 1000); - function is_alive() { + function isAlive() { // jshint ignore:line // Setup error detection $.ajaxSetup({ - error: ajax_error + error: ajaxError }); - var jqxhr = $.get(is_alive_url, function(data) { - if (data.msg == 'nope') { + var jqxhr = $.get(isAliveUrl, function(data) { + if (data.msg.toLowerCase() === 'nope') { // if it's still initializing then just wait and try again - if (console_debug) { - console.log(console_prefix + 'is_alive: Sickrage is starting.'); + if (console_debug) { // jshint ignore:line + console.log(console_prefix + 'isAlive: Sickrage is starting.'); // jshint ignore:line } $('#shut_down_loading').hide(); $('#shut_down_success').show(); $('#restart_message').show(); } else { // if this is before we've even shut down then just try again later - if (console_debug) { - console.log(console_prefix + 'is_alive: Sickrage is shutdowning.'); + if (console_debug) { // jshint ignore:line + console.log(console_prefix + 'isAlive: Sickrage is shutdowning.'); // jshint ignore:line } - if (current_pid === '' || data.msg == current_pid) { - current_pid = data.msg; + if (current_pid === '' || data.msg == current_pid) { // jshint ignore:line + current_pid = data.msg; // jshint ignore:line // if we're ready to go then redirect to new url } else { - clearInterval(check_isAlive); - if (console_debug) { - console.log(console_prefix + 'is_alive: Setting redirect.'); + clearInterval(checkIsAlive); + if (console_debug) { // jshint ignore:line + console.log(console_prefix + 'isAlive: Setting redirect.'); // jshint ignore:line } $('#restart_loading').hide(); $('#restart_success').show(); @@ -45,20 +45,20 @@ $(document).ready(function() { }, 'jsonp'); jqxhr.fail(function() { - ajax_error(); + ajaxError(); }); } - function ajax_error(x, e) { - if (console_debug) { + function ajaxError(x, e) { + if (console_debug) { // jshint ignore:line if (x.status === 0) { - console.log(console_prefix + 'is_alive: Sickrage is not responding.'); + console.log(console_prefix + 'isAlive: Sickrage is not responding.'); } else if (x.status == 404) { - console.log(console_prefix + 'is_alive: Requested URL not found.'); + console.log(console_prefix + 'isAlive: Requested URL not found.'); } else if (x.status == 500) { - console.log(console_prefix + 'is_alive: Internel Server Error.'); + console.log(console_prefix + 'isAlive: Internel Server Error.'); } else { - console.log(console_prefix + 'is_alive: Unknow Error.\n' + x.responseText); + console.log(console_prefix + 'isAlive: Unknow Error.\n' + x.responseText); } } } diff --git a/gui/slick/js/rootDirs.js b/gui/slick/js/rootDirs.js index d9e0e52dfb5e1aae7123a497fbcddec9cf5c670e..0d1d516cf015afc54d0a3a5d78659f08fa9e5cc9 100644 --- a/gui/slick/js/rootDirs.js +++ b/gui/slick/js/rootDirs.js @@ -22,41 +22,43 @@ }()); $(document).ready(function() { - function addRootDir(path) { - - if (!path.length) + if (!path.length){ return; + } // check if it's the first one - var is_default = false; - if (!$('#whichDefaultRootDir').val().length) - is_default = true; + var isDefault = false; + if (!$('#whichDefaultRootDir').val().length){ + isDefault = true; + } $('#rootDirs').append('<option value="'+path+'">'+path+'</option>'); syncOptionIDs(); - if (is_default) + if (isDefault) { setDefault($('#rootDirs option').attr('id')); + } refreshRootDirs(); $.get(srRoot+'/config/general/saveRootDirs', { rootDirString: $('#rootDirText').val() }); } function editRootDir(path) { - - if (!path.length) + if (!path.length){ return; + } // as long as something is selected if ($("#rootDirs option:selected").length) { // update the selected one with the provided path - if ($("#rootDirs option:selected").attr('id') == $("#whichDefaultRootDir").val()) + if ($("#rootDirs option:selected").attr('id') === $("#whichDefaultRootDir").val()) { $("#rootDirs option:selected").text('*'+path); - else + } else { $("#rootDirs option:selected").text(path); + } $("#rootDirs option:selected").val(path); } @@ -72,8 +74,8 @@ $(document).ready(function() { var toDelete = $("#rootDirs option:selected"); - var newDefault = (toDelete.attr('id') == $("#whichDefaultRootDir").val()); - var deleted_num = $("#rootDirs option:selected").attr('id').substr(3); + var newDefault = (toDelete.attr('id') === $("#whichDefaultRootDir").val()); + var deletedNum = $("#rootDirs option:selected").attr('id').substr(3); toDelete.remove(); syncOptionIDs(); @@ -86,12 +88,15 @@ $(document).ready(function() { $("#whichDefaultRootDir").val(''); // if we're deleting the default and there are options left then pick a new default - if ($("#rootDirs option").length) + if ($("#rootDirs option").length) { setDefault($('#rootDirs option').attr('id')); + } } else if ($("#whichDefaultRootDir").val().length) { - var old_default_num = $("#whichDefaultRootDir").val().substr(3); - if (old_default_num > deleted_num) $("#whichDefaultRootDir").val('rd-'+(old_default_num-1)); + var oldDefaultNum = $("#whichDefaultRootDir").val().substr(3); + if (oldDefaultNum > deletedNum) { + $("#whichDefaultRootDir").val('rd-'+(oldDefaultNum-1)); + } } } @@ -100,8 +105,9 @@ $(document).ready(function() { }); $('#defaultRootDir').click(function(){ - if ($("#rootDirs option:selected").length) + if ($("#rootDirs option:selected").length) { setDefault($("#rootDirs option:selected").attr('id')); + } refreshRootDirs(); $.get(srRoot+'/config/general/saveRootDirs', {rootDirString: $('#rootDirText').val()}); }); @@ -109,17 +115,17 @@ $(document).ready(function() { function setDefault(which, force){ console.log('setting default to '+which); - if (which !== undefined && !which.length) return; + if (which !== undefined && !which.length) { return; } - if ($('#whichDefaultRootDir').val() == which && force !== true) return; + if ($('#whichDefaultRootDir').val() === which && force !== true) { return; } // put an asterisk on the text - if ($('#'+which).text().charAt(0) != '*') $('#'+which).text('*'+$('#'+which).text()); + if ($('#'+which).text().charAt(0) !== '*') { $('#'+which).text('*'+$('#'+which).text()); } // if there's an existing one then take the asterisk off if ($('#whichDefaultRootDir').val() && force !== true) { - var old_default = $('#'+$('#whichDefaultRootDir').val()); - old_default.text(old_default.text().substring(1)); + var oldDefault = $('#'+$('#whichDefaultRootDir').val()); + oldDefault.text(oldDefault.text().substring(1)); } $('#whichDefaultRootDir').val(which); @@ -135,39 +141,43 @@ $(document).ready(function() { function refreshRootDirs() { - if (!$("#rootDirs").length) return; + if (!$("#rootDirs").length) { return; } - var do_disable = 'true'; + var doDisable = 'true'; // re-sync option ids syncOptionIDs(); // if nothing's selected then select the default - if (!$("#rootDirs option:selected").length && $('#whichDefaultRootDir').val().length) $('#'+$('#whichDefaultRootDir').val()).prop("selected", true); + if (!$("#rootDirs option:selected").length && $('#whichDefaultRootDir').val().length) { + $('#'+$('#whichDefaultRootDir').val()).prop("selected", true); + } // if something's selected then we have some behavior to figure out if ($("#rootDirs option:selected").length) { - do_disable = ''; + doDisable = ''; } // update the elements - $('#deleteRootDir').prop('disabled', do_disable); - $('#defaultRootDir').prop('disabled', do_disable); - $('#editRootDir').prop('disabled', do_disable); + $('#deleteRootDir').prop('disabled', doDisable); + $('#defaultRootDir').prop('disabled', doDisable); + $('#editRootDir').prop('disabled', doDisable); - var log_str = ''; - var dir_text = ''; + var logString = ''; + var dirString = ''; if ($('#whichDefaultRootDir').val().length >= 4){ - dir_text = $('#whichDefaultRootDir').val().substr(3); + dirString = $('#whichDefaultRootDir').val().substr(3); } $('#rootDirs option').each(function() { - log_str += $(this).val()+'='+$(this).text()+'->'+$(this).attr('id')+'\n'; - if (dir_text.length) dir_text += '|' + $(this).val(); + logString += $(this).val()+'='+$(this).text()+'->'+$(this).attr('id')+'\n'; + if (dirString.length) { + dirString += '|' + $(this).val(); + } }); - log_str += 'def: '+ $('#whichDefaultRootDir').val(); - console.log(log_str); + logString += 'def: '+ $('#whichDefaultRootDir').val(); + console.log(logString); - $('#rootDirText').val(dir_text); + $('#rootDirText').val(dirString); $('#rootDirText').change(); console.log('rootDirText: '+$('#rootDirText').val()); } diff --git a/gui/slick/js/sceneExceptionsTooltip.js b/gui/slick/js/sceneExceptionsTooltip.js index 2be78993531d180af40997ac31bed8ba14c4a27d..face3cdd58f20aad25d9b01fdb5053bd29b56560 100644 --- a/gui/slick/js/sceneExceptionsTooltip.js +++ b/gui/slick/js/sceneExceptionsTooltip.js @@ -1,6 +1,6 @@ $(function () { $('.title a').each(function () { - match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/); + var match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/); $(this).qtip({ content: { text: 'Loading...', @@ -10,7 +10,7 @@ $(function () { data: { show: match[1] }, - success: function (data, status) { + success: function (data) { this.set('content.text', data); } } diff --git a/gui/slick/js/testRename.js b/gui/slick/js/testRename.js index b0972122ab2171de2a82d2138a5e4b5006e78745..6b7cb5e3578f15e733a1685af7df24e0083a2b71 100644 --- a/gui/slick/js/testRename.js +++ b/gui/slick/js/testRename.js @@ -18,7 +18,7 @@ $(document).ready(function(){ $('.epCheck:visible').each(function(){ var epParts = $(this).attr('id').split('x'); - if (epParts[0] == seasNo) { + if (epParts[0] === seasNo) { this.checked = seasCheck.checked; } }); @@ -33,10 +33,9 @@ $(document).ready(function(){ } }); - if (epArr.length === 0) return false; + if (epArr.length === 0) { return false; } - url = srRoot+'/home/doRename?show='+$('#showID').attr('value')+'&eps='+epArr.join('|'); - window.location.href = url; + window.location.href = srRoot+'/home/doRename?show='+$('#showID').attr('value')+'&eps='+epArr.join('|'); }); }); diff --git a/gui/slick/js/vender.min.js b/gui/slick/js/vender.min.js new file mode 100644 index 0000000000000000000000000000000000000000..183aaff7e388bfb2a7c84d7927c2a2dd9d0f255f Binary files /dev/null and b/gui/slick/js/vender.min.js differ diff --git a/gui/slick/views/apiBuilder.mako b/gui/slick/views/apiBuilder.mako index af0526ff34e1b447dda8fad9a1cf3a2877dc7909..9e9f88e8769d8881cf252c8e5ee51069a3eef30d 100644 --- a/gui/slick/views/apiBuilder.mako +++ b/gui/slick/views/apiBuilder.mako @@ -149,22 +149,22 @@ <h4>Playground</h4> - URL: <kbd id="command-${command_id}-base-url">/api/${apikey}/?cmd=${command}</kbd><br /> + URL: <kbd id="command-${command_id}-base-url">/api/${apikey}/?cmd=${command}</kbd><br> % if help['data']['requiredParameters']: - Required parameters: ${display_parameters_playground(help['data']['requiredParameters'], True, command_id)}<br /> + Required parameters: ${display_parameters_playground(help['data']['requiredParameters'], True, command_id)}<br> % endif % if help['data']['optionalParameters']: - Optional parameters: ${display_parameters_playground(help['data']['optionalParameters'], False, command_id)}<br /> + Optional parameters: ${display_parameters_playground(help['data']['optionalParameters'], False, command_id)}<br> % endif - <button class="btn btn-primary" data-action="api-call" data-command-name="${command_id}" data-base-url="command-${command_id}-base-url" data-target="#command-${command_id}-response" data-time="#command-${command_id}-time" data-url="#command-${command_id}-url">Call API</button><br /> + <button class="btn btn-primary" data-action="api-call" data-command-name="${command_id}" data-base-url="command-${command_id}-base-url" data-target="#command-${command_id}-response" data-time="#command-${command_id}-time" data-url="#command-${command_id}-url">Call API</button><br> <div class="result-wrapper hidden"> <div class="clearfix"> <span class="pull-left"> - Response: <strong id="command-${command_id}-time"></strong><br /> + Response: <strong id="command-${command_id}-time"></strong><br> URL: <kbd id="command-${command_id}-url"></kbd> </span> <span class="pull-right"> diff --git a/gui/slick/views/config.mako b/gui/slick/views/config.mako index e8bea4c4ac91d14ef3a92b0b74b2539e68de2f23..cc0aee2b52f75a3a0658511ebf773fc67bdc6e4d 100644 --- a/gui/slick/views/config.mako +++ b/gui/slick/views/config.mako @@ -27,9 +27,9 @@ <table class="infoTable" cellspacing="1" border="0" cellpadding="0" width="100%"> <tr><td class="infoTableHeader">SR Version: </td><td class="infoTableCell"> % if sickbeard.VERSION_NOTIFY: - BRANCH: (${sickbeard.BRANCH}) / COMMIT: (${sickbeard.CUR_COMMIT_HASH}) <!-- – build.date //--><br /> + BRANCH: (${sickbeard.BRANCH}) / COMMIT: (${sickbeard.CUR_COMMIT_HASH}) <!-- – build.date //--><br> % else: - You don't have version checking turned on. Please turn on "Check for Update" in Config > General.<br /> + You don't have version checking turned on. Please turn on "Check for Update" in Config > General.<br> % endif </td></tr> diff --git a/gui/slick/views/config_anime.mako b/gui/slick/views/config_anime.mako index 172fd34b3ee6c14325eff3596cf38d8e58c7cb4c..d006a14999b465671f1074ce49a58253d13848f2 100644 --- a/gui/slick/views/config_anime.mako +++ b/gui/slick/views/config_anime.mako @@ -3,11 +3,6 @@ import sickbeard from sickbeard.helpers import anon_url %> - -<%block name="scripts"> -<script type="text/javascript" src="${srRoot}/js/configAnime.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script> -</%block> <%block name="content"> <div id="content960"> <h1 class="header">${header}</h1> @@ -91,7 +86,7 @@ </fieldset> </div><!-- /component-group //--> - <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br> </div><!-- /config-components //--> diff --git a/gui/slick/views/config_backuprestore.mako b/gui/slick/views/config_backuprestore.mako index 51293caf1ab33a839a27d10255c9ebb49b76ec9c..1e2365b9d2265e8de0692d42d4963827887ed93c 100644 --- a/gui/slick/views/config_backuprestore.mako +++ b/gui/slick/views/config_backuprestore.mako @@ -45,12 +45,12 @@ <div class="field-pair"> Select the folder you wish to save your backup file to: - <br/><br/> + <br><br> <input type="text" name="backupDir" id="backupDir" class="form-control input-sm input350" /> <input class="btn btn-inline" type="button" value="Backup" id="Backup" /> - <br/> + <br> </div> <div class="Backup" id="Backup-result"></div> @@ -68,12 +68,12 @@ <div class="field-pair"> Select the backup file you wish to restore: - <br/><br/> + <br><br> <input type="text" name="backupFile" id="backupFile" class="form-control input-sm input350" /> <input class="btn btn-inline" type="button" value="Restore" id="Restore" /> - <br/> + <br> </div> <div class="Restore" id="Restore-result"></div> diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako index 7a5b492446a74d65297035addf6b9d99254eda65..0d74ea107e9cfd7cec3aaa5c07175684e1ce04b0 100644 --- a/gui/slick/views/config_general.mako +++ b/gui/slick/views/config_general.mako @@ -12,10 +12,7 @@ from sickbeard.helpers import anon_url %> <%block name="scripts"> -<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/new/config_general.js"></script> </%block> <%block name="content"> % if not header is UNDEFINED: @@ -491,7 +488,7 @@ <span class="component-title">Reverse proxy headers</span> <span class="component-desc"> <input type="checkbox" name="handle_reverse_proxy" id="handle_reverse_proxy" ${('', 'checked="checked"')[bool(sickbeard.HANDLE_REVERSE_PROXY)]}/> - <p>accept the following reverse proxy headers (advanced)...<br />(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p> + <p>accept the following reverse proxy headers (advanced)...<br>(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p> </span> </label> </div> @@ -773,7 +770,7 @@ </div><!-- /component-group3 //--> - <br/> + <br> <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6> <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" /> diff --git a/gui/slick/views/config_notifications.mako b/gui/slick/views/config_notifications.mako index c2771c1a975210b701381bc5b86faa38ff312f03..769cdacd311d244719cb03096d1802c9fd639bb8 100644 --- a/gui/slick/views/config_notifications.mako +++ b/gui/slick/views/config_notifications.mako @@ -6,12 +6,6 @@ from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED from sickbeard.common import Quality, qualityPresets, statusStrings, qualityPresetStrings, cpu_presets, multiEpStrings %> - -<%block name="scripts"> -<script type="text/javascript" src="${srRoot}/js/configNotifications.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/new/config_notifications.js"></script> -</%block> <%block name="content"> % if not header is UNDEFINED: <h1 class="header">${header}</h1> @@ -227,7 +221,7 @@ <span class="component-desc"> <input type="text" name="plex_server_host" id="plex_server_host" value="${re.sub(r'\b,\b', ', ', sickbeard.PLEX_SERVER_HOST)}" class="form-control input-sm input350" /> <div class="clear-left"> - <p>one or more hosts running Plex Media Server<br />(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p> + <p>one or more hosts running Plex Media Server<br>(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p> </div> </span> </label> @@ -295,7 +289,7 @@ <span class="component-desc"> <input type="text" name="plex_host" id="plex_host" value="${sickbeard.PLEX_HOST}" class="form-control input-sm input350" /> <div class="clear-left"> - <p>one or more hosts running Plex client<br />(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p> + <p>one or more hosts running Plex client<br>(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p> </div> </span> </label> @@ -1495,7 +1489,7 @@ <span class="component-title">Step One</span> </label> <label> - <span style="font-size: 11px;">Click the "Request Authorization" button.<br/> This will open a new page containing an auth key.<br/> <b>Note:</b> if nothing happens check your popup blocker.<br/></span> + <span style="font-size: 11px;">Click the "Request Authorization" button.<br> This will open a new page containing an auth key.<br> <b>Note:</b> if nothing happens check your popup blocker.<br></span> <input class="btn" type="button" value="Request Authorization" id="twitterStep1" /> </label> </div> @@ -1504,7 +1498,7 @@ <span class="component-title">Step Two</span> </label> <label> - <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br/><br/></span> + <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br><br></span> <input type="text" id="twitter_key" value="" class="form-control input-sm input350" /> <input class="btn btn-inline" type="button" value="Verify Key" id="twitterStep2" /> </label> @@ -1831,7 +1825,7 @@ </div><!-- /config-components //--> </form> - <br/><input type="submit" class="config_submitter btn" value="Save Changes" /><br/> + <br><input type="submit" class="config_submitter btn" value="Save Changes" /><br> </div> </div> diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako index d67ebd2ab0c428a692f7c39c4eb1ec30e85d9b42..e669c11d0322f803dc874eca2a795b1f70222261 100644 --- a/gui/slick/views/config_postProcessing.mako +++ b/gui/slick/views/config_postProcessing.mako @@ -9,12 +9,6 @@ from sickbeard.metadata.generic import GenericMetadata from sickbeard import naming %> - -<%block name="scripts"> -<script type="text/javascript" src="${srRoot}/js/configPostProcessing.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/new/home.js"></script> -</%block> <%block name="content"> <div id="content960"> % if not header is UNDEFINED: @@ -23,10 +17,8 @@ <h1 class="title">${title}</h1> % endif <div id="config"> -<div id="config-content"> - -<form id="configForm" action="savePostProcessing" method="post"> - + <div id="config-content"> + <form id="configForm" action="savePostProcessing" method="post"> <div id="config-components"> <ul> <li><a href="#core-component-group1">Post-Processing</a></li> @@ -47,7 +39,7 @@ </label> <label class="nocheck" for="process_automatically"> <span class="component-title"> </span> - <span class="component-desc"><b>NOTE:</b> Do not use if you use an external PostProcesing script</span> + <span class="component-desc"><b>NOTE:</b> Do not use if you use an external PostProcessing script</span> </label> </div> <div class="field-pair"> @@ -236,7 +228,7 @@ <span class="component-desc">See <a href="https://github.com/SickRage/sickrage-issues/wiki/Post-Processing#extra-scripts"><font color='red'><b>Wiki</b></font></a> for script arguments description and usage.</span> </label> </div> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group1 //--> <div id="core-component-group2" class="component-group"> @@ -247,7 +239,6 @@ </div> <fieldset class="component-group-list"> - <div class="field-pair"> <label class="nocheck" for="name_presets"> <span class="component-title">Name Pattern:</span> @@ -280,7 +271,7 @@ </label> <label class="nocheck"> <span class="component-title"> </span> - <span class="component-desc"><b>NOTE:</b> Don't forget to add quality pattern. Otherwise after post-procesing the episode will have UNKNOWN quality</span> + <span class="component-desc"><b>NOTE:</b> Don't forget to add quality pattern. Otherwise after post-processing the episode will have UNKNOWN quality</span> </label> </div> @@ -416,7 +407,7 @@ </tr> </tbody> </table> - <br/> + <br> </div> </div> @@ -438,7 +429,7 @@ <div class="example"> <span class="jumbo" id="naming_example"> </span> </div> - <br/> + <br> </div> <div id="naming_example_multi_div"> @@ -446,7 +437,7 @@ <div class="example"> <span class="jumbo" id="naming_example_multi"> </span> </div> - <br/> + <br> </div> <div class="field-pair"> @@ -624,7 +615,7 @@ </tr> </tbody> </table> - <br/> + <br> </div> </div><!-- /naming_abd_custom --> @@ -633,7 +624,7 @@ <div class="example"> <span class="jumbo" id="naming_abd_example"> </span> </div> - <br/> + <br> </div> </div><!-- /naming_abd_different --> @@ -801,7 +792,7 @@ </tr> </tbody> </table> - <br/> + <br> </div> </div><!-- /naming_sports_custom --> @@ -810,7 +801,7 @@ <div class="example"> <span class="jumbo" id="naming_sports_example"> </span> </div> - <br/> + <br> </div> </div><!-- /naming_sports_different --> @@ -974,7 +965,7 @@ </tr> </tbody> </table> - <br/> + <br> </div> </div><!-- /naming_anime_custom --> @@ -996,7 +987,7 @@ <div class="example"> <span class="jumbo" id="naming_example_anime"> </span> </div> - <br/> + <br> </div> <div id="naming_example_multi_anime_div"> @@ -1004,7 +995,7 @@ <div class="example"> <span class="jumbo" id="naming_example_multi_anime"> </span> </div> - <br/> + <br> </div> <div class="field-pair"> @@ -1046,7 +1037,7 @@ </div><!-- /naming_anime_different --> <div></div> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group2 //--> @@ -1112,19 +1103,17 @@ </div> % endfor - <div class="clearfix"></div><br/> + <div class="clearfix"></div><br> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group3 //--> - <br/> + <br> <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6> <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" /> - </form> </div> </div> - <div class="clearfix"></div> </%block> diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako index 6836522a734992c953e81462ed9b1ae555ed0333..a8259e69cfbe3e37b47aef928718fa30770e9817 100644 --- a/gui/slick/views/config_providers.mako +++ b/gui/slick/views/config_providers.mako @@ -4,11 +4,9 @@ from sickbeard.providers.generic import GenericProvider from sickbeard.providers import thepiratebay from sickbeard.helpers import anon_url - %> <%block name="scripts"> -<script type="text/javascript" src="${srRoot}/js/configProviders.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script> +<script type="text/javascript" src="/js/ConfigProviders.js"></script> <script type="text/javascript"> $(document).ready(function(){ % if sickbeard.USE_NZBS: @@ -59,7 +57,7 @@ $('#config-components').tabs(); % if not sickbeard.USE_NZBS or not sickbeard.USE_TORRENTS: <blockquote style="margin: 20px 0;">NZB/Torrent providers can be toggled in <b><a href="${srRoot}/config/search">Search Settings</a></b></blockquote> % else: - <br/> + <br> % endif <div> @@ -90,7 +88,7 @@ $('#config-components').tabs(); % endfor </ul> <input type="hidden" name="provider_order" id="provider_order" value="${" ".join([x.getID()+':'+str(int(x.isEnabled())) for x in sickbeard.providers.sortedProviderList()])}"/> - <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group1 //--> @@ -482,33 +480,6 @@ $('#config-components').tabs(); </div> % endif - % if hasattr(curTorrentProvider, 'proxy'): - <div class="field-pair"> - <label for="${curTorrentProvider.getID()}_proxy"> - <span class="component-title">Access provider via proxy</span> - <span class="component-desc"> - <input type="checkbox" class="enabler" name="${curTorrentProvider.getID()}_proxy" id="${curTorrentProvider.getID()}_proxy" ${('', 'checked="checked"')[bool(curTorrentProvider.proxy.enabled)]}/> - <p>to bypass country blocking mechanisms</p> - </span> - </label> - </div> - - % if hasattr(curTorrentProvider.proxy, 'url'): - <div class="field-pair content_${curTorrentProvider.getID()}_proxy" id="content_${curTorrentProvider.getID()}_proxy"> - <label for="${curTorrentProvider.getID()}_proxy_url"> - <span class="component-title">Proxy URL:</span> - <span class="component-desc"> - <select name="${curTorrentProvider.getID()}_proxy_url" id="${curTorrentProvider.getID()}_proxy_url" class="form-control input-sm"> - % for i in curTorrentProvider.proxy.urls.keys(): - <option value="${curTorrentProvider.proxy.urls[i]}" ${('', 'selected="selected"')[curTorrentProvider.proxy.urls[i] == curTorrentProvider.proxy.url]}>${i}</option> - % endfor - </select> - </span> - </label> - </div> - % endif - % endif - % if hasattr(curTorrentProvider, 'freeleech'): <div class="field-pair"> <label for="${curTorrentProvider.getID()}_freeleech"> @@ -613,7 +584,7 @@ $('#config-components').tabs(); <!-- end div for editing providers --> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group2 //--> @@ -622,7 +593,7 @@ $('#config-components').tabs(); <div id="core-component-group3" class="component-group"> <div class="component-group-desc"> - <h3>Configure Custom<br />Newznab Providers</h3> + <h3>Configure Custom<br>Newznab Providers</h3> <p>Add and setup or remove custom Newznab providers.</p> </div> @@ -759,7 +730,7 @@ $('#config-components').tabs(); </div><!-- /component-group4 //--> % endif - <br/><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br/> + <br><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br> </div><!-- /config-components //--> diff --git a/gui/slick/views/config_search.mako b/gui/slick/views/config_search.mako index 1733d42c81e23456c47395aaa318c19d476e852b..3560645ce19e606e6dbd6259173fd474ccd0e395 100644 --- a/gui/slick/views/config_search.mako +++ b/gui/slick/views/config_search.mako @@ -105,7 +105,7 @@ <span class="component-title">Ignore words</span> <span class="component-desc"> <input type="text" name="ignore_words" value="${sickbeard.IGNORE_WORDS}" class="form-control input-sm input350" /> - <div class="clear-left">results with one or more word from this list will be ignored<br /> + <div class="clear-left">results with one or more word from this list will be ignored<br> separate words with a comma, e.g. "word1,word2,word3" </div> </span> @@ -117,7 +117,7 @@ <span class="component-title">Require words</span> <span class="component-desc"> <input type="text" name="require_words" value="${sickbeard.REQUIRE_WORDS}" class="form-control input-sm input350" /> - <div class="clear-left">results with no word from this list will be ignored<br /> + <div class="clear-left">results with no word from this list will be ignored<br> separate words with a comma, e.g. "word1,word2,word3" </div> </span> @@ -129,8 +129,8 @@ <span class="component-title">Ignore language names in subbed results</span> <span class="component-desc"> <input type="text" name="ignored_subs_list" value="${sickbeard.IGNORED_SUBS_LIST}" class="form-control input-sm input350" /> - <div class="clear-left">Ignore subbed releases based on language names <br /> - Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br /> + <div class="clear-left">Ignore subbed releases based on language names <br> + Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br> separate languages with a comma, e.g. "lang1,lang2,lang3 </div> </span> @@ -420,7 +420,7 @@ <div class="testNotification" id="testSABnzbd_result">Click below to test</div> <input class="btn" type="button" value="Test SABnzbd" id="testSABnzbd" class="btn test-button"/> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </div><!-- /content_use_nzbs //--> @@ -453,8 +453,8 @@ <span class="component-title">Send .torrent files to:</span> <span class="component-desc"> <select name="torrent_method" id="torrent_method" class="form-control input-sm"> -<% torrent_method_text = {'blackhole': "Black hole", 'utorrent': "uTorrent", 'transmission': "Transmission", 'deluge': "Deluge (via WebUI)", 'deluged': "Deluge (via Daemon)", 'download_station': "Synology DS", 'rtorrent': "rTorrent", 'qbittorrent': "qbittorrent"} %> -% for curAction in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent'): +<% torrent_method_text = {'blackhole': "Black hole", 'utorrent': "uTorrent", 'transmission': "Transmission", 'deluge': "Deluge (via WebUI)", 'deluged': "Deluge (via Daemon)", 'download_station': "Synology DS", 'rtorrent': "rTorrent", 'qbittorrent': "qbittorrent", 'mlnet': "MLDonkey"} %> +% for curAction in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'): <option value="${curAction}" ${('', 'selected="selected"')[sickbeard.TORRENT_METHOD == curAction]}>${torrent_method_text[curAction]}</option> % endfor </select> @@ -472,7 +472,7 @@ </div> <div></div> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </div> </div> @@ -613,13 +613,13 @@ <div class="testNotification" id="test_torrent_result">Click below to test</div> <input class="btn" type="button" value="Test Connection" id="test_torrent" class="btn test-button"/> - <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <input type="submit" class="btn config_submitter" value="Save Changes" /><br> </div> </div><!-- /content_use_torrents //--> </fieldset> </div><!-- /component-group3 //--> - <br/> + <br> <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6> <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" /> diff --git a/gui/slick/views/config_subtitles.mako b/gui/slick/views/config_subtitles.mako index 4d99b8c9a6743abee8c762472e0dbdd84f92fa0d..08281ee0c1cbf0d2471bd41733d28d34c82d34ea 100644 --- a/gui/slick/views/config_subtitles.mako +++ b/gui/slick/views/config_subtitles.mako @@ -146,7 +146,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' } </label> </div> - <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br> </div> </fieldset> </div><!-- /component-group1 //--> @@ -175,7 +175,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' } </ul> <input type="hidden" name="service_order" id="service_order" value="<%" ".join(['%s:%d' % (x['name'], x['enabled']) for x in sickbeard.subtitles.sortedServiceList()])%>"/> - <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group2 //--> <div id="core-component-group3" class="component-group"> @@ -211,7 +211,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' } </label> </div> % endfor - <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/> + <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br> </fieldset> </div><!-- /component-group3 //--> </div><!-- /config-components //--> diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako index 6e239e5217dbe6de28027c664a576d130dd2b18b..44f17cb44c6297167110ced14810cb98fc0fe35d 100644 --- a/gui/slick/views/displayShow.mako +++ b/gui/slick/views/displayShow.mako @@ -7,20 +7,18 @@ from sickbeard import subtitles, sbdatetime, network_timezones import sickbeard.helpers - from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED + from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, FAILED from sickbeard.common import Quality, qualityPresets, statusStrings, Overview - from sickbeard.helpers import anon_url %> <%block name="scripts"> <script type="text/javascript" src="${srRoot}/js/lib/jquery.bookmarkscroll.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/displayShow.js?${sbPID}"></script> +<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script> <script type="text/javascript" src="${srRoot}/js/plotTooltip.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/sceneExceptionsTooltip.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/ratingTooltip.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/ajaxEpSearch.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/ajaxEpSubtitles.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script> </%block> <%block name="content"> <%namespace file="/inc_defs.mako" import="renderQualityPill"/> @@ -162,7 +160,7 @@ ${renderQualityPill(show.quality)} % else: % if anyQualities: - <i>Allowed:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(anyQualities)])}${("", "</br>")[bool(bestQualities)]} + <i>Allowed:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(anyQualities)])}${("", "<br>")[bool(bestQualities)]} % endif % if bestQualities: <i>Preferred:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(bestQualities)])} @@ -251,11 +249,11 @@ <div class="pull-right clearfix" id="checkboxControls"> <div style="padding-bottom: 5px;"> - <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted"checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label> - <label for="qual"><span class="qual"><input type="checkbox" id="qual"checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label> - <label for="good"><span class="good"><input type="checkbox" id="good"checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label> - <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped"checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label> - <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched"checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label> + <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted" checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label> + <label for="qual"><span class="qual"><input type="checkbox" id="qual" checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label> + <label for="good"><span class="good"><input type="checkbox" id="good" checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label> + <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped" checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label> + <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched" checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label> </div> <button id="popover" type="button" class="btn btn-xs">Select Columns <b class="caret"></b></button> @@ -481,7 +479,7 @@ ## Lets do this exactly like ComingEpisodes and History ## Avoid issues with dateutil's _isdst on Windows but still provide air dates <% airDate = datetime.datetime.fromordinal(epResult['airdate']) %> - % if airDate.year >= 1970 or show.network: + % if airDate.year >= 1970 or show.network: <% airDate = sbdatetime.sbdatetime.convert_to_setting(network_timezones.parse_date_time(epResult['airdate'], show.airs, show.network)) %> % endif <time datetime="${airDate.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(airDate)}</time> diff --git a/gui/slick/views/editShow.mako b/gui/slick/views/editShow.mako index d8e9cc47b7809329748f96756325ba5d53dff2fb..ebde82a8ab5777c24a9b8ffe1a6d916a1ce25900 100644 --- a/gui/slick/views/editShow.mako +++ b/gui/slick/views/editShow.mako @@ -15,7 +15,6 @@ <%block name="scripts"> <script type="text/javascript" src="${srRoot}/js/qualityChooser.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/new/editShow.js"></script> % if show.is_anime: <script type="text/javascript" src="${srRoot}/js/blackwhite.js?${sbPID}"></script> @@ -45,7 +44,7 @@ <div class="component-group"> <h3>Main Settings</h3> <fieldset class="component-group-list"> - + <div class="field-pair"> <label for="location"> <span class="component-title">Show Location</span> @@ -134,7 +133,7 @@ <label for="airbydate"> <span class="component-title">Air by date</span> <span class="component-desc"> - <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br /> + <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br> <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span> </span> </label> @@ -144,7 +143,7 @@ <label for="anime"> <span class="component-title">Anime</span> <span class="component-desc"> - <input type="checkbox" id="anime" name="anime" ${('', 'checked="checked"')[show.is_anime == 1]}> check if the show is Anime and episodes are released as Show.265 rather than Show.S02E03<br /> + <input type="checkbox" id="anime" name="anime" ${('', 'checked="checked"')[show.is_anime == 1]}> check if the show is Anime and episodes are released as Show.265 rather than Show.S02E03<br> % if show.is_anime: <%include file="/inc_blackwhitelist.mako"/> % endif @@ -156,7 +155,7 @@ <label for="sports"> <span class="component-title">Sports</span> <span class="component-desc"> - <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br /> + <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br> <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span> </span> </label> @@ -184,7 +183,7 @@ <label for="dvdorder"> <span class="component-title">DVD Order</span> <span class="component-desc"> - <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br /> + <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br> <div class="clear-left"><p>A "Force Full Update" is necessary, and if you have existing episodes you need to sort them manually.</p></div> </span> </label> @@ -203,7 +202,7 @@ <label for="rls_ignore_words"> <span class="component-title">Ignored Words</span> <span class="component-desc"> - <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br /> + <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br> <div class="clear-left"> <p>comma-separated <i>e.g. "word1,word2,word3"</i></> <p>Search results with one or more words from this list will be ignored.</p> @@ -216,7 +215,7 @@ <label for="rls_require_words"> <span class="component-title">Required Words</span> <span class="component-desc"> - <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br /> + <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br> <div class="clear-left"> <p>comma-separated <i>e.g. "word1,word2,word3"</i></p> <p>Search results with no words from this list will be ignored.</p> @@ -229,7 +228,7 @@ <label for="SceneName"> <span class="component-title">Scene Exception</span> <span class="component-desc"> - <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br /><br /> + <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br><br> <div class="pull-left"> <select id="exceptions_list" name="exceptions_list" multiple="multiple" style="min-width:200px;height:99px;"> % for cur_exception in show.exceptions: @@ -246,10 +245,10 @@ </fieldset> </div> </div> - + </div> - <br /> + <br> <input id="submit" type="submit" value="Save Changes" class="btn pull-left config_submitter button"> </form> </div> diff --git a/gui/slick/views/history.mako b/gui/slick/views/history.mako index 495e8968e6a1d337aa3b4edafdb1fe21a1128448..ce5a5b5dd8771a74fbdc831b807abf0dc47107df 100644 --- a/gui/slick/views/history.mako +++ b/gui/slick/views/history.mako @@ -14,9 +14,6 @@ from sickbeard.common import Quality, statusStrings, Overview from sickrage.show.History import History - - layout = sickbeard.HISTORY_LAYOUT - history_limit = sickbeard.HISTORY_LIMIT %> <%block name="scripts"> <script type="text/javascript" src="${srRoot}/js/new/history.js"></script> @@ -50,7 +47,7 @@ </div> <br> -% if layout == "detailed": +% if sickbeard.HISTORY_LAYOUT == "detailed": <table id="historyTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0"> <thead> <tr> diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako index 33b95391c2e2289495a8084d16eb40d68a438735..b386eaa955d0b5fab52ce625270da3c30ec2a2c4 100644 --- a/gui/slick/views/home.mako +++ b/gui/slick/views/home.mako @@ -2,10 +2,8 @@ <%! import sickbeard import calendar - from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED - from sickbeard.common import Quality, qualityPresets, qualityPresetStrings - from sickbeard import db, sbdatetime, network_timezones - import datetime + from sickbeard import sbdatetime + from sickbeard import network_timezones import re %> <%block name="metas"> @@ -404,7 +402,7 @@ <% display_status = curShow.status if None is not display_status: - if re.search('(?i)(?:new|returning)\s*series', curShow.status): + if re.search(r'(?i)(?:new|returning)\s*series', curShow.status): display_status = 'Continuing' elif re.search('(?i)(?:nded)', curShow.status): display_status = 'Ended' diff --git a/gui/slick/views/home_addExistingShow.mako b/gui/slick/views/home_addExistingShow.mako index 3e029e48659fdf575bd963712fc2c4a0b528b295..c4f59585b206e193b59fc80eec271abe521efaf9 100644 --- a/gui/slick/views/home_addExistingShow.mako +++ b/gui/slick/views/home_addExistingShow.mako @@ -36,7 +36,7 @@ <%include file="/inc_addShowOptions.mako"/> </div> </div> - <br /> + <br> <p>SickRage can add existing shows, using the current options, by using locally stored NFO/XML metadata to eliminate user interaction. If you would rather have SickRage prompt you to customize each show, then use the checkbox below.</p> @@ -48,10 +48,10 @@ <p><b>Displaying folders within these directories which aren't already added to SickRage:</b></p> <ul id="rootDirStaticList"><li></li></ul> - <br /> + <br> <div id="tableDiv"></div> - <br /> - <br /> + <br> + <br> <input class="btn btn-primary" type="button" value="Submit" id="submitShowDirs" /> </form> diff --git a/gui/slick/views/home_addShows.mako b/gui/slick/views/home_addShows.mako index c06e1e2b4316674af9272148f64edb6a7eb96d1c..16da9f75c1dac61cf22c99dbb32ae7c387ede771 100644 --- a/gui/slick/views/home_addShows.mako +++ b/gui/slick/views/home_addShows.mako @@ -20,7 +20,7 @@ </div> </a> - <br/><br/> + <br><br> % if sickbeard.USE_TRAKT == True: <a href="${srRoot}/home/addShows/trendingShows/" id="btnNewShow" class="btn btn-large"> <div class="button"><div class="icon-addtrendingshow"></div></div> @@ -30,7 +30,7 @@ </div> </a> - <br/><br/> + <br><br> <a href="${srRoot}/home/addShows/recommendedShows/" id="btnNewShow" class="btn btn-large"> <div class="button"><div class="icon-addrecommendedshow"></div></div> @@ -40,7 +40,7 @@ </div> </a> - <br/><br/> + <br><br> % endif <a href="${srRoot}/home/addShows/popularShows/" id="btnNewShow" class="btn btn-large"> @@ -51,7 +51,7 @@ </div> </a> - <br/><br/> + <br><br> <a href="${srRoot}/home/addShows/existingShows/" id="btnExistingShow" class="btn btn-large"> <div class="button"><div class="icon-addexistingshow"></div></div> diff --git a/gui/slick/views/home_newShow.mako b/gui/slick/views/home_newShow.mako index 0a13df2591ecbc1da377a737920e03ae6bebdcbb..6905df264290f57e0007e556907b0bdcca2105b7 100644 --- a/gui/slick/views/home_newShow.mako +++ b/gui/slick/views/home_newShow.mako @@ -7,7 +7,6 @@ <script type="text/javascript" src="${srRoot}/js/qualityChooser.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/newShow.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/addShowOptions.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/blackwhite.js?${sbPID}"></script> </%block> @@ -27,7 +26,7 @@ <div id="core-component-group1" class="tab-pane active component-group"> <div id="displayText">aoeu</div> - <br /> + <br> <form id="addShowForm" method="post" action="${srRoot}/home/addShows/addNewShow" accept-charset="utf-8"> @@ -60,10 +59,10 @@ <input class="btn btn-inline" type="button" id="searchName" value="Search" /> - <br /><br /> - <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br /> - This <b>DOES NOT</b> allow SickRage to download non-english TV episodes!<br /><br /> - <div id="searchResults" style="height: 100%;"><br/></div> + <br><br> + <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br> + This <b>DOES NOT</b> allow SickRage to download non-english TV episodes!<br><br> + <div id="searchResults" style="height: 100%;"><br></div> % endif </div> @@ -74,8 +73,8 @@ <div class="stepDiv"> % if provided_show_dir: - Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br /> - <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br /> + Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br> + <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br> % else: <%include file="/inc_rootDirs.mako"/> % endif @@ -95,7 +94,7 @@ <input type="hidden" name="skipShow" id="skipShow" value="" /> </form> -<br /> +<br> <div style="width: 100%; text-align: center;"> <input class="btn" type="button" id="addShowButton" value="Add Show" disabled="disabled" /> diff --git a/gui/slick/views/home_popularShows.mako b/gui/slick/views/home_popularShows.mako index 17fdc4498d61ac1fa1e1bf79393216d1150637c7..0da617745e709194ec03fd230d1ad13f01a7bfc6 100644 --- a/gui/slick/views/home_popularShows.mako +++ b/gui/slick/views/home_popularShows.mako @@ -1,13 +1,13 @@ <%inherit file="/layouts/main.mako"/> <%! from sickbeard.helpers import anon_url - import sickbeard - imdb_tt = [show.imdbid for show in sickbeard.showList if show.imdbid] + import sickbeard %> <%block name="content"> <h2>Popular Shows</h2> -<br /> +<br> +<% imdb_tt = [show.imdbid for show in sickbeard.showList if show.imdbid] %> % if not popular_shows: <h3>Fetching of IMDB Data failed. Are you online?</h3> @@ -34,7 +34,7 @@ Add Show</a></span> % else: <span> Already added </span> - % endif + % endif </div> <br style="clear:both" /> diff --git a/gui/slick/views/home_postprocess.mako b/gui/slick/views/home_postprocess.mako index 795c3d3cddafa387d8b9a14801068b37554ec5cb..67011997769ef229e0af7e37a36d1c411102dadb 100644 --- a/gui/slick/views/home_postprocess.mako +++ b/gui/slick/views/home_postprocess.mako @@ -16,13 +16,13 @@ <div id="postProcess"> <form name="processForm" method="post" action="processEpisode" style="line-height: 40px;"> <table> - <input type="hidden" id="type" name="type" value="manual"> + <input type="hidden" id="type" name="proc_type" value="manual"> <tr> <td style="padding-right:10px;"> <b>Enter the folder containing the episode:</b> </td> <td> - <input type="text" name="dir" id="episodeDir" class="form-control form-control-inline input-sm input350" /> + <input type="text" name="proc_dir" id="episodeDir" class="form-control form-control-inline input-sm input350" /> </td> </tr> <tr> diff --git a/gui/slick/views/home_recommendedShows.mako b/gui/slick/views/home_recommendedShows.mako index f1ede43278fa67abcc7e8f250d2293186fe5970a..f5d77e8ea164704c4cc0b8c1ccc3cbd3b007fd03 100644 --- a/gui/slick/views/home_recommendedShows.mako +++ b/gui/slick/views/home_recommendedShows.mako @@ -44,7 +44,7 @@ </select> </div> -<br /> +<br> <div id="trendingShows"></div> -<br /> +<br> </%block> diff --git a/gui/slick/views/home_trendingShows.mako b/gui/slick/views/home_trendingShows.mako index a6aa74f07e755e26005a0c10fbba84da72832761..a49b019d8d265f3b5842e8d0df765da3680273bf 100644 --- a/gui/slick/views/home_trendingShows.mako +++ b/gui/slick/views/home_trendingShows.mako @@ -50,7 +50,7 @@ </select> </div> -<br /> +<br> <div id="trendingShows"></div> -<br /> +<br> </%block> diff --git a/gui/slick/views/inc_blackwhitelist.mako b/gui/slick/views/inc_blackwhitelist.mako index 0b088b327f878aee871180c2065fb2ae055a5210..37cc9fb65d8669432e430faccc6c1b555ee52844 100644 --- a/gui/slick/views/inc_blackwhitelist.mako +++ b/gui/slick/views/inc_blackwhitelist.mako @@ -8,6 +8,8 @@ <p>The <b>Whitelist</b> is checked <i>before</i> the <b>Blacklist</b>.</p> <p>Groups are shown as <b>Name</b> | <b>Rating</b> | <b>Number of subbed episodes</b>.</p> <p>You may also add any fansub group not listed to either list manually.</p> + <p>When doing this please note that you can only use groups listed on anidb for this anime. + </br>If a group is not listed on anidb but subbed this anime, please correct anidb's data.</p> </div> <div class="bwlWrapper" id="Anime"> <div class="blackwhitelist all"> @@ -19,7 +21,7 @@ <option value="${keyword}">${keyword}</option> % endfor </select> - <br/> + <br> <input class="btn" id="removeW" value="Remove" type="button"/> </div> <div class="blackwhitelist pool"> @@ -31,7 +33,7 @@ % endif % endfor </select> - <br/> + <br> <input class="btn" id="addW" value="Add to Whitelist" type="button"/> <input class="btn" id="addB" value="Add to Blacklist" type="button"/> </div> @@ -42,7 +44,7 @@ <option value="${keyword}">${keyword}</option> % endfor </select> - <br/> + <br> <input class="btn" id="removeB" value="Remove" type="button"/> </div> </div> diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako index 4d364e25c6219532294206f27f06fc1afa28e00b..9ff550e1e2b3bcac917472861a0d18e81a33a5fe 100644 --- a/gui/slick/views/layouts/main.mako +++ b/gui/slick/views/layouts/main.mako @@ -41,7 +41,6 @@ <meta name="msapplication-TileImage" content="${srRoot}/images/ico/favicon-144.png"> <meta name="msapplication-config" content="${srRoot}/css/browserconfig.xml"> - <meta data-var="srRoot" data-content="${srRoot}"> <meta data-var="themeSpinner" data-content="${('', '-dark')[sickbeard.THEME_NAME == 'dark']}"> <meta data-var="anonURL" data-content="${sickbeard.ANON_REDIRECT}"> @@ -78,6 +77,7 @@ <link rel="apple-touch-icon" sizes="72x72" href="${srRoot}/images/ico/favicon-72.png"> <link rel="apple-touch-icon" href="${srRoot}/images/ico/favicon-57.png"> + <link rel="stylesheet" type="text/css" href="${srRoot}/css/vender.min.css?${sbPID}"/> <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/bootstrap.min.css?${sbPID}"/> <link rel="stylesheet" type="text/css" href="${srRoot}/css/browser.css?${sbPID}" /> <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/jquery-ui-1.10.4.custom.min.css?${sbPID}" /> @@ -85,14 +85,12 @@ <link rel="stylesheet" type="text/css" href="${srRoot}/css/style.css?${sbPID}"/> <link rel="stylesheet" type="text/css" href="${srRoot}/css/${sickbeard.THEME_NAME}.css?${sbPID}" /> <link rel="stylesheet" type="text/css" href="${srRoot}/css/print.css?${sbPID}" /> - % if sbLogin: - <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/pnotify.custom.min.css?${sbPID}" /> + % if srLogin: <link rel="stylesheet" type="text/css" href="${srRoot}/css/country-flags.css?${sbPID}"/> % endif <%block name="css" /> </head> - - <body> + <body data-controller="${controller}" data-action="${action}"> <nav class="navbar navbar-default navbar-fixed-top hidden-print" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> @@ -105,11 +103,11 @@ <a class="navbar-brand" href="${srRoot}/home/" title="SickRage"><img alt="SickRage" src="${srRoot}/images/sickrage.png" style="height: 50px;" class="img-responsive pull-left" /></a> </div> - % if sbLogin: + % if srLogin: <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav navbar-right"> <li id="NAVhome" class="navbar-split dropdown${('', ' active')[topmenu == 'home']}"> - <a href="${srRoot}/home/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">Shows + <a href="${srRoot}/home/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span>Shows</span> <b class="caret"></b> </a> <ul class="dropdown-menu"> @@ -119,7 +117,7 @@ % if sickbeard.SHOWS_RECENT: <li role="separator" class="divider"></li> % for recentShow in sickbeard.SHOWS_RECENT: - <li><a href="${srRoot}/home/displayShow/?show=${recentShow['indexerid']}"><i class="menu-icon-addshow"></i> ${recentShow['name']|trim,h}</a></li> + <li><a href="${srRoot}/home/displayShow?show=${recentShow['indexerid']}"><i class="menu-icon-addshow"></i> ${recentShow['name']|trim,h}</a></li> % endfor % endif </ul> @@ -135,7 +133,7 @@ </li> <li id="NAVmanage" class="navbar-split dropdown${('', ' active')[topmenu == 'manage']}"> - <a href="${srRoot}/manage/episodeStatuses/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">Manage + <a href="${srRoot}/manage/episodeStatuses/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span>Manage</span> <b class="caret"></b> </a> <ul class="dropdown-menu"> @@ -166,7 +164,7 @@ </li> <li id="NAVconfig" class="navbar-split dropdown${('', ' active')[topmenu == 'config']}"> - <a href="${srRoot}/config/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" /> + <a href="${srRoot}/config/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" /> <b class="caret"></b> </a> <ul class="dropdown-menu"> @@ -203,7 +201,7 @@ toolsBadge = '' %> <li id="NAVsystem" class="navbar-split dropdown${('', ' active')[topmenu == 'system']}"> - <a href="${srRoot}/home/status/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge} + <a href="${srRoot}/home/status/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge} <b class="caret"></b> </a> <ul class="dropdown-menu"> @@ -223,7 +221,7 @@ <li><a href="${srRoot}/home/updateCheck?pid=${sbPID}"><i class="menu-icon-update"></i> Check For Updates</a></li> <li><a href="${srRoot}/home/restart/?pid=${sbPID}" class="confirm restart"><i class="menu-icon-restart"></i> Restart</a></li> <li><a href="${srRoot}/home/shutdown/?pid=${sbPID}" class="confirm shutdown"><i class="menu-icon-shutdown"></i> Shutdown</a></li> - % if sbLogin != True: + % if srLogin != True: <li><a href="${srRoot}/logout" class="confirm logout"><i class="menu-icon-shutdown"></i> Logout</a></li> % endif <li role="separator" class="divider"></li> @@ -264,13 +262,13 @@ </div> % endif - % if sickbeard.BRANCH and sickbeard.BRANCH != 'master' and not sickbeard.DEVELOPER and sbLogin: + % if sickbeard.BRANCH and sickbeard.BRANCH != 'master' and not sickbeard.DEVELOPER and srLogin: <div class="alert alert-danger upgrade-notification hidden-print" role="alert"> <span>You're using the ${sickbeard.BRANCH} branch. Please use 'master' unless specifically asked</span> </div> % endif - % if sickbeard.NEWEST_VERSION_STRING and sbLogin: + % if sickbeard.NEWEST_VERSION_STRING and srLogin: <div class="alert alert-success upgrade-notification hidden-print" role="alert"> <span>${sickbeard.NEWEST_VERSION_STRING}</span> </div> @@ -281,7 +279,7 @@ <%block name="content" /> </div> <!-- /content --> </div> <!-- /contentWrapper --> - % if sbLogin: + % if srLogin: <footer> <div class="footer clearfix"> <% @@ -312,28 +310,22 @@ </div> </div> </footer> - <script type="text/javascript" src="${srRoot}/js/_bower.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookie.js?${sbPID}"></script> + <script type="text/javascript" src="${srRoot}/js/vender.min.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tokeninput.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower --> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower --> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower --> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.qtip-2.2.1.min.js?${sbPID}"></script><!-- Can't be added to bower --> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.ui.touch-punch-0.2.2.min.js?${sbPID}"></script><!-- Can't be added to bower --> <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower --> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.confirm.js?${sbPID}"></script><!-- Can't be added to bower --> <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower --> - <script type="text/javascript" src="${srRoot}/js/lib/pnotify.custom.min.js?${sbPID}"></script><!-- Needs to be removed --> <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/new/meta.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/new/core.js?${sbPID}"></script> + % if sickbeard.DEVELOPER: + <script type="text/javascript" src="${srRoot}/js/core.js?${sbPID}"></script> + % else: + <script type="text/javascript" src="${srRoot}/js/core.min.js?${sbPID}"></script> + % endif <script type="text/javascript" src="${srRoot}/js/lib/jquery.scrolltopcontrol-1.1.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/browser.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/ajaxNotifications.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/confirmations.js?${sbPID}"></script> % endif <%block name="scripts" /> </body> diff --git a/gui/slick/views/manage.mako b/gui/slick/views/manage.mako index e7f0ba82301e6a6eec793c5d8513645be6465fb8..19035aea7041711307f047e942124f0434f7d3ea 100644 --- a/gui/slick/views/manage.mako +++ b/gui/slick/views/manage.mako @@ -5,7 +5,6 @@ from sickbeard.common import statusStrings %> <%block name="scripts"> -<script type="text/javascript" src="${srRoot}/js/lib/bootbox.min.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/new/manage.js"></script> <script type="text/javascript" src="${srRoot}/js/massUpdate.js?${sbPID}"></script> </%block> @@ -21,7 +20,7 @@ <table id="massUpdateTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0"> <thead> <tr> - <th class="col-checkbox">Edit<br/><input type="checkbox" class="bulkCheck" id="editCheck" /></th> + <th class="col-checkbox">Edit<br><input type="checkbox" class="bulkCheck" id="editCheck" /></th> <th class="nowrap" style="text-align: left;">Show Name</th> <th class="col-quality">Quality</th> <th class="col-legend">Sports</th> @@ -33,15 +32,15 @@ <th class="col-legend">Subtitle</th> <th class="col-legend">Default Ep<br>Status</th> <th class="col-legend">Status</th> - <th width="1%">Update<br/><input type="checkbox" class="bulkCheck" id="updateCheck" /></th> - <th width="1%">Rescan<br/><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th> - <th width="1%">Rename<br/><input type="checkbox" class="bulkCheck" id="renameCheck" /></th> + <th width="1%">Update<br><input type="checkbox" class="bulkCheck" id="updateCheck" /></th> + <th width="1%">Rescan<br><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th> + <th width="1%">Rename<br><input type="checkbox" class="bulkCheck" id="renameCheck" /></th> % if sickbeard.USE_SUBTITLES: - <th width="1%">Search Subtitle<br/><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th> + <th width="1%">Search Subtitle<br><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th> % endif <!-- <th>Force Metadata Regen <input type="checkbox" class="bulkCheck" id="metadataCheck" /></th>//--> - <th width="1%">Delete<br/><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th> - <th width="1%">Remove<br/><input type="checkbox" class="bulkCheck" id="removeCheck" /></th> + <th width="1%">Delete<br><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th> + <th width="1%">Remove<br><input type="checkbox" class="bulkCheck" id="removeCheck" /></th> </tr> </thead> diff --git a/gui/slick/views/manage_backlogOverview.mako b/gui/slick/views/manage_backlogOverview.mako index db2eca31046389ee7914da2b2ba65c24dbcc703d..637c9d1143f8c681b1f8242e1d685a78bc0e9fdd 100644 --- a/gui/slick/views/manage_backlogOverview.mako +++ b/gui/slick/views/manage_backlogOverview.mako @@ -30,7 +30,7 @@ <div class="h2footer pull-right"> <span class="listing-key wanted">Wanted: <b>${totalWanted}</b></span> <span class="listing-key qual">Low Quality: <b>${totalQual}</b></span> -</div><br/> +</div><br> <div class="float-left"> Jump to Show @@ -51,7 +51,7 @@ Jump to Show % endif <tr class="seasonheader" id="show-${curShow.indexerid}"> <td colspan="3" class="align-left"> - <br/><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2> + <br><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2> <div class="pull-right"> <span class="listing-key wanted">Wanted: <b>${showCounts[curShow.indexerid][Overview.WANTED]}</b></span> <span class="listing-key qual">Low Quality: <b>${showCounts[curShow.indexerid][Overview.QUAL]}</b></span> diff --git a/gui/slick/views/manage_episodeStatuses.mako b/gui/slick/views/manage_episodeStatuses.mako index e26bfdbe841c5fa88c8d1d19bf6a4e09e4229981..ebf0cdff4f3766b851b3e27341edb20f34633736 100644 --- a/gui/slick/views/manage_episodeStatuses.mako +++ b/gui/slick/views/manage_episodeStatuses.mako @@ -20,7 +20,7 @@ % if whichStatus: <h2>None of your episodes have status ${common.statusStrings[int(whichStatus)]}</h2> -<br /> +<br> % endif <form action="${srRoot}/manage/episodeStatuses" method="get"> @@ -41,7 +41,7 @@ Manage episodes with status <select name="whichStatus" class="form-control form- <h2>Shows containing ${common.statusStrings[int(whichStatus)]} episodes</h2> -<br /> +<br> <% if int(whichStatus) in [common.IGNORED, common.SNATCHED] + common.Quality.DOWNLOADED + common.Quality.ARCHIVED: @@ -77,7 +77,7 @@ Set checked shows/episodes to <select name="newStatus" class="form-control form- <button type="button" class="btn btn-xs selectAllShows">Select all</a></button> <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button> </div> -<br /> +<br> <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0"> % for cur_indexer_id in sorted_show_ids: diff --git a/gui/slick/views/manage_failedDownloads.mako b/gui/slick/views/manage_failedDownloads.mako index 759c930705ea555b1cea87f69385b94d9ded88f0..4c56c324b870d8f7b7ab06b56a10ed04d371aeb0 100644 --- a/gui/slick/views/manage_failedDownloads.mako +++ b/gui/slick/views/manage_failedDownloads.mako @@ -35,7 +35,7 @@ <th class="nowrap" width="75%" style="text-align: left;">Release</th> <th width="10%">Size</th> <th width="14%">Provider</th> - <th width="1%">Remove<br /> + <th width="1%">Remove<br> <input type="checkbox" class="bulkCheck" id="removeCheck" /> </th> </tr> @@ -47,7 +47,6 @@ </tfoot> <tbody> % for hItem in failedResults: -<% curRemove = "<input type=\"checkbox\" class=\"removeCheck\" id=\"remove-"+hItem["release"]+"\" />" %> <tr> <td class="nowrap">${hItem["release"]}</td> <td align="center"> @@ -65,7 +64,7 @@ <img src="${srRoot}/images/providers/missing.png" width="16" height="16" alt="missing provider" title="missing provider"/> % endif </td> - <td align="center">${curRemove}</td> + <td align="center"><input type="checkbox" class="removeCheck" id="remove-${hItem["release"]}" /></td> </tr> % endfor </tbody> diff --git a/gui/slick/views/manage_manageSearches.mako b/gui/slick/views/manage_manageSearches.mako index 78e3d36a79c87df0950a90d509cb00f96fd4554c..e3caf400a321675cff1cb5f4b58377af69d2cd8d 100644 --- a/gui/slick/views/manage_manageSearches.mako +++ b/gui/slick/views/manage_manageSearches.mako @@ -21,28 +21,28 @@ <a class="btn" href="${srRoot}/manage/manageSearches/forceBacklog"><i class="icon-exclamation-sign"></i> Force</a> <a class="btn" href="${srRoot}/manage/manageSearches/pauseBacklog?paused=${('1', '0')[bool(backlogPaused)]}"><i class="icon-${('paused', 'play')[bool(backlogPaused)]}"></i> ${('pause', 'Unpause')[bool(backlogPaused)]}</a> % if not backlogRunning: - Not in progress<br /> + Not in progress<br> % else: ${('', 'Paused:')[bool(backlogPaused)]} - Currently running<br /> + Currently running<br> % endif -<br /> +<br> <h3>Daily Search:</h3> <a class="btn" href="${srRoot}/manage/manageSearches/forceSearch"><i class="icon-exclamation-sign"></i> Force</a> -${('Not in progress', 'In Progress')[dailySearchStatus]}<br /> -<br /> +${('Not in progress', 'In Progress')[dailySearchStatus]}<br> +<br> <h3>Find Propers Search:</h3> <a class="btn ${('disabled', '')[bool(sickbeard.DOWNLOAD_PROPERS)]}" href="${srRoot}/manage/manageSearches/forceFindPropers"><i class="icon-exclamation-sign"></i> Force</a> % if not sickbeard.DOWNLOAD_PROPERS: - Propers search disabled <br /> + Propers search disabled <br> % elif not findPropersStatus: - Not in progress<br /> + Not in progress<br> % else: - In Progress<br /> + In Progress<br> % endif -<br /> +<br> <h3>Search Queue:</h3> Backlog: <i>${queueLength['backlog']} pending items</i></br> diff --git a/gui/slick/views/manage_massEdit.mako b/gui/slick/views/manage_massEdit.mako index 4f28b08963298930a7982a239f78d4047e74f1a8..816af35f24739e18d3e4e5dac33de4732656ffff 100644 --- a/gui/slick/views/manage_massEdit.mako +++ b/gui/slick/views/manage_massEdit.mako @@ -13,7 +13,6 @@ initial_quality = int(quality_value) else: initial_quality = common.SD - endif anyQualities, bestQualities = common.Quality.splitQuality(initial_quality) %> @@ -39,17 +38,17 @@ <div class="component-group"> <h3>Main Settings</h3> - ==> <u>Changing any settings marked with (<span class="separator">*</span>) will force a refresh of the selected shows.</u><br /> - <br /> + ==> <u>Changing any settings marked with (<span class="separator">*</span>) will force a refresh of the selected shows.</u><br> + <br> <fieldset class="component-group-list"> - + <div class="field-pair"> <label for="shows"> <span class="component-title">Selected Shows</span> <span class="component-desc"> % for curName in sorted(showNames): - <span style="font-size: 14px;">${curName}</span><br /> + <span style="font-size: 14px;">${curName}</span><br> % endfor </span> </label> @@ -142,7 +141,7 @@ <option value="keep" ${('', 'selected="selected"')[archive_firstmatch_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[archive_firstmatch_value == 1]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[archive_firstmatch_value == 0]}>No</option> - </select><br /> + </select><br> Archive episode after the first best match is found from your archive quality list. </span> </label> @@ -156,7 +155,7 @@ <option value="keep" ${('', 'selected="selected"')[flatten_folders_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[flatten_folders_value == 0]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[flatten_folders_value == 1]}>No</option> - </select><br /> + </select><br> Group episodes by season folder (set to "No" to store in a single folder). </span> </label> @@ -185,7 +184,7 @@ % for curStatus in [WANTED, SKIPPED, IGNORED]: <option value="${curStatus}" ${('', 'selected="selected"')[curStatus == default_ep_status_value]}>${statusStrings[curStatus]}</option> % endfor - </select><br /> + </select><br> This will set the status for future episodes. </span> </label> @@ -199,7 +198,7 @@ <option value="keep" ${('', 'selected="selected"')[scene_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[scene_value == 1]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[scene_value == 0]}>No</option> - </select><br /> + </select><br> Search by scene numbering (set to "No" to search by indexer numbering). </span> </label> @@ -213,7 +212,7 @@ <option value="keep" ${('', 'selected="selected"')[anime_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[anime_value == 1]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[anime_value == 0]}>No</option> - </select><br /> + </select><br> Set if these shows are Anime and episodes are released as Show.265 rather than Show.S02E03 </span> </label> @@ -227,8 +226,8 @@ <option value="keep" ${('', 'selected="selected"')[sports_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[sports_value == 1]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[sports_value == 0]}>No</option> - </select><br /> - Set if these shows are sporting or MMA events released as Show.03.02.2010 rather than Show.S02E03.<br /> + </select><br> + Set if these shows are sporting or MMA events released as Show.03.02.2010 rather than Show.S02E03.<br> <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span> </span> </label> @@ -242,8 +241,8 @@ <option value="keep" ${('', 'selected="selected"')[air_by_date_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[air_by_date_value == 1]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[air_by_date_value == 0]}>No</option> - </select><br /> - Set if these shows are released as Show.03.02.2010 rather than Show.S02E03.<br /> + </select><br> + Set if these shows are released as Show.03.02.2010 rather than Show.S02E03.<br> <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span> </span> </label> @@ -257,7 +256,7 @@ <option value="keep" ${('', 'selected="selected"')[subtitles_value == None]}>< Keep ></option> <option value="enable" ${('', 'selected="selected"')[subtitles_value == 1]}>Yes</option> <option value="disable" ${('', 'selected="selected"')[subtitles_value == 0]}>No</option> - </select><br /> + </select><br> Search for subtitles. </span> </label> diff --git a/gui/slick/views/manage_subtitleMissed.mako b/gui/slick/views/manage_subtitleMissed.mako index c5367207098f4366a1d6bbe99bf04f4630ef0eaf..5337fd8e6fbbaceb2573498f4d4c64b403d437f0 100644 --- a/gui/slick/views/manage_subtitleMissed.mako +++ b/gui/slick/views/manage_subtitleMissed.mako @@ -22,7 +22,7 @@ % if whichSubs: <h2>All of your episodes have ${subsLanguage} subtitles.</h2> -<br /> +<br> % endif <form action="${srRoot}/manage/subtitleMissed" method="get"> @@ -42,13 +42,13 @@ subtitles <form action="${srRoot}/manage/downloadSubtitleMissed" method="post"> <h2>Episodes without ${subsLanguage} subtitles.</h2> -<br /> +<br> Download missed subtitles for selected episodes <input class="btn btn-inline" type="submit" value="Go" /> <div> <button type="button" class="btn btn-xs selectAllShows">Select all</a></button> <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button> </div> -<br /> +<br> <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0"> % for cur_indexer_id in sorted_show_ids: <tr id="${cur_indexer_id}"> diff --git a/gui/slick/views/restart.mako b/gui/slick/views/restart.mako index 67510c016e01f8d415b6389602de236b20886b7c..6c53fb34009f69583c88751caf9675a86e74c35b 100644 --- a/gui/slick/views/restart.mako +++ b/gui/slick/views/restart.mako @@ -49,7 +49,7 @@ sbDefaultPage = "${sbDefaultPage}"; %> <% themeSpinner = ('', '-dark')['dark' == themeSpinner] %> <h2>Performing Restart</h2> -<br /> +<br> <div id="shut_down_message"> Waiting for SickRage to shut down: <img src="${srRoot}/images/loading16${themeSpinner}.gif" height="16" width="16" id="shut_down_loading" /> diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako index 6f6e69472c5d8f926f8d42951d3be3e21af67356..98a4c2cf3b0e8152363a83397e5dec1c6d97e74f 100644 --- a/gui/slick/views/schedule.mako +++ b/gui/slick/views/schedule.mako @@ -19,7 +19,6 @@ </style> </%block> <%block name="content"> -<% sort = sickbeard.COMING_EPS_SORT %> <%namespace file="/inc_defs.mako" import="renderQualityPill"/> <h1 class="header">${header}</h1> <div class="h2footer pull-right"> @@ -122,7 +121,7 @@ <time datetime="${airDate.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(airDate)}</time> </td> - <td align="center" nowrap="nowrap"> + <td align="center" nowrap="nowrap"> <% ends = sbdatetime.sbdatetime.convert_to_setting(cur_ep_enddate) %> <time datetime="${ends.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(ends)}</time> </td> @@ -139,7 +138,7 @@ <td> % if cur_result['description']: - <img alt="" src="${srRoot}/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_${'%s_%s_%s' % (str(cur_result['showid']), str(cur_result['season']), str(cur_result['episode']))}" /> + <img alt="" src="${srRoot}/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_${'%s_%s_%s' % (cur_result['showid'], cur_result['season'], cur_result['episode'])}" /> % else: <img alt="" src="${srRoot}/images/info32.png" width="16" height="16" class="plotInfoNone" /> % endif @@ -195,8 +194,8 @@ today_header = False show_div = 'ep_listing listing-default' %> -% if 'show' == sort: - <br /><br /> +% if sickbeard.COMING_EPS_SORT == 'show': + <br><br> % endif % for cur_result in results: @@ -214,7 +213,7 @@ else: cur_ep_enddate = cur_result['localtime'] %> - % if 'network' == sort: + % if sickbeard.COMING_EPS_SORT == 'network': <% show_network = ('no network', cur_result['network'])[bool(cur_result['network'])] %> % if cur_segment != show_network: <div> @@ -235,20 +234,20 @@ % endif % endif - % elif 'date' == sort: + % elif sickbeard.COMING_EPS_SORT == 'date': % if cur_segment != cur_ep_airdate: % if cur_ep_enddate < today and cur_ep_airdate != today.date() and not missed_header: - <br /><h2 class="day">Missed</h2> + <br><h2 class="day">Missed</h2> <% missed_header = True %> % elif cur_ep_airdate >= next_week.date() and not too_late_header: - <br /><h2 class="day">Later</h2> + <br><h2 class="day">Later</h2> <% too_late_header = True %> % elif cur_ep_enddate >= today and cur_ep_airdate < next_week.date(): % if cur_ep_airdate == today.date(): - <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}<span style="font-size: 14px; vertical-align: top;">[Today]</span></h2> + <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}<span style="font-size: 14px; vertical-align: top;">[Today]</span></h2> <% today_header = True %> % else: - <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}</h2> + <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}</h2> % endif % endif <% cur_segment = cur_ep_airdate %> @@ -256,7 +255,7 @@ % if cur_ep_airdate == today.date() and not today_header: <div> - <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()} <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2> + <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()} <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2> <% today_header = True %> % endif @@ -272,7 +271,7 @@ % endif % endif - % elif 'show' == sort: + % elif sickbeard.COMING_EPS_SORT == 'show': % if cur_ep_enddate < today: <% show_div = 'ep_listing listing-overdue listingradius' %> % elif cur_ep_airdate >= next_week.date(): @@ -319,7 +318,7 @@ <span class="title">Next Episode:</span> <span>${'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode']))} - ${cur_result['name']}</span> <div class="clearfix"> - <span class="title">Airs: </span><span class="airdate">${sbdatetime.sbdatetime.sbfdatetime(cur_result['localtime']).decode(sickbeard.SYS_ENCODING)}</span>${('', '<span> on %s</span>' % str(cur_result['network']))[bool(cur_result['network'])]} + <span class="title">Airs: </span><span class="airdate">${sbdatetime.sbdatetime.sbfdatetime(cur_result['localtime'])}</span>${('', '<span> on %s</span>' % cur_result['network'])[bool(cur_result['network'])]} </div> <div class="clearfix"> diff --git a/gui/slick/views/testRename.mako b/gui/slick/views/testRename.mako index f7410d50049bb48c8330fefecf96f3d14c3c7d73..fb43c9d7739fca6e2f1b7ed003f864c79750af99 100644 --- a/gui/slick/views/testRename.mako +++ b/gui/slick/views/testRename.mako @@ -49,7 +49,7 @@ </thead> </table> -<br/> +<br> <input type="submit" value="Rename Selected" class="btn btn-success"> <a href="/home/displayShow?show=${show.indexerid}" class="btn btn-danger">Cancel Rename</a> <table id="testRenameTable" class="sickbeardTable" cellspacing="1" border="0" cellpadding="0"> @@ -64,7 +64,7 @@ <thead> <tr class="seasonheader" id="season-${cur_ep_obj.season}"> <td colspan="4"> - <br/> + <br> <h2>${('Season '+str(cur_ep_obj.season), 'Specials')[int(cur_ep_obj.season) == 0]}</h2> </td> </tr> @@ -98,6 +98,6 @@ if len(epList) > 1: </tbody> % endfor -</table><br /> +</table><br> <input type="submit" value="Rename Selected" class="btn btn-success"> <a href="/home/displayShow?show=${show.indexerid}" class="btn btn-danger">Cancel Rename</a> </%block> diff --git a/gui/slick/views/viewlogs.mako b/gui/slick/views/viewlogs.mako index c6c809cd8efcd6c9c8450b8f9f4c3dc97c03d6fa..cda4163c94dc5250995e434adcacc004f17de30c 100644 --- a/gui/slick/views/viewlogs.mako +++ b/gui/slick/views/viewlogs.mako @@ -33,10 +33,10 @@ Filter log by: <select name="logFilter" id="logFilter" class="form-control form- Search log by: <input type="text" name="logSearch" placeholder="clear to reset" id="logSearch" value="${('', logSearch)[bool(logSearch)]}" class="form-control form-control-inline input-sm" /> </div> -<br /> +<br> <div class="align-left"><pre> ${logLines} </pre> </div> -<br /> +<br> </%block> diff --git a/lib/feedcache/__init__.py b/lib/feedcache/__init__.py deleted file mode 100644 index 96ebc10200b439d5c053f1e90c89b89a0e62eb44..0000000000000000000000000000000000000000 --- 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 7520d51ae18c5416c852dd1ab5ba57975f40c0ab..0000000000000000000000000000000000000000 --- a/lib/feedcache/cache.py +++ /dev/null @@ -1,212 +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, referrer=None, handlers=[]): - """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. - - request_headers=None - Add addition request headers to request - - referrer=None - Added a referrer to request - - handlers=None - Urllib2 handlers - - 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, - referrer=referrer, - request_headers=request_headers, - handlers = handlers) - - 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 05babde6443cd227b82c9e301d4d6905d35a7b15..0000000000000000000000000000000000000000 --- 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 4df7ab68b65ad46765bf74f00daf3caedb91e40f..0000000000000000000000000000000000000000 --- 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 2eb56d302407059c24d7bda55f9127ed84fd79bd..0000000000000000000000000000000000000000 --- 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 2c1ac09662d94cc684d606230ac8990dda878fbe..0000000000000000000000000000000000000000 --- 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 741a39abec3454efab5fb8b279364953050c683e..0000000000000000000000000000000000000000 --- 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 f48be105b6bb5c54680bf42522550c6d88f71517..0000000000000000000000000000000000000000 --- 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 = """<?xml version="1.0" encoding="utf-8"?> - -<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us"> - <title>CacheTest test data</title> - <link href="http://localhost/feedcache/" rel="alternate"></link> - <link href="http://localhost/feedcache/atom/" rel="self"></link> - <id>http://localhost/feedcache/</id> - <updated>2006-10-14T11:00:36Z</updated> - <entry> - <title>single test entry</title> - <link href="http://www.example.com/" rel="alternate"></link> - <updated>2006-10-14T11:00:36Z</updated> - <author> - <name>author goes here</name> - <email>authoremail@example.com</email> - </author> - <id>http://www.example.com/</id> - <summary type="html">description goes here</summary> - <link length="100" href="http://www.example.com/enclosure" type="text/html" rel="enclosure"> - </link> - </entry> -</feed>""" - - # 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 1a48deada8914f762c8f7aae6aafe937f19fa599..0000000000000000000000000000000000000000 --- 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/__init__.py b/lib/feedparser/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a52b39a2b8406d61e39e3fd2a2a5867962cc2a10 100644 --- a/lib/feedparser/__init__.py +++ b/lib/feedparser/__init__.py @@ -0,0 +1,44 @@ +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE.""" + +from __future__ import absolute_import, unicode_literals + +__author__ = 'Kurt McKee <contactme@kurtmckee.org>' +__license__ = 'BSD 2-clause' +__version__ = '5.2.1' + +# HTTP "User-Agent" header to send to servers when downloading feeds. +# If you are embedding feedparser in a larger application, you should +# change this to your application name and URL. +USER_AGENT = "feedparser/%s +https://github.com/kurtmckee/feedparser/" % __version__ + +from . import api +from .api import parse +from .datetimes import registerDateHandler +from .exceptions import * + +api.USER_AGENT = USER_AGENT diff --git a/lib/feedparser/api.py b/lib/feedparser/api.py new file mode 100644 index 0000000000000000000000000000000000000000..812880c388844f78058ef30a10cb204e4a20bbd6 --- /dev/null +++ b/lib/feedparser/api.py @@ -0,0 +1,247 @@ +# The public API for feedparser +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +import xml.sax + +try: + from io import BytesIO as _StringIO +except ImportError: + try: + from cStringIO import StringIO as _StringIO + except ImportError: + from StringIO import StringIO as _StringIO + +try: + import urllib.parse +except ImportError: + from urlparse import urlparse + + class urllib(object): + class parse(object): + urlparse = staticmethod(urlparse) + +from .datetimes import registerDateHandler, _parse_date +from .encodings import convert_to_utf8 +from .exceptions import * +from .html import _BaseHTMLProcessor +from . import http +from . import mixin +from .mixin import _FeedParserMixin +from .parsers.loose import _LooseFeedParser +from .parsers.strict import _StrictFeedParser +from .sanitizer import replace_doctype +from .sgml import * +from .urls import _convert_to_idn, _makeSafeAbsoluteURI +from .util import FeedParserDict + +bytes_ = type(b'') +unicode_ = type('') +try: + unichr + basestring +except NameError: + unichr = chr + basestring = str + +# List of preferred XML parsers, by SAX driver name. These will be tried first, +# but if they're not installed, Python will keep searching through its own list +# of pre-installed parsers until it finds one that supports everything we need. +PREFERRED_XML_PARSERS = ["drv_libxml2"] + +# If you want feedparser to automatically resolve all relative URIs, set this +# to 1. +RESOLVE_RELATIVE_URIS = 1 + +# If you want feedparser to automatically sanitize all potentially unsafe +# HTML content, set this to 1. +SANITIZE_HTML = 1 + +_XML_AVAILABLE = True +mixin.RESOLVE_RELATIVE_URIS = RESOLVE_RELATIVE_URIS +mixin.SANITIZE_HTML = SANITIZE_HTML + +SUPPORTED_VERSIONS = { + '': 'unknown', + 'rss090': 'RSS 0.90', + 'rss091n': 'RSS 0.91 (Netscape)', + 'rss091u': 'RSS 0.91 (Userland)', + 'rss092': 'RSS 0.92', + 'rss093': 'RSS 0.93', + 'rss094': 'RSS 0.94', + 'rss20': 'RSS 2.0', + 'rss10': 'RSS 1.0', + 'rss': 'RSS (unknown version)', + 'atom01': 'Atom 0.1', + 'atom02': 'Atom 0.2', + 'atom03': 'Atom 0.3', + 'atom10': 'Atom 1.0', + 'atom': 'Atom (unknown version)', + 'cdf': 'CDF', +} + +def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result): + """URL, filename, or string --> stream + + This function lets you define parsers that take any input source + (URL, pathname to local or network file, or actual data as a string) + and deal with it in a uniform manner. Returned object is guaranteed + to have all the basic stdio read methods (read, readline, readlines). + Just .close() the object when you're done with it. + + If the etag argument is supplied, it will be used as the value of an + If-None-Match request header. + + If the modified argument is supplied, it can be a tuple of 9 integers + (as returned by gmtime() in the standard Python time module) or a date + string in any format supported by feedparser. Regardless, it MUST + be in GMT (Greenwich Mean Time). It will be reformatted into an + RFC 1123-compliant date and used as the value of an If-Modified-Since + request header. + + If the agent argument is supplied, it will be used as the value of a + User-Agent request header. + + If the referrer argument is supplied, it will be used as the value of a + Referer[sic] request header. + + If handlers is supplied, it is a list of handlers used to build a + urllib2 opener. + + if request_headers is supplied it is a dictionary of HTTP request headers + that will override the values generated by FeedParser. + + :return: A :class:`StringIO.StringIO` or :class:`io.BytesIO`. + """ + + if hasattr(url_file_stream_or_string, 'read'): + return url_file_stream_or_string.read() + + if isinstance(url_file_stream_or_string, basestring) \ + and urllib.parse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'): + return http.get(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result) + + # try to open with native open function (if url_file_stream_or_string is a filename) + try: + with open(url_file_stream_or_string, 'rb') as f: + data = f.read() + except (IOError, UnicodeEncodeError, TypeError): + # if url_file_stream_or_string is a unicode object that + # cannot be converted to the encoding returned by + # sys.getfilesystemencoding(), a UnicodeEncodeError + # will be thrown + # If url_file_stream_or_string is a string that contains NULL + # (such as an XML document encoded in UTF-32), TypeError will + # be thrown. + pass + else: + return data + + # treat url_file_stream_or_string as string + if not isinstance(url_file_stream_or_string, bytes_): + return url_file_stream_or_string.encode('utf-8') + return url_file_stream_or_string + +LooseFeedParser = type(str('LooseFeedParser'), ( + _LooseFeedParser, _FeedParserMixin, _BaseHTMLProcessor, object +), {}) +StrictFeedParser = type(str('StrictFeedParser'), ( + _StrictFeedParser, _FeedParserMixin, xml.sax.handler.ContentHandler, object +), {}) + +def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, response_headers=None): + '''Parse a feed from a URL, file, stream, or string. + + request_headers, if given, is a dict from http header name to value to add + to the request; this overrides internally generated values. + + :return: A :class:`FeedParserDict`. + ''' + + if not agent: + agent = USER_AGENT + result = FeedParserDict( + bozo = False, + entries = [], + feed = FeedParserDict(), + headers = {}, + ) + + data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result) + + if not data: + return result + + # overwrite existing headers using response_headers + result['headers'].update(response_headers or {}) + + data = convert_to_utf8(result['headers'], data, result) + use_strict_parser = result['encoding'] and True or False + + result['version'], data, entities = replace_doctype(data) + + # Ensure that baseuri is an absolute URI using an acceptable URI scheme. + contentloc = result['headers'].get('content-location', '') + href = result.get('href', '') + baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href + + baselang = result['headers'].get('content-language', None) + if isinstance(baselang, bytes_) and baselang is not None: + baselang = baselang.decode('utf-8', 'ignore') + + if not _XML_AVAILABLE: + use_strict_parser = 0 + if use_strict_parser: + # initialize the SAX parser + feedparser = StrictFeedParser(baseuri, baselang, 'utf-8') + saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS) + saxparser.setFeature(xml.sax.handler.feature_namespaces, 1) + try: + # disable downloading external doctype references, if possible + saxparser.setFeature(xml.sax.handler.feature_external_ges, 0) + except xml.sax.SAXNotSupportedException: + pass + saxparser.setContentHandler(feedparser) + saxparser.setErrorHandler(feedparser) + source = xml.sax.xmlreader.InputSource() + source.setByteStream(_StringIO(data)) + try: + saxparser.parse(source) + except xml.sax.SAXException as e: + result['bozo'] = 1 + result['bozo_exception'] = feedparser.exc or e + use_strict_parser = 0 + if not use_strict_parser and _SGML_AVAILABLE: + feedparser = LooseFeedParser(baseuri, baselang, 'utf-8', entities) + feedparser.feed(data.decode('utf-8', 'replace')) + result['feed'] = feedparser.feeddata + result['entries'] = feedparser.entries + result['version'] = result['version'] or feedparser.version + result['namespaces'] = feedparser.namespacesInUse + return result diff --git a/lib/feedparser/datetimes/__init__.py b/lib/feedparser/datetimes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..96b45e9d8197ee4d226e39a273e22b4eece26898 --- /dev/null +++ b/lib/feedparser/datetimes/__init__.py @@ -0,0 +1,41 @@ +from __future__ import absolute_import + +from .asctime import _parse_date_asctime +from .greek import _parse_date_greek +from .hungarian import _parse_date_hungarian +from .iso8601 import _parse_date_iso8601 +from .korean import _parse_date_onblog, _parse_date_nate +from .perforce import _parse_date_perforce +from .rfc822 import _parse_date_rfc822 +from .w3dtf import _parse_date_w3dtf + +_date_handlers = [] +def registerDateHandler(func): + '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' + _date_handlers.insert(0, func) + +def _parse_date(dateString): + '''Parses a variety of date formats into a 9-tuple in GMT''' + if not dateString: + return None + for handler in _date_handlers: + try: + date9tuple = handler(dateString) + except (KeyError, OverflowError, ValueError): + continue + if not date9tuple: + continue + if len(date9tuple) != 9: + continue + return date9tuple + return None + +registerDateHandler(_parse_date_onblog) +registerDateHandler(_parse_date_nate) +registerDateHandler(_parse_date_greek) +registerDateHandler(_parse_date_hungarian) +registerDateHandler(_parse_date_perforce) +registerDateHandler(_parse_date_asctime) +registerDateHandler(_parse_date_iso8601) +registerDateHandler(_parse_date_rfc822) +registerDateHandler(_parse_date_w3dtf) diff --git a/lib/feedparser/datetimes/asctime.py b/lib/feedparser/datetimes/asctime.py new file mode 100644 index 0000000000000000000000000000000000000000..54fc8cbbf88cfc9d076e1022677369a67d410141 --- /dev/null +++ b/lib/feedparser/datetimes/asctime.py @@ -0,0 +1,32 @@ +from __future__ import absolute_import, unicode_literals + +from .rfc822 import _parse_date_rfc822 + +_months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', + 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] +def _parse_date_asctime(dt): + """Parse asctime-style dates. + + Converts asctime to RFC822-compatible dates and uses the RFC822 parser + to do the actual parsing. + + Supported formats (format is standardized to the first one listed): + + * {weekday name} {month name} dd hh:mm:ss {+-tz} yyyy + * {weekday name} {month name} dd hh:mm:ss yyyy + """ + + parts = dt.split() + + # Insert a GMT timezone, if needed. + if len(parts) == 5: + parts.insert(4, '+0000') + + # Exit if there are not six parts. + if len(parts) != 6: + return None + + # Reassemble the parts in an RFC822-compatible order and parse them. + return _parse_date_rfc822(' '.join([ + parts[0], parts[2], parts[1], parts[5], parts[3], parts[4], + ])) diff --git a/lib/feedparser/datetimes/greek.py b/lib/feedparser/datetimes/greek.py new file mode 100644 index 0000000000000000000000000000000000000000..e47d92152531b4ff5ad99bedf2d156f35c0e233f --- /dev/null +++ b/lib/feedparser/datetimes/greek.py @@ -0,0 +1,56 @@ +from __future__ import absolute_import, unicode_literals + +import re + +from .rfc822 import _parse_date_rfc822 + +# Unicode strings for Greek date strings +_greek_months = \ + { \ + '\u0399\u03b1\u03bd': 'Jan', # c9e1ed in iso-8859-7 + '\u03a6\u03b5\u03b2': 'Feb', # d6e5e2 in iso-8859-7 + '\u039c\u03ac\u03ce': 'Mar', # ccdcfe in iso-8859-7 + '\u039c\u03b1\u03ce': 'Mar', # cce1fe in iso-8859-7 + '\u0391\u03c0\u03c1': 'Apr', # c1f0f1 in iso-8859-7 + '\u039c\u03ac\u03b9': 'May', # ccdce9 in iso-8859-7 + '\u039c\u03b1\u03ca': 'May', # cce1fa in iso-8859-7 + '\u039c\u03b1\u03b9': 'May', # cce1e9 in iso-8859-7 + '\u0399\u03bf\u03cd\u03bd': 'Jun', # c9effded in iso-8859-7 + '\u0399\u03bf\u03bd': 'Jun', # c9efed in iso-8859-7 + '\u0399\u03bf\u03cd\u03bb': 'Jul', # c9effdeb in iso-8859-7 + '\u0399\u03bf\u03bb': 'Jul', # c9f9eb in iso-8859-7 + '\u0391\u03cd\u03b3': 'Aug', # c1fde3 in iso-8859-7 + '\u0391\u03c5\u03b3': 'Aug', # c1f5e3 in iso-8859-7 + '\u03a3\u03b5\u03c0': 'Sep', # d3e5f0 in iso-8859-7 + '\u039f\u03ba\u03c4': 'Oct', # cfeaf4 in iso-8859-7 + '\u039d\u03bf\u03ad': 'Nov', # cdefdd in iso-8859-7 + '\u039d\u03bf\u03b5': 'Nov', # cdefe5 in iso-8859-7 + '\u0394\u03b5\u03ba': 'Dec', # c4e5ea in iso-8859-7 + } + +_greek_wdays = \ + { \ + '\u039a\u03c5\u03c1': 'Sun', # caf5f1 in iso-8859-7 + '\u0394\u03b5\u03c5': 'Mon', # c4e5f5 in iso-8859-7 + '\u03a4\u03c1\u03b9': 'Tue', # d4f1e9 in iso-8859-7 + '\u03a4\u03b5\u03c4': 'Wed', # d4e5f4 in iso-8859-7 + '\u03a0\u03b5\u03bc': 'Thu', # d0e5ec in iso-8859-7 + '\u03a0\u03b1\u03c1': 'Fri', # d0e1f1 in iso-8859-7 + '\u03a3\u03b1\u03b2': 'Sat', # d3e1e2 in iso-8859-7 + } + +_greek_date_format_re = \ + re.compile('([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') + +def _parse_date_greek(dateString): + '''Parse a string according to a Greek 8-bit date format.''' + m = _greek_date_format_re.match(dateString) + if not m: + return + wday = _greek_wdays[m.group(1)] + month = _greek_months[m.group(3)] + rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ + {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ + 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': m.group(8)} + return _parse_date_rfc822(rfc822date) diff --git a/lib/feedparser/datetimes/hungarian.py b/lib/feedparser/datetimes/hungarian.py new file mode 100644 index 0000000000000000000000000000000000000000..11c56b4518561f4d5ce52bc8c3dddd7d845154c8 --- /dev/null +++ b/lib/feedparser/datetimes/hungarian.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import, unicode_literals + +import re + +from .w3dtf import _parse_date_w3dtf + +# Unicode strings for Hungarian date strings +_hungarian_months = \ + { \ + 'janu\u00e1r': '01', # e1 in iso-8859-2 + 'febru\u00e1ri': '02', # e1 in iso-8859-2 + 'm\u00e1rcius': '03', # e1 in iso-8859-2 + '\u00e1prilis': '04', # e1 in iso-8859-2 + 'm\u00e1ujus': '05', # e1 in iso-8859-2 + 'j\u00fanius': '06', # fa in iso-8859-2 + 'j\u00falius': '07', # fa in iso-8859-2 + 'augusztus': '08', + 'szeptember': '09', + 'okt\u00f3ber': '10', # f3 in iso-8859-2 + 'november': '11', + 'december': '12', + } + +_hungarian_date_format_re = \ + re.compile('(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') + +def _parse_date_hungarian(dateString): + '''Parse a string according to a Hungarian 8-bit date format.''' + m = _hungarian_date_format_re.match(dateString) + if not m or m.group(2) not in _hungarian_months: + return None + month = _hungarian_months[m.group(2)] + day = m.group(3) + if len(day) == 1: + day = '0' + day + hour = m.group(4) + if len(hour) == 1: + hour = '0' + hour + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ + {'year': m.group(1), 'month': month, 'day': day,\ + 'hour': hour, 'minute': m.group(5),\ + 'zonediff': m.group(6)} + return _parse_date_w3dtf(w3dtfdate) diff --git a/lib/feedparser/datetimes/iso8601.py b/lib/feedparser/datetimes/iso8601.py new file mode 100644 index 0000000000000000000000000000000000000000..eb36e2db96e835fdbff1765e87da91697145023b --- /dev/null +++ b/lib/feedparser/datetimes/iso8601.py @@ -0,0 +1,120 @@ +from __future__ import absolute_import, unicode_literals + +import re +import time + +# ISO-8601 date parsing routines written by Fazal Majid. +# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 +# parser is beyond the scope of feedparser and would be a worthwhile addition +# to the Python library. +# A single regular expression cannot parse ISO 8601 date formats into groups +# as the standard is highly irregular (for instance is 030104 2003-01-04 or +# 0301-04-01), so we use templates instead. +# Please note the order in templates is significant because we need a +# greedy match. +_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO', + 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', + '-YY-?MM', '-OOO', '-YY', + '--MM-?DD', '--MM', + '---DD', + 'CC', ''] +_iso8601_re = [ + tmpl.replace( + 'YYYY', r'(?P<year>\d{4})').replace( + 'YY', r'(?P<year>\d\d)').replace( + 'MM', r'(?P<month>[01]\d)').replace( + 'DD', r'(?P<day>[0123]\d)').replace( + 'OOO', r'(?P<ordinal>[0123]\d\d)').replace( + 'CC', r'(?P<century>\d\d$)') + + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})' + + r'(:(?P<second>\d{2}))?' + + r'(\.(?P<fracsecond>\d+))?' + + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?' + for tmpl in _iso8601_tmpl] +try: + del tmpl +except NameError: + pass +_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] +try: + del regex +except NameError: + pass + +def _parse_date_iso8601(dateString): + '''Parse a variety of ISO-8601-compatible formats like 20040105''' + m = None + for _iso8601_match in _iso8601_matches: + m = _iso8601_match(dateString) + if m: + break + if not m: + return + if m.span() == (0, 0): + return + params = m.groupdict() + ordinal = params.get('ordinal', 0) + if ordinal: + ordinal = int(ordinal) + else: + ordinal = 0 + year = params.get('year', '--') + if not year or year == '--': + year = time.gmtime()[0] + elif len(year) == 2: + # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 + year = 100 * int(time.gmtime()[0] / 100) + int(year) + else: + year = int(year) + month = params.get('month', '-') + if not month or month == '-': + # ordinals are NOT normalized by mktime, we simulate them + # by setting month=1, day=ordinal + if ordinal: + month = 1 + else: + month = time.gmtime()[1] + month = int(month) + day = params.get('day', 0) + if not day: + # see above + if ordinal: + day = ordinal + elif params.get('century', 0) or \ + params.get('year', 0) or params.get('month', 0): + day = 1 + else: + day = time.gmtime()[2] + else: + day = int(day) + # special case of the century - is the first year of the 21st century + # 2000 or 2001 ? The debate goes on... + if 'century' in params: + year = (int(params['century']) - 1) * 100 + 1 + # in ISO 8601 most fields are optional + for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: + if not params.get(field, None): + params[field] = 0 + hour = int(params.get('hour', 0)) + minute = int(params.get('minute', 0)) + second = int(float(params.get('second', 0))) + # weekday is normalized by mktime(), we can ignore it + weekday = 0 + daylight_savings_flag = -1 + tm = [year, month, day, hour, minute, second, weekday, + ordinal, daylight_savings_flag] + # ISO 8601 time zone adjustments + tz = params.get('tz') + if tz and tz != 'Z': + if tz[0] == '-': + tm[3] += int(params.get('tzhour', 0)) + tm[4] += int(params.get('tzmin', 0)) + elif tz[0] == '+': + tm[3] -= int(params.get('tzhour', 0)) + tm[4] -= int(params.get('tzmin', 0)) + else: + return None + # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) + # which is guaranteed to normalize d/m/y/h/m/s. + # Many implementations have bugs, but we'll pretend they don't. + return time.localtime(time.mktime(tuple(tm))) diff --git a/lib/feedparser/datetimes/korean.py b/lib/feedparser/datetimes/korean.py new file mode 100644 index 0000000000000000000000000000000000000000..7e6e0910e2aa15cb9286a448f83a6b2c1105e618 --- /dev/null +++ b/lib/feedparser/datetimes/korean.py @@ -0,0 +1,47 @@ +from __future__ import absolute_import, unicode_literals + +import re + +from .w3dtf import _parse_date_w3dtf + +# 8-bit date handling routines written by ytrewq1. +_korean_year = '\ub144' # b3e2 in euc-kr +_korean_month = '\uc6d4' # bff9 in euc-kr +_korean_day = '\uc77c' # c0cf in euc-kr +_korean_am = '\uc624\uc804' # bfc0 c0fc in euc-kr +_korean_pm = '\uc624\ud6c4' # bfc0 c8c4 in euc-kr + +_korean_onblog_date_re = \ + re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ + (_korean_year, _korean_month, _korean_day)) +_korean_nate_date_re = \ + re.compile('(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ + (_korean_am, _korean_pm)) +def _parse_date_onblog(dateString): + '''Parse a string according to the OnBlog 8-bit date format''' + m = _korean_onblog_date_re.match(dateString) + if not m: + return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + return _parse_date_w3dtf(w3dtfdate) + +def _parse_date_nate(dateString): + '''Parse a string according to the Nate 8-bit date format''' + m = _korean_nate_date_re.match(dateString) + if not m: + return + hour = int(m.group(5)) + ampm = m.group(4) + if (ampm == _korean_pm): + hour += 12 + hour = str(hour) + if len(hour) == 1: + hour = '0' + hour + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': '+09:00'} + return _parse_date_w3dtf(w3dtfdate) diff --git a/lib/feedparser/datetimes/perforce.py b/lib/feedparser/datetimes/perforce.py new file mode 100644 index 0000000000000000000000000000000000000000..f5b7d8cc53684b550d2a61af675369e96b9b355f --- /dev/null +++ b/lib/feedparser/datetimes/perforce.py @@ -0,0 +1,25 @@ +from __future__ import absolute_import, unicode_literals + +try: + import rfc822 +except ImportError: + from email import _parseaddr as rfc822 + +import re +import time + +def _parse_date_perforce(aDateString): + """parse a date in yyyy/mm/dd hh:mm:ss TTT format""" + # Fri, 2006/09/15 08:19:53 EDT + _my_date_pattern = re.compile( \ + r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})') + + m = _my_date_pattern.search(aDateString) + if m is None: + return None + dow, year, month, day, hour, minute, second, tz = m.groups() + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz) + tm = rfc822.parsedate_tz(dateString) + if tm: + return time.gmtime(rfc822.mktime_tz(tm)) diff --git a/lib/feedparser/datetimes/rfc822.py b/lib/feedparser/datetimes/rfc822.py new file mode 100644 index 0000000000000000000000000000000000000000..0093bf654c745ddfa4f204618e69349e48490dca --- /dev/null +++ b/lib/feedparser/datetimes/rfc822.py @@ -0,0 +1,109 @@ +from __future__ import absolute_import, unicode_literals + +import datetime + +timezonenames = { + 'ut': 0, 'gmt': 0, 'z': 0, + 'adt': -3, 'ast': -4, 'at': -4, + 'edt': -4, 'est': -5, 'et': -5, + 'cdt': -5, 'cst': -6, 'ct': -6, + 'mdt': -6, 'mst': -7, 'mt': -7, + 'pdt': -7, 'pst': -8, 'pt': -8, + 'a': -1, 'n': 1, + 'm': -12, 'y': 12, + 'met': 1, 'mest': 2, +} + +def _parse_date_rfc822(date): + """Parse RFC 822 dates and times + http://tools.ietf.org/html/rfc822#section-5 + + There are some formatting differences that are accounted for: + 1. Years may be two or four digits. + 2. The month and day can be swapped. + 3. Additional timezone names are supported. + 4. A default time and timezone are assumed if only a date is present. + """ + + daynames = set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']) + months = { + 'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6, + 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12, + } + + parts = date.lower().split() + if len(parts) < 5: + # Assume that the time and timezone are missing + parts.extend(('00:00:00', '0000')) + # Remove the day name + if parts[0][:3] in daynames: + parts = parts[1:] + if len(parts) < 5: + # If there are still fewer than five parts, there's not enough + # information to interpret this + return None + try: + day = int(parts[0]) + except ValueError: + # Check if the day and month are swapped + if months.get(parts[0][:3]): + try: + day = int(parts[1]) + except ValueError: + return None + else: + parts[1] = parts[0] + else: + return None + month = months.get(parts[1][:3]) + if not month: + return None + try: + year = int(parts[2]) + except ValueError: + return None + # Normalize two-digit years: + # Anything in the 90's is interpreted as 1990 and on + # Anything 89 or less is interpreted as 2089 or before + if len(parts[2]) <= 2: + year += (1900, 2000)[year < 90] + timeparts = parts[3].split(':') + timeparts = timeparts + ([0] * (3 - len(timeparts))) + try: + (hour, minute, second) = map(int, timeparts) + except ValueError: + return None + tzhour = 0 + tzmin = 0 + # Strip 'Etc/' from the timezone + if parts[4].startswith('etc/'): + parts[4] = parts[4][4:] + # Normalize timezones that start with 'gmt': + # GMT-05:00 => -0500 + # GMT => GMT + if parts[4].startswith('gmt'): + parts[4] = ''.join(parts[4][3:].split(':')) or 'gmt' + # Handle timezones like '-0500', '+0500', and 'EST' + if parts[4] and parts[4][0] in ('-', '+'): + try: + tzhour = int(parts[4][1:3]) + tzmin = int(parts[4][3:]) + except ValueError: + return None + if parts[4].startswith('-'): + tzhour = tzhour * -1 + tzmin = tzmin * -1 + else: + tzhour = timezonenames.get(parts[4], 0) + # Create the datetime object and timezone delta objects + try: + stamp = datetime.datetime(year, month, day, hour, minute, second) + except ValueError: + return None + delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour) + # Return the date and timestamp in a UTC 9-tuple + try: + return (stamp - delta).utctimetuple() + except (OverflowError, ValueError): + # IronPython throws ValueErrors instead of OverflowErrors + return None diff --git a/lib/feedparser/datetimes/w3dtf.py b/lib/feedparser/datetimes/w3dtf.py new file mode 100644 index 0000000000000000000000000000000000000000..02bc712e9695bf570492e59fe5380cad4e06ba40 --- /dev/null +++ b/lib/feedparser/datetimes/w3dtf.py @@ -0,0 +1,88 @@ +from __future__ import absolute_import, unicode_literals + +import datetime + +timezonenames = { + 'ut': 0, 'gmt': 0, 'z': 0, + 'adt': -3, 'ast': -4, 'at': -4, + 'edt': -4, 'est': -5, 'et': -5, + 'cdt': -5, 'cst': -6, 'ct': -6, + 'mdt': -6, 'mst': -7, 'mt': -7, + 'pdt': -7, 'pst': -8, 'pt': -8, + 'a': -1, 'n': 1, + 'm': -12, 'y': 12, +} +# W3 date and time format parser +# http://www.w3.org/TR/NOTE-datetime +# Also supports MSSQL-style datetimes as defined at: +# http://msdn.microsoft.com/en-us/library/ms186724.aspx +# (basically, allow a space as a date/time/timezone separator) +def _parse_date_w3dtf(datestr): + if not datestr.strip(): + return None + parts = datestr.lower().split('t') + if len(parts) == 1: + # This may be a date only, or may be an MSSQL-style date + parts = parts[0].split() + if len(parts) == 1: + # Treat this as a date only + parts.append('00:00:00z') + elif len(parts) > 2: + return None + date = parts[0].split('-', 2) + if not date or len(date[0]) != 4: + return None + # Ensure that `date` has 3 elements. Using '1' sets the default + # month to January and the default day to the 1st of the month. + date.extend(['1'] * (3 - len(date))) + try: + year, month, day = [int(i) for i in date] + except ValueError: + # `date` may have more than 3 elements or may contain + # non-integer strings. + return None + if parts[1].endswith('z'): + parts[1] = parts[1][:-1] + parts.append('z') + # Append the numeric timezone offset, if any, to parts. + # If this is an MSSQL-style date then parts[2] already contains + # the timezone information, so `append()` will not affect it. + # Add 1 to each value so that if `find()` returns -1 it will be + # treated as False. + loc = parts[1].find('-') + 1 or parts[1].find('+') + 1 or len(parts[1]) + 1 + loc = loc - 1 + parts.append(parts[1][loc:]) + parts[1] = parts[1][:loc] + time = parts[1].split(':', 2) + # Ensure that time has 3 elements. Using '0' means that the + # minutes and seconds, if missing, will default to 0. + time.extend(['0'] * (3 - len(time))) + tzhour = 0 + tzmin = 0 + if parts[2][:1] in ('-', '+'): + try: + tzhour = int(parts[2][1:3]) + tzmin = int(parts[2][4:]) + except ValueError: + return None + if parts[2].startswith('-'): + tzhour = tzhour * -1 + tzmin = tzmin * -1 + else: + tzhour = timezonenames.get(parts[2], 0) + try: + hour, minute, second = [int(float(i)) for i in time] + except ValueError: + return None + # Create the datetime object and timezone delta objects + try: + stamp = datetime.datetime(year, month, day, hour, minute, second) + except ValueError: + return None + delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour) + # Return the date and timestamp in a UTC 9-tuple + try: + return (stamp - delta).utctimetuple() + except (OverflowError, ValueError): + # IronPython throws ValueErrors instead of OverflowErrors + return None diff --git a/lib/feedparser/encodings.py b/lib/feedparser/encodings.py new file mode 100644 index 0000000000000000000000000000000000000000..c4874be68bd51a6e4b9fdf1af0572d5b3785d9dd --- /dev/null +++ b/lib/feedparser/encodings.py @@ -0,0 +1,279 @@ +# Character encoding routines +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +import cgi +import codecs +import collections +import re + +try: + import chardet +except ImportError: + chardet = None + lazy_chardet_encoding = None +else: + def lazy_chardet_encoding(): + chardet_encoding = chardet.detect(data)['encoding'] + if not chardet_encoding: + chardet_encoding = '' + if isinstance(chardet_encoding, bytes_): + chardet_encoding = chardet_encoding.encode('ascii', 'ignore') + return chardet_encoding + +from .exceptions import ( + CharacterEncodingOverride, CharacterEncodingUnknown, NonXMLContentType, +) + +bytes_ = type(b'') +unicode_ = type('') + +# Each marker represents some of the characters of the opening XML +# processing instruction ('<?xm') in the specified encoding. +EBCDIC_MARKER = b'\x4C\x6F\xA7\x94' +UTF16BE_MARKER = b'\x00\x3C\x00\x3F' +UTF16LE_MARKER = b'\x3C\x00\x3F\x00' +UTF32BE_MARKER = b'\x00\x00\x00\x3C' +UTF32LE_MARKER = b'\x3C\x00\x00\x00' + +ZERO_BYTES = '\x00\x00' + +# Match the opening XML declaration. +# Example: <?xml version="1.0" encoding="utf-8"?> +RE_XML_DECLARATION = re.compile('^<\?xml[^>]*?>') + +# Capture the value of the XML processing instruction's encoding attribute. +# Example: <?xml version="1.0" encoding="utf-8"?> +RE_XML_PI_ENCODING = re.compile(b'^<\?.*encoding=[\'"](.*?)[\'"].*\?>') + +def convert_to_utf8(http_headers, data, result): + '''Detect and convert the character encoding to UTF-8. + + http_headers is a dictionary + data is a raw string (not Unicode)''' + + # This is so much trickier than it sounds, it's not even funny. + # According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type + # is application/xml, application/*+xml, + # application/xml-external-parsed-entity, or application/xml-dtd, + # the encoding given in the charset parameter of the HTTP Content-Type + # takes precedence over the encoding given in the XML prefix within the + # document, and defaults to 'utf-8' if neither are specified. But, if + # the HTTP Content-Type is text/xml, text/*+xml, or + # text/xml-external-parsed-entity, the encoding given in the XML prefix + # within the document is ALWAYS IGNORED and only the encoding given in + # the charset parameter of the HTTP Content-Type header should be + # respected, and it defaults to 'us-ascii' if not specified. + + # Furthermore, discussion on the atom-syntax mailing list with the + # author of RFC 3023 leads me to the conclusion that any document + # served with a Content-Type of text/* and no charset parameter + # must be treated as us-ascii. (We now do this.) And also that it + # must always be flagged as non-well-formed. (We now do this too.) + + # If Content-Type is unspecified (input was local file or non-HTTP source) + # or unrecognized (server just got it totally wrong), then go by the + # encoding given in the XML prefix of the document and default to + # 'iso-8859-1' as per the HTTP specification (RFC 2616). + + # Then, assuming we didn't find a character encoding in the HTTP headers + # (and the HTTP Content-type allowed us to look in the body), we need + # to sniff the first few bytes of the XML data and try to determine + # whether the encoding is ASCII-compatible. Section F of the XML + # specification shows the way here: + # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + + # If the sniffed encoding is not ASCII-compatible, we need to make it + # ASCII compatible so that we can sniff further into the XML declaration + # to find the encoding attribute, which will tell us the true encoding. + + # Of course, none of this guarantees that we will be able to parse the + # feed in the declared character encoding (assuming it was declared + # correctly, which many are not). iconv_codec can help a lot; + # you should definitely install it if you can. + # http://cjkpython.i18n.org/ + + bom_encoding = '' + xml_encoding = '' + rfc3023_encoding = '' + + # Look at the first few bytes of the document to guess what + # its encoding may be. We only need to decode enough of the + # document that we can use an ASCII-compatible regular + # expression to search for an XML encoding declaration. + # The heuristic follows the XML specification, section F: + # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + # Check for BOMs first. + if data[:4] == codecs.BOM_UTF32_BE: + bom_encoding = 'utf-32be' + data = data[4:] + elif data[:4] == codecs.BOM_UTF32_LE: + bom_encoding = 'utf-32le' + data = data[4:] + elif data[:2] == codecs.BOM_UTF16_BE and data[2:4] != ZERO_BYTES: + bom_encoding = 'utf-16be' + data = data[2:] + elif data[:2] == codecs.BOM_UTF16_LE and data[2:4] != ZERO_BYTES: + bom_encoding = 'utf-16le' + data = data[2:] + elif data[:3] == codecs.BOM_UTF8: + bom_encoding = 'utf-8' + data = data[3:] + # Check for the characters '<?xm' in several encodings. + elif data[:4] == EBCDIC_MARKER: + bom_encoding = 'cp037' + elif data[:4] == UTF16BE_MARKER: + bom_encoding = 'utf-16be' + elif data[:4] == UTF16LE_MARKER: + bom_encoding = 'utf-16le' + elif data[:4] == UTF32BE_MARKER: + bom_encoding = 'utf-32be' + elif data[:4] == UTF32LE_MARKER: + bom_encoding = 'utf-32le' + + tempdata = data + try: + if bom_encoding: + tempdata = data.decode(bom_encoding).encode('utf-8') + except (UnicodeDecodeError, LookupError): + # feedparser recognizes UTF-32 encodings that aren't + # available in Python 2.4 and 2.5, so it's possible to + # encounter a LookupError during decoding. + xml_encoding_match = None + else: + xml_encoding_match = RE_XML_PI_ENCODING.match(tempdata) + + if xml_encoding_match: + xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower() + # Normalize the xml_encoding if necessary. + if bom_encoding and (xml_encoding in ( + 'u16', 'utf-16', 'utf16', 'utf_16', + 'u32', 'utf-32', 'utf32', 'utf_32', + 'iso-10646-ucs-2', 'iso-10646-ucs-4', + 'csucs4', 'csunicode', 'ucs-2', 'ucs-4' + )): + xml_encoding = bom_encoding + + # Find the HTTP Content-Type and, hopefully, a character + # encoding provided by the server. The Content-Type is used + # to choose the "correct" encoding among the BOM encoding, + # XML declaration encoding, and HTTP encoding, following the + # heuristic defined in RFC 3023. + http_content_type = http_headers.get('content-type') or '' + http_content_type, params = cgi.parse_header(http_content_type) + http_encoding = params.get('charset', '').replace("'", "") + if isinstance(http_encoding, bytes_): + http_encoding = http_encoding.decode('utf-8', 'ignore') + + acceptable_content_type = 0 + application_content_types = ('application/xml', 'application/xml-dtd', + 'application/xml-external-parsed-entity') + text_content_types = ('text/xml', 'text/xml-external-parsed-entity') + if (http_content_type in application_content_types) or \ + (http_content_type.startswith('application/') and + http_content_type.endswith('+xml')): + acceptable_content_type = 1 + rfc3023_encoding = http_encoding or xml_encoding or 'utf-8' + elif (http_content_type in text_content_types) or \ + (http_content_type.startswith('text/') and + http_content_type.endswith('+xml')): + acceptable_content_type = 1 + rfc3023_encoding = http_encoding or 'us-ascii' + elif http_content_type.startswith('text/'): + rfc3023_encoding = http_encoding or 'us-ascii' + elif http_headers and 'content-type' not in http_headers: + rfc3023_encoding = xml_encoding or 'iso-8859-1' + else: + rfc3023_encoding = xml_encoding or 'utf-8' + # gb18030 is a superset of gb2312, so always replace gb2312 + # with gb18030 for greater compatibility. + if rfc3023_encoding.lower() == 'gb2312': + rfc3023_encoding = 'gb18030' + if xml_encoding.lower() == 'gb2312': + xml_encoding = 'gb18030' + + # there are four encodings to keep track of: + # - http_encoding is the encoding declared in the Content-Type HTTP header + # - xml_encoding is the encoding declared in the <?xml declaration + # - bom_encoding is the encoding sniffed from the first 4 bytes of the XML data + # - rfc3023_encoding is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications + error = None + + if http_headers and (not acceptable_content_type): + if 'content-type' in http_headers: + msg = '%s is not an XML media type' % http_headers['content-type'] + else: + msg = 'no Content-type specified' + error = NonXMLContentType(msg) + + # determine character encoding + known_encoding = 0 + tried_encodings = [] + # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM + for proposed_encoding in (rfc3023_encoding, xml_encoding, bom_encoding, + lazy_chardet_encoding, 'utf-8', 'windows-1252', 'iso-8859-2'): + if isinstance(proposed_encoding, collections.Callable): + proposed_encoding = proposed_encoding() + if not proposed_encoding: + continue + if proposed_encoding in tried_encodings: + continue + tried_encodings.append(proposed_encoding) + try: + data = data.decode(proposed_encoding) + except (UnicodeDecodeError, LookupError): + pass + else: + known_encoding = 1 + # Update the encoding in the opening XML processing instruction. + new_declaration = '''<?xml version='1.0' encoding='utf-8'?>''' + if RE_XML_DECLARATION.search(data): + data = RE_XML_DECLARATION.sub(new_declaration, data) + else: + data = new_declaration + '\n' + data + data = data.encode('utf-8') + break + # if still no luck, give up + if not known_encoding: + error = CharacterEncodingUnknown( + 'document encoding unknown, I tried ' + + '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' % + (rfc3023_encoding, xml_encoding)) + rfc3023_encoding = '' + elif proposed_encoding != rfc3023_encoding: + error = CharacterEncodingOverride( + 'document declared as %s, but parsed as %s' % + (rfc3023_encoding, proposed_encoding)) + rfc3023_encoding = proposed_encoding + + result['encoding'] = rfc3023_encoding + if error: + result['bozo'] = True + result['bozo_exception'] = error + return data diff --git a/lib/feedparser/exceptions.py b/lib/feedparser/exceptions.py new file mode 100644 index 0000000000000000000000000000000000000000..9e57775de5b909edd5fc3ee94b707326664b5b3b --- /dev/null +++ b/lib/feedparser/exceptions.py @@ -0,0 +1,52 @@ +# Exceptions used throughout feedparser +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +__all__ = [ + 'ThingsNobodyCaresAboutButMe', + 'CharacterEncodingOverride', + 'CharacterEncodingUnknown', + 'NonXMLContentType', + 'UndeclaredNamespace', +] + +class ThingsNobodyCaresAboutButMe(Exception): + pass + +class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): + pass + +class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): + pass + +class NonXMLContentType(ThingsNobodyCaresAboutButMe): + pass + +class UndeclaredNamespace(Exception): + pass diff --git a/lib/feedparser/feedparser.py b/lib/feedparser/feedparser.py deleted file mode 100644 index ef4377fe9432dbee3f0af3bacf514c1d53995c39..0000000000000000000000000000000000000000 --- a/lib/feedparser/feedparser.py +++ /dev/null @@ -1,3820 +0,0 @@ -"""Universal feed parser - -Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds - -Visit https://code.google.com/p/feedparser/ for the latest version -Visit http://packages.python.org/feedparser/ for the latest documentation - -Required: Python 2.4 or later -Recommended: iconv_codec <http://cjkpython.i18n.org/> -""" - -__version__ = "5.1.3" -__license__ = """ -Copyright (c) 2010-2013 Kurt McKee <contactme@kurtmckee.org> -Copyright (c) 2002-2008 Mark Pilgrim -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE.""" -__author__ = "Mark Pilgrim <http://diveintomark.org/>" -__contributors__ = ["Jason Diamond <http://injektilo.org/>", - "John Beimler <http://john.beimler.org/>", - "Fazal Majid <http://www.majid.info/mylos/weblog/>", - "Aaron Swartz <http://aaronsw.com/>", - "Kevin Marks <http://epeus.blogspot.com/>", - "Sam Ruby <http://intertwingly.net/>", - "Ade Oshineye <http://blog.oshineye.com/>", - "Martin Pool <http://sourcefrog.net/>", - "Kurt McKee <http://kurtmckee.org/>", - "Bernd Schlapsi <https://github.com/brot>",] - -# HTTP "User-Agent" header to send to servers when downloading feeds. -# If you are embedding feedparser in a larger application, you should -# change this to your application name and URL. -USER_AGENT = "UniversalFeedParser/%s +https://code.google.com/p/feedparser/" % __version__ - -# HTTP "Accept" header to send to servers when downloading feeds. If you don't -# want to send an Accept header, set this to None. -ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" - -# List of preferred XML parsers, by SAX driver name. These will be tried first, -# but if they're not installed, Python will keep searching through its own list -# of pre-installed parsers until it finds one that supports everything we need. -PREFERRED_XML_PARSERS = ["drv_libxml2"] - -# If you want feedparser to automatically resolve all relative URIs, set this -# to 1. -RESOLVE_RELATIVE_URIS = 1 - -# If you want feedparser to automatically sanitize all potentially unsafe -# HTML content, set this to 1. -SANITIZE_HTML = 1 - -# ---------- Python 3 modules (make it work if possible) ---------- -try: - import rfc822 -except ImportError: - from email import _parseaddr as rfc822 - -try: - # Python 3.1 introduces bytes.maketrans and simultaneously - # deprecates string.maketrans; use bytes.maketrans if possible - _maketrans = bytes.maketrans -except (NameError, AttributeError): - import string - _maketrans = string.maketrans - -# base64 support for Atom feeds that contain embedded binary data -try: - import base64, binascii -except ImportError: - base64 = binascii = None -else: - # Python 3.1 deprecates decodestring in favor of decodebytes - _base64decode = getattr(base64, 'decodebytes', base64.decodestring) - -# _s2bytes: convert a UTF-8 str to bytes if the interpreter is Python 3 -# _l2bytes: convert a list of ints to bytes if the interpreter is Python 3 -try: - if bytes is str: - # In Python 2.5 and below, bytes doesn't exist (NameError) - # In Python 2.6 and above, bytes and str are the same type - raise NameError -except NameError: - # Python 2 - def _s2bytes(s): - return s - def _l2bytes(l): - return ''.join(map(chr, l)) -else: - # Python 3 - def _s2bytes(s): - return bytes(s, 'utf8') - def _l2bytes(l): - return bytes(l) - -# If you want feedparser to allow all URL schemes, set this to () -# List culled from Python's urlparse documentation at: -# http://docs.python.org/library/urlparse.html -# as well as from "URI scheme" at Wikipedia: -# https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme -# Many more will likely need to be added! -ACCEPTABLE_URI_SCHEMES = ( - 'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'magnet', - 'mailto', 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu', - 'sftp', 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet', - 'wais', - # Additional common-but-unofficial schemes - 'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs', - 'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg', -) -#ACCEPTABLE_URI_SCHEMES = () - -# ---------- required modules (should come with any Python distribution) ---------- -import cgi -import codecs -import copy -import datetime -import itertools -import re -import struct -import time -import types -import urllib -import urllib2 -import urlparse -import warnings - -from htmlentitydefs import name2codepoint, codepoint2name, entitydefs - -try: - from io import BytesIO as _StringIO -except ImportError: - try: - from cStringIO import StringIO as _StringIO - except ImportError: - from StringIO import StringIO as _StringIO - -# ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- - -# gzip is included with most Python distributions, but may not be available if you compiled your own -try: - import gzip -except ImportError: - gzip = None -try: - import zlib -except ImportError: - zlib = None - -# If a real XML parser is available, feedparser will attempt to use it. feedparser has -# been tested with the built-in SAX parser and libxml2. On platforms where the -# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some -# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. -try: - import xml.sax - from xml.sax.saxutils import escape as _xmlescape -except ImportError: - _XML_AVAILABLE = 0 - def _xmlescape(data,entities={}): - data = data.replace('&', '&') - data = data.replace('>', '>') - data = data.replace('<', '<') - for char, entity in entities: - data = data.replace(char, entity) - return data -else: - try: - xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers - except xml.sax.SAXReaderNotAvailable: - _XML_AVAILABLE = 0 - 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 and content santizing -try: - import sgmllib -except ImportError: - # This is probably Python 3, which doesn't include sgmllib anymore - _SGML_AVAILABLE = 0 - - # Mock sgmllib enough to allow subclassing later on - class sgmllib(object): - class SGMLParser(object): - def goahead(self, i): - pass - def parse_starttag(self, i): - pass -else: - _SGML_AVAILABLE = 1 - - # sgmllib defines a number of module-level regular expressions that are - # insufficient for the XML parsing feedparser needs. Rather than modify - # the variables directly in sgmllib, they're defined here using the same - # names, and the compiled code objects of several sgmllib.SGMLParser - # methods are copied into _BaseHTMLProcessor so that they execute in - # feedparser's scope instead of sgmllib's scope. - charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);') - tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') - attrfind = re.compile( - r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)[$]?(\s*=\s*' - r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?' - ) - - # Unfortunately, these must be copied over to prevent NameError exceptions - entityref = sgmllib.entityref - incomplete = sgmllib.incomplete - interesting = sgmllib.interesting - shorttag = sgmllib.shorttag - shorttagopen = sgmllib.shorttagopen - starttagopen = sgmllib.starttagopen - - class _EndBracketRegEx: - def __init__(self): - # Overriding the built-in sgmllib.endbracket regex allows the - # parser to find angle brackets embedded in element attributes. - self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''') - def search(self, target, index=0): - match = self.endbracket.match(target, index) - if match is not None: - # Returning a new object in the calling thread's context - # resolves a thread-safety. - return EndBracketMatch(match) - return None - class EndBracketMatch: - def __init__(self, match): - self.match = match - def start(self, n): - return self.match.end(n) - endbracket = _EndBracketRegEx() - - -# iconv_codec provides support for more character encodings. -# It's available from http://cjkpython.i18n.org/ -try: - import iconv_codec -except ImportError: - pass - -# chardet library auto-detects character encodings -# Download from http://chardet.feedparser.org/ -try: - import chardet -except ImportError: - chardet = None - -# ---------- don't touch these ---------- -class ThingsNobodyCaresAboutButMe(Exception): pass -class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass -class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass -class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass -class UndeclaredNamespace(Exception): pass - -SUPPORTED_VERSIONS = {'': u'unknown', - 'rss090': u'RSS 0.90', - 'rss091n': u'RSS 0.91 (Netscape)', - 'rss091u': u'RSS 0.91 (Userland)', - 'rss092': u'RSS 0.92', - 'rss093': u'RSS 0.93', - 'rss094': u'RSS 0.94', - 'rss20': u'RSS 2.0', - 'rss10': u'RSS 1.0', - 'rss': u'RSS (unknown version)', - 'atom01': u'Atom 0.1', - 'atom02': u'Atom 0.2', - 'atom03': u'Atom 0.3', - 'atom10': u'Atom 1.0', - 'atom': u'Atom (unknown version)', - 'cdf': u'CDF', - } - -class FeedParserDict(dict): - keymap = {'channel': 'feed', - 'items': 'entries', - 'guid': 'id', - 'date': 'updated', - 'date_parsed': 'updated_parsed', - 'description': ['summary', 'subtitle'], - 'description_detail': ['summary_detail', 'subtitle_detail'], - 'url': ['href'], - 'modified': 'updated', - 'modified_parsed': 'updated_parsed', - 'issued': 'published', - 'issued_parsed': 'published_parsed', - 'copyright': 'rights', - 'copyright_detail': 'rights_detail', - 'tagline': 'subtitle', - 'tagline_detail': 'subtitle_detail'} - def __getitem__(self, key): - if key == 'category': - try: - return dict.__getitem__(self, 'tags')[0]['term'] - except IndexError: - raise KeyError, "object doesn't have key 'category'" - elif key == 'enclosures': - norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel']) - return [norel(link) for link in dict.__getitem__(self, 'links') if link['rel']==u'enclosure'] - elif key == 'license': - for link in dict.__getitem__(self, 'links'): - if link['rel']==u'license' and 'href' in link: - return link['href'] - elif key == 'updated': - # Temporarily help developers out by keeping the old - # broken behavior that was reported in issue 310. - # This fix was proposed in issue 328. - if not dict.__contains__(self, 'updated') and \ - dict.__contains__(self, 'published'): - warnings.warn("To avoid breaking existing software while " - "fixing issue 310, a temporary mapping has been created " - "from `updated` to `published` if `updated` doesn't " - "exist. This fallback will be removed in a future version " - "of feedparser.", DeprecationWarning) - return dict.__getitem__(self, 'published') - return dict.__getitem__(self, 'updated') - elif key == 'updated_parsed': - if not dict.__contains__(self, 'updated_parsed') and \ - dict.__contains__(self, 'published_parsed'): - warnings.warn("To avoid breaking existing software while " - "fixing issue 310, a temporary mapping has been created " - "from `updated_parsed` to `published_parsed` if " - "`updated_parsed` doesn't exist. This fallback will be " - "removed in a future version of feedparser.", - DeprecationWarning) - return dict.__getitem__(self, 'published_parsed') - return dict.__getitem__(self, 'updated_parsed') - else: - realkey = self.keymap.get(key, key) - if isinstance(realkey, list): - for k in realkey: - if dict.__contains__(self, k): - return dict.__getitem__(self, k) - elif dict.__contains__(self, realkey): - return dict.__getitem__(self, realkey) - return dict.__getitem__(self, key) - - def __contains__(self, key): - if key in ('updated', 'updated_parsed'): - # Temporarily help developers out by keeping the old - # broken behavior that was reported in issue 310. - # This fix was proposed in issue 328. - return dict.__contains__(self, key) - try: - self.__getitem__(key) - except KeyError: - return False - else: - return True - - has_key = __contains__ - - def get(self, key, default=None): - try: - return self.__getitem__(key) - except KeyError: - return default - - def __setitem__(self, key, value): - key = self.keymap.get(key, key) - if isinstance(key, list): - key = key[0] - return dict.__setitem__(self, key, value) - - def setdefault(self, key, value): - if key not in self: - self[key] = value - return value - return self[key] - - def __getattr__(self, key): - # __getattribute__() is called first; this will be called - # only if an attribute was not already found - try: - return self.__getitem__(key) - except KeyError: - raise AttributeError, "object has no attribute '%s'" % key - - def __hash__(self): - return id(self) - -_cp1252 = { - 128: unichr(8364), # euro sign - 130: unichr(8218), # single low-9 quotation mark - 131: unichr( 402), # latin small letter f with hook - 132: unichr(8222), # double low-9 quotation mark - 133: unichr(8230), # horizontal ellipsis - 134: unichr(8224), # dagger - 135: unichr(8225), # double dagger - 136: unichr( 710), # modifier letter circumflex accent - 137: unichr(8240), # per mille sign - 138: unichr( 352), # latin capital letter s with caron - 139: unichr(8249), # single left-pointing angle quotation mark - 140: unichr( 338), # latin capital ligature oe - 142: unichr( 381), # latin capital letter z with caron - 145: unichr(8216), # left single quotation mark - 146: unichr(8217), # right single quotation mark - 147: unichr(8220), # left double quotation mark - 148: unichr(8221), # right double quotation mark - 149: unichr(8226), # bullet - 150: unichr(8211), # en dash - 151: unichr(8212), # em dash - 152: unichr( 732), # small tilde - 153: unichr(8482), # trade mark sign - 154: unichr( 353), # latin small letter s with caron - 155: unichr(8250), # single right-pointing angle quotation mark - 156: unichr( 339), # latin small ligature oe - 158: unichr( 382), # latin small letter z with caron - 159: unichr( 376), # latin capital letter y with diaeresis -} - -_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)') -def _urljoin(base, uri): - uri = _urifixer.sub(r'\1\3', uri) - if not isinstance(uri, unicode): - uri = uri.decode('utf-8', 'ignore') - try: - uri = urlparse.urljoin(base, uri) - except ValueError: - uri = u'' - if not isinstance(uri, unicode): - return uri.decode('utf-8', 'ignore') - return uri - -class _FeedParserMixin: - namespaces = { - '': '', - 'http://backend.userland.com/rss': '', - 'http://blogs.law.harvard.edu/tech/rss': '', - 'http://purl.org/rss/1.0/': '', - 'http://my.netscape.com/rdf/simple/0.9/': '', - 'http://example.com/newformat#': '', - 'http://example.com/necho': '', - 'http://purl.org/echo/': '', - 'uri/of/echo/namespace#': '', - 'http://purl.org/pie/': '', - 'http://purl.org/atom/ns#': '', - 'http://www.w3.org/2005/Atom': '', - 'http://purl.org/rss/1.0/modules/rss091#': '', - - 'http://webns.net/mvcb/': 'admin', - 'http://purl.org/rss/1.0/modules/aggregation/': 'ag', - 'http://purl.org/rss/1.0/modules/annotate/': 'annotate', - 'http://media.tangent.org/rss/1.0/': 'audio', - 'http://backend.userland.com/blogChannelModule': 'blogChannel', - 'http://web.resource.org/cc/': 'cc', - 'http://backend.userland.com/creativeCommonsRssModule': 'creativeCommons', - 'http://purl.org/rss/1.0/modules/company': 'co', - 'http://purl.org/rss/1.0/modules/content/': 'content', - 'http://my.theinfo.org/changed/1.0/rss/': 'cp', - 'http://purl.org/dc/elements/1.1/': 'dc', - 'http://purl.org/dc/terms/': 'dcterms', - 'http://purl.org/rss/1.0/modules/email/': 'email', - 'http://purl.org/rss/1.0/modules/event/': 'ev', - 'http://rssnamespace.org/feedburner/ext/1.0': 'feedburner', - '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', - 'http://example.com/DTDs/PodCast-1.0.dtd': 'itunes', - 'http://purl.org/rss/1.0/modules/link/': 'l', - 'http://search.yahoo.com/mrss': 'media', - # Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace - 'http://search.yahoo.com/mrss/': 'media', - 'http://madskills.com/public/xml/rss/module/pingback/': 'pingback', - 'http://prismstandard.org/namespaces/1.2/basic/': 'prism', - 'http://www.w3.org/1999/02/22-rdf-syntax-ns#': 'rdf', - 'http://www.w3.org/2000/01/rdf-schema#': 'rdfs', - 'http://purl.org/rss/1.0/modules/reference/': 'ref', - 'http://purl.org/rss/1.0/modules/richequiv/': 'reqv', - 'http://purl.org/rss/1.0/modules/search/': 'search', - 'http://purl.org/rss/1.0/modules/slash/': 'slash', - 'http://schemas.xmlsoap.org/soap/envelope/': 'soap', - 'http://purl.org/rss/1.0/modules/servicestatus/': 'ss', - 'http://hacks.benhammersley.com/rss/streaming/': 'str', - 'http://purl.org/rss/1.0/modules/subscription/': 'sub', - 'http://purl.org/rss/1.0/modules/syndication/': 'sy', - 'http://schemas.pocketsoap.com/rss/myDescModule/': 'szf', - 'http://purl.org/rss/1.0/modules/taxonomy/': 'taxo', - 'http://purl.org/rss/1.0/modules/threading/': 'thr', - 'http://purl.org/rss/1.0/modules/textinput/': 'ti', - 'http://madskills.com/public/xml/rss/module/trackback/': 'trackback', - 'http://wellformedweb.org/commentAPI/': 'wfw', - 'http://purl.org/rss/1.0/modules/wiki/': 'wiki', - '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 = {} - - can_be_relative_uri = set(['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo']) - can_contain_relative_uris = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description']) - can_contain_dangerous_markup = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description']) - html_types = [u'text/html', u'application/xhtml+xml'] - - def __init__(self, baseuri=None, baselang=None, encoding=u'utf-8'): - if not self._matchnamespaces: - for k, v in self.namespaces.items(): - self._matchnamespaces[k.lower()] = v - self.feeddata = FeedParserDict() # feed-level data - self.encoding = encoding # character encoding - self.entries = [] # list of entry-level data - self.version = u'' # feed type/version, see SUPPORTED_VERSIONS - self.namespacesInUse = {} # dictionary of namespaces defined by the feed - - # the following are used internally to track state; - # this is really out of control and should be refactored - self.infeed = 0 - self.inentry = 0 - self.incontent = 0 - self.intextinput = 0 - self.inimage = 0 - self.inauthor = 0 - self.incontributor = 0 - self.inpublisher = 0 - self.insource = 0 - - # georss - self.ingeometry = 0 - - self.sourcedata = FeedParserDict() - self.contentparams = FeedParserDict() - self._summaryKey = None - self.namespacemap = {} - self.elementstack = [] - self.basestack = [] - self.langstack = [] - self.baseuri = baseuri or u'' - self.lang = baselang or None - 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('_','-') - - # A map of the following form: - # { - # object_that_value_is_set_on: { - # property_name: depth_of_node_property_was_extracted_from, - # other_property: depth_of_node_property_was_extracted_from, - # }, - # } - self.property_depth_map = {} - - def _normalize_attributes(self, kv): - k = kv[0].lower() - v = k in ('rel', 'type') and kv[1].lower() or kv[1] - # the sgml parser doesn't handle entities in attributes, nor - # does it pass the attribute values through as unicode, while - # strict xml parsers do -- account for this difference - if isinstance(self, _LooseFeedParser): - v = v.replace('&', '&') - if not isinstance(v, unicode): - v = v.decode('utf-8') - return (k, v) - - def unknown_starttag(self, tag, attrs): - # increment depth counter - self.depth += 1 - - # normalize attrs - attrs = map(self._normalize_attributes, attrs) - - # track xml:base and xml:lang - attrsD = dict(attrs) - baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri - if not isinstance(baseuri, unicode): - baseuri = baseuri.decode(self.encoding, 'ignore') - # ensure that self.baseuri is always an absolute URI that - # uses a whitelisted URI scheme (e.g. not `javscript:`) - if self.baseuri: - self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri - else: - self.baseuri = _urljoin(self.baseuri, baseuri) - lang = attrsD.get('xml:lang', attrsD.get('lang')) - if lang == '': - # xml:lang could be explicitly set to '', we need to capture that - lang = None - elif lang is None: - # if no xml:lang is specified, use parent lang - lang = self.lang - if lang: - if tag in ('feed', 'rss', 'rdf:RDF'): - self.feeddata['language'] = lang.replace('_','-') - self.lang = lang - self.basestack.append(self.baseuri) - self.langstack.append(lang) - - # track namespaces - for prefix, uri in attrs: - if prefix.startswith('xmlns:'): - self.trackNamespace(prefix[6:], uri) - elif prefix == 'xmlns': - self.trackNamespace(None, uri) - - # track inline content - if self.incontent and not self.contentparams.get('type', u'xml').endswith(u'xml'): - if tag in ('xhtml:div', 'div'): - return # typepad does this 10/2007 - # element declared itself as escaped markup, but it isn't really - self.contentparams['type'] = u'application/xhtml+xml' - if self.incontent and self.contentparams.get('type') == u'application/xhtml+xml': - if tag.find(':') <> -1: - prefix, tag = tag.split(':', 1) - namespace = self.namespacesInUse.get(prefix, '') - if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML': - attrs.append(('xmlns',namespace)) - if tag=='svg' and namespace=='http://www.w3.org/2000/svg': - attrs.append(('xmlns',namespace)) - if tag == 'svg': - self.svgOK += 1 - return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0) - - # match namespaces - if tag.find(':') <> -1: - prefix, suffix = tag.split(':', 1) - else: - prefix, suffix = '', tag - prefix = self.namespacemap.get(prefix, prefix) - if prefix: - prefix = prefix + '_' - - # special hack for better tracking of empty textinput/image elements in illformed feeds - if (not prefix) and tag not in ('title', 'link', 'description', 'name'): - self.intextinput = 0 - if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): - self.inimage = 0 - - # call special handler (if defined) or default handler - methodname = '_start_' + prefix + suffix - try: - method = getattr(self, methodname) - return method(attrsD) - except AttributeError as e: - # Since there's no handler or something has gone wrong we explicitly add the element and its attributes - unknown_tag = prefix + suffix - if len(attrsD) == 0: - # No attributes so merge it into the encosing dictionary - return self.push(unknown_tag, 1) - else: - # Has attributes so create it in its own dictionary - context = self._getContext() - context[unknown_tag] = attrsD - - def unknown_endtag(self, tag): - # match namespaces - if tag.find(':') <> -1: - prefix, suffix = tag.split(':', 1) - else: - prefix, suffix = '', tag - prefix = self.namespacemap.get(prefix, prefix) - if prefix: - prefix = prefix + '_' - if suffix == 'svg' and self.svgOK: - self.svgOK -= 1 - - # call special handler (if defined) or default handler - methodname = '_end_' + prefix + suffix - try: - if self.svgOK: - raise AttributeError() - method = getattr(self, methodname) - method() - except AttributeError: - self.pop(prefix + suffix) - - # track inline content - if self.incontent and not self.contentparams.get('type', u'xml').endswith(u'xml'): - # element declared itself as escaped markup, but it isn't really - if tag in ('xhtml:div', 'div'): - return # typepad does this 10/2007 - self.contentparams['type'] = u'application/xhtml+xml' - if self.incontent and self.contentparams.get('type') == u'application/xhtml+xml': - tag = tag.split(':')[-1] - self.handle_data('</%s>' % tag, escape=0) - - # track xml:base and xml:lang going out of scope - if self.basestack: - self.basestack.pop() - if self.basestack and self.basestack[-1]: - self.baseuri = self.basestack[-1] - if self.langstack: - self.langstack.pop() - if self.langstack: # and (self.langstack[-1] is not None): - self.lang = self.langstack[-1] - - self.depth -= 1 - - def handle_charref(self, ref): - # called for each character reference, e.g. for ' ', ref will be '160' - if not self.elementstack: - return - ref = ref.lower() - if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): - text = '&#%s;' % ref - else: - if ref[0] == 'x': - c = int(ref[1:], 16) - else: - c = int(ref) - text = unichr(c).encode('utf-8') - self.elementstack[-1][2].append(text) - - def handle_entityref(self, ref): - # called for each entity reference, e.g. for '©', ref will be 'copy' - if not self.elementstack: - return - if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): - text = '&%s;' % ref - elif ref in self.entities: - text = self.entities[ref] - if text.startswith('&#') and text.endswith(';'): - return self.handle_entityref(text) - else: - try: - name2codepoint[ref] - except KeyError: - text = '&%s;' % ref - else: - text = unichr(name2codepoint[ref]).encode('utf-8') - self.elementstack[-1][2].append(text) - - def handle_data(self, text, escape=1): - # called for each block of plain text, i.e. outside of any tag and - # not containing any character or entity references - if not self.elementstack: - return - if escape and self.contentparams.get('type') == u'application/xhtml+xml': - text = _xmlescape(text) - self.elementstack[-1][2].append(text) - - def handle_comment(self, text): - # called for each comment, e.g. <!-- insert message here --> - pass - - def handle_pi(self, text): - # called for each processing instruction, e.g. <?instruction> - pass - - def handle_decl(self, text): - pass - - def parse_declaration(self, i): - # override internal declaration handler to handle CDATA blocks - if self.rawdata[i:i+9] == '<![CDATA[': - k = self.rawdata.find(']]>', i) - if k == -1: - # CDATA block began but didn't finish - k = len(self.rawdata) - return k - self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) - return k+3 - else: - k = self.rawdata.find('>', i) - if k >= 0: - return k+1 - else: - # We have an incomplete CDATA block. - return k - - def mapContentType(self, contentType): - contentType = contentType.lower() - if contentType == 'text' or contentType == 'plain': - contentType = u'text/plain' - elif contentType == 'html': - contentType = u'text/html' - elif contentType == 'xhtml': - contentType = u'application/xhtml+xml' - return contentType - - def trackNamespace(self, prefix, uri): - loweruri = uri.lower() - if not self.version: - if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/'): - self.version = u'rss090' - elif loweruri == 'http://purl.org/rss/1.0/': - self.version = u'rss10' - elif loweruri == 'http://www.w3.org/2005/atom': - self.version = u'atom10' - if loweruri.find(u'backend.userland.com/rss') <> -1: - # match any backend.userland.com namespace - uri = u'http://backend.userland.com/rss' - loweruri = uri - if loweruri in self._matchnamespaces: - self.namespacemap[prefix] = self._matchnamespaces[loweruri] - self.namespacesInUse[self._matchnamespaces[loweruri]] = uri - else: - self.namespacesInUse[prefix or ''] = uri - - def resolveURI(self, uri): - return _urljoin(self.baseuri or u'', uri) - - def decodeEntities(self, element, data): - return data - - def strattrs(self, attrs): - return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'"'})) for t in attrs]) - - def push(self, element, expectingText): - self.elementstack.append([element, expectingText, []]) - - def pop(self, element, stripWhitespace=1): - if not self.elementstack: - return - if self.elementstack[-1][0] != element: - return - - element, expectingText, pieces = self.elementstack.pop() - - if self.version == u'atom10' and self.contentparams.get('type', u'text') == u'application/xhtml+xml': - # remove enclosing child element, but only if it is a <div> and - # only if all the remaining content is nested underneath it. - # This means that the divs would be retained in the following: - # <div>foo</div><div>bar</div> - while pieces and len(pieces)>1 and not pieces[-1].strip(): - del pieces[-1] - while pieces and len(pieces)>1 and not pieces[0].strip(): - del pieces[0] - if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>': - depth = 0 - for piece in pieces[:-1]: - if piece.startswith('</'): - depth -= 1 - if depth == 0: - break - elif piece.startswith('<') and not piece.endswith('/>'): - depth += 1 - else: - pieces = pieces[1:-1] - - # Ensure each piece is a str for Python 3 - for (i, v) in enumerate(pieces): - if not isinstance(v, unicode): - pieces[i] = v.decode('utf-8') - - output = u''.join(pieces) - if stripWhitespace: - output = output.strip() - if not expectingText: - return output - - # decode base64 content - if base64 and self.contentparams.get('base64', 0): - try: - output = _base64decode(output) - except binascii.Error: - pass - except binascii.Incomplete: - pass - except TypeError: - # In Python 3, base64 takes and outputs bytes, not str - # This may not be the most correct way to accomplish this - output = _base64decode(output.encode('utf-8')).decode('utf-8') - - # resolve relative URIs - if (element in self.can_be_relative_uri) and 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): - output = self.decodeEntities(element, output) - - # some feed formats require consumers to guess - # whether the content is html or plain text - if not self.version.startswith(u'atom') and self.contentparams.get('type') == u'text/plain': - if self.lookslikehtml(output): - self.contentparams['type'] = u'text/html' - - # remove temporary cruft from contentparams - try: - del self.contentparams['mode'] - except KeyError: - pass - try: - del self.contentparams['base64'] - except KeyError: - pass - - is_htmlish = self.mapContentType(self.contentparams.get('type', u'text/html')) in self.html_types - # resolve relative URIs within embedded markup - if is_htmlish and RESOLVE_RELATIVE_URIS: - if element in self.can_contain_relative_uris: - output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', u'text/html')) - - # sanitize embedded markup - if is_htmlish and SANITIZE_HTML: - if element in self.can_contain_dangerous_markup: - output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', u'text/html')) - - if self.encoding and not isinstance(output, unicode): - output = output.decode(self.encoding, 'ignore') - - # address common error where people take data that is already - # utf-8, presume that it is iso-8859-1, and re-encode it. - if self.encoding in (u'utf-8', u'utf-8_INVALID_PYTHON_3') and isinstance(output, unicode): - try: - output = output.encode('iso-8859-1').decode('utf-8') - except (UnicodeEncodeError, UnicodeDecodeError): - pass - - # map win-1252 extensions to the proper code points - if isinstance(output, unicode): - output = output.translate(_cp1252) - - # categories/tags/keywords/whatever are handled in _end_category - if element == 'category': - return output - - if element == 'title' and -1 < self.title_depth <= self.depth: - return output - - # store output in appropriate place(s) - if self.inentry and not self.insource: - if element == 'content': - self.entries[-1].setdefault(element, []) - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - self.entries[-1][element].append(contentparams) - elif element == 'link': - if not self.inimage: - # 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 = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output) - self.entries[-1][element] = output - if output: - self.entries[-1]['links'][-1]['href'] = output - else: - if element == 'description': - element = 'summary' - old_value_depth = self.property_depth_map.setdefault(self.entries[-1], {}).get(element) - if old_value_depth is None or self.depth <= old_value_depth: - self.property_depth_map[self.entries[-1]][element] = self.depth - self.entries[-1][element] = output - if self.incontent: - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - self.entries[-1][element + '_detail'] = contentparams - elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage): - context = self._getContext() - if element == 'description': - element = 'subtitle' - context[element] = output - if element == 'link': - # fix query variables; see above for the explanation - output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output) - context[element] = output - context['links'][-1]['href'] = output - elif self.incontent: - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - context[element + '_detail'] = contentparams - return output - - def pushContent(self, tag, attrsD, defaultContentType, expectingText): - self.incontent += 1 - if self.lang: - self.lang=self.lang.replace('_','-') - self.contentparams = FeedParserDict({ - 'type': self.mapContentType(attrsD.get('type', defaultContentType)), - 'language': self.lang, - 'base': self.baseuri}) - self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) - self.push(tag, expectingText) - - def popContent(self, tag): - value = self.pop(tag) - self.incontent -= 1 - self.contentparams.clear() - return value - - # a number of elements in a number of RSS variants are nominally plain - # text, but this is routinely ignored. This is an attempt to detect - # the most common cases. As false positives often result in silent - # data loss, this function errs on the conservative side. - @staticmethod - def lookslikehtml(s): - # must have a close tag or an entity reference to qualify - if not (re.search(r'</(\w+)>',s) or re.search("&#?\w+;",s)): - return - - # all tags must be in a restricted subset of valid HTML tags - if filter(lambda t: t.lower() not in _HTMLSanitizer.acceptable_elements, - re.findall(r'</?(\w+)',s)): - return - - # all entities must have been defined as valid HTML entities - if filter(lambda e: e not in entitydefs.keys(), re.findall(r'&(\w+);', s)): - return - - return 1 - - def _mapToStandardPrefix(self, name): - colonpos = name.find(':') - if colonpos <> -1: - prefix = name[:colonpos] - suffix = name[colonpos+1:] - prefix = self.namespacemap.get(prefix, prefix) - name = prefix + ':' + suffix - return name - - def _getAttribute(self, attrsD, name): - return attrsD.get(self._mapToStandardPrefix(name)) - - def _isBase64(self, attrsD, contentparams): - if attrsD.get('mode', '') == 'base64': - return 1 - if self.contentparams['type'].startswith(u'text/'): - return 0 - if self.contentparams['type'].endswith(u'+xml'): - return 0 - if self.contentparams['type'].endswith(u'/xml'): - return 0 - return 1 - - def _itsAnHrefDamnIt(self, attrsD): - href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) - if href: - try: - del attrsD['url'] - except KeyError: - pass - try: - del attrsD['uri'] - except KeyError: - pass - attrsD['href'] = href - return attrsD - - def _save(self, key, value, overwrite=False): - context = self._getContext() - if overwrite: - context[key] = value - else: - context.setdefault(key, value) - - def _start_rss(self, attrsD): - versionmap = {'0.91': u'rss091u', - '0.92': u'rss092', - '0.93': u'rss093', - '0.94': u'rss094'} - #If we're here then this is an RSS feed. - #If we don't have a version or have a version that starts with something - #other than RSS then there's been a mistake. Correct it. - if not self.version or not self.version.startswith(u'rss'): - attr_version = attrsD.get('version', '') - version = versionmap.get(attr_version) - if version: - self.version = version - elif attr_version.startswith('2.'): - self.version = u'rss20' - else: - self.version = u'rss' - - def _start_channel(self, attrsD): - self.infeed = 1 - self._cdf_common(attrsD) - - def _cdf_common(self, attrsD): - if 'lastmod' in attrsD: - self._start_modified({}) - self.elementstack[-1][-1] = attrsD['lastmod'] - self._end_modified() - if 'href' in attrsD: - self._start_link({}) - self.elementstack[-1][-1] = attrsD['href'] - self._end_link() - - def _start_feed(self, attrsD): - self.infeed = 1 - versionmap = {'0.1': u'atom01', - '0.2': u'atom02', - '0.3': u'atom03'} - if not self.version: - attr_version = attrsD.get('version') - version = versionmap.get(attr_version) - if version: - self.version = version - else: - self.version = u'atom' - - def _end_channel(self): - self.infeed = 0 - _end_feed = _end_channel - - def _start_image(self, attrsD): - context = self._getContext() - if not self.inentry: - context.setdefault('image', FeedParserDict()) - self.inimage = 1 - self.title_depth = -1 - self.push('image', 0) - - def _end_image(self): - self.pop('image') - self.inimage = 0 - - def _start_textinput(self, attrsD): - context = self._getContext() - context.setdefault('textinput', FeedParserDict()) - self.intextinput = 1 - self.title_depth = -1 - self.push('textinput', 0) - _start_textInput = _start_textinput - - def _end_textinput(self): - self.pop('textinput') - self.intextinput = 0 - _end_textInput = _end_textinput - - def _start_author(self, attrsD): - self.inauthor = 1 - self.push('author', 1) - # Append a new FeedParserDict when expecting an author - context = self._getContext() - context.setdefault('authors', []) - context['authors'].append(FeedParserDict()) - _start_managingeditor = _start_author - _start_dc_author = _start_author - _start_dc_creator = _start_author - _start_itunes_author = _start_author - - def _end_author(self): - self.pop('author') - self.inauthor = 0 - self._sync_author_detail() - _end_managingeditor = _end_author - _end_dc_author = _end_author - _end_dc_creator = _end_author - _end_itunes_author = _end_author - - def _start_itunes_owner(self, attrsD): - self.inpublisher = 1 - self.push('publisher', 0) - - def _end_itunes_owner(self): - self.pop('publisher') - self.inpublisher = 0 - self._sync_author_detail('publisher') - - def _start_contributor(self, attrsD): - self.incontributor = 1 - context = self._getContext() - context.setdefault('contributors', []) - context['contributors'].append(FeedParserDict()) - self.push('contributor', 0) - - def _end_contributor(self): - self.pop('contributor') - self.incontributor = 0 - - def _start_dc_contributor(self, attrsD): - self.incontributor = 1 - context = self._getContext() - context.setdefault('contributors', []) - context['contributors'].append(FeedParserDict()) - self.push('name', 0) - - def _end_dc_contributor(self): - self._end_name() - self.incontributor = 0 - - def _start_name(self, attrsD): - self.push('name', 0) - _start_itunes_name = _start_name - - def _end_name(self): - value = self.pop('name') - if self.inpublisher: - self._save_author('name', value, 'publisher') - elif self.inauthor: - self._save_author('name', value) - elif self.incontributor: - self._save_contributor('name', value) - elif self.intextinput: - context = self._getContext() - context['name'] = value - _end_itunes_name = _end_name - - def _start_width(self, attrsD): - self.push('width', 0) - - def _end_width(self): - value = self.pop('width') - try: - value = int(value) - except ValueError: - value = 0 - if self.inimage: - context = self._getContext() - context['width'] = value - - def _start_height(self, attrsD): - self.push('height', 0) - - def _end_height(self): - value = self.pop('height') - try: - value = int(value) - except ValueError: - value = 0 - if self.inimage: - context = self._getContext() - context['height'] = value - - def _start_url(self, attrsD): - self.push('href', 1) - _start_homepage = _start_url - _start_uri = _start_url - - def _end_url(self): - value = self.pop('href') - if self.inauthor: - self._save_author('href', value) - elif self.incontributor: - self._save_contributor('href', value) - _end_homepage = _end_url - _end_uri = _end_url - - def _start_email(self, attrsD): - self.push('email', 0) - _start_itunes_email = _start_email - - def _end_email(self): - value = self.pop('email') - if self.inpublisher: - self._save_author('email', value, 'publisher') - elif self.inauthor: - self._save_author('email', value) - elif self.incontributor: - self._save_contributor('email', value) - _end_itunes_email = _end_email - - def _getContext(self): - if self.insource: - context = self.sourcedata - elif self.inimage and 'image' in self.feeddata: - context = self.feeddata['image'] - elif self.intextinput: - context = self.feeddata['textinput'] - elif self.inentry: - context = self.entries[-1] - else: - context = self.feeddata - return context - - def _save_author(self, key, value, prefix='author'): - context = self._getContext() - context.setdefault(prefix + '_detail', FeedParserDict()) - context[prefix + '_detail'][key] = value - self._sync_author_detail() - context.setdefault('authors', [FeedParserDict()]) - context['authors'][-1][key] = value - - def _save_contributor(self, key, value): - context = self._getContext() - context.setdefault('contributors', [FeedParserDict()]) - context['contributors'][-1][key] = value - - def _sync_author_detail(self, key='author'): - context = self._getContext() - detail = context.get('%s_detail' % key) - if detail: - name = detail.get('name') - email = detail.get('email') - if name and email: - context[key] = u'%s (%s)' % (name, email) - elif name: - context[key] = name - elif email: - context[key] = email - else: - author, email = context.get(key), None - if not author: - return - emailmatch = re.search(ur'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author) - if emailmatch: - email = emailmatch.group(0) - # probably a better way to do the following, but it passes all the tests - author = author.replace(email, u'') - author = author.replace(u'()', u'') - author = author.replace(u'<>', u'') - author = author.replace(u'<>', u'') - author = author.strip() - if author and (author[0] == u'('): - author = author[1:] - if author and (author[-1] == u')'): - author = author[:-1] - author = author.strip() - if author or email: - context.setdefault('%s_detail' % key, FeedParserDict()) - if author: - context['%s_detail' % key]['name'] = author - if email: - context['%s_detail' % key]['email'] = email - - def _start_subtitle(self, attrsD): - self.pushContent('subtitle', attrsD, u'text/plain', 1) - _start_tagline = _start_subtitle - _start_itunes_subtitle = _start_subtitle - - def _end_subtitle(self): - self.popContent('subtitle') - _end_tagline = _end_subtitle - _end_itunes_subtitle = _end_subtitle - - def _start_rights(self, attrsD): - self.pushContent('rights', attrsD, u'text/plain', 1) - _start_dc_rights = _start_rights - _start_copyright = _start_rights - - def _end_rights(self): - self.popContent('rights') - _end_dc_rights = _end_rights - _end_copyright = _end_rights - - def _start_item(self, attrsD): - self.entries.append(FeedParserDict()) - self.push('item', 0) - self.inentry = 1 - self.guidislink = 0 - self.title_depth = -1 - self.psc_chapters_flag = None - id = self._getAttribute(attrsD, 'rdf:about') or self._getAttribute(attrsD, 'id') - if id: - context = self._getContext() - context['id'] = id - self._cdf_common(attrsD) - _start_entry = _start_item - - def _end_item(self): - self.pop('item') - self.inentry = 0 - _end_entry = _end_item - - def _start_dc_language(self, attrsD): - self.push('language', 1) - _start_language = _start_dc_language - - def _end_dc_language(self): - self.lang = self.pop('language') - _end_language = _end_dc_language - - def _start_dc_publisher(self, attrsD): - self.push('publisher', 1) - _start_webmaster = _start_dc_publisher - - def _end_dc_publisher(self): - self.pop('publisher') - self._sync_author_detail('publisher') - _end_webmaster = _end_dc_publisher - - def _start_published(self, attrsD): - self.push('published', 1) - _start_dcterms_issued = _start_published - _start_issued = _start_published - _start_pubdate = _start_published - - def _end_published(self): - value = self.pop('published') - self._save('published_parsed', _parse_date(value), overwrite=True) - _end_dcterms_issued = _end_published - _end_issued = _end_published - _end_pubdate = _end_published - - def _start_updated(self, attrsD): - self.push('updated', 1) - _start_modified = _start_updated - _start_dcterms_modified = _start_updated - _start_dc_date = _start_updated - _start_lastbuilddate = _start_updated - - def _end_updated(self): - value = self.pop('updated') - parsed_value = _parse_date(value) - self._save('updated_parsed', parsed_value, overwrite=True) - _end_modified = _end_updated - _end_dcterms_modified = _end_updated - _end_dc_date = _end_updated - _end_lastbuilddate = _end_updated - - def _start_created(self, attrsD): - self.push('created', 1) - _start_dcterms_created = _start_created - - def _end_created(self): - value = self.pop('created') - self._save('created_parsed', _parse_date(value), overwrite=True) - _end_dcterms_created = _end_created - - def _start_expirationdate(self, attrsD): - self.push('expired', 1) - - 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') - attrsD = FeedParserDict() - attrsD['rel'] = u'license' - if value: - attrsD['href']=value - context.setdefault('links', []).append(attrsD) - - def _start_creativecommons_license(self, attrsD): - self.push('license', 1) - _start_creativeCommons_license = _start_creativecommons_license - - def _end_creativecommons_license(self): - value = self.pop('license') - context = self._getContext() - attrsD = FeedParserDict() - attrsD['rel'] = u'license' - if value: - attrsD['href'] = value - context.setdefault('links', []).append(attrsD) - del context['license'] - _end_creativeCommons_license = _end_creativecommons_license - - 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}) - if value not in tags: - tags.append(value) - - def _start_category(self, attrsD): - context = self._getContext() - categories = context.setdefault('categories', []) - id = attrsD.get('id') - name = attrsD.get('name') - if id and name: - value = FeedParserDict({'id': id, 'name': name}) - if value not in categories: - categories.append(value) - - term = attrsD.get('term') - scheme = attrsD.get('scheme', attrsD.get('domain')) - label = attrsD.get('label') - self._addTag(term, scheme, label) - self.push('category', 1) - _start_dc_subject = _start_category - _start_keywords = _start_category - - def _start_subcat(self, attrsD): - context = self._getContext() - subcats = context['categories'][-1].setdefault('subcats', []) - id = attrsD.get('id') - name = attrsD.get('name') - if id and name: - value = FeedParserDict({'id': id, 'name': name}) - if value not in subcats: - subcats.append(value) - self.push('category', 1) - - def _start_media_category(self, attrsD): - attrsD.setdefault('scheme', u'http://search.yahoo.com/mrss/category_schema') - self._start_category(attrsD) - - def _end_itunes_keywords(self): - for term in self.pop('itunes_keywords').split(','): - if term.strip(): - self._addTag(term.strip(), u'http://www.itunes.com/', None) - - def _start_itunes_category(self, attrsD): - self._addTag(attrsD.get('text'), u'http://www.itunes.com/', None) - self.push('category', 1) - - def _end_category(self): - value = self.pop('category') - if not value: - return - context = self._getContext() - tags = context['tags'] - if value and len(tags) and not tags[-1]['term']: - tags[-1]['term'] = value - else: - self._addTag(value, None, None) - _end_dc_subject = _end_category - _end_keywords = _end_category - _end_itunes_category = _end_category - _end_media_category = _end_category - _end_subcat = _end_category - - def _start_cloud(self, attrsD): - self._getContext()['cloud'] = FeedParserDict(attrsD) - - def _start_link(self, attrsD): - attrsD.setdefault('rel', u'alternate') - if attrsD['rel'] == u'self': - attrsD.setdefault('type', u'application/atom+xml') - else: - attrsD.setdefault('type', u'text/html') - context = self._getContext() - attrsD = self._itsAnHrefDamnIt(attrsD) - if 'href' in attrsD: - attrsD['href'] = self.resolveURI(attrsD['href']) - expectingText = self.infeed or self.inentry or self.insource - context.setdefault('links', []) - if not (self.inentry and self.inimage): - context['links'].append(FeedParserDict(attrsD)) - if 'href' in attrsD: - expectingText = 0 - if (attrsD.get('rel') == u'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): - context['link'] = attrsD['href'] - else: - self.push('link', expectingText) - - def _end_link(self): - value = self.pop('link') - - def _start_guid(self, attrsD): - self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') - self.push('id', 1) - _start_id = _start_guid - - def _end_guid(self): - value = self.pop('id') - self._save('guidislink', self.guidislink and 'link' not in self._getContext()) - if self.guidislink: - # guid acts as link, but only if 'ispermalink' is not present or is 'true', - # and only if the item doesn't already have a link element - self._save('link', value) - _end_id = _end_guid - - def _start_title(self, attrsD): - if self.svgOK: - return self.unknown_starttag('title', attrsD.items()) - self.pushContent('title', attrsD, u'text/plain', self.infeed or self.inentry or self.insource) - _start_dc_title = _start_title - _start_media_title = _start_title - - def _end_title(self): - if self.svgOK: - return - value = self.popContent('title') - if not value: - return - self.title_depth = self.depth - _end_dc_title = _end_title - - def _end_media_title(self): - title_depth = self.title_depth - self._end_title() - self.title_depth = title_depth - - def _start_description(self, attrsD): - context = self._getContext() - if 'summary' in context: - self._summaryKey = 'content' - self._start_content(attrsD) - 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) - - def _end_description(self): - if self._summaryKey == 'content': - self._end_content() - else: - value = self.popContent('description') - 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) - _start_feedburner_browserfriendly = _start_info - - def _end_info(self): - self.popContent('info') - _end_feedburner_browserfriendly = _end_info - - def _start_generator(self, attrsD): - if attrsD: - attrsD = self._itsAnHrefDamnIt(attrsD) - if 'href' in attrsD: - attrsD['href'] = self.resolveURI(attrsD['href']) - self._getContext()['generator_detail'] = FeedParserDict(attrsD) - self.push('generator', 1) - - def _end_generator(self): - value = self.pop('generator') - context = self._getContext() - if 'generator_detail' in context: - context['generator_detail']['name'] = value - - def _start_admin_generatoragent(self, attrsD): - self.push('generator', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('generator') - self._getContext()['generator_detail'] = FeedParserDict({'href': value}) - - def _start_admin_errorreportsto(self, attrsD): - self.push('errorreportsto', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('errorreportsto') - - def _start_summary(self, attrsD): - context = self._getContext() - if 'summary' in context: - self._summaryKey = 'content' - self._start_content(attrsD) - else: - self._summaryKey = 'summary' - self.pushContent(self._summaryKey, attrsD, u'text/plain', 1) - _start_itunes_summary = _start_summary - - def _end_summary(self): - if self._summaryKey == 'content': - self._end_content() - else: - self.popContent(self._summaryKey or 'summary') - self._summaryKey = None - _end_itunes_summary = _end_summary - - def _start_enclosure(self, attrsD): - attrsD = self._itsAnHrefDamnIt(attrsD) - context = self._getContext() - attrsD['rel'] = u'enclosure' - context.setdefault('links', []).append(FeedParserDict(attrsD)) - - def _start_source(self, attrsD): - if 'url' in attrsD: - # This means that we're processing a source element from an RSS 2.0 feed - self.sourcedata['href'] = attrsD[u'url'] - self.push('source', 1) - self.insource = 1 - self.title_depth = -1 - - def _end_source(self): - self.insource = 0 - value = self.pop('source') - if value: - self.sourcedata['title'] = value - self._getContext()['source'] = copy.deepcopy(self.sourcedata) - self.sourcedata.clear() - - def _start_content(self, attrsD): - self.pushContent('content', attrsD, u'text/plain', 1) - src = attrsD.get('src') - if src: - self.contentparams['src'] = src - self.push('content', 1) - - def _start_body(self, attrsD): - self.pushContent('content', attrsD, u'application/xhtml+xml', 1) - _start_xhtml_body = _start_body - - def _start_content_encoded(self, attrsD): - self.pushContent('content', attrsD, u'text/html', 1) - _start_fullitem = _start_content_encoded - - def _end_content(self): - copyToSummary = self.mapContentType(self.contentparams.get('type')) in ([u'text/plain'] + self.html_types) - value = self.popContent('content') - if copyToSummary: - self._save('summary', value) - - _end_body = _end_content - _end_xhtml_body = _end_content - _end_content_encoded = _end_content - _end_fullitem = _end_content - - def _start_itunes_image(self, attrsD): - self.push('itunes_image', 0) - if attrsD.get('href'): - self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) - elif attrsD.get('url'): - self._getContext()['image'] = FeedParserDict({'href': attrsD.get('url')}) - _start_itunes_link = _start_itunes_image - - def _end_itunes_block(self): - value = self.pop('itunes_block', 0) - self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 - - def _end_itunes_explicit(self): - value = self.pop('itunes_explicit', 0) - # Convert 'yes' -> True, 'clean' to False, and any other value to None - # False and None both evaluate as False, so the difference can be ignored - # 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_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'] = restriction - - 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', []) - context['media_content'].append(attrsD) - - def _start_media_thumbnail(self, attrsD): - context = self._getContext() - context.setdefault('media_thumbnail', []) - self.push('url', 1) # new - context['media_thumbnail'].append(attrsD) - - def _end_media_thumbnail(self): - url = self.pop('url') - context = self._getContext() - if url != None and len(url.strip()) != 0: - if 'url' not in context['media_thumbnail'][-1]: - context['media_thumbnail'][-1]['url'] = url - - def _start_media_player(self, attrsD): - self.push('media_player', 0) - self._getContext()['media_player'] = FeedParserDict(attrsD) - - def _end_media_player(self): - value = self.pop('media_player') - context = self._getContext() - context['media_player']['content'] = value - - def _start_newlocation(self, attrsD): - self.push('newlocation', 1) - - def _end_newlocation(self): - url = self.pop('newlocation') - context = self._getContext() - # don't set newlocation if the context isn't right - if context is not self.feeddata: - 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): - xml.sax.handler.ContentHandler.__init__(self) - _FeedParserMixin.__init__(self, baseuri, baselang, encoding) - self.bozo = 0 - self.exc = None - self.decls = {} - - def startPrefixMapping(self, prefix, uri): - if not uri: - return - # Jython uses '' instead of None; standardize on None - prefix = prefix or None - self.trackNamespace(prefix, uri) - if prefix and uri == 'http://www.w3.org/1999/xlink': - self.decls['xmlns:' + prefix] = uri - - def startElementNS(self, name, qname, attrs): - namespace, localname = name - lowernamespace = str(namespace or '').lower() - if lowernamespace.find(u'backend.userland.com/rss') <> -1: - # match any backend.userland.com namespace - namespace = u'http://backend.userland.com/rss' - lowernamespace = namespace - if qname and qname.find(':') > 0: - givenprefix = qname.split(':')[0] - else: - givenprefix = None - prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse: - raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix - localname = str(localname).lower() - - # qname implementation is horribly broken in Python 2.1 (it - # doesn't report any), and slightly broken in Python 2.2 (it - # doesn't report the xml: namespace). So we match up namespaces - # with a known list first, and then possibly override them with - # the qnames the SAX parser gives us (if indeed it gives us any - # at all). Thanks to MatejC for helping me test this and - # tirelessly telling me that it didn't work yet. - attrsD, self.decls = self.decls, {} - if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML': - attrsD['xmlns']=namespace - if localname=='svg' and namespace=='http://www.w3.org/2000/svg': - attrsD['xmlns']=namespace - - if prefix: - localname = prefix.lower() + ':' + localname - elif namespace and not qname: #Expat - for name,value in self.namespacesInUse.items(): - if name and value == namespace: - localname = name + ':' + localname - break - - for (namespace, attrlocalname), attrvalue in attrs.items(): - lowernamespace = (namespace or '').lower() - prefix = self._matchnamespaces.get(lowernamespace, '') - if prefix: - attrlocalname = prefix + ':' + attrlocalname - 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): - self.handle_data(text) - - def endElementNS(self, name, qname): - namespace, localname = name - lowernamespace = str(namespace or '').lower() - if qname and qname.find(':') > 0: - givenprefix = qname.split(':')[0] - else: - givenprefix = '' - prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if prefix: - localname = prefix + ':' + localname - elif namespace and not qname: #Expat - for name,value in self.namespacesInUse.items(): - if name and value == namespace: - localname = name + ':' + localname - break - localname = str(localname).lower() - self.unknown_endtag(localname) - - def error(self, exc): - self.bozo = 1 - self.exc = exc - - # drv_libxml2 calls warning() in some cases - warning = error - - def fatalError(self, exc): - self.error(exc) - raise exc - -class _BaseHTMLProcessor(sgmllib.SGMLParser): - special = re.compile('''[<>'"]''') - bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)") - elements_no_end_tag = set([ - 'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', - 'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param', - 'source', 'track', 'wbr' - ]) - - def __init__(self, encoding, _type): - self.encoding = encoding - self._type = _type - sgmllib.SGMLParser.__init__(self) - - def reset(self): - self.pieces = [] - sgmllib.SGMLParser.reset(self) - - def _shorttag_replace(self, match): - tag = match.group(1) - if tag in self.elements_no_end_tag: - return '<' + tag + ' />' - else: - return '<' + tag + '></' + tag + '>' - - # By declaring these methods and overriding their compiled code - # with the code from sgmllib, the original code will execute in - # feedparser's scope instead of sgmllib's. This means that the - # `tagfind` and `charref` regular expressions will be found as - # they're declared above, not as they're declared in sgmllib. - def goahead(self, i): - pass - goahead.func_code = sgmllib.SGMLParser.goahead.func_code - - def __parse_starttag(self, i): - pass - __parse_starttag.func_code = sgmllib.SGMLParser.parse_starttag.func_code - - def parse_starttag(self,i): - j = self.__parse_starttag(i) - if self._type == 'application/xhtml+xml': - if j>2 and self.rawdata[j-2:j]=='/>': - self.unknown_endtag(self.lasttag) - return j - - def feed(self, data): - data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'<!\1', data) - data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data) - data = data.replace(''', "'") - data = data.replace('"', '"') - try: - bytes - if bytes is str: - raise NameError - self.encoding = self.encoding + u'_INVALID_PYTHON_3' - except NameError: - if self.encoding and isinstance(data, unicode): - data = data.encode(self.encoding) - sgmllib.SGMLParser.feed(self, data) - sgmllib.SGMLParser.close(self) - - def normalize_attrs(self, attrs): - if not attrs: - return attrs - # utility method to be called by descendants - attrs = dict([(k.lower(), v) for k, v in attrs]).items() - attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] - attrs.sort() - return attrs - - def unknown_starttag(self, tag, attrs): - # called for each start tag - # attrs is a list of (attr, value) tuples - # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')] - uattrs = [] - strattrs='' - if attrs: - for key, value in attrs: - value=value.replace('>','>').replace('<','<').replace('"','"') - value = self.bare_ampersand.sub("&", value) - # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds - if not isinstance(value, unicode): - value = value.decode(self.encoding, 'ignore') - try: - # Currently, in Python 3 the key is already a str, and cannot be decoded again - uattrs.append((unicode(key, self.encoding), value)) - except TypeError: - uattrs.append((key, value)) - strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]) - if self.encoding: - try: - strattrs = strattrs.encode(self.encoding) - except (UnicodeEncodeError, LookupError): - pass - if tag in self.elements_no_end_tag: - self.pieces.append('<%s%s />' % (tag, strattrs)) - else: - self.pieces.append('<%s%s>' % (tag, strattrs)) - - def unknown_endtag(self, tag): - # called for each end tag, e.g. for </pre>, tag will be 'pre' - # Reconstruct the original end tag. - if tag not in self.elements_no_end_tag: - self.pieces.append("</%s>" % tag) - - def handle_charref(self, ref): - # called for each character reference, e.g. for ' ', ref will be '160' - # Reconstruct the original character reference. - ref = ref.lower() - if ref.startswith('x'): - value = int(ref[1:], 16) - else: - value = int(ref) - - if value in _cp1252: - self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:]) - else: - self.pieces.append('&#%s;' % ref) - - def handle_entityref(self, ref): - # called for each entity reference, e.g. for '©', ref will be 'copy' - # Reconstruct the original entity reference. - if ref in name2codepoint or ref == 'apos': - self.pieces.append('&%s;' % ref) - else: - self.pieces.append('&%s' % ref) - - def handle_data(self, text): - # called for each block of plain text, i.e. outside of any tag and - # not containing any character or entity references - # Store the original text verbatim. - self.pieces.append(text) - - def handle_comment(self, text): - # called for each HTML comment, e.g. <!-- insert Javascript code here --> - # Reconstruct the original comment. - self.pieces.append('<!--%s-->' % text) - - def handle_pi(self, text): - # called for each processing instruction, e.g. <?instruction> - # Reconstruct original processing instruction. - self.pieces.append('<?%s>' % text) - - def handle_decl(self, text): - # called for the DOCTYPE, if present, e.g. - # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" - # "http://www.w3.org/TR/html4/loose.dtd"> - # Reconstruct original DOCTYPE - self.pieces.append('<!%s>' % text) - - _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match - def _scan_name(self, i, declstartpos): - rawdata = self.rawdata - n = len(rawdata) - if i == n: - return None, -1 - m = self._new_declname_match(rawdata, i) - if m: - s = m.group() - name = s.strip() - if (i + len(s)) == n: - return None, -1 # end of buffer - return name.lower(), m.end() - else: - self.handle_data(rawdata) -# self.updatepos(declstartpos, i) - return None, -1 - - def convert_charref(self, name): - return '&#%s;' % name - - def convert_entityref(self, name): - return '&%s;' % name - - def output(self): - '''Return processed HTML as a single string''' - return ''.join([str(p) for p in self.pieces]) - - def parse_declaration(self, i): - try: - return sgmllib.SGMLParser.parse_declaration(self, i) - except sgmllib.SGMLParseError: - # escape the doctype declaration and continue parsing - self.handle_data('<') - return i+1 - -class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): - def __init__(self, baseuri, baselang, encoding, entities): - sgmllib.SGMLParser.__init__(self) - _FeedParserMixin.__init__(self, baseuri, baselang, encoding) - _BaseHTMLProcessor.__init__(self, encoding, 'application/xhtml+xml') - self.entities=entities - - def decodeEntities(self, element, data): - data = data.replace('<', '<') - data = data.replace('<', '<') - data = data.replace('<', '<') - data = data.replace('>', '>') - data = data.replace('>', '>') - data = data.replace('>', '>') - data = data.replace('&', '&') - data = data.replace('&', '&') - data = data.replace('"', '"') - data = data.replace('"', '"') - data = data.replace(''', ''') - data = data.replace(''', ''') - if not self.contentparams.get('type', u'xml').endswith(u'xml'): - 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 _RelativeURIResolver(_BaseHTMLProcessor): - relative_uris = set([('a', 'href'), - ('applet', 'codebase'), - ('area', 'href'), - ('blockquote', 'cite'), - ('body', 'background'), - ('del', 'cite'), - ('form', 'action'), - ('frame', 'longdesc'), - ('frame', 'src'), - ('iframe', 'longdesc'), - ('iframe', 'src'), - ('head', 'profile'), - ('img', 'longdesc'), - ('img', 'src'), - ('img', 'usemap'), - ('input', 'src'), - ('input', 'usemap'), - ('ins', 'cite'), - ('link', 'href'), - ('object', 'classid'), - ('object', 'codebase'), - ('object', 'data'), - ('object', 'usemap'), - ('q', 'cite'), - ('script', 'src'), - ('video', 'poster')]) - - def __init__(self, baseuri, encoding, _type): - _BaseHTMLProcessor.__init__(self, encoding, _type) - self.baseuri = baseuri - - def resolveURI(self, uri): - return _makeSafeAbsoluteURI(self.baseuri, uri.strip()) - - def unknown_starttag(self, tag, attrs): - attrs = self.normalize_attrs(attrs) - attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] - _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) - -def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type): - if not _SGML_AVAILABLE: - return htmlSource - - p = _RelativeURIResolver(baseURI, encoding, _type) - p.feed(htmlSource) - return p.output() - -def _makeSafeAbsoluteURI(base, rel=None): - # bail if ACCEPTABLE_URI_SCHEMES is empty - if not ACCEPTABLE_URI_SCHEMES: - return _urljoin(base, rel or u'') - if not base: - return rel or u'' - if not rel: - try: - scheme = urlparse.urlparse(base)[0] - except ValueError: - return u'' - if not scheme or scheme in ACCEPTABLE_URI_SCHEMES: - return base - return u'' - uri = _urljoin(base, rel) - if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES: - return u'' - return uri - -class _HTMLSanitizer(_BaseHTMLProcessor): - acceptable_elements = set(['a', 'abbr', 'acronym', 'address', 'area', - 'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button', - 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', - 'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn', - 'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset', - 'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1', - 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins', - 'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter', - 'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option', - 'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select', - 'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong', - 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot', - 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript']) - - acceptable_attributes = set(['abbr', 'accept', 'accept-charset', 'accesskey', - 'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis', - 'background', 'balance', 'bgcolor', 'bgproperties', 'border', - 'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding', - 'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff', - 'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols', - 'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data', - 'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay', - 'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for', - 'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus', - 'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode', - 'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc', - 'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max', - 'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref', - 'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size', - 'poster', 'pqg', 'preload', 'prompt', 'radiogroup', 'readonly', 'rel', - 'repeat-max', 'repeat-min', 'replace', 'required', 'rev', 'rightspacing', - 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span', - 'src', 'start', 'step', 'summary', 'suppress', 'tabindex', 'target', - 'template', 'title', 'toppadding', 'type', 'unselectable', 'usemap', - 'urn', 'valign', 'value', 'variable', 'volume', 'vspace', 'vrml', - 'width', 'wrap', 'xml:lang']) - - unacceptable_elements_with_end_tag = set(['script', 'applet', 'style']) - - acceptable_css_properties = set(['azimuth', 'background-color', - 'border-bottom-color', 'border-collapse', 'border-color', - 'border-left-color', 'border-right-color', 'border-top-color', 'clear', - 'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font', - 'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight', - 'height', 'letter-spacing', 'line-height', 'overflow', 'pause', - 'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness', - 'speak', 'speak-header', 'speak-numeral', 'speak-punctuation', - 'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent', - 'unicode-bidi', 'vertical-align', 'voice-family', 'volume', - 'white-space', 'width']) - - # survey of common keywords found in feeds - acceptable_css_keywords = set(['auto', 'aqua', 'black', 'block', 'blue', - 'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed', - 'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left', - 'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive', - 'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top', - 'transparent', 'underline', 'white', 'yellow']) - - 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_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']) - - # svgtiny - foreignObject + linearGradient + radialGradient + stop - svg_elements = set(['a', 'animate', 'animateColor', 'animateMotion', - 'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject', - 'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern', - 'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath', - 'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop', - 'svg', 'switch', 'text', 'title', 'tspan', 'use']) - - # svgtiny + class + opacity + offset + xmlns + xmlns:xlink - svg_attributes = set(['accent-height', 'accumulate', 'additive', 'alphabetic', - 'arabic-form', 'ascent', 'attributeName', 'attributeType', - 'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height', - 'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx', - 'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity', - 'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style', - 'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2', - 'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x', - 'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines', - 'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid', - 'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max', - 'min', 'name', 'offset', 'opacity', 'orient', 'origin', - 'overline-position', 'overline-thickness', 'panose-1', 'path', - 'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY', - 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', - 'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv', - 'stop-color', 'stop-opacity', 'strikethrough-position', - 'strikethrough-thickness', 'stroke', 'stroke-dasharray', - 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', - 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage', - 'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2', - 'underline-position', 'underline-thickness', 'unicode', 'unicode-range', - 'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width', - 'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole', - 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', - 'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1', - 'y2', 'zoomAndPan']) - - svg_attr_map = None - svg_elem_map = None - - acceptable_svg_properties = set([ 'fill', 'fill-opacity', 'fill-rule', - 'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin', - 'stroke-opacity']) - - def reset(self): - _BaseHTMLProcessor.reset(self) - self.unacceptablestack = 0 - self.mathmlOK = 0 - self.svgOK = 0 - - def unknown_starttag(self, tag, attrs): - acceptable_attributes = self.acceptable_attributes - keymap = {} - if not tag in self.acceptable_elements or self.svgOK: - if tag in self.unacceptable_elements_with_end_tag: - self.unacceptablestack += 1 - - # add implicit namespaces to html5 inline svg/mathml - if self._type.endswith('html'): - if not dict(attrs).get('xmlns'): - if tag=='svg': - attrs.append( ('xmlns','http://www.w3.org/2000/svg') ) - if tag=='math': - attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') ) - - # not otherwise acceptable, perhaps it is MathML or SVG? - if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs: - self.mathmlOK += 1 - if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs: - self.svgOK += 1 - - # chose acceptable attributes based on tag class, else bail - if self.mathmlOK and tag in self.mathml_elements: - acceptable_attributes = self.mathml_attributes - elif self.svgOK and tag in self.svg_elements: - # for most vocabularies, lowercasing is a good idea. Many - # svg elements, however, are camel case - if not self.svg_attr_map: - lower=[attr.lower() for attr in self.svg_attributes] - mix=[a for a in self.svg_attributes if a not in lower] - self.svg_attributes = lower - self.svg_attr_map = dict([(a.lower(),a) for a in mix]) - - lower=[attr.lower() for attr in self.svg_elements] - mix=[a for a in self.svg_elements if a not in lower] - self.svg_elements = lower - self.svg_elem_map = dict([(a.lower(),a) for a in mix]) - acceptable_attributes = self.svg_attributes - tag = self.svg_elem_map.get(tag,tag) - keymap = self.svg_attr_map - elif not tag in self.acceptable_elements: - return - - # declare xlink namespace, if needed - if self.mathmlOK or self.svgOK: - if filter(lambda (n,v): n.startswith('xlink:'),attrs): - if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs: - attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink')) - - clean_attrs = [] - for key, value in self.normalize_attrs(attrs): - if key in acceptable_attributes: - key=keymap.get(key,key) - # make sure the uri uses an acceptable uri scheme - if key == u'href': - value = _makeSafeAbsoluteURI(value) - clean_attrs.append((key,value)) - elif key=='style': - clean_value = self.sanitize_style(value) - if clean_value: - clean_attrs.append((key,clean_value)) - _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs) - - def unknown_endtag(self, tag): - if not tag in self.acceptable_elements: - if tag in self.unacceptable_elements_with_end_tag: - self.unacceptablestack -= 1 - if self.mathmlOK and tag in self.mathml_elements: - if tag == 'math' and self.mathmlOK: - self.mathmlOK -= 1 - elif self.svgOK and tag in self.svg_elements: - tag = self.svg_elem_map.get(tag,tag) - if tag == 'svg' and self.svgOK: - self.svgOK -= 1 - else: - return - _BaseHTMLProcessor.unknown_endtag(self, tag) - - def handle_pi(self, text): - pass - - def handle_decl(self, text): - pass - - def handle_data(self, text): - if not self.unacceptablestack: - _BaseHTMLProcessor.handle_data(self, text) - - def sanitize_style(self, style): - # disallow urls - style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style) - - # gauntlet - if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): - return '' - # This replaced a regexp that used re.match and was prone to pathological back-tracking. - if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip(): - return '' - - clean = [] - for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style): - if not value: - continue - if prop.lower() in self.acceptable_css_properties: - clean.append(prop + ': ' + value + ';') - elif prop.split('-')[0].lower() in ['background','border','margin','padding']: - for keyword in value.split(): - if not keyword in self.acceptable_css_keywords and \ - not self.valid_css_values.match(keyword): - break - else: - clean.append(prop + ': ' + value + ';') - elif self.svgOK and prop.lower() in self.acceptable_svg_properties: - clean.append(prop + ': ' + value + ';') - - return ' '.join(clean) - - def parse_comment(self, i, report=1): - ret = _BaseHTMLProcessor.parse_comment(self, i, report) - if ret >= 0: - return ret - # if ret == -1, this may be a malicious attempt to circumvent - # sanitization, or a page-destroying unclosed comment - match = re.compile(r'--[^>]*>').search(self.rawdata, i+4) - if match: - return match.end() - # unclosed comment; deliberately fail to handle_data() - return len(self.rawdata) - - -def _sanitizeHTML(htmlSource, encoding, _type): - if not _SGML_AVAILABLE: - return htmlSource - p = _HTMLSanitizer(encoding, _type) - htmlSource = htmlSource.replace('<![CDATA[', '<![CDATA[') - p.feed(htmlSource) - data = p.output() - data = data.strip().replace('\r\n', '\n') - return data - -class _FeedURLHandler(urllib2.HTTPDigestAuthHandler, urllib2.HTTPRedirectHandler, urllib2.HTTPDefaultErrorHandler): - def http_error_default(self, req, fp, code, msg, headers): - # The default implementation just raises HTTPError. - # Forget that. - fp.status = code - return fp - - def http_error_301(self, req, fp, code, msg, hdrs): - result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, - code, msg, hdrs) - result.status = code - result.newurl = result.geturl() - return result - # The default implementations in urllib2.HTTPRedirectHandler - # are identical, so hardcoding a http_error_301 call above - # won't affect anything - http_error_300 = http_error_301 - http_error_302 = http_error_301 - http_error_303 = http_error_301 - http_error_307 = http_error_301 - - def http_error_401(self, req, fp, code, msg, headers): - # Check if - # - server requires digest auth, AND - # - we tried (unsuccessfully) with basic auth, AND - # If all conditions hold, parse authentication information - # out of the Authorization header we sent the first time - # (for the username and password) and the WWW-Authenticate - # header the server sent back (for the realm) and retry - # the request with the appropriate digest auth headers instead. - # This evil genius hack has been brought to you by Aaron Swartz. - host = urlparse.urlparse(req.get_full_url())[1] - if base64 is None or 'Authorization' not in req.headers \ - or 'WWW-Authenticate' not in headers: - return self.http_error_default(req, fp, code, msg, headers) - auth = _base64decode(req.headers['Authorization'].split(' ')[1]) - user, passw = auth.split(':') - realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] - self.add_password(realm, host, user, passw) - retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) - self.reset_retry_count() - return retry - -def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers): - """URL, filename, or string --> stream - - This function lets you define parsers that take any input source - (URL, pathname to local or network file, or actual data as a string) - and deal with it in a uniform manner. Returned object is guaranteed - to have all the basic stdio read methods (read, readline, readlines). - Just .close() the object when you're done with it. - - If the etag argument is supplied, it will be used as the value of an - If-None-Match request header. - - If the modified argument is supplied, it can be a tuple of 9 integers - (as returned by gmtime() in the standard Python time module) or a date - string in any format supported by feedparser. Regardless, it MUST - be in GMT (Greenwich Mean Time). It will be reformatted into an - RFC 1123-compliant date and used as the value of an If-Modified-Since - request header. - - If the agent argument is supplied, it will be used as the value of a - User-Agent request header. - - If the referrer argument is supplied, it will be used as the value of a - Referer[sic] request header. - - If handlers is supplied, it is a list of handlers used to build a - urllib2 opener. - - if request_headers is supplied it is a dictionary of HTTP request headers - that will override the values generated by FeedParser. - """ - - if hasattr(url_file_stream_or_string, 'read'): - return url_file_stream_or_string - - if isinstance(url_file_stream_or_string, basestring) \ - and urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'): - # Deal with the feed URI scheme - if url_file_stream_or_string.startswith('feed:http'): - url_file_stream_or_string = url_file_stream_or_string[5:] - elif url_file_stream_or_string.startswith('feed:'): - url_file_stream_or_string = 'http:' + url_file_stream_or_string[5:] - if not agent: - agent = USER_AGENT - # Test for inline user:password credentials for HTTP basic auth - auth = None - if base64 and not url_file_stream_or_string.startswith('ftp:'): - urltype, rest = urllib.splittype(url_file_stream_or_string) - realhost, rest = urllib.splithost(rest) - if realhost: - user_passwd, realhost = urllib.splituser(realhost) - if user_passwd: - url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) - auth = base64.standard_b64encode(user_passwd).strip() - - # iri support - if isinstance(url_file_stream_or_string, unicode): - url_file_stream_or_string = _convert_to_idn(url_file_stream_or_string) - - # try to open with urllib2 (to use optional headers) - request = _build_urllib2_request(url_file_stream_or_string, agent, etag, modified, referrer, auth, request_headers) - opener = urllib2.build_opener(*tuple(handlers + [_FeedURLHandler()])) - opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent - try: - return opener.open(request) - finally: - opener.close() # JohnD - - # try to open with native open function (if url_file_stream_or_string is a filename) - try: - return open(url_file_stream_or_string, 'rb') - except (IOError, UnicodeEncodeError, TypeError): - # if url_file_stream_or_string is a unicode object that - # cannot be converted to the encoding returned by - # sys.getfilesystemencoding(), a UnicodeEncodeError - # will be thrown - # If url_file_stream_or_string is a string that contains NULL - # (such as an XML document encoded in UTF-32), TypeError will - # be thrown. - pass - - # treat url_file_stream_or_string as string - if isinstance(url_file_stream_or_string, unicode): - return _StringIO(url_file_stream_or_string.encode('utf-8')) - return _StringIO(url_file_stream_or_string) - -def _convert_to_idn(url): - """Convert a URL to IDN notation""" - # this function should only be called with a unicode string - # strategy: if the host cannot be encoded in ascii, then - # it'll be necessary to encode it in idn form - parts = list(urlparse.urlsplit(url)) - try: - parts[1].encode('ascii') - except UnicodeEncodeError: - # the url needs to be converted to idn notation - host = parts[1].rsplit(':', 1) - newhost = [] - port = u'' - if len(host) == 2: - port = host.pop() - for h in host[0].split('.'): - newhost.append(h.encode('idna').decode('utf-8')) - parts[1] = '.'.join(newhost) - if port: - parts[1] += ':' + port - return urlparse.urlunsplit(parts) - else: - return url - -def _build_urllib2_request(url, agent, etag, modified, referrer, auth, request_headers): - request = urllib2.Request(url) - request.add_header('User-Agent', agent) - if etag: - request.add_header('If-None-Match', etag) - if isinstance(modified, basestring): - modified = _parse_date(modified) - elif isinstance(modified, datetime.datetime): - modified = modified.utctimetuple() - if modified: - # format into an RFC 1123-compliant timestamp. We can't use - # time.strftime() since the %a and %b directives can be affected - # by the current locale, but RFC 2616 states that dates must be - # in English. - short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) - if referrer: - request.add_header('Referer', referrer) - if gzip and zlib: - request.add_header('Accept-encoding', 'gzip, deflate') - elif gzip: - request.add_header('Accept-encoding', 'gzip') - elif zlib: - request.add_header('Accept-encoding', 'deflate') - else: - request.add_header('Accept-encoding', '') - if auth: - request.add_header('Authorization', 'Basic %s' % auth) - if ACCEPT_HEADER: - request.add_header('Accept', ACCEPT_HEADER) - # use this for whatever -- cookies, special headers, etc - # [('Cookie','Something'),('x-special-header','Another Value')] - for header_name, header_value in request_headers.items(): - request.add_header(header_name, header_value) - request.add_header('A-IM', 'feed') # RFC 3229 support - return request - -def _parse_psc_chapter_start(start): - FORMAT = r'^((\d{2}):)?(\d{2}):(\d{2})(\.(\d{3}))?$' - - m = re.compile(FORMAT).match(start) - if m is None: - return None - - _, h, m, s, _, ms = m.groups() - h, m, s, ms = (int(h or 0), int(m), int(s), int(ms or 0)) - return datetime.timedelta(0, h*60*60 + m*60 + s, ms*1000) - -_date_handlers = [] -def registerDateHandler(func): - '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' - _date_handlers.insert(0, func) - -# ISO-8601 date parsing routines written by Fazal Majid. -# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 -# parser is beyond the scope of feedparser and would be a worthwhile addition -# to the Python library. -# A single regular expression cannot parse ISO 8601 date formats into groups -# as the standard is highly irregular (for instance is 030104 2003-01-04 or -# 0301-04-01), so we use templates instead. -# Please note the order in templates is significant because we need a -# greedy match. -_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO', - 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', - '-YY-?MM', '-OOO', '-YY', - '--MM-?DD', '--MM', - '---DD', - 'CC', ''] -_iso8601_re = [ - tmpl.replace( - 'YYYY', r'(?P<year>\d{4})').replace( - 'YY', r'(?P<year>\d\d)').replace( - 'MM', r'(?P<month>[01]\d)').replace( - 'DD', r'(?P<day>[0123]\d)').replace( - 'OOO', r'(?P<ordinal>[0123]\d\d)').replace( - 'CC', r'(?P<century>\d\d$)') - + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})' - + r'(:(?P<second>\d{2}))?' - + r'(\.(?P<fracsecond>\d+))?' - + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?' - for tmpl in _iso8601_tmpl] -try: - del tmpl -except NameError: - pass -_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] -try: - del regex -except NameError: - pass - -def _parse_date_iso8601(dateString): - '''Parse a variety of ISO-8601-compatible formats like 20040105''' - m = None - for _iso8601_match in _iso8601_matches: - m = _iso8601_match(dateString) - if m: - break - if not m: - return - if m.span() == (0, 0): - return - params = m.groupdict() - ordinal = params.get('ordinal', 0) - if ordinal: - ordinal = int(ordinal) - else: - ordinal = 0 - year = params.get('year', '--') - if not year or year == '--': - year = time.gmtime()[0] - elif len(year) == 2: - # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 - year = 100 * int(time.gmtime()[0] / 100) + int(year) - else: - year = int(year) - month = params.get('month', '-') - if not month or month == '-': - # ordinals are NOT normalized by mktime, we simulate them - # by setting month=1, day=ordinal - if ordinal: - month = 1 - else: - month = time.gmtime()[1] - month = int(month) - day = params.get('day', 0) - if not day: - # see above - if ordinal: - day = ordinal - elif params.get('century', 0) or \ - params.get('year', 0) or params.get('month', 0): - day = 1 - else: - day = time.gmtime()[2] - else: - day = int(day) - # special case of the century - is the first year of the 21st century - # 2000 or 2001 ? The debate goes on... - if 'century' in params: - year = (int(params['century']) - 1) * 100 + 1 - # in ISO 8601 most fields are optional - for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: - if not params.get(field, None): - params[field] = 0 - hour = int(params.get('hour', 0)) - minute = int(params.get('minute', 0)) - second = int(float(params.get('second', 0))) - # weekday is normalized by mktime(), we can ignore it - weekday = 0 - daylight_savings_flag = -1 - tm = [year, month, day, hour, minute, second, weekday, - ordinal, daylight_savings_flag] - # ISO 8601 time zone adjustments - tz = params.get('tz') - if tz and tz != 'Z': - if tz[0] == '-': - tm[3] += int(params.get('tzhour', 0)) - tm[4] += int(params.get('tzmin', 0)) - elif tz[0] == '+': - tm[3] -= int(params.get('tzhour', 0)) - tm[4] -= int(params.get('tzmin', 0)) - else: - return None - # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) - # which is guaranteed to normalize d/m/y/h/m/s. - # Many implementations have bugs, but we'll pretend they don't. - return time.localtime(time.mktime(tuple(tm))) -registerDateHandler(_parse_date_iso8601) - -# 8-bit date handling routines written by ytrewq1. -_korean_year = u'\ub144' # b3e2 in euc-kr -_korean_month = u'\uc6d4' # bff9 in euc-kr -_korean_day = u'\uc77c' # c0cf in euc-kr -_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr -_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr - -_korean_onblog_date_re = \ - re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ - (_korean_year, _korean_month, _korean_day)) -_korean_nate_date_re = \ - re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ - (_korean_am, _korean_pm)) -def _parse_date_onblog(dateString): - '''Parse a string according to the OnBlog 8-bit date format''' - m = _korean_onblog_date_re.match(dateString) - if not m: - return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ - 'zonediff': '+09:00'} - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_onblog) - -def _parse_date_nate(dateString): - '''Parse a string according to the Nate 8-bit date format''' - m = _korean_nate_date_re.match(dateString) - if not m: - return - hour = int(m.group(5)) - ampm = m.group(4) - if (ampm == _korean_pm): - hour += 12 - hour = str(hour) - if len(hour) == 1: - hour = '0' + hour - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ - 'zonediff': '+09:00'} - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_nate) - -# Unicode strings for Greek date strings -_greek_months = \ - { \ - u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 - u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 - u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 - u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 - u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 - u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 - u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 - u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 - u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 - u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 - u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 - u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 - u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 - u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 - u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 - u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 - u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 - } - -_greek_wdays = \ - { \ - u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 - u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 - u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 - u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 - u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 - u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 - u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 - } - -_greek_date_format_re = \ - re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') - -def _parse_date_greek(dateString): - '''Parse a string according to a Greek 8-bit date format.''' - m = _greek_date_format_re.match(dateString) - if not m: - return - wday = _greek_wdays[m.group(1)] - month = _greek_months[m.group(3)] - rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ - {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ - 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ - 'zonediff': m.group(8)} - return _parse_date_rfc822(rfc822date) -registerDateHandler(_parse_date_greek) - -# Unicode strings for Hungarian date strings -_hungarian_months = \ - { \ - u'janu\u00e1r': u'01', # e1 in iso-8859-2 - u'febru\u00e1ri': u'02', # e1 in iso-8859-2 - u'm\u00e1rcius': u'03', # e1 in iso-8859-2 - u'\u00e1prilis': u'04', # e1 in iso-8859-2 - u'm\u00e1ujus': u'05', # e1 in iso-8859-2 - u'j\u00fanius': u'06', # fa in iso-8859-2 - u'j\u00falius': u'07', # fa in iso-8859-2 - u'augusztus': u'08', - u'szeptember': u'09', - u'okt\u00f3ber': u'10', # f3 in iso-8859-2 - u'november': u'11', - u'december': u'12', - } - -_hungarian_date_format_re = \ - re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') - -def _parse_date_hungarian(dateString): - '''Parse a string according to a Hungarian 8-bit date format.''' - m = _hungarian_date_format_re.match(dateString) - if not m or m.group(2) not in _hungarian_months: - return None - month = _hungarian_months[m.group(2)] - day = m.group(3) - if len(day) == 1: - day = '0' + day - hour = m.group(4) - if len(hour) == 1: - hour = '0' + hour - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ - {'year': m.group(1), 'month': month, 'day': day,\ - 'hour': hour, 'minute': m.group(5),\ - 'zonediff': m.group(6)} - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_hungarian) - -timezonenames = { - 'ut': 0, 'gmt': 0, 'z': 0, - 'adt': -3, 'ast': -4, 'at': -4, - 'edt': -4, 'est': -5, 'et': -5, - 'cdt': -5, 'cst': -6, 'ct': -6, - 'mdt': -6, 'mst': -7, 'mt': -7, - 'pdt': -7, 'pst': -8, 'pt': -8, - 'a': -1, 'n': 1, - 'm': -12, 'y': 12, -} -# W3 date and time format parser -# http://www.w3.org/TR/NOTE-datetime -# Also supports MSSQL-style datetimes as defined at: -# http://msdn.microsoft.com/en-us/library/ms186724.aspx -# (basically, allow a space as a date/time/timezone separator) -def _parse_date_w3dtf(datestr): - if not datestr.strip(): - return None - parts = datestr.lower().split('t') - if len(parts) == 1: - # This may be a date only, or may be an MSSQL-style date - parts = parts[0].split() - if len(parts) == 1: - # Treat this as a date only - parts.append('00:00:00z') - elif len(parts) > 2: - return None - date = parts[0].split('-', 2) - if not date or len(date[0]) != 4: - return None - # Ensure that `date` has 3 elements. Using '1' sets the default - # month to January and the default day to the 1st of the month. - date.extend(['1'] * (3 - len(date))) - try: - year, month, day = [int(i) for i in date] - except ValueError: - # `date` may have more than 3 elements or may contain - # non-integer strings. - return None - if parts[1].endswith('z'): - parts[1] = parts[1][:-1] - parts.append('z') - # Append the numeric timezone offset, if any, to parts. - # If this is an MSSQL-style date then parts[2] already contains - # the timezone information, so `append()` will not affect it. - # Add 1 to each value so that if `find()` returns -1 it will be - # treated as False. - loc = parts[1].find('-') + 1 or parts[1].find('+') + 1 or len(parts[1]) + 1 - loc = loc - 1 - parts.append(parts[1][loc:]) - parts[1] = parts[1][:loc] - time = parts[1].split(':', 2) - # Ensure that time has 3 elements. Using '0' means that the - # minutes and seconds, if missing, will default to 0. - time.extend(['0'] * (3 - len(time))) - tzhour = 0 - tzmin = 0 - if parts[2][:1] in ('-', '+'): - try: - tzhour = int(parts[2][1:3]) - tzmin = int(parts[2][4:]) - except ValueError: - return None - if parts[2].startswith('-'): - tzhour = tzhour * -1 - tzmin = tzmin * -1 - else: - tzhour = timezonenames.get(parts[2], 0) - try: - hour, minute, second = [int(float(i)) for i in time] - except ValueError: - return None - # Create the datetime object and timezone delta objects - try: - stamp = datetime.datetime(year, month, day, hour, minute, second) - except ValueError: - return None - delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour) - # Return the date and timestamp in a UTC 9-tuple - try: - return (stamp - delta).utctimetuple() - except (OverflowError, ValueError): - # IronPython throws ValueErrors instead of OverflowErrors - return None - -registerDateHandler(_parse_date_w3dtf) - -def _parse_date_rfc822(date): - """Parse RFC 822 dates and times - http://tools.ietf.org/html/rfc822#section-5 - - There are some formatting differences that are accounted for: - 1. Years may be two or four digits. - 2. The month and day can be swapped. - 3. Additional timezone names are supported. - 4. A default time and timezone are assumed if only a date is present. - """ - daynames = set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']) - months = { - 'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6, - 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12, - } - - parts = date.lower().split() - if len(parts) < 5: - # Assume that the time and timezone are missing - parts.extend(('00:00:00', '0000')) - # Remove the day name - if parts[0][:3] in daynames: - parts = parts[1:] - if len(parts) < 5: - # If there are still fewer than five parts, there's not enough - # information to interpret this - return None - try: - day = int(parts[0]) - except ValueError: - # Check if the day and month are swapped - if months.get(parts[0][:3]): - try: - day = int(parts[1]) - except ValueError: - return None - else: - parts[1] = parts[0] - else: - return None - month = months.get(parts[1][:3]) - if not month: - return None - try: - year = int(parts[2]) - except ValueError: - return None - # Normalize two-digit years: - # Anything in the 90's is interpreted as 1990 and on - # Anything 89 or less is interpreted as 2089 or before - if len(parts[2]) <= 2: - year += (1900, 2000)[year < 90] - timeparts = parts[3].split(':') - timeparts = timeparts + ([0] * (3 - len(timeparts))) - try: - (hour, minute, second) = map(int, timeparts) - except ValueError: - return None - tzhour = 0 - tzmin = 0 - # Strip 'Etc/' from the timezone - if parts[4].startswith('etc/'): - parts[4] = parts[4][4:] - # Normalize timezones that start with 'gmt': - # GMT-05:00 => -0500 - # GMT => GMT - if parts[4].startswith('gmt'): - parts[4] = ''.join(parts[4][3:].split(':')) or 'gmt' - # Handle timezones like '-0500', '+0500', and 'EST' - if parts[4] and parts[4][0] in ('-', '+'): - try: - tzhour = int(parts[4][1:3]) - tzmin = int(parts[4][3:]) - except ValueError: - return None - if parts[4].startswith('-'): - tzhour = tzhour * -1 - tzmin = tzmin * -1 - else: - tzhour = timezonenames.get(parts[4], 0) - # Create the datetime object and timezone delta objects - try: - stamp = datetime.datetime(year, month, day, hour, minute, second) - except ValueError: - return None - delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour) - # Return the date and timestamp in a UTC 9-tuple - try: - return (stamp - delta).utctimetuple() - except (OverflowError, ValueError): - # IronPython throws ValueErrors instead of OverflowErrors - return None -registerDateHandler(_parse_date_rfc822) - -_months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', - 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] -def _parse_date_asctime(dt): - """Parse asctime-style dates""" - dayname, month, day, remainder = dt.split(None, 3) - # Convert month and day into zero-padded integers - month = '%02i ' % (_months.index(month.lower()) + 1) - day = '%02i ' % (int(day),) - dt = month + day + remainder - return time.strptime(dt, '%m %d %H:%M:%S %Y')[:-1] + (0, ) -registerDateHandler(_parse_date_asctime) - -def _parse_date_perforce(aDateString): - """parse a date in yyyy/mm/dd hh:mm:ss TTT format""" - # Fri, 2006/09/15 08:19:53 EDT - _my_date_pattern = re.compile( \ - r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})') - - m = _my_date_pattern.search(aDateString) - if m is None: - return None - dow, year, month, day, hour, minute, second, tz = m.groups() - months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz) - tm = rfc822.parsedate_tz(dateString) - if tm: - return time.gmtime(rfc822.mktime_tz(tm)) -registerDateHandler(_parse_date_perforce) - -def _parse_date(dateString): - '''Parses a variety of date formats into a 9-tuple in GMT''' - if not dateString: - return None - for handler in _date_handlers: - try: - date9tuple = handler(dateString) - except (KeyError, OverflowError, ValueError): - continue - if not date9tuple: - continue - if len(date9tuple) != 9: - continue - return date9tuple - return None - -# Each marker represents some of the characters of the opening XML -# processing instruction ('<?xm') in the specified encoding. -EBCDIC_MARKER = _l2bytes([0x4C, 0x6F, 0xA7, 0x94]) -UTF16BE_MARKER = _l2bytes([0x00, 0x3C, 0x00, 0x3F]) -UTF16LE_MARKER = _l2bytes([0x3C, 0x00, 0x3F, 0x00]) -UTF32BE_MARKER = _l2bytes([0x00, 0x00, 0x00, 0x3C]) -UTF32LE_MARKER = _l2bytes([0x3C, 0x00, 0x00, 0x00]) - -ZERO_BYTES = _l2bytes([0x00, 0x00]) - -# Match the opening XML declaration. -# Example: <?xml version="1.0" encoding="utf-8"?> -RE_XML_DECLARATION = re.compile('^<\?xml[^>]*?>') - -# Capture the value of the XML processing instruction's encoding attribute. -# Example: <?xml version="1.0" encoding="utf-8"?> -RE_XML_PI_ENCODING = re.compile(_s2bytes('^<\?.*encoding=[\'"](.*?)[\'"].*\?>')) - -def convert_to_utf8(http_headers, data): - '''Detect and convert the character encoding to UTF-8. - - http_headers is a dictionary - data is a raw string (not Unicode)''' - - # This is so much trickier than it sounds, it's not even funny. - # According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type - # is application/xml, application/*+xml, - # application/xml-external-parsed-entity, or application/xml-dtd, - # the encoding given in the charset parameter of the HTTP Content-Type - # takes precedence over the encoding given in the XML prefix within the - # document, and defaults to 'utf-8' if neither are specified. But, if - # the HTTP Content-Type is text/xml, text/*+xml, or - # text/xml-external-parsed-entity, the encoding given in the XML prefix - # within the document is ALWAYS IGNORED and only the encoding given in - # the charset parameter of the HTTP Content-Type header should be - # respected, and it defaults to 'us-ascii' if not specified. - - # Furthermore, discussion on the atom-syntax mailing list with the - # author of RFC 3023 leads me to the conclusion that any document - # served with a Content-Type of text/* and no charset parameter - # must be treated as us-ascii. (We now do this.) And also that it - # must always be flagged as non-well-formed. (We now do this too.) - - # If Content-Type is unspecified (input was local file or non-HTTP source) - # or unrecognized (server just got it totally wrong), then go by the - # encoding given in the XML prefix of the document and default to - # 'iso-8859-1' as per the HTTP specification (RFC 2616). - - # Then, assuming we didn't find a character encoding in the HTTP headers - # (and the HTTP Content-type allowed us to look in the body), we need - # to sniff the first few bytes of the XML data and try to determine - # whether the encoding is ASCII-compatible. Section F of the XML - # specification shows the way here: - # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info - - # If the sniffed encoding is not ASCII-compatible, we need to make it - # ASCII compatible so that we can sniff further into the XML declaration - # to find the encoding attribute, which will tell us the true encoding. - - # Of course, none of this guarantees that we will be able to parse the - # feed in the declared character encoding (assuming it was declared - # correctly, which many are not). iconv_codec can help a lot; - # you should definitely install it if you can. - # http://cjkpython.i18n.org/ - - bom_encoding = u'' - xml_encoding = u'' - rfc3023_encoding = u'' - - # Look at the first few bytes of the document to guess what - # its encoding may be. We only need to decode enough of the - # document that we can use an ASCII-compatible regular - # expression to search for an XML encoding declaration. - # The heuristic follows the XML specification, section F: - # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info - # Check for BOMs first. - if data[:4] == codecs.BOM_UTF32_BE: - bom_encoding = u'utf-32be' - data = data[4:] - elif data[:4] == codecs.BOM_UTF32_LE: - bom_encoding = u'utf-32le' - data = data[4:] - elif data[:2] == codecs.BOM_UTF16_BE and data[2:4] != ZERO_BYTES: - bom_encoding = u'utf-16be' - data = data[2:] - elif data[:2] == codecs.BOM_UTF16_LE and data[2:4] != ZERO_BYTES: - bom_encoding = u'utf-16le' - data = data[2:] - elif data[:3] == codecs.BOM_UTF8: - bom_encoding = u'utf-8' - data = data[3:] - # Check for the characters '<?xm' in several encodings. - elif data[:4] == EBCDIC_MARKER: - bom_encoding = u'cp037' - elif data[:4] == UTF16BE_MARKER: - bom_encoding = u'utf-16be' - elif data[:4] == UTF16LE_MARKER: - bom_encoding = u'utf-16le' - elif data[:4] == UTF32BE_MARKER: - bom_encoding = u'utf-32be' - elif data[:4] == UTF32LE_MARKER: - bom_encoding = u'utf-32le' - - tempdata = data - try: - if bom_encoding: - tempdata = data.decode(bom_encoding).encode('utf-8') - except (UnicodeDecodeError, LookupError): - # feedparser recognizes UTF-32 encodings that aren't - # available in Python 2.4 and 2.5, so it's possible to - # encounter a LookupError during decoding. - xml_encoding_match = None - else: - xml_encoding_match = RE_XML_PI_ENCODING.match(tempdata) - - if xml_encoding_match: - xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower() - # Normalize the xml_encoding if necessary. - if bom_encoding and (xml_encoding in ( - u'u16', u'utf-16', u'utf16', u'utf_16', - u'u32', u'utf-32', u'utf32', u'utf_32', - u'iso-10646-ucs-2', u'iso-10646-ucs-4', - u'csucs4', u'csunicode', u'ucs-2', u'ucs-4' - )): - xml_encoding = bom_encoding - - # Find the HTTP Content-Type and, hopefully, a character - # encoding provided by the server. The Content-Type is used - # to choose the "correct" encoding among the BOM encoding, - # XML declaration encoding, and HTTP encoding, following the - # heuristic defined in RFC 3023. - http_content_type = http_headers.get('content-type') or '' - http_content_type, params = cgi.parse_header(http_content_type) - http_encoding = params.get('charset', '').replace("'", "") - if not isinstance(http_encoding, unicode): - http_encoding = http_encoding.decode('utf-8', 'ignore') - - acceptable_content_type = 0 - application_content_types = (u'application/xml', u'application/xml-dtd', - u'application/xml-external-parsed-entity') - text_content_types = (u'text/xml', u'text/xml-external-parsed-entity') - if (http_content_type in application_content_types) or \ - (http_content_type.startswith(u'application/') and - http_content_type.endswith(u'+xml')): - acceptable_content_type = 1 - rfc3023_encoding = http_encoding or xml_encoding or u'utf-8' - elif (http_content_type in text_content_types) or \ - (http_content_type.startswith(u'text/') and - http_content_type.endswith(u'+xml')): - acceptable_content_type = 1 - rfc3023_encoding = http_encoding or u'us-ascii' - elif http_content_type.startswith(u'text/'): - rfc3023_encoding = http_encoding or u'us-ascii' - elif http_headers and 'content-type' not in http_headers: - rfc3023_encoding = xml_encoding or u'iso-8859-1' - else: - rfc3023_encoding = xml_encoding or u'utf-8' - # gb18030 is a superset of gb2312, so always replace gb2312 - # with gb18030 for greater compatibility. - if rfc3023_encoding.lower() == u'gb2312': - rfc3023_encoding = u'gb18030' - if xml_encoding.lower() == u'gb2312': - xml_encoding = u'gb18030' - - # there are four encodings to keep track of: - # - http_encoding is the encoding declared in the Content-Type HTTP header - # - xml_encoding is the encoding declared in the <?xml declaration - # - bom_encoding is the encoding sniffed from the first 4 bytes of the XML data - # - rfc3023_encoding is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications - error = None - - if http_headers and (not acceptable_content_type): - if 'content-type' in http_headers: - msg = '%s is not an XML media type' % http_headers['content-type'] - else: - msg = 'no Content-type specified' - error = NonXMLContentType(msg) - - # determine character encoding - known_encoding = 0 - chardet_encoding = None - tried_encodings = [] - if chardet: - chardet_encoding = chardet.detect(data)['encoding'] - if not chardet_encoding: - chardet_encoding = '' - if not isinstance(chardet_encoding, unicode): - chardet_encoding = unicode(chardet_encoding, 'ascii', 'ignore') - # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM - for proposed_encoding in (rfc3023_encoding, xml_encoding, bom_encoding, - chardet_encoding, u'utf-8', u'windows-1252', u'iso-8859-2'): - if not proposed_encoding: - continue - if proposed_encoding in tried_encodings: - continue - tried_encodings.append(proposed_encoding) - try: - data = data.decode(proposed_encoding) - except (UnicodeDecodeError, LookupError): - pass - else: - known_encoding = 1 - # Update the encoding in the opening XML processing instruction. - new_declaration = '''<?xml version='1.0' encoding='utf-8'?>''' - if RE_XML_DECLARATION.search(data): - data = RE_XML_DECLARATION.sub(new_declaration, data) - else: - data = new_declaration + u'\n' + data - data = data.encode('utf-8') - break - # if still no luck, give up - if not known_encoding: - error = CharacterEncodingUnknown( - 'document encoding unknown, I tried ' + - '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' % - (rfc3023_encoding, xml_encoding)) - rfc3023_encoding = u'' - elif proposed_encoding != rfc3023_encoding: - error = CharacterEncodingOverride( - 'document declared as %s, but parsed as %s' % - (rfc3023_encoding, proposed_encoding)) - rfc3023_encoding = proposed_encoding - - return data, rfc3023_encoding, error - -# Match XML entity declarations. -# Example: <!ENTITY copyright "(C)"> -RE_ENTITY_PATTERN = re.compile(_s2bytes(r'^\s*<!ENTITY([^>]*?)>'), re.MULTILINE) - -# Match XML DOCTYPE declarations. -# Example: <!DOCTYPE feed [ ]> -RE_DOCTYPE_PATTERN = re.compile(_s2bytes(r'^\s*<!DOCTYPE([^>]*?)>'), re.MULTILINE) - -# Match safe entity declarations. -# This will allow hexadecimal character references through, -# as well as text, but not arbitrary nested entities. -# Example: cubed "³" -# Example: copyright "(C)" -# Forbidden: explode1 "&explode2;&explode2;" -RE_SAFE_ENTITY_PATTERN = re.compile(_s2bytes('\s+(\w+)\s+"(&#\w+;|[^&"]*)"')) - -def replace_doctype(data): - '''Strips and replaces the DOCTYPE, returns (rss_version, stripped_data) - - rss_version may be 'rss091n' or None - stripped_data is the same XML document with a replaced DOCTYPE - ''' - - # Divide the document into two groups by finding the location - # of the first element that doesn't begin with '<?' or '<!'. - start = re.search(_s2bytes('<\w'), data) - start = start and start.start() or -1 - head, data = data[:start+1], data[start+1:] - - # Save and then remove all of the ENTITY declarations. - entity_results = RE_ENTITY_PATTERN.findall(head) - head = RE_ENTITY_PATTERN.sub(_s2bytes(''), head) - - # Find the DOCTYPE declaration and check the feed type. - doctype_results = RE_DOCTYPE_PATTERN.findall(head) - doctype = doctype_results and doctype_results[0] or _s2bytes('') - if _s2bytes('netscape') in doctype.lower(): - version = u'rss091n' - else: - version = None - - # Re-insert the safe ENTITY declarations if a DOCTYPE was found. - replacement = _s2bytes('') - if len(doctype_results) == 1 and entity_results: - match_safe_entities = lambda e: RE_SAFE_ENTITY_PATTERN.match(e) - safe_entities = filter(match_safe_entities, entity_results) - if safe_entities: - replacement = _s2bytes('<!DOCTYPE feed [\n<!ENTITY') \ - + _s2bytes('>\n<!ENTITY ').join(safe_entities) \ - + _s2bytes('>\n]>') - data = RE_DOCTYPE_PATTERN.sub(replacement, head) + data - - # Precompute the safe entities for the loose parser. - safe_entities = dict((k.decode('utf-8'), v.decode('utf-8')) - for k, v in RE_SAFE_ENTITY_PATTERN.findall(replacement)) - return version, data, safe_entities - - -# GeoRSS geometry parsers. Each return a dict with 'type' and 'coordinates' -# items, or None in the case of a parsing error. - -def _parse_poslist(value, geom_type, swap=True, dims=2): - if geom_type == 'linestring': - return _parse_georss_line(value, swap, dims) - elif geom_type == 'polygon': - ring = _parse_georss_line(value, swap, dims) - return {'type': u'Polygon', 'coordinates': (ring['coordinates'],)} - else: - return None - -def _gen_georss_coords(value, swap=True, dims=2): - # A generator of (lon, lat) pairs from a string of encoded GeoRSS - # coordinates. Converts to floats and swaps order. - latlons = itertools.imap(float, value.strip().replace(',', ' ').split()) - nxt = latlons.next - while True: - t = [nxt(), nxt()][::swap and -1 or 1] - if dims == 3: - t.append(nxt()) - yield tuple(t) - -def _parse_georss_point(value, swap=True, dims=2): - # A point contains a single latitude-longitude pair, separated by - # whitespace. We'll also handle comma separators. - try: - coords = list(_gen_georss_coords(value, swap, dims)) - return {u'type': u'Point', u'coordinates': coords[0]} - except (IndexError, ValueError): - return None - -def _parse_georss_line(value, swap=True, dims=2): - # A line contains a space separated list of latitude-longitude pairs in - # WGS84 coordinate reference system, with each pair separated by - # whitespace. There must be at least two pairs. - try: - coords = list(_gen_georss_coords(value, swap, dims)) - return {u'type': u'LineString', u'coordinates': coords} - except (IndexError, ValueError): - return None - -def _parse_georss_polygon(value, swap=True, dims=2): - # A polygon contains a space separated list of latitude-longitude pairs, - # with each pair separated by whitespace. There must be at least four - # pairs, with the last being identical to the first (so a polygon has a - # minimum of three actual points). - try: - ring = list(_gen_georss_coords(value, swap, dims)) - except (IndexError, ValueError): - return None - if len(ring) < 4: - return None - return {u'type': u'Polygon', u'coordinates': (ring,)} - -def _parse_georss_box(value, swap=True, dims=2): - # A bounding box is a rectangular region, often used to define the extents - # of a map or a rough area of interest. A box contains two space seperate - # latitude-longitude pairs, with each pair separated by whitespace. The - # first pair is the lower corner, the second is the upper corner. - try: - coords = list(_gen_georss_coords(value, swap, dims)) - return {u'type': u'Box', u'coordinates': tuple(coords)} - except (IndexError, ValueError): - return None - -# end geospatial parsers - - -def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, response_headers=None): - '''Parse a feed from a URL, file, stream, or string. - - request_headers, if given, is a dict from http header name to value to add - to the request; this overrides internally generated values. - ''' - - if handlers is None: - handlers = [] - if request_headers is None: - request_headers = {} - if response_headers is None: - response_headers = {} - - result = FeedParserDict() - result['feed'] = FeedParserDict() - result['entries'] = [] - result['bozo'] = 0 - if not isinstance(handlers, list): - handlers = [handlers] - try: - f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers) - data = f.read() - except Exception, e: - result['bozo'] = 1 - result['bozo_exception'] = e - data = None - f = None - - if hasattr(f, 'headers'): - result['headers'] = dict(f.headers) - # overwrite existing headers using response_headers - if 'headers' in result: - result['headers'].update(response_headers) - elif response_headers: - result['headers'] = copy.deepcopy(response_headers) - - # lowercase all of the HTTP headers for comparisons per RFC 2616 - if 'headers' in result: - http_headers = dict((k.lower(), v) for k, v in result['headers'].items()) - else: - http_headers = {} - - # if feed is gzip-compressed, decompress it - if f and data and http_headers: - if gzip and 'gzip' in http_headers.get('content-encoding', ''): - try: - attempts = 0 - while(len(data) > 1 and data[0] == '\x1f' and data[1] == '\x8b' and attempts < 3): - attempts += 1 - data = gzip.GzipFile(fileobj=_StringIO(data)).read() - except (IOError, struct.error), e: - # IOError can occur if the gzip header is bad. - # struct.error can occur if the data is damaged. - result['bozo'] = 1 - result['bozo_exception'] = e - if isinstance(e, struct.error): - # A gzip header was found but the data is corrupt. - # Ideally, we should re-request the feed without the - # 'Accept-encoding: gzip' header, but we don't. - data = None - elif zlib and 'deflate' in http_headers.get('content-encoding', ''): - try: - data = zlib.decompress(data) - except zlib.error, e: - try: - # The data may have no headers and no checksum. - data = zlib.decompress(data, -15) - except zlib.error, e: - result['bozo'] = 1 - result['bozo_exception'] = e - - # save HTTP headers - if http_headers: - if 'etag' in http_headers: - etag = http_headers.get('etag', u'') - if not isinstance(etag, unicode): - etag = etag.decode('utf-8', 'ignore') - if etag: - result['etag'] = etag - if 'last-modified' in http_headers: - modified = http_headers.get('last-modified', u'') - if modified: - result['modified'] = modified - result['modified_parsed'] = _parse_date(modified) - if hasattr(f, 'url'): - if not isinstance(f.url, unicode): - result['href'] = f.url.decode('utf-8', 'ignore') - else: - result['href'] = f.url - result['status'] = 200 - if hasattr(f, 'status'): - result['status'] = f.status - if hasattr(f, 'close'): - f.close() - - if data is None: - return result - - # Stop processing if the server sent HTTP 304 Not Modified. - if getattr(f, 'code', 0) == 304: - result['version'] = u'' - result['debug_message'] = 'The feed has not changed since you last checked, ' + \ - 'so the server sent no data. This is a feature, not a bug!' - return result - - data, result['encoding'], error = convert_to_utf8(http_headers, data) - use_strict_parser = result['encoding'] and True or False - if error is not None: - result['bozo'] = 1 - result['bozo_exception'] = error - - result['version'], data, entities = replace_doctype(data) - - # Ensure that baseuri is an absolute URI using an acceptable URI scheme. - contentloc = http_headers.get('content-location', u'') - href = result.get('href', u'') - baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href - - baselang = http_headers.get('content-language', None) - if not isinstance(baselang, unicode) and baselang is not None: - baselang = baselang.decode('utf-8', 'ignore') - - if not _XML_AVAILABLE: - use_strict_parser = 0 - if use_strict_parser: - # initialize the SAX parser - feedparser = _StrictFeedParser(baseuri, baselang, 'utf-8') - saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS) - saxparser.setFeature(xml.sax.handler.feature_namespaces, 1) - try: - # disable downloading external doctype references, if possible - saxparser.setFeature(xml.sax.handler.feature_external_ges, 0) - except xml.sax.SAXNotSupportedException: - pass - saxparser.setContentHandler(feedparser) - saxparser.setErrorHandler(feedparser) - source = xml.sax.xmlreader.InputSource() - source.setByteStream(_StringIO(data)) - try: - saxparser.parse(source) - except xml.sax.SAXException, e: - result['bozo'] = 1 - result['bozo_exception'] = feedparser.exc or e - use_strict_parser = 0 - if not use_strict_parser and _SGML_AVAILABLE: - feedparser = _LooseFeedParser(baseuri, baselang, 'utf-8', entities) - feedparser.feed(data.decode('utf-8', 'replace')) - result['feed'] = feedparser.feeddata - result['entries'] = feedparser.entries - result['version'] = result['version'] or feedparser.version - result['namespaces'] = feedparser.namespacesInUse - return result - -# The list of EPSG codes for geographic (latitude/longitude) coordinate -# systems to support decoding of GeoRSS GML profiles. -_geogCS = [ -3819, 3821, 3824, 3889, 3906, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, -4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4018, 4019, 4020, 4021, 4022, -4023, 4024, 4025, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, -4041, 4042, 4043, 4044, 4045, 4046, 4047, 4052, 4053, 4054, 4055, 4075, 4081, -4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, -4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, -4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, -4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, -4172, 4173, 4174, 4175, 4176, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, -4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, -4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, -4214, 4215, 4216, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, -4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, -4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, -4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, -4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, -4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293, -4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4306, 4307, -4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4322, -4324, 4326, 4463, 4470, 4475, 4483, 4490, 4555, 4558, 4600, 4601, 4602, 4603, -4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, -4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, -4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, -4643, 4644, 4645, 4646, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, -4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, -4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, -4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, -4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, -4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, -4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, -4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, -4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4801, 4802, 4803, 4804, -4805, 4806, 4807, 4808, 4809, 4810, 4811, 4813, 4814, 4815, 4816, 4817, 4818, -4819, 4820, 4821, 4823, 4824, 4901, 4902, 4903, 4904, 4979 ] diff --git a/lib/feedparser/feedparsertest.py b/lib/feedparser/feedparsertest.py deleted file mode 100644 index e1df914f8a598ac2ecc6bf3b5f817d5307604faa..0000000000000000000000000000000000000000 --- a/lib/feedparser/feedparsertest.py +++ /dev/null @@ -1,871 +0,0 @@ -#!/usr/bin/env python - -__author__ = "Mark Pilgrim <http://diveintomark.org/>" -__license__ = """ -Copyright (c) 2010-2013 Kurt McKee <contactme@kurtmckee.org> -Copyright (c) 2004-2008 Mark Pilgrim -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE.""" - -import codecs -import datetime -import glob -import operator -import os -import posixpath -import pprint -import re -import struct -import sys -import threading -import time -import unittest -import urllib -import warnings -import zlib -import BaseHTTPServer -import SimpleHTTPServer - -import feedparser - -if not feedparser._XML_AVAILABLE: - sys.stderr.write('No XML parsers available, unit testing can not proceed\n') - sys.exit(1) - -try: - # the utf_32 codec was introduced in Python 2.6; it's necessary to - # check this as long as feedparser supports Python 2.4 and 2.5 - codecs.lookup('utf_32') -except LookupError: - _UTF32_AVAILABLE = False -else: - _UTF32_AVAILABLE = True - -_s2bytes = feedparser._s2bytes -_l2bytes = feedparser._l2bytes - -#---------- custom HTTP server (used to serve test feeds) ---------- - -_PORT = 8097 # not really configurable, must match hardcoded port in tests -_HOST = '127.0.0.1' # also not really configurable - -class FeedParserTestRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): - headers_re = re.compile(_s2bytes(r"^Header:\s+([^:]+):(.+)$"), re.MULTILINE) - - def send_head(self): - """Send custom headers defined in test case - - Example: - <!-- - Header: Content-type: application/atom+xml - Header: X-Foo: bar - --> - """ - # Short-circuit the HTTP status test `test_redirect_to_304()` - if self.path == '/-/return-304.xml': - self.send_response(304) - self.send_header('Content-type', 'text/xml') - self.end_headers() - return feedparser._StringIO(u''.encode('utf-8')) - path = self.translate_path(self.path) - # the compression tests' filenames determine the header sent - if self.path.startswith('/tests/compression'): - if self.path.endswith('gz'): - headers = {'Content-Encoding': 'gzip'} - else: - headers = {'Content-Encoding': 'deflate'} - headers['Content-type'] = 'application/xml' - else: - headers = dict([(k.decode('utf-8'), v.decode('utf-8').strip()) for k, v in self.headers_re.findall(open(path, 'rb').read())]) - f = open(path, 'rb') - if (self.headers.get('if-modified-since') == headers.get('Last-Modified', 'nom')) \ - or (self.headers.get('if-none-match') == headers.get('ETag', 'nomatch')): - status = 304 - else: - status = 200 - headers.setdefault('Status', status) - self.send_response(int(headers['Status'])) - headers.setdefault('Content-type', self.guess_type(path)) - self.send_header("Content-type", headers['Content-type']) - self.send_header("Content-Length", str(os.stat(f.name)[6])) - for k, v in headers.items(): - if k not in ('Status', 'Content-type'): - self.send_header(k, v) - self.end_headers() - return f - - def log_request(self, *args): - pass - -class FeedParserTestServer(threading.Thread): - """HTTP Server that runs in a thread and handles a predetermined number of requests""" - - def __init__(self, requests): - threading.Thread.__init__(self) - self.requests = requests - self.ready = threading.Event() - - def run(self): - self.httpd = BaseHTTPServer.HTTPServer((_HOST, _PORT), FeedParserTestRequestHandler) - self.ready.set() - while self.requests: - self.httpd.handle_request() - self.requests -= 1 - self.ready.clear() - -#---------- dummy test case class (test methods are added dynamically) ---------- -unicode1_re = re.compile(_s2bytes(" u'")) -unicode2_re = re.compile(_s2bytes(' u"')) - -# _bytes is only used in everythingIsUnicode(). -# In Python 2 it's str, and in Python 3 it's bytes. -_bytes = type(_s2bytes('')) - -def everythingIsUnicode(d): - """Takes a dictionary, recursively verifies that every value is unicode""" - for k, v in d.iteritems(): - if isinstance(v, dict) and k != 'headers': - if not everythingIsUnicode(v): - return False - elif isinstance(v, list): - for i in v: - if isinstance(i, dict) and not everythingIsUnicode(i): - return False - elif isinstance(i, _bytes): - return False - elif isinstance(v, _bytes): - return False - return True - -def failUnlessEval(self, xmlfile, evalString, msg=None): - """Fail unless eval(evalString, env)""" - env = feedparser.parse(xmlfile) - try: - if not eval(evalString, globals(), env): - failure=(msg or 'not eval(%s) \nWITH env(%s)' % (evalString, pprint.pformat(env))) - raise self.failureException, failure - if not everythingIsUnicode(env): - raise self.failureException, "not everything is unicode \nWITH env(%s)" % (pprint.pformat(env), ) - except SyntaxError: - # Python 3 doesn't have the `u""` syntax, so evalString needs to be modified, - # which will require the failure message to be updated - evalString = re.sub(unicode1_re, _s2bytes(" '"), evalString) - evalString = re.sub(unicode2_re, _s2bytes(' "'), evalString) - if not eval(evalString, globals(), env): - failure=(msg or 'not eval(%s) \nWITH env(%s)' % (evalString, pprint.pformat(env))) - raise self.failureException, failure - -class BaseTestCase(unittest.TestCase): - failUnlessEval = failUnlessEval - -class TestCase(BaseTestCase): - pass - -class TestTemporaryFallbackBehavior(unittest.TestCase): - "These tests are temporarily here because of issues 310 and 328" - def test_issue_328_fallback_behavior(self): - warnings.filterwarnings('error') - - d = feedparser.FeedParserDict() - d['published'] = u'pub string' - d['published_parsed'] = u'pub tuple' - d['updated'] = u'upd string' - d['updated_parsed'] = u'upd tuple' - # Ensure that `updated` doesn't map to `published` when it exists - self.assertTrue('published' in d) - self.assertTrue('published_parsed' in d) - self.assertTrue('updated' in d) - self.assertTrue('updated_parsed' in d) - self.assertEqual(d['published'], 'pub string') - self.assertEqual(d['published_parsed'], 'pub tuple') - self.assertEqual(d['updated'], 'upd string') - self.assertEqual(d['updated_parsed'], 'upd tuple') - - d = feedparser.FeedParserDict() - d['published'] = u'pub string' - d['published_parsed'] = u'pub tuple' - # Ensure that `updated` doesn't actually exist - self.assertTrue('updated' not in d) - self.assertTrue('updated_parsed' not in d) - # Ensure that accessing `updated` throws a DeprecationWarning - try: - d['updated'] - except DeprecationWarning: - # Expected behavior - pass - else: - # Wrong behavior - self.assertEqual(True, False) - try: - d['updated_parsed'] - except DeprecationWarning: - # Expected behavior - pass - else: - # Wrong behavior - self.assertEqual(True, False) - # Ensure that `updated` maps to `published` - warnings.filterwarnings('ignore') - self.assertEqual(d['updated'], u'pub string') - self.assertEqual(d['updated_parsed'], u'pub tuple') - warnings.resetwarnings() - - -class TestEverythingIsUnicode(unittest.TestCase): - "Ensure that `everythingIsUnicode()` is working appropriately" - def test_everything_is_unicode(self): - self.assertTrue(everythingIsUnicode( - {'a': u'a', 'b': [u'b', {'c': u'c'}], 'd': {'e': u'e'}} - )) - def test_not_everything_is_unicode(self): - self.assertFalse(everythingIsUnicode({'a': _s2bytes('a')})) - self.assertFalse(everythingIsUnicode({'a': [_s2bytes('a')]})) - self.assertFalse(everythingIsUnicode({'a': {'b': _s2bytes('b')}})) - self.assertFalse(everythingIsUnicode({'a': [{'b': _s2bytes('b')}]})) - -class TestLooseParser(BaseTestCase): - "Test the sgmllib-based parser by manipulating feedparser " \ - "into believing no XML parsers are installed" - def __init__(self, arg): - unittest.TestCase.__init__(self, arg) - self._xml_available = feedparser._XML_AVAILABLE - def setUp(self): - feedparser._XML_AVAILABLE = 0 - def tearDown(self): - feedparser._XML_AVAILABLE = self._xml_available - -class TestStrictParser(BaseTestCase): - pass - -class TestMicroformats(BaseTestCase): - pass - -class TestEncodings(BaseTestCase): - def test_doctype_replacement(self): - "Ensure that non-ASCII-compatible encodings don't hide " \ - "disallowed ENTITY declarations" - doc = """<?xml version="1.0" encoding="utf-16be"?> - <!DOCTYPE feed [ - <!ENTITY exponential1 "bogus "> - <!ENTITY exponential2 "&exponential1;&exponential1;"> - <!ENTITY exponential3 "&exponential2;&exponential2;"> - ]> - <feed><title type="html">&exponential3;</title></feed>""" - doc = codecs.BOM_UTF16_BE + doc.encode('utf-16be') - result = feedparser.parse(doc) - self.assertEqual(result['feed']['title'], u'&exponential3') - def test_gb2312_converted_to_gb18030_in_xml_encoding(self): - # \u55de was chosen because it exists in gb18030 but not gb2312 - feed = u'''<?xml version="1.0" encoding="gb2312"?> - <feed><title>\u55de</title></feed>''' - result = feedparser.parse(feed.encode('gb18030'), response_headers={ - 'Content-Type': 'text/xml' - }) - self.assertEqual(result.encoding, 'gb18030') - -class TestFeedParserDict(unittest.TestCase): - "Ensure that FeedParserDict returns values as expected and won't crash" - def setUp(self): - self.d = feedparser.FeedParserDict() - def _check_key(self, k): - self.assertTrue(k in self.d) - self.assertTrue(hasattr(self.d, k)) - self.assertEqual(self.d[k], 1) - self.assertEqual(getattr(self.d, k), 1) - def _check_no_key(self, k): - self.assertTrue(k not in self.d) - self.assertTrue(not hasattr(self.d, k)) - def test_empty(self): - keys = ( - 'a','entries', 'id', 'guid', 'summary', 'subtitle', 'description', - 'category', 'enclosures', 'license', 'categories', - ) - for k in keys: - self._check_no_key(k) - self.assertTrue('items' not in self.d) - self.assertTrue(hasattr(self.d, 'items')) # dict.items() exists - def test_neutral(self): - self.d['a'] = 1 - self._check_key('a') - def test_single_mapping_target_1(self): - self.d['id'] = 1 - self._check_key('id') - self._check_key('guid') - def test_single_mapping_target_2(self): - self.d['guid'] = 1 - self._check_key('id') - self._check_key('guid') - def test_multiple_mapping_target_1(self): - self.d['summary'] = 1 - self._check_key('summary') - self._check_key('description') - def test_multiple_mapping_target_2(self): - self.d['subtitle'] = 1 - self._check_key('subtitle') - self._check_key('description') - def test_multiple_mapping_mapped_key(self): - self.d['description'] = 1 - self._check_key('summary') - self._check_key('description') - def test_license(self): - self.d['links'] = [] - try: - self.d['license'] - self.assertTrue(False) - except KeyError: - pass - self.d['links'].append({'rel': 'license'}) - try: - self.d['license'] - self.assertTrue(False) - except KeyError: - pass - self.d['links'].append({'rel': 'license', 'href': 'http://dom.test/'}) - self.assertEqual(self.d['license'], 'http://dom.test/') - def test_category(self): - self.d['tags'] = [] - try: - self.d['category'] - self.assertTrue(False) - except KeyError: - pass - self.d['tags'] = [{}] - try: - self.d['category'] - self.assertTrue(False) - except KeyError: - pass - self.d['tags'] = [{'term': 'cat'}] - self.assertEqual(self.d['category'], 'cat') - self.d['tags'].append({'term': 'dog'}) - self.assertEqual(self.d['category'], 'cat') - -class TestOpenResource(unittest.TestCase): - "Ensure that `_open_resource()` interprets its arguments as URIs, " \ - "file-like objects, or in-memory feeds as expected" - def test_fileobj(self): - r = feedparser._open_resource(sys.stdin, '', '', '', '', [], {}) - self.assertTrue(r is sys.stdin) - def test_feed(self): - f = feedparser.parse(u'feed://localhost:8097/tests/http/target.xml') - self.assertEqual(f.href, u'http://localhost:8097/tests/http/target.xml') - def test_feed_http(self): - f = feedparser.parse(u'feed:http://localhost:8097/tests/http/target.xml') - self.assertEqual(f.href, u'http://localhost:8097/tests/http/target.xml') - def test_bytes(self): - s = '<feed><item><title>text</title></item></feed>'.encode('utf-8') - r = feedparser._open_resource(s, '', '', '', '', [], {}) - self.assertEqual(s, r.read()) - def test_string(self): - s = '<feed><item><title>text</title></item></feed>' - r = feedparser._open_resource(s, '', '', '', '', [], {}) - self.assertEqual(s.encode('utf-8'), r.read()) - def test_unicode_1(self): - s = u'<feed><item><title>text</title></item></feed>' - r = feedparser._open_resource(s, '', '', '', '', [], {}) - self.assertEqual(s.encode('utf-8'), r.read()) - def test_unicode_2(self): - s = u'<feed><item><title>t\u00e9xt</title></item></feed>' - r = feedparser._open_resource(s, '', '', '', '', [], {}) - self.assertEqual(s.encode('utf-8'), r.read()) - -class TestMakeSafeAbsoluteURI(unittest.TestCase): - "Exercise the URI joining and sanitization code" - base = u'http://d.test/d/f.ext' - def _mktest(rel, expect, doc): - def fn(self): - value = feedparser._makeSafeAbsoluteURI(self.base, rel) - self.assertEqual(value, expect) - fn.__doc__ = doc - return fn - - # make the test cases; the call signature is: - # (relative_url, expected_return_value, test_doc_string) - test_abs = _mktest(u'https://s.test/', u'https://s.test/', 'absolute uri') - test_rel = _mktest(u'/new', u'http://d.test/new', 'relative uri') - test_bad = _mktest(u'x://bad.test/', u'', 'unacceptable uri protocol') - test_mag = _mktest(u'magnet:?xt=a', u'magnet:?xt=a', 'magnet uri') - - def test_catch_ValueError(self): - 'catch ValueError in Python 2.7 and up' - uri = u'http://bad]test/' - value1 = feedparser._makeSafeAbsoluteURI(uri) - value2 = feedparser._makeSafeAbsoluteURI(self.base, uri) - swap = feedparser.ACCEPTABLE_URI_SCHEMES - feedparser.ACCEPTABLE_URI_SCHEMES = () - value3 = feedparser._makeSafeAbsoluteURI(self.base, uri) - feedparser.ACCEPTABLE_URI_SCHEMES = swap - # Only Python 2.7 and up throw a ValueError, otherwise uri is returned - self.assertTrue(value1 in (uri, u'')) - self.assertTrue(value2 in (uri, u'')) - self.assertTrue(value3 in (uri, u'')) - -class TestConvertToIdn(unittest.TestCase): - "Test IDN support (unavailable in Jython as of Jython 2.5.2)" - # this is the greek test domain - hostname = u'\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1' - hostname += u'.\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae' - def test_control(self): - r = feedparser._convert_to_idn(u'http://example.test/') - self.assertEqual(r, u'http://example.test/') - def test_idn(self): - r = feedparser._convert_to_idn(u'http://%s/' % (self.hostname,)) - self.assertEqual(r, u'http://xn--hxajbheg2az3al.xn--jxalpdlp/') - def test_port(self): - r = feedparser._convert_to_idn(u'http://%s:8080/' % (self.hostname,)) - self.assertEqual(r, u'http://xn--hxajbheg2az3al.xn--jxalpdlp:8080/') - -class TestCompression(unittest.TestCase): - "Test the gzip and deflate support in the HTTP code" - def test_gzip_good(self): - f = feedparser.parse('http://localhost:8097/tests/compression/gzip.gz') - self.assertEqual(f.version, 'atom10') - def test_gzip_not_compressed(self): - f = feedparser.parse('http://localhost:8097/tests/compression/gzip-not-compressed.gz') - self.assertEqual(f.bozo, 1) - self.assertTrue(isinstance(f.bozo_exception, IOError)) - self.assertEqual(f['feed']['title'], 'gzip') - def test_gzip_struct_error(self): - f = feedparser.parse('http://localhost:8097/tests/compression/gzip-struct-error.gz') - self.assertEqual(f.bozo, 1) - self.assertTrue(isinstance(f.bozo_exception, struct.error)) - def test_zlib_good(self): - f = feedparser.parse('http://localhost:8097/tests/compression/deflate.z') - self.assertEqual(f.version, 'atom10') - def test_zlib_no_headers(self): - f = feedparser.parse('http://localhost:8097/tests/compression/deflate-no-headers.z') - self.assertEqual(f.version, 'atom10') - def test_zlib_not_compressed(self): - f = feedparser.parse('http://localhost:8097/tests/compression/deflate-not-compressed.z') - self.assertEqual(f.bozo, 1) - self.assertTrue(isinstance(f.bozo_exception, zlib.error)) - self.assertEqual(f['feed']['title'], 'deflate') - -class TestHTTPStatus(unittest.TestCase): - "Test HTTP redirection and other status codes" - def test_301(self): - f = feedparser.parse('http://localhost:8097/tests/http/http_status_301.xml') - self.assertEqual(f.status, 301) - self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml') - self.assertEqual(f.entries[0].title, 'target') - def test_302(self): - f = feedparser.parse('http://localhost:8097/tests/http/http_status_302.xml') - self.assertEqual(f.status, 302) - self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml') - self.assertEqual(f.entries[0].title, 'target') - def test_303(self): - f = feedparser.parse('http://localhost:8097/tests/http/http_status_303.xml') - self.assertEqual(f.status, 303) - self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml') - self.assertEqual(f.entries[0].title, 'target') - def test_307(self): - f = feedparser.parse('http://localhost:8097/tests/http/http_status_307.xml') - self.assertEqual(f.status, 307) - self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml') - self.assertEqual(f.entries[0].title, 'target') - def test_304(self): - # first retrieve the url - u = 'http://localhost:8097/tests/http/http_status_304.xml' - f = feedparser.parse(u) - self.assertEqual(f.status, 200) - self.assertEqual(f.entries[0].title, 'title 304') - # extract the etag and last-modified headers - e = [v for k, v in f.headers.items() if k.lower() == 'etag'][0] - mh = [v for k, v in f.headers.items() if k.lower() == 'last-modified'][0] - ms = f.updated - mt = f.updated_parsed - md = datetime.datetime(*mt[0:7]) - self.assertTrue(isinstance(mh, basestring)) - self.assertTrue(isinstance(ms, basestring)) - self.assertTrue(isinstance(mt, time.struct_time)) - self.assertTrue(isinstance(md, datetime.datetime)) - # test that sending back the etag results in a 304 - f = feedparser.parse(u, etag=e) - self.assertEqual(f.status, 304) - # test that sending back last-modified (string) results in a 304 - f = feedparser.parse(u, modified=ms) - self.assertEqual(f.status, 304) - # test that sending back last-modified (9-tuple) results in a 304 - f = feedparser.parse(u, modified=mt) - self.assertEqual(f.status, 304) - # test that sending back last-modified (datetime) results in a 304 - f = feedparser.parse(u, modified=md) - self.assertEqual(f.status, 304) - def test_404(self): - f = feedparser.parse('http://localhost:8097/tests/http/http_status_404.xml') - self.assertEqual(f.status, 404) - def test_redirect_to_304(self): - # ensure that an http redirect to an http 304 doesn't - # trigger a bozo_exception - u = 'http://localhost:8097/tests/http/http_redirect_to_304.xml' - f = feedparser.parse(u) - self.assertTrue(f.bozo == 0) - self.assertTrue(f.status == 302) - -class TestDateParsers(unittest.TestCase): - "Test the various date parsers; most of the test cases are constructed " \ - "dynamically based on the contents of the `date_tests` dict, below" - def test_None(self): - self.assertTrue(feedparser._parse_date(None) is None) - def _check_date(self, func, dtstring, expected_value): - try: - parsed_value = func(dtstring) - except (OverflowError, ValueError): - parsed_value = None - self.assertEqual(parsed_value, expected_value) - # self.assertEqual(parsed_value, feedparser._parse_date(dtstring)) - def test_year_10000_date(self): - # On some systems this date string will trigger an OverflowError. - # On Jython and x64 systems, however, it's interpreted just fine. - try: - date = feedparser._parse_date_rfc822(u'Sun, 31 Dec 9999 23:59:59 -9999') - except OverflowError: - date = None - self.assertTrue(date in (None, (10000, 1, 5, 4, 38, 59, 2, 5, 0))) - -date_tests = { - feedparser._parse_date_greek: ( - (u'', None), # empty string - (u'\u039a\u03c5\u03c1, 11 \u0399\u03bf\u03cd\u03bb 2004 12:00:00 EST', (2004, 7, 11, 17, 0, 0, 6, 193, 0)), - ), - feedparser._parse_date_hungarian: ( - (u'', None), # empty string - (u'2004-j\u00falius-13T9:15-05:00', (2004, 7, 13, 14, 15, 0, 1, 195, 0)), - ), - feedparser._parse_date_iso8601: ( - (u'', None), # empty string - (u'-0312', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/month only variant - (u'031231', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # 2-digit year/month/day only, no hyphens - (u'03-12-31', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # 2-digit year/month/day only - (u'-03-12', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/month only - (u'03335', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/ordinal, no hyphens - (u'2003-12-31T10:14:55.1234Z', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # fractional seconds - # Special case for Google's extra zero in the month - (u'2003-012-31T10:14:55+00:00', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), - ), - feedparser._parse_date_nate: ( - (u'', None), # empty string - (u'2004-05-25 \uc624\ud6c4 11:23:17', (2004, 5, 25, 14, 23, 17, 1, 146, 0)), - ), - feedparser._parse_date_onblog: ( - (u'', None), # empty string - (u'2004\ub144 05\uc6d4 28\uc77c 01:31:15', (2004, 5, 27, 16, 31, 15, 3, 148, 0)), - ), - feedparser._parse_date_perforce: ( - (u'', None), # empty string - (u'Fri, 2006/09/15 08:19:53 EDT', (2006, 9, 15, 12, 19, 53, 4, 258, 0)), - ), - feedparser._parse_date_rfc822: ( - (u'', None), # empty string - (u'Thu, 01 Jan 0100 00:00:01 +0100', (99, 12, 31, 23, 0, 1, 3, 365, 0)), # ancient date - (u'Thu, 01 Jan 04 19:48:21 GMT', (2004, 1, 1, 19, 48, 21, 3, 1, 0)), # 2-digit year - (u'Thu, 01 Jan 2004 19:48:21 GMT', (2004, 1, 1, 19, 48, 21, 3, 1, 0)), # 4-digit year - (u'Thu, 5 Apr 2012 10:00:00 GMT', (2012, 4, 5, 10, 0, 0, 3, 96, 0)), # 1-digit day - (u'Wed, 19 Aug 2009 18:28:00 Etc/GMT', (2009, 8, 19, 18, 28, 0, 2, 231, 0)), # etc/gmt timezone - (u'Wed, 19 Feb 2012 22:40:00 GMT-01:01', (2012, 2, 19, 23, 41, 0, 6, 50, 0)), # gmt+hh:mm timezone - (u'Mon, 13 Feb, 2012 06:28:00 UTC', (2012, 2, 13, 6, 28, 0, 0, 44, 0)), # extraneous comma - (u'Thu, 01 Jan 2004 00:00 GMT', (2004, 1, 1, 0, 0, 0, 3, 1, 0)), # no seconds - (u'Thu, 01 Jan 2004', (2004, 1, 1, 0, 0, 0, 3, 1, 0)), # no time - # Additional tests to handle Disney's long month names and invalid timezones - (u'Mon, 26 January 2004 16:31:00 AT', (2004, 1, 26, 20, 31, 0, 0, 26, 0)), - (u'Mon, 26 January 2004 16:31:00 ET', (2004, 1, 26, 21, 31, 0, 0, 26, 0)), - (u'Mon, 26 January 2004 16:31:00 CT', (2004, 1, 26, 22, 31, 0, 0, 26, 0)), - (u'Mon, 26 January 2004 16:31:00 MT', (2004, 1, 26, 23, 31, 0, 0, 26, 0)), - (u'Mon, 26 January 2004 16:31:00 PT', (2004, 1, 27, 0, 31, 0, 1, 27, 0)), - # Swapped month and day - (u'Thu Aug 30 2012 17:26:16 +0200', (2012, 8, 30, 15, 26, 16, 3, 243, 0)), - (u'Sun, 16 Dec 2012 1:2:3:4 GMT', None), # invalid time - (u'Sun, 16 zzz 2012 11:47:32 GMT', None), # invalid month - (u'Sun, Dec x 2012 11:47:32 GMT', None), # invalid day (swapped day/month) - ('Sun, 16 Dec zz 11:47:32 GMT', None), # invalid year - ('Sun, 16 Dec 2012 11:47:32 +zz:00', None), # invalid timezone hour - ('Sun, 16 Dec 2012 11:47:32 +00:zz', None), # invalid timezone minute - ('Sun, 99 Jun 2009 12:00:00 GMT', None), # out-of-range day - ), - feedparser._parse_date_asctime: ( - (u'Sun Jan 4 16:29:06 2004', (2004, 1, 4, 16, 29, 6, 6, 4, 0)), - ), - feedparser._parse_date_w3dtf: ( - (u'', None), # empty string - (u'2003-12-31T10:14:55Z', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # UTC - (u'2003-12-31T10:14:55-08:00', (2003, 12, 31, 18, 14, 55, 2, 365, 0)), # San Francisco timezone - (u'2003-12-31T18:14:55+08:00', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # Tokyo timezone - (u'2007-04-23T23:25:47.538+10:00', (2007, 4, 23, 13, 25, 47, 0, 113, 0)), # fractional seconds - (u'2003-12-31', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # year/month/day only - (u'2003-12', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # year/month only - (u'2003', (2003, 1, 1, 0, 0, 0, 2, 1, 0)), # year only - # Special cases for rollovers in leap years - (u'2004-02-28T18:14:55-08:00', (2004, 2, 29, 2, 14, 55, 6, 60, 0)), # feb 28 in leap year - (u'2003-02-28T18:14:55-08:00', (2003, 3, 1, 2, 14, 55, 5, 60, 0)), # feb 28 in non-leap year - (u'2000-02-28T18:14:55-08:00', (2000, 2, 29, 2, 14, 55, 1, 60, 0)), # feb 28 in leap year on century divisible by 400 - # Out-of-range times - (u'9999-12-31T23:59:59-99:99', None), # Date is out-of-range - (u'2003-12-31T25:14:55Z', None), # invalid (25 hours) - (u'2003-12-31T10:61:55Z', None), # invalid (61 minutes) - (u'2003-12-31T10:14:61Z', None), # invalid (61 seconds) - # Invalid formats - (u'22013', None), # Year is too long - (u'013', None), # Year is too short - (u'2013-01-27-01', None), # Date has to many parts - (u'2013-01-28T11:30:00-06:00Textra', None), # Too many 't's - # Non-integer values - (u'2013-xx-27', None), # Date - (u'2013-01-28T09:xx:00Z', None), # Time - (u'2013-01-28T09:00:00+00:xx', None), # Timezone - # MSSQL-style dates - (u'2004-07-08 23:56:58 -00:20', (2004, 7, 9, 0, 16, 58, 4, 191, 0)), # with timezone - (u'2004-07-08 23:56:58', (2004, 7, 8, 23, 56, 58, 3, 190, 0)), # without timezone - (u'2004-07-08 23:56:58.0', (2004, 7, 8, 23, 56, 58, 3, 190, 0)), # with fractional second - ) -} - -def make_date_test(f, s, t): - return lambda self: self._check_date(f, s, t) - -for func, items in date_tests.iteritems(): - for i, (dtstring, dttuple) in enumerate(items): - uniqfunc = make_date_test(func, dtstring, dttuple) - setattr(TestDateParsers, 'test_%s_%02i' % (func.__name__, i), uniqfunc) - - -class TestHTMLGuessing(unittest.TestCase): - "Exercise the HTML sniffing code" - def _mktest(text, expect, doc): - def fn(self): - value = bool(feedparser._FeedParserMixin.lookslikehtml(text)) - self.assertEqual(value, expect) - fn.__doc__ = doc - return fn - - test_text_1 = _mktest(u'plain text', False, u'plain text') - test_text_2 = _mktest(u'2 < 3', False, u'plain text with angle bracket') - test_html_1 = _mktest(u'<a href="">a</a>', True, u'anchor tag') - test_html_2 = _mktest(u'<i>i</i>', True, u'italics tag') - test_html_3 = _mktest(u'<b>b</b>', True, u'bold tag') - test_html_4 = _mktest(u'<code>', False, u'allowed tag, no end tag') - test_html_5 = _mktest(u'<rss> .. </rss>', False, u'disallowed tag') - test_entity_1 = _mktest(u'AT&T', False, u'corporation name') - test_entity_2 = _mktest(u'©', True, u'named entity reference') - test_entity_3 = _mktest(u'©', True, u'numeric entity reference') - test_entity_4 = _mktest(u'©', True, u'hex numeric entity reference') - -#---------- additional api unit tests, not backed by files - -class TestBuildRequest(unittest.TestCase): - "Test that HTTP request objects are created as expected" - def test_extra_headers(self): - """You can pass in extra headers and they go into the request object.""" - - request = feedparser._build_urllib2_request( - 'http://example.com/feed', - 'agent-name', - None, None, None, None, - {'Cache-Control': 'max-age=0'}) - # nb, urllib2 folds the case of the headers - self.assertEqual( - request.get_header('Cache-control'), 'max-age=0') - - -class TestLxmlBug(unittest.TestCase): - def test_lxml_etree_bug(self): - try: - import lxml.etree - except ImportError: - pass - else: - doc = u"<feed>&illformed_charref</feed>".encode('utf8') - # Importing lxml.etree currently causes libxml2 to - # throw SAXException instead of SAXParseException. - feedparser.parse(feedparser._StringIO(doc)) - self.assertTrue(True) - -#---------- parse test files and create test methods ---------- -def convert_to_utf8(data): - "Identify data's encoding using its byte order mark" \ - "and convert it to its utf-8 equivalent" - if data[:4] == _l2bytes([0x4c, 0x6f, 0xa7, 0x94]): - return data.decode('cp037').encode('utf-8') - elif data[:4] == _l2bytes([0x00, 0x00, 0xfe, 0xff]): - if not _UTF32_AVAILABLE: - return None - return data.decode('utf-32be').encode('utf-8') - elif data[:4] == _l2bytes([0xff, 0xfe, 0x00, 0x00]): - if not _UTF32_AVAILABLE: - return None - return data.decode('utf-32le').encode('utf-8') - elif data[:4] == _l2bytes([0x00, 0x00, 0x00, 0x3c]): - if not _UTF32_AVAILABLE: - return None - return data.decode('utf-32be').encode('utf-8') - elif data[:4] == _l2bytes([0x3c, 0x00, 0x00, 0x00]): - if not _UTF32_AVAILABLE: - return None - return data.decode('utf-32le').encode('utf-8') - elif data[:4] == _l2bytes([0x00, 0x3c, 0x00, 0x3f]): - return data.decode('utf-16be').encode('utf-8') - elif data[:4] == _l2bytes([0x3c, 0x00, 0x3f, 0x00]): - return data.decode('utf-16le').encode('utf-8') - elif (data[:2] == _l2bytes([0xfe, 0xff])) and (data[2:4] != _l2bytes([0x00, 0x00])): - return data[2:].decode('utf-16be').encode('utf-8') - elif (data[:2] == _l2bytes([0xff, 0xfe])) and (data[2:4] != _l2bytes([0x00, 0x00])): - return data[2:].decode('utf-16le').encode('utf-8') - elif data[:3] == _l2bytes([0xef, 0xbb, 0xbf]): - return data[3:] - # no byte order mark was found - return data - -skip_re = re.compile(_s2bytes("SkipUnless:\s*(.*?)\n")) -desc_re = re.compile(_s2bytes("Description:\s*(.*?)\s*Expect:\s*(.*)\s*-->")) -def getDescription(xmlfile, data): - """Extract test data - - Each test case is an XML file which contains not only a test feed - but also the description of the test and the condition that we - would expect the parser to create when it parses the feed. Example: - <!-- - Description: feed title - Expect: feed['title'] == u'Example feed' - --> - """ - skip_results = skip_re.search(data) - if skip_results: - skipUnless = skip_results.group(1).strip() - else: - skipUnless = '1' - search_results = desc_re.search(data) - if not search_results: - raise RuntimeError, "can't parse %s" % xmlfile - description, evalString = map(lambda s: s.strip(), list(search_results.groups())) - description = xmlfile + ": " + unicode(description, 'utf8') - return description, evalString, skipUnless - -def buildTestCase(xmlfile, description, evalString): - func = lambda self, xmlfile=xmlfile, evalString=evalString: \ - self.failUnlessEval(xmlfile, evalString) - func.__doc__ = description - return func - -def runtests(): - "Read the files in the tests/ directory, dynamically add tests to the " \ - "TestCases above, spawn the HTTP server, and run the test suite" - if sys.argv[1:]: - allfiles = filter(lambda s: s.endswith('.xml'), reduce(operator.add, map(glob.glob, sys.argv[1:]), [])) - wellformedfiles = illformedfiles = encodingfiles = entitiesfiles = microformatfiles = [] - sys.argv = [sys.argv[0]] #+ sys.argv[2:] - else: - allfiles = glob.glob(os.path.join('.', 'tests', '**', '**', '*.xml')) - wellformedfiles = glob.glob(os.path.join('.', 'tests', 'wellformed', '**', '*.xml')) - illformedfiles = glob.glob(os.path.join('.', 'tests', 'illformed', '*.xml')) - encodingfiles = glob.glob(os.path.join('.', 'tests', 'encoding', '*.xml')) - entitiesfiles = glob.glob(os.path.join('.', 'tests', 'entities', '*.xml')) - microformatfiles = glob.glob(os.path.join('.', 'tests', 'microformats', '**', '*.xml')) - httpd = None - # there are several compression test cases that must be accounted for - # as well as a number of http status tests that redirect to a target - # and a few `_open_resource`-related tests - httpcount = 6 + 16 + 2 - httpcount += len([f for f in allfiles if 'http' in f]) - httpcount += len([f for f in wellformedfiles if 'http' in f]) - httpcount += len([f for f in illformedfiles if 'http' in f]) - httpcount += len([f for f in encodingfiles if 'http' in f]) - try: - for c, xmlfile in enumerate(allfiles + encodingfiles + illformedfiles + entitiesfiles): - addTo = TestCase - if xmlfile in encodingfiles: - addTo = TestEncodings - elif xmlfile in entitiesfiles: - addTo = (TestStrictParser, TestLooseParser) - elif xmlfile in microformatfiles: - addTo = TestMicroformats - elif xmlfile in wellformedfiles: - addTo = (TestStrictParser, TestLooseParser) - f = open(xmlfile, 'rb') - data = f.read() - f.close() - if 'encoding' in xmlfile: - data = convert_to_utf8(data) - if data is None: - # convert_to_utf8 found a byte order mark for utf_32 - # but it's not supported in this installation of Python - if 'http' in xmlfile: - httpcount -= 1 + (xmlfile in wellformedfiles) - continue - description, evalString, skipUnless = getDescription(xmlfile, data) - testName = 'test_%06d' % c - ishttp = 'http' in xmlfile - try: - if not eval(skipUnless): raise NotImplementedError - except (ImportError, LookupError, NotImplementedError, AttributeError): - if ishttp: - httpcount -= 1 + (xmlfile in wellformedfiles) - continue - if ishttp: - xmlfile = 'http://%s:%s/%s' % (_HOST, _PORT, posixpath.normpath(xmlfile.replace('\\', '/'))) - testFunc = buildTestCase(xmlfile, description, evalString) - if isinstance(addTo, tuple): - setattr(addTo[0], testName, testFunc) - setattr(addTo[1], testName, testFunc) - else: - setattr(addTo, testName, testFunc) - if httpcount: - httpd = FeedParserTestServer(httpcount) - httpd.daemon = True - httpd.start() - httpd.ready.wait() - testsuite = unittest.TestSuite() - testloader = unittest.TestLoader() - testsuite.addTest(testloader.loadTestsFromTestCase(TestCase)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestStrictParser)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestLooseParser)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestEncodings)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestDateParsers)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestHTMLGuessing)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestHTTPStatus)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestCompression)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestConvertToIdn)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestMicroformats)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestOpenResource)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestFeedParserDict)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestMakeSafeAbsoluteURI)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestEverythingIsUnicode)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestTemporaryFallbackBehavior)) - testsuite.addTest(testloader.loadTestsFromTestCase(TestLxmlBug)) - testresults = unittest.TextTestRunner(verbosity=1).run(testsuite) - - # Return 0 if successful, 1 if there was a failure - sys.exit(not testresults.wasSuccessful()) - finally: - if httpd: - if httpd.requests: - # Should never get here unless something went horribly wrong, like the - # user hitting Ctrl-C. Tell our HTTP server that it's done, then do - # one more request to flush it. This rarely works; the combination of - # threading, self-terminating HTTP servers, and unittest is really - # quite flaky. Just what you want in a testing framework, no? - httpd.requests = 0 - if httpd.ready: - urllib.urlopen('http://127.0.0.1:8097/tests/wellformed/rss/aaa_wellformed.xml').read() - httpd.join(0) - -if __name__ == "__main__": - runtests() diff --git a/lib/feedparser/html.py b/lib/feedparser/html.py new file mode 100644 index 0000000000000000000000000000000000000000..18f5e8da9f4620df18e3a6930619dbf71654095d --- /dev/null +++ b/lib/feedparser/html.py @@ -0,0 +1,213 @@ +from __future__ import absolute_import, unicode_literals + +import re + +try: + from html.entities import name2codepoint +except ImportError: + from htmlentitydefs import name2codepoint + +from .sgml import * + +_cp1252 = { + 128: '\u20ac', # euro sign + 130: '\u201a', # single low-9 quotation mark + 131: '\u0192', # latin small letter f with hook + 132: '\u201e', # double low-9 quotation mark + 133: '\u2026', # horizontal ellipsis + 134: '\u2020', # dagger + 135: '\u2021', # double dagger + 136: '\u02c6', # modifier letter circumflex accent + 137: '\u2030', # per mille sign + 138: '\u0160', # latin capital letter s with caron + 139: '\u2039', # single left-pointing angle quotation mark + 140: '\u0152', # latin capital ligature oe + 142: '\u017d', # latin capital letter z with caron + 145: '\u2018', # left single quotation mark + 146: '\u2019', # right single quotation mark + 147: '\u201c', # left double quotation mark + 148: '\u201d', # right double quotation mark + 149: '\u2022', # bullet + 150: '\u2013', # en dash + 151: '\u2014', # em dash + 152: '\u02dc', # small tilde + 153: '\u2122', # trade mark sign + 154: '\u0161', # latin small letter s with caron + 155: '\u203a', # single right-pointing angle quotation mark + 156: '\u0153', # latin small ligature oe + 158: '\u017e', # latin small letter z with caron + 159: '\u0178', # latin capital letter y with diaeresis +} + +class _BaseHTMLProcessor(sgmllib.SGMLParser, object): + special = re.compile('''[<>'"]''') + bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)") + elements_no_end_tag = set([ + 'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', + 'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param', + 'source', 'track', 'wbr' + ]) + + def __init__(self, encoding=None, _type='application/xhtml+xml'): + if encoding: + self.encoding = encoding + self._type = _type + super(_BaseHTMLProcessor, self).__init__() + + def reset(self): + self.pieces = [] + sgmllib.SGMLParser.reset(self) + + def _shorttag_replace(self, match): + tag = match.group(1) + if tag in self.elements_no_end_tag: + return '<' + tag + ' />' + else: + return '<' + tag + '></' + tag + '>' + + # By declaring these methods and overriding their compiled code + # with the code from sgmllib, the original code will execute in + # feedparser's scope instead of sgmllib's. This means that the + # `tagfind` and `charref` regular expressions will be found as + # they're declared above, not as they're declared in sgmllib. + def goahead(self, i): + pass + try: + goahead.__code__ = sgmllib.SGMLParser.goahead.__code__ + except AttributeError: + goahead.func_code = sgmllib.SGMLParser.goahead.func_code + + def __parse_starttag(self, i): + pass + try: + __parse_starttag.__code__ = sgmllib.SGMLParser.parse_starttag.__code__ + except AttributeError: + __parse_starttag.func_code = sgmllib.SGMLParser.parse_starttag.func_code + + def parse_starttag(self,i): + j = self.__parse_starttag(i) + if self._type == 'application/xhtml+xml': + if j>2 and self.rawdata[j-2:j]=='/>': + self.unknown_endtag(self.lasttag) + return j + + def feed(self, data): + data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'<!\1', data) + data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data) + data = data.replace(''', "'") + data = data.replace('"', '"') + sgmllib.SGMLParser.feed(self, data) + sgmllib.SGMLParser.close(self) + + def normalize_attrs(self, attrs): + if not attrs: + return attrs + # utility method to be called by descendants + attrs = dict([(k.lower(), v) for k, v in attrs]).items() + attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] + attrs.sort() + return attrs + + def unknown_starttag(self, tag, attrs): + # called for each start tag + # attrs is a list of (attr, value) tuples + # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')] + uattrs = [] + strattrs='' + if attrs: + for key, value in attrs: + value=value.replace('>','>').replace('<','<').replace('"','"') + value = self.bare_ampersand.sub("&", value) + uattrs.append((key, value)) + strattrs = ''.join([' %s="%s"' % (key, value) for key, value in uattrs]) + if tag in self.elements_no_end_tag: + self.pieces.append('<%s%s />' % (tag, strattrs)) + else: + self.pieces.append('<%s%s>' % (tag, strattrs)) + + def unknown_endtag(self, tag): + # called for each end tag, e.g. for </pre>, tag will be 'pre' + # Reconstruct the original end tag. + if tag not in self.elements_no_end_tag: + self.pieces.append("</%s>" % tag) + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + # Reconstruct the original character reference. + ref = ref.lower() + if ref.startswith('x'): + value = int(ref[1:], 16) + else: + value = int(ref) + + if value in _cp1252: + self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:]) + else: + self.pieces.append('&#%s;' % ref) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + # Reconstruct the original entity reference. + if ref in name2codepoint or ref == 'apos': + self.pieces.append('&%s;' % ref) + else: + self.pieces.append('&%s' % ref) + + def handle_data(self, text): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + # Store the original text verbatim. + self.pieces.append(text) + + def handle_comment(self, text): + # called for each HTML comment, e.g. <!-- insert Javascript code here --> + # Reconstruct the original comment. + self.pieces.append('<!--%s-->' % text) + + def handle_pi(self, text): + # called for each processing instruction, e.g. <?instruction> + # Reconstruct original processing instruction. + self.pieces.append('<?%s>' % text) + + def handle_decl(self, text): + # called for the DOCTYPE, if present, e.g. + # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + # "http://www.w3.org/TR/html4/loose.dtd"> + # Reconstruct original DOCTYPE + self.pieces.append('<!%s>' % text) + + _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match + def _scan_name(self, i, declstartpos): + rawdata = self.rawdata + n = len(rawdata) + if i == n: + return None, -1 + m = self._new_declname_match(rawdata, i) + if m: + s = m.group() + name = s.strip() + if (i + len(s)) == n: + return None, -1 # end of buffer + return name.lower(), m.end() + else: + self.handle_data(rawdata) +# self.updatepos(declstartpos, i) + return None, -1 + + def convert_charref(self, name): + return '&#%s;' % name + + def convert_entityref(self, name): + return '&%s;' % name + + def output(self): + '''Return processed HTML as a single string''' + return ''.join(self.pieces) + + def parse_declaration(self, i): + try: + return sgmllib.SGMLParser.parse_declaration(self, i) + except sgmllib.SGMLParseError: + # escape the doctype declaration and continue parsing + self.handle_data('<') + return i+1 diff --git a/lib/feedparser/http.py b/lib/feedparser/http.py new file mode 100644 index 0000000000000000000000000000000000000000..980dd2c56f2ffff56681314c3ffc3492ff4a756e --- /dev/null +++ b/lib/feedparser/http.py @@ -0,0 +1,231 @@ +from __future__ import absolute_import, unicode_literals, with_statement + +import datetime +import gzip +import re +import struct +import zlib + +try: + import urllib.parse + import urllib.request +except ImportError: + from urllib import splithost, splittype, splituser + from urllib2 import build_opener, HTTPDigestAuthHandler, HTTPRedirectHandler, HTTPDefaultErrorHandler, Request + from urlparse import urlparse + + class urllib(object): + class parse(object): + splithost = staticmethod(splithost) + splittype = staticmethod(splittype) + splituser = staticmethod(splituser) + urlparse = staticmethod(urlparse) + class request(object): + build_opener = staticmethod(build_opener) + HTTPDigestAuthHandler = HTTPDigestAuthHandler + HTTPRedirectHandler = HTTPRedirectHandler + HTTPDefaultErrorHandler = HTTPDefaultErrorHandler + Request = Request + +try: + from io import BytesIO as _StringIO +except ImportError: + try: + from cStringIO import StringIO as _StringIO + except ImportError: + from StringIO import StringIO as _StringIO + +try: + import base64, binascii +except ImportError: + base64 = binascii = None +else: + # Python 3.1 deprecated decodestring in favor of decodebytes + _base64decode = getattr(base64, 'decodebytes', base64.decodestring) + +from .datetimes import _parse_date +from .urls import _convert_to_idn + +try: + basestring +except NameError: + basestring = str + +bytes_ = type(b'') + +# HTTP "Accept" header to send to servers when downloading feeds. If you don't +# want to send an Accept header, set this to None. +ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" + +class _FeedURLHandler(urllib.request.HTTPDigestAuthHandler, urllib.request.HTTPRedirectHandler, urllib.request.HTTPDefaultErrorHandler): + def http_error_default(self, req, fp, code, msg, headers): + # The default implementation just raises HTTPError. + # Forget that. + fp.status = code + return fp + + def http_error_301(self, req, fp, code, msg, hdrs): + result = urllib.request.HTTPRedirectHandler.http_error_301(self, req, fp, + code, msg, hdrs) + result.status = code + result.newurl = result.geturl() + return result + # The default implementations in urllib.request.HTTPRedirectHandler + # are identical, so hardcoding a http_error_301 call above + # won't affect anything + http_error_300 = http_error_301 + http_error_302 = http_error_301 + http_error_303 = http_error_301 + http_error_307 = http_error_301 + + def http_error_401(self, req, fp, code, msg, headers): + # Check if + # - server requires digest auth, AND + # - we tried (unsuccessfully) with basic auth, AND + # If all conditions hold, parse authentication information + # out of the Authorization header we sent the first time + # (for the username and password) and the WWW-Authenticate + # header the server sent back (for the realm) and retry + # the request with the appropriate digest auth headers instead. + # This evil genius hack has been brought to you by Aaron Swartz. + host = urllib.parse.urlparse(req.get_full_url())[1] + if base64 is None or 'Authorization' not in req.headers \ + or 'WWW-Authenticate' not in headers: + return self.http_error_default(req, fp, code, msg, headers) + auth = _base64decode(req.headers['Authorization'].split(' ')[1]) + user, passw = auth.split(':') + realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] + self.add_password(realm, host, user, passw) + retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) + self.reset_retry_count() + return retry + +def _build_urllib2_request(url, agent, accept_header, etag, modified, referrer, auth, request_headers): + request = urllib.request.Request(url) + request.add_header('User-Agent', agent) + if etag: + request.add_header('If-None-Match', etag) + if isinstance(modified, basestring): + modified = _parse_date(modified) + elif isinstance(modified, datetime.datetime): + modified = modified.utctimetuple() + if modified: + # format into an RFC 1123-compliant timestamp. We can't use + # time.strftime() since the %a and %b directives can be affected + # by the current locale, but RFC 2616 states that dates must be + # in English. + short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) + if referrer: + request.add_header('Referer', referrer) + if gzip and zlib: + request.add_header('Accept-encoding', 'gzip, deflate') + elif gzip: + request.add_header('Accept-encoding', 'gzip') + elif zlib: + request.add_header('Accept-encoding', 'deflate') + else: + request.add_header('Accept-encoding', '') + if auth: + request.add_header('Authorization', 'Basic %s' % auth) + if accept_header: + request.add_header('Accept', accept_header) + # use this for whatever -- cookies, special headers, etc + # [('Cookie','Something'),('x-special-header','Another Value')] + for header_name, header_value in request_headers.items(): + request.add_header(header_name, header_value) + request.add_header('A-IM', 'feed') # RFC 3229 support + return request + +def get(url, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, result=None): + if handlers is None: + handlers = [] + elif not isinstance(handlers, list): + handlers = [handlers] + if request_headers is None: + request_headers = {} + + # Deal with the feed URI scheme + if url.startswith('feed:http'): + url = url[5:] + elif url.startswith('feed:'): + url = 'http:' + url[5:] + if not agent: + agent = USER_AGENT + # Test for inline user:password credentials for HTTP basic auth + auth = None + if base64 and not url.startswith('ftp:'): + urltype, rest = urllib.parse.splittype(url) + realhost, rest = urllib.parse.splithost(rest) + if realhost: + user_passwd, realhost = urllib.parse.splituser(realhost) + if user_passwd: + url = '%s://%s%s' % (urltype, realhost, rest) + auth = base64.standard_b64encode(user_passwd).strip() + + # iri support + if not isinstance(url, bytes_): + url = _convert_to_idn(url) + + # try to open with urllib2 (to use optional headers) + request = _build_urllib2_request(url, agent, ACCEPT_HEADER, etag, modified, referrer, auth, request_headers) + opener = urllib.request.build_opener(*tuple(handlers + [_FeedURLHandler()])) + opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent + f = opener.open(request) + data = f.read() + f.close() + + # lowercase all of the HTTP headers for comparisons per RFC 2616 + result['headers'] = dict((k.lower(), v) for k, v in f.headers.items()) + + # if feed is gzip-compressed, decompress it + if data and 'gzip' in result['headers'].get('content-encoding', ''): + try: + data = gzip.GzipFile(fileobj=_StringIO(data)).read() + except (EOFError, IOError, struct.error) as e: + # IOError can occur if the gzip header is bad. + # struct.error can occur if the data is damaged. + result['bozo'] = True + result['bozo_exception'] = e + if isinstance(e, struct.error): + # A gzip header was found but the data is corrupt. + # Ideally, we should re-request the feed without the + # 'Accept-encoding: gzip' header, but we don't. + data = None + elif data and 'deflate' in result['headers'].get('content-encoding', ''): + try: + data = zlib.decompress(data) + except zlib.error as e: + try: + # The data may have no headers and no checksum. + data = zlib.decompress(data, -15) + except zlib.error as e: + result['bozo'] = True + result['bozo_exception'] = e + + # save HTTP headers + if 'etag' in result['headers']: + etag = result['headers'].get('etag', '') + if isinstance(etag, bytes_): + etag = etag.decode('utf-8', 'ignore') + if etag: + result['etag'] = etag + if 'last-modified' in result['headers']: + modified = result['headers'].get('last-modified', '') + if modified: + result['modified'] = modified + result['modified_parsed'] = _parse_date(modified) + if isinstance(f.url, bytes_): + result['href'] = f.url.decode('utf-8', 'ignore') + else: + result['href'] = f.url + result['status'] = getattr(f, 'status', 200) + + # Stop processing if the server sent HTTP 304 Not Modified. + if getattr(f, 'code', 0) == 304: + result['version'] = '' + result['debug_message'] = 'The feed has not changed since you last checked, ' + \ + 'so the server sent no data. This is a feature, not a bug!' + + return data diff --git a/lib/feedparser/mixin.py b/lib/feedparser/mixin.py new file mode 100644 index 0000000000000000000000000000000000000000..be73f4e2f1ccc737b9618d31abc0a521dd267f73 --- /dev/null +++ b/lib/feedparser/mixin.py @@ -0,0 +1,754 @@ +# Shared code that is common to the strict and loose feed parsers +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +import copy +import re + +from xml.sax.saxutils import escape as _xmlescape + +# base64 support for Atom feeds that contain embedded binary data +try: + import base64, binascii +except ImportError: + base64 = binascii = None +else: + # Python 3.1 deprecates decodestring in favor of decodebytes + _base64decode = getattr(base64, 'decodebytes', base64.decodestring) + +try: + from html.entities import name2codepoint, entitydefs +except ImportError: + from htmlentitydefs import name2codepoint, entitydefs + +from .html import _cp1252 +from .namespaces import _base, cc, dc, georss, itunes, mediarss, psc +from .sanitizer import _sanitizeHTML, _HTMLSanitizer +from .util import FeedParserDict +from .urls import _urljoin, _makeSafeAbsoluteURI, _resolveRelativeURIs + +bytes_ = type(b'') +try: + chr = unichr +except NameError: + pass + +class _FeedParserMixin( + _base.Namespace, + cc.Namespace, + dc.Namespace, + georss.Namespace, + itunes.Namespace, + mediarss.Namespace, + psc.Namespace, +): + namespaces = { + '': '', + 'http://backend.userland.com/rss': '', + 'http://blogs.law.harvard.edu/tech/rss': '', + 'http://purl.org/rss/1.0/': '', + 'http://my.netscape.com/rdf/simple/0.9/': '', + 'http://example.com/newformat#': '', + 'http://example.com/necho': '', + 'http://purl.org/echo/': '', + 'uri/of/echo/namespace#': '', + 'http://purl.org/pie/': '', + 'http://purl.org/atom/ns#': '', + 'http://www.w3.org/2005/Atom': '', + 'http://purl.org/rss/1.0/modules/rss091#': '', + + 'http://webns.net/mvcb/': 'admin', + 'http://purl.org/rss/1.0/modules/aggregation/': 'ag', + 'http://purl.org/rss/1.0/modules/annotate/': 'annotate', + 'http://media.tangent.org/rss/1.0/': 'audio', + 'http://backend.userland.com/blogChannelModule': 'blogChannel', + 'http://creativecommons.org/ns#license': 'cc', + 'http://web.resource.org/cc/': 'cc', + 'http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html': 'creativeCommons', + 'http://backend.userland.com/creativeCommonsRssModule': 'creativeCommons', + 'http://purl.org/rss/1.0/modules/company': 'co', + 'http://purl.org/rss/1.0/modules/content/': 'content', + 'http://my.theinfo.org/changed/1.0/rss/': 'cp', + 'http://purl.org/dc/elements/1.1/': 'dc', + 'http://purl.org/dc/terms/': 'dcterms', + 'http://purl.org/rss/1.0/modules/email/': 'email', + 'http://purl.org/rss/1.0/modules/event/': 'ev', + 'http://rssnamespace.org/feedburner/ext/1.0': 'feedburner', + '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', + 'http://example.com/DTDs/PodCast-1.0.dtd': 'itunes', + 'http://purl.org/rss/1.0/modules/link/': 'l', + 'http://search.yahoo.com/mrss': 'media', + # Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace + 'http://search.yahoo.com/mrss/': 'media', + 'http://madskills.com/public/xml/rss/module/pingback/': 'pingback', + 'http://prismstandard.org/namespaces/1.2/basic/': 'prism', + 'http://www.w3.org/1999/02/22-rdf-syntax-ns#': 'rdf', + 'http://www.w3.org/2000/01/rdf-schema#': 'rdfs', + 'http://purl.org/rss/1.0/modules/reference/': 'ref', + 'http://purl.org/rss/1.0/modules/richequiv/': 'reqv', + 'http://purl.org/rss/1.0/modules/search/': 'search', + 'http://purl.org/rss/1.0/modules/slash/': 'slash', + 'http://schemas.xmlsoap.org/soap/envelope/': 'soap', + 'http://purl.org/rss/1.0/modules/servicestatus/': 'ss', + 'http://hacks.benhammersley.com/rss/streaming/': 'str', + 'http://purl.org/rss/1.0/modules/subscription/': 'sub', + 'http://purl.org/rss/1.0/modules/syndication/': 'sy', + 'http://schemas.pocketsoap.com/rss/myDescModule/': 'szf', + 'http://purl.org/rss/1.0/modules/taxonomy/': 'taxo', + 'http://purl.org/rss/1.0/modules/threading/': 'thr', + 'http://purl.org/rss/1.0/modules/textinput/': 'ti', + 'http://madskills.com/public/xml/rss/module/trackback/': 'trackback', + 'http://wellformedweb.org/commentAPI/': 'wfw', + 'http://purl.org/rss/1.0/modules/wiki/': 'wiki', + '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 = {} + + can_be_relative_uri = set(['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo']) + can_contain_relative_uris = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description']) + can_contain_dangerous_markup = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description']) + html_types = ['text/html', 'application/xhtml+xml'] + + def __init__(self): + if not self._matchnamespaces: + for k, v in self.namespaces.items(): + self._matchnamespaces[k.lower()] = v + self.feeddata = FeedParserDict() # feed-level data + self.entries = [] # list of entry-level data + self.version = '' # feed type/version, see SUPPORTED_VERSIONS + self.namespacesInUse = {} # dictionary of namespaces defined by the feed + + # the following are used internally to track state; + # this is really out of control and should be refactored + self.infeed = 0 + self.inentry = 0 + self.incontent = 0 + self.intextinput = 0 + self.inimage = 0 + self.inauthor = 0 + self.incontributor = 0 + self.inpublisher = 0 + self.insource = 0 + + self.sourcedata = FeedParserDict() + self.contentparams = FeedParserDict() + self._summaryKey = None + self.namespacemap = {} + self.elementstack = [] + self.basestack = [] + self.langstack = [] + self.svgOK = 0 + self.title_depth = -1 + self.depth = 0 + if self.lang: + self.feeddata['language'] = self.lang.replace('_','-') + + # A map of the following form: + # { + # object_that_value_is_set_on: { + # property_name: depth_of_node_property_was_extracted_from, + # other_property: depth_of_node_property_was_extracted_from, + # }, + # } + self.property_depth_map = {} + super(_FeedParserMixin, self).__init__() + + def unknown_starttag(self, tag, attrs): + # increment depth counter + self.depth += 1 + + # normalize attrs + attrs = [self._normalize_attributes(attr) for attr in attrs] + + # track xml:base and xml:lang + attrsD = dict(attrs) + baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri + if isinstance(baseuri, bytes_): + baseuri = baseuri.decode(self.encoding, 'ignore') + # ensure that self.baseuri is always an absolute URI that + # uses a whitelisted URI scheme (e.g. not `javscript:`) + if self.baseuri: + self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri + else: + self.baseuri = _urljoin(self.baseuri, baseuri) + lang = attrsD.get('xml:lang', attrsD.get('lang')) + if lang == '': + # xml:lang could be explicitly set to '', we need to capture that + lang = None + elif lang is None: + # if no xml:lang is specified, use parent lang + lang = self.lang + if lang: + if tag in ('feed', 'rss', 'rdf:RDF'): + self.feeddata['language'] = lang.replace('_','-') + self.lang = lang + self.basestack.append(self.baseuri) + self.langstack.append(lang) + + # track namespaces + for prefix, uri in attrs: + if prefix.startswith('xmlns:'): + self.trackNamespace(prefix[6:], uri) + elif prefix == 'xmlns': + self.trackNamespace(None, uri) + + # track inline content + if self.incontent and not self.contentparams.get('type', 'xml').endswith('xml'): + if tag in ('xhtml:div', 'div'): + return # typepad does this 10/2007 + # element declared itself as escaped markup, but it isn't really + self.contentparams['type'] = 'application/xhtml+xml' + if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': + if tag.find(':') != -1: + prefix, tag = tag.split(':', 1) + namespace = self.namespacesInUse.get(prefix, '') + if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML': + attrs.append(('xmlns',namespace)) + if tag=='svg' and namespace=='http://www.w3.org/2000/svg': + attrs.append(('xmlns',namespace)) + if tag == 'svg': + self.svgOK += 1 + return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0) + + # match namespaces + if tag.find(':') != -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + + # special hack for better tracking of empty textinput/image elements in illformed feeds + if (not prefix) and tag not in ('title', 'link', 'description', 'name'): + self.intextinput = 0 + if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): + self.inimage = 0 + + # call special handler (if defined) or default handler + methodname = '_start_' + prefix + suffix + try: + method = getattr(self, methodname) + return method(attrsD) + except AttributeError: + # Since there's no handler or something has gone wrong we explicitly add the element and its attributes + unknown_tag = prefix + suffix + if len(attrsD) == 0: + # No attributes so merge it into the encosing dictionary + return self.push(unknown_tag, 1) + else: + # Has attributes so create it in its own dictionary + context = self._getContext() + context[unknown_tag] = attrsD + + def unknown_endtag(self, tag): + # match namespaces + if tag.find(':') != -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + if suffix == 'svg' and self.svgOK: + self.svgOK -= 1 + + # call special handler (if defined) or default handler + methodname = '_end_' + prefix + suffix + try: + if self.svgOK: + raise AttributeError() + method = getattr(self, methodname) + method() + except AttributeError: + self.pop(prefix + suffix) + + # track inline content + if self.incontent and not self.contentparams.get('type', 'xml').endswith('xml'): + # element declared itself as escaped markup, but it isn't really + if tag in ('xhtml:div', 'div'): + return # typepad does this 10/2007 + self.contentparams['type'] = 'application/xhtml+xml' + if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': + tag = tag.split(':')[-1] + self.handle_data('</%s>' % tag, escape=0) + + # track xml:base and xml:lang going out of scope + if self.basestack: + self.basestack.pop() + if self.basestack and self.basestack[-1]: + self.baseuri = self.basestack[-1] + if self.langstack: + self.langstack.pop() + if self.langstack: # and (self.langstack[-1] is not None): + self.lang = self.langstack[-1] + + self.depth -= 1 + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + if not self.elementstack: + return + ref = ref.lower() + if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): + text = '&#%s;' % ref + else: + if ref[0] == 'x': + c = int(ref[1:], 16) + else: + c = int(ref) + text = chr(c).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + if not self.elementstack: + return + if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): + text = '&%s;' % ref + elif ref in self.entities: + text = self.entities[ref] + if text.startswith('&#') and text.endswith(';'): + return self.handle_entityref(text) + else: + try: + name2codepoint[ref] + except KeyError: + text = '&%s;' % ref + else: + text = chr(name2codepoint[ref]).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_data(self, text, escape=1): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + if not self.elementstack: + return + if escape and self.contentparams.get('type') == 'application/xhtml+xml': + text = _xmlescape(text) + self.elementstack[-1][2].append(text) + + def handle_comment(self, text): + # called for each comment, e.g. <!-- insert message here --> + pass + + def handle_pi(self, text): + # called for each processing instruction, e.g. <?instruction> + pass + + def handle_decl(self, text): + pass + + def parse_declaration(self, i): + # override internal declaration handler to handle CDATA blocks + if self.rawdata[i:i+9] == '<![CDATA[': + k = self.rawdata.find(']]>', i) + if k == -1: + # CDATA block began but didn't finish + k = len(self.rawdata) + return k + self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) + return k+3 + else: + k = self.rawdata.find('>', i) + if k >= 0: + return k+1 + else: + # We have an incomplete CDATA block. + return k + + def mapContentType(self, contentType): + contentType = contentType.lower() + if contentType == 'text' or contentType == 'plain': + contentType = 'text/plain' + elif contentType == 'html': + contentType = 'text/html' + elif contentType == 'xhtml': + contentType = 'application/xhtml+xml' + return contentType + + def trackNamespace(self, prefix, uri): + loweruri = uri.lower() + if not self.version: + if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/'): + self.version = 'rss090' + elif loweruri == 'http://purl.org/rss/1.0/': + self.version = 'rss10' + elif loweruri == 'http://www.w3.org/2005/atom': + self.version = 'atom10' + if loweruri.find('backend.userland.com/rss') != -1: + # match any backend.userland.com namespace + uri = 'http://backend.userland.com/rss' + loweruri = uri + if loweruri in self._matchnamespaces: + self.namespacemap[prefix] = self._matchnamespaces[loweruri] + self.namespacesInUse[self._matchnamespaces[loweruri]] = uri + else: + self.namespacesInUse[prefix or ''] = uri + + def resolveURI(self, uri): + return _urljoin(self.baseuri or '', uri) + + def decodeEntities(self, element, data): + return data + + def strattrs(self, attrs): + return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'"'})) for t in attrs]) + + def push(self, element, expectingText): + self.elementstack.append([element, expectingText, []]) + + def pop(self, element, stripWhitespace=1): + if not self.elementstack: + return + if self.elementstack[-1][0] != element: + return + + element, expectingText, pieces = self.elementstack.pop() + + if self.version == 'atom10' and self.contentparams.get('type', 'text') == 'application/xhtml+xml': + # remove enclosing child element, but only if it is a <div> and + # only if all the remaining content is nested underneath it. + # This means that the divs would be retained in the following: + # <div>foo</div><div>bar</div> + while pieces and len(pieces)>1 and not pieces[-1].strip(): + del pieces[-1] + while pieces and len(pieces)>1 and not pieces[0].strip(): + del pieces[0] + if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>': + depth = 0 + for piece in pieces[:-1]: + if piece.startswith('</'): + depth -= 1 + if depth == 0: + break + elif piece.startswith('<') and not piece.endswith('/>'): + depth += 1 + else: + pieces = pieces[1:-1] + + # Ensure each piece is a str for Python 3 + for (i, v) in enumerate(pieces): + if isinstance(v, bytes_): + pieces[i] = v.decode('utf-8') + + output = ''.join(pieces) + if stripWhitespace: + output = output.strip() + if not expectingText: + return output + + # decode base64 content + if base64 and self.contentparams.get('base64', 0): + try: + output = _base64decode(output) + except binascii.Error: + pass + except binascii.Incomplete: + pass + except TypeError: + # In Python 3, base64 takes and outputs bytes, not str + # This may not be the most correct way to accomplish this + output = _base64decode(output.encode('utf-8')).decode('utf-8') + + # resolve relative URIs + if (element in self.can_be_relative_uri) and 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): + output = self.decodeEntities(element, output) + + # some feed formats require consumers to guess + # whether the content is html or plain text + if not self.version.startswith('atom') and self.contentparams.get('type') == 'text/plain': + if self.lookslikehtml(output): + self.contentparams['type'] = 'text/html' + + # remove temporary cruft from contentparams + try: + del self.contentparams['mode'] + except KeyError: + pass + try: + del self.contentparams['base64'] + except KeyError: + pass + + is_htmlish = self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types + # resolve relative URIs within embedded markup + if is_htmlish and RESOLVE_RELATIVE_URIS: + if element in self.can_contain_relative_uris: + output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', 'text/html')) + + # sanitize embedded markup + if is_htmlish and SANITIZE_HTML: + if element in self.can_contain_dangerous_markup: + output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', 'text/html')) + + if self.encoding and isinstance(output, bytes_): + output = output.decode(self.encoding, 'ignore') + + # address common error where people take data that is already + # utf-8, presume that it is iso-8859-1, and re-encode it. + if self.encoding in ('utf-8', 'utf-8_INVALID_PYTHON_3') and not isinstance(output, bytes_): + try: + output = output.encode('iso-8859-1').decode('utf-8') + except (UnicodeEncodeError, UnicodeDecodeError): + pass + + # map win-1252 extensions to the proper code points + if not isinstance(output, bytes_): + output = output.translate(_cp1252) + + # 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: + return output + + # store output in appropriate place(s) + if self.inentry and not self.insource: + if element == 'content': + self.entries[-1].setdefault(element, []) + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element].append(contentparams) + elif element == 'link': + if not self.inimage: + # 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: + self.entries[-1]['links'][-1]['href'] = output + else: + if element == 'description': + element = 'summary' + old_value_depth = self.property_depth_map.setdefault(self.entries[-1], {}).get(element) + if old_value_depth is None or self.depth <= old_value_depth: + self.property_depth_map[self.entries[-1]][element] = self.depth + self.entries[-1][element] = output + if self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element + '_detail'] = contentparams + elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage): + context = self._getContext() + if element == 'description': + element = 'subtitle' + context[element] = output + if element == 'link': + # fix query variables; see above for the explanation + output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output) + context[element] = output + context['links'][-1]['href'] = output + elif self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + context[element + '_detail'] = contentparams + return output + + def pushContent(self, tag, attrsD, defaultContentType, expectingText): + self.incontent += 1 + if self.lang: + self.lang=self.lang.replace('_','-') + self.contentparams = FeedParserDict({ + 'type': self.mapContentType(attrsD.get('type', defaultContentType)), + 'language': self.lang, + 'base': self.baseuri}) + self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) + self.push(tag, expectingText) + + def popContent(self, tag): + value = self.pop(tag) + self.incontent -= 1 + self.contentparams.clear() + return value + + # a number of elements in a number of RSS variants are nominally plain + # text, but this is routinely ignored. This is an attempt to detect + # the most common cases. As false positives often result in silent + # data loss, this function errs on the conservative side. + @staticmethod + def lookslikehtml(s): + # must have a close tag or an entity reference to qualify + if not (re.search(r'</(\w+)>', s) or re.search(r'&#?\w+;', s)): + return + + # all tags must be in a restricted subset of valid HTML tags + if any((t for t in re.findall(r'</?(\w+)', s) if t.lower() not in _HTMLSanitizer.acceptable_elements)): + return + + # all entities must have been defined as valid HTML entities + if any((e for e in re.findall(r'&(\w+);', s) if e not in entitydefs)): + return + + return 1 + + def _mapToStandardPrefix(self, name): + colonpos = name.find(':') + if colonpos != -1: + prefix = name[:colonpos] + suffix = name[colonpos+1:] + prefix = self.namespacemap.get(prefix, prefix) + name = prefix + ':' + suffix + return name + + def _getAttribute(self, attrsD, name): + return attrsD.get(self._mapToStandardPrefix(name)) + + def _isBase64(self, attrsD, contentparams): + if attrsD.get('mode', '') == 'base64': + return 1 + if self.contentparams['type'].startswith('text/'): + return 0 + if self.contentparams['type'].endswith('+xml'): + return 0 + if self.contentparams['type'].endswith('/xml'): + return 0 + return 1 + + def _itsAnHrefDamnIt(self, attrsD): + href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) + if href: + try: + del attrsD['url'] + except KeyError: + pass + try: + del attrsD['uri'] + except KeyError: + pass + attrsD['href'] = href + return attrsD + + def _save(self, key, value, overwrite=False): + context = self._getContext() + if overwrite: + context[key] = value + else: + context.setdefault(key, value) + + def _getContext(self): + if self.insource: + context = self.sourcedata + elif self.inimage and 'image' in self.feeddata: + context = self.feeddata['image'] + elif self.intextinput: + context = self.feeddata['textinput'] + elif self.inentry: + context = self.entries[-1] + else: + context = self.feeddata + return context + + def _save_author(self, key, value, prefix='author'): + context = self._getContext() + context.setdefault(prefix + '_detail', FeedParserDict()) + context[prefix + '_detail'][key] = value + self._sync_author_detail() + context.setdefault('authors', [FeedParserDict()]) + context['authors'][-1][key] = value + + def _save_contributor(self, key, value): + context = self._getContext() + context.setdefault('contributors', [FeedParserDict()]) + context['contributors'][-1][key] = value + + def _sync_author_detail(self, key='author'): + context = self._getContext() + detail = context.get('%ss' % key, [FeedParserDict()])[-1] + if detail: + name = detail.get('name') + email = detail.get('email') + if name and email: + context[key] = '%s (%s)' % (name, email) + elif name: + context[key] = name + elif email: + context[key] = email + else: + author, email = context.get(key), None + if not author: + return + emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author) + if emailmatch: + email = emailmatch.group(0) + # probably a better way to do the following, but it passes all the tests + author = author.replace(email, '') + author = author.replace('()', '') + author = author.replace('<>', '') + author = author.replace('<>', '') + author = author.strip() + if author and (author[0] == '('): + author = author[1:] + if author and (author[-1] == ')'): + author = author[:-1] + author = author.strip() + if author or email: + context.setdefault('%s_detail' % key, detail) + if author: + detail['name'] = author + if email: + detail['email'] = email + + 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) + 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) diff --git a/gui/slick/js/new/config_subtitles.js b/lib/feedparser/namespaces/__init__.py similarity index 100% rename from gui/slick/js/new/config_subtitles.js rename to lib/feedparser/namespaces/__init__.py diff --git a/lib/feedparser/namespaces/_base.py b/lib/feedparser/namespaces/_base.py new file mode 100644 index 0000000000000000000000000000000000000000..f25edb6251d6022e34c1dc443beb1f238f5a18f0 --- /dev/null +++ b/lib/feedparser/namespaces/_base.py @@ -0,0 +1,499 @@ +# Support for the Atom, RSS, RDF, and CDF feed formats +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +import copy + +from ..datetimes import registerDateHandler, _parse_date +from ..urls import _makeSafeAbsoluteURI +from ..util import FeedParserDict + +class Namespace(object): + """Support for the Atom, RSS, RDF, and CDF feed formats. + + The feed formats all share common elements, some of which have conflicting + interpretations. For simplicity, all of the base feed format support is + collected here. + """ + + supported_namespaces = { + '': '', + 'http://backend.userland.com/rss': '', + 'http://blogs.law.harvard.edu/tech/rss': '', + 'http://purl.org/rss/1.0/': '', + 'http://my.netscape.com/rdf/simple/0.9/': '', + 'http://example.com/newformat#': '', + 'http://example.com/necho': '', + 'http://purl.org/echo/': '', + 'uri/of/echo/namespace#': '', + 'http://purl.org/pie/': '', + 'http://purl.org/atom/ns#': '', + 'http://www.w3.org/2005/Atom': '', + 'http://purl.org/rss/1.0/modules/rss091#': '', + } + + def _start_rss(self, attrsD): + versionmap = {'0.91': 'rss091u', + '0.92': 'rss092', + '0.93': 'rss093', + '0.94': 'rss094'} + #If we're here then this is an RSS feed. + #If we don't have a version or have a version that starts with something + #other than RSS then there's been a mistake. Correct it. + if not self.version or not self.version.startswith('rss'): + attr_version = attrsD.get('version', '') + version = versionmap.get(attr_version) + if version: + self.version = version + elif attr_version.startswith('2.'): + self.version = 'rss20' + else: + self.version = 'rss' + + def _start_channel(self, attrsD): + self.infeed = 1 + self._cdf_common(attrsD) + + def _cdf_common(self, attrsD): + if 'lastmod' in attrsD: + self._start_modified({}) + self.elementstack[-1][-1] = attrsD['lastmod'] + self._end_modified() + if 'href' in attrsD: + self._start_link({}) + self.elementstack[-1][-1] = attrsD['href'] + self._end_link() + + def _start_feed(self, attrsD): + self.infeed = 1 + versionmap = {'0.1': 'atom01', + '0.2': 'atom02', + '0.3': 'atom03'} + if not self.version: + attr_version = attrsD.get('version') + version = versionmap.get(attr_version) + if version: + self.version = version + else: + self.version = 'atom' + + def _end_channel(self): + self.infeed = 0 + _end_feed = _end_channel + + def _start_image(self, attrsD): + context = self._getContext() + if not self.inentry: + context.setdefault('image', FeedParserDict()) + self.inimage = 1 + self.title_depth = -1 + self.push('image', 0) + + def _end_image(self): + self.pop('image') + self.inimage = 0 + + def _start_textinput(self, attrsD): + context = self._getContext() + context.setdefault('textinput', FeedParserDict()) + self.intextinput = 1 + self.title_depth = -1 + self.push('textinput', 0) + _start_textInput = _start_textinput + + def _end_textinput(self): + self.pop('textinput') + self.intextinput = 0 + _end_textInput = _end_textinput + + def _start_author(self, attrsD): + self.inauthor = 1 + self.push('author', 1) + # Append a new FeedParserDict when expecting an author + context = self._getContext() + context.setdefault('authors', []) + context['authors'].append(FeedParserDict()) + _start_managingeditor = _start_author + + def _end_author(self): + self.pop('author') + self.inauthor = 0 + self._sync_author_detail() + _end_managingeditor = _end_author + + def _start_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('contributor', 0) + + def _end_contributor(self): + self.pop('contributor') + self.incontributor = 0 + + def _start_name(self, attrsD): + self.push('name', 0) + + def _end_name(self): + value = self.pop('name') + if self.inpublisher: + self._save_author('name', value, 'publisher') + elif self.inauthor: + self._save_author('name', value) + elif self.incontributor: + self._save_contributor('name', value) + elif self.intextinput: + context = self._getContext() + context['name'] = value + + def _start_width(self, attrsD): + self.push('width', 0) + + def _end_width(self): + value = self.pop('width') + try: + value = int(value) + except ValueError: + value = 0 + if self.inimage: + context = self._getContext() + context['width'] = value + + def _start_height(self, attrsD): + self.push('height', 0) + + def _end_height(self): + value = self.pop('height') + try: + value = int(value) + except ValueError: + value = 0 + if self.inimage: + context = self._getContext() + context['height'] = value + + def _start_url(self, attrsD): + self.push('href', 1) + _start_homepage = _start_url + _start_uri = _start_url + + def _end_url(self): + value = self.pop('href') + if self.inauthor: + self._save_author('href', value) + elif self.incontributor: + self._save_contributor('href', value) + _end_homepage = _end_url + _end_uri = _end_url + + def _start_email(self, attrsD): + self.push('email', 0) + + def _end_email(self): + value = self.pop('email') + if self.inpublisher: + self._save_author('email', value, 'publisher') + elif self.inauthor: + self._save_author('email', value) + elif self.incontributor: + self._save_contributor('email', value) + + def _start_subtitle(self, attrsD): + self.pushContent('subtitle', attrsD, 'text/plain', 1) + _start_tagline = _start_subtitle + + def _end_subtitle(self): + self.popContent('subtitle') + _end_tagline = _end_subtitle + + def _start_rights(self, attrsD): + self.pushContent('rights', attrsD, 'text/plain', 1) + _start_copyright = _start_rights + + def _end_rights(self): + self.popContent('rights') + _end_copyright = _end_rights + + def _start_item(self, attrsD): + self.entries.append(FeedParserDict()) + self.push('item', 0) + self.inentry = 1 + self.guidislink = 0 + self.title_depth = -1 + id = self._getAttribute(attrsD, 'rdf:about') + if id: + context = self._getContext() + context['id'] = id + self._cdf_common(attrsD) + _start_entry = _start_item + + def _end_item(self): + self.pop('item') + self.inentry = 0 + _end_entry = _end_item + + def _start_language(self, attrsD): + self.push('language', 1) + + def _end_language(self): + self.lang = self.pop('language') + + def _start_webmaster(self, attrsD): + self.push('publisher', 1) + + def _end_webmaster(self): + self.pop('publisher') + self._sync_author_detail('publisher') + + def _start_published(self, attrsD): + self.push('published', 1) + _start_issued = _start_published + _start_pubdate = _start_published + + def _end_published(self): + value = self.pop('published') + self._save('published_parsed', _parse_date(value), overwrite=True) + _end_issued = _end_published + _end_pubdate = _end_published + + def _start_updated(self, attrsD): + self.push('updated', 1) + _start_modified = _start_updated + _start_lastbuilddate = _start_updated + + def _end_updated(self): + value = self.pop('updated') + parsed_value = _parse_date(value) + self._save('updated_parsed', parsed_value, overwrite=True) + _end_modified = _end_updated + _end_lastbuilddate = _end_updated + + def _start_created(self, attrsD): + self.push('created', 1) + + def _end_created(self): + value = self.pop('created') + self._save('created_parsed', _parse_date(value), overwrite=True) + + def _start_expirationdate(self, attrsD): + self.push('expired', 1) + + def _end_expirationdate(self): + self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True) + + def _start_category(self, attrsD): + term = attrsD.get('term') + scheme = attrsD.get('scheme', attrsD.get('domain')) + label = attrsD.get('label') + self._addTag(term, scheme, label) + self.push('category', 1) + _start_keywords = _start_category + + def _end_category(self): + value = self.pop('category') + if not value: + return + context = self._getContext() + tags = context['tags'] + if value and len(tags) and not tags[-1]['term']: + tags[-1]['term'] = value + else: + self._addTag(value, None, None) + _end_keywords = _end_category + + def _start_cloud(self, attrsD): + self._getContext()['cloud'] = FeedParserDict(attrsD) + + def _start_link(self, attrsD): + attrsD.setdefault('rel', 'alternate') + if attrsD['rel'] == 'self': + attrsD.setdefault('type', 'application/atom+xml') + else: + attrsD.setdefault('type', 'text/html') + context = self._getContext() + attrsD = self._itsAnHrefDamnIt(attrsD) + if 'href' in attrsD: + attrsD['href'] = self.resolveURI(attrsD['href']) + expectingText = self.infeed or self.inentry or self.insource + context.setdefault('links', []) + if not (self.inentry and self.inimage): + context['links'].append(FeedParserDict(attrsD)) + if 'href' in attrsD: + expectingText = 0 + if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): + context['link'] = attrsD['href'] + else: + self.push('link', expectingText) + + def _end_link(self): + value = self.pop('link') + + def _start_guid(self, attrsD): + self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') + self.push('id', 1) + _start_id = _start_guid + + def _end_guid(self): + value = self.pop('id') + self._save('guidislink', self.guidislink and 'link' not in self._getContext()) + if self.guidislink: + # guid acts as link, but only if 'ispermalink' is not present or is 'true', + # and only if the item doesn't already have a link element + self._save('link', value) + _end_id = _end_guid + + def _start_title(self, attrsD): + if self.svgOK: + return self.unknown_starttag('title', list(attrsD.items())) + self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + + def _end_title(self): + if self.svgOK: + return + value = self.popContent('title') + if not value: + return + self.title_depth = self.depth + + def _start_description(self, attrsD): + context = self._getContext() + if 'summary' in context: + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) + + def _start_abstract(self, attrsD): + self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + + def _end_description(self): + if self._summaryKey == 'content': + self._end_content() + else: + value = self.popContent('description') + self._summaryKey = None + _end_abstract = _end_description + + def _start_info(self, attrsD): + self.pushContent('info', attrsD, 'text/plain', 1) + _start_feedburner_browserfriendly = _start_info + + def _end_info(self): + self.popContent('info') + _end_feedburner_browserfriendly = _end_info + + def _start_generator(self, attrsD): + if attrsD: + attrsD = self._itsAnHrefDamnIt(attrsD) + if 'href' in attrsD: + attrsD['href'] = self.resolveURI(attrsD['href']) + self._getContext()['generator_detail'] = FeedParserDict(attrsD) + self.push('generator', 1) + + def _end_generator(self): + value = self.pop('generator') + context = self._getContext() + if 'generator_detail' in context: + context['generator_detail']['name'] = value + + def _start_summary(self, attrsD): + context = self._getContext() + if 'summary' in context: + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self._summaryKey = 'summary' + self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) + + def _end_summary(self): + if self._summaryKey == 'content': + self._end_content() + else: + self.popContent(self._summaryKey or 'summary') + self._summaryKey = None + + def _start_enclosure(self, attrsD): + attrsD = self._itsAnHrefDamnIt(attrsD) + context = self._getContext() + attrsD['rel'] = 'enclosure' + context.setdefault('links', []).append(FeedParserDict(attrsD)) + + def _start_source(self, attrsD): + if 'url' in attrsD: + # This means that we're processing a source element from an RSS 2.0 feed + self.sourcedata['href'] = attrsD['url'] + self.push('source', 1) + self.insource = 1 + self.title_depth = -1 + + def _end_source(self): + self.insource = 0 + value = self.pop('source') + if value: + self.sourcedata['title'] = value + self._getContext()['source'] = copy.deepcopy(self.sourcedata) + self.sourcedata.clear() + + def _start_content(self, attrsD): + self.pushContent('content', attrsD, 'text/plain', 1) + src = attrsD.get('src') + if src: + self.contentparams['src'] = src + self.push('content', 1) + + def _start_body(self, attrsD): + self.pushContent('content', attrsD, 'application/xhtml+xml', 1) + _start_xhtml_body = _start_body + + def _start_content_encoded(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + _start_fullitem = _start_content_encoded + + def _end_content(self): + copyToSummary = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) + value = self.popContent('content') + if copyToSummary: + self._save('summary', value) + + _end_body = _end_content + _end_xhtml_body = _end_content + _end_content_encoded = _end_content + _end_fullitem = _end_content + + def _start_newlocation(self, attrsD): + self.push('newlocation', 1) + + def _end_newlocation(self): + url = self.pop('newlocation') + context = self._getContext() + # don't set newlocation if the context isn't right + if context is not self.feeddata: + return + context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip()) diff --git a/lib/feedparser/namespaces/admin.py b/lib/feedparser/namespaces/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..7c663aef8257e1ee57ca37b752fd11095e632537 --- /dev/null +++ b/lib/feedparser/namespaces/admin.py @@ -0,0 +1,55 @@ +# Support for the administrative elements extension +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..util import FeedParserDict + +class Namespace(object): + # RDF Site Summary 1.0 Modules: Administrative + # http://web.resource.org/rss/1.0/modules/admin/ + + supported_namespaces = { + 'http://webns.net/mvcb/': 'admin', + } + + def _start_admin_generatoragent(self, attrsD): + self.push('generator', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('generator') + self._getContext()['generator_detail'] = FeedParserDict({'href': value}) + + def _start_admin_errorreportsto(self, attrsD): + self.push('errorreportsto', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('errorreportsto') + diff --git a/lib/feedparser/namespaces/cc.py b/lib/feedparser/namespaces/cc.py new file mode 100644 index 0000000000000000000000000000000000000000..6d8d3933d44a7346b1dec7da18841361788bb744 --- /dev/null +++ b/lib/feedparser/namespaces/cc.py @@ -0,0 +1,71 @@ +# Support for the Creative Commons licensing extensions +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..util import FeedParserDict + +class Namespace(object): + supported_namespaces = { + # RDF-based namespace + 'http://creativecommons.org/ns#license': 'cc', + + # Old RDF-based namespace + 'http://web.resource.org/cc/': 'cc', + + # RSS-based namespace + 'http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html': 'creativecommons', + + # Old RSS-based namespace + 'http://backend.userland.com/creativeCommonsRssModule': 'creativecommons', + } + + def _start_cc_license(self, attrsD): + context = self._getContext() + value = self._getAttribute(attrsD, 'rdf:resource') + attrsD = FeedParserDict() + attrsD['rel'] = 'license' + if value: + attrsD['href'] = value + context.setdefault('links', []).append(attrsD) + + def _start_creativecommons_license(self, attrsD): + self.push('license', 1) + _start_creativeCommons_license = _start_creativecommons_license + + def _end_creativecommons_license(self): + value = self.pop('license') + context = self._getContext() + attrsD = FeedParserDict() + attrsD['rel'] = 'license' + if value: + attrsD['href'] = value + context.setdefault('links', []).append(attrsD) + del context['license'] + _end_creativeCommons_license = _end_creativecommons_license + diff --git a/lib/feedparser/namespaces/dc.py b/lib/feedparser/namespaces/dc.py new file mode 100644 index 0000000000000000000000000000000000000000..035bbadd94dfa4c75884f3dd0b772a503d9ed047 --- /dev/null +++ b/lib/feedparser/namespaces/dc.py @@ -0,0 +1,136 @@ +# Support for the Dublin Core metadata extensions +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..util import FeedParserDict +from ..datetimes import _parse_date + +class Namespace(object): + supported_namespaces = { + 'http://purl.org/dc/elements/1.1/': 'dc', + 'http://purl.org/dc/terms/': 'dcterms', + } + + def _end_dc_author(self): + self._end_author() + + def _end_dc_creator(self): + self._end_author() + + def _end_dc_date(self): + self._end_updated() + + def _end_dc_description(self): + self._end_description() + + def _end_dc_language(self): + self._end_language() + + def _end_dc_publisher(self): + self._end_webmaster() + + def _end_dc_rights(self): + self._end_rights() + + def _end_dc_subject(self): + self._end_category() + + def _end_dc_title(self): + self._end_title() + + def _end_dcterms_created(self): + self._end_created() + + def _end_dcterms_issued(self): + self._end_published() + + def _end_dcterms_modified(self): + self._end_updated() + + def _start_dc_author(self, attrsD): + self._start_author(attrsD) + + def _start_dc_creator(self, attrsD): + self._start_author(attrsD) + + def _start_dc_date(self, attrsD): + self._start_updated(attrsD) + + def _start_dc_description(self, attrsD): + self._start_description(attrsD) + + def _start_dc_language(self, attrsD): + self._start_language(attrsD) + + def _start_dc_publisher(self, attrsD): + self._start_webmaster(attrsD) + + def _start_dc_rights(self, attrsD): + self._start_rights(attrsD) + + def _start_dc_subject(self, attrsD): + self._start_category(attrsD) + + def _start_dc_title(self, attrsD): + self._start_title(attrsD) + + def _start_dcterms_created(self, attrsD): + self._start_created(attrsD) + + def _start_dcterms_issued(self, attrsD): + self._start_published(attrsD) + + def _start_dcterms_modified(self, attrsD): + self._start_updated(attrsD) + + 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_dc_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('name', 0) + + def _end_dc_contributor(self): + self._end_name() + self.incontributor = 0 + diff --git a/lib/feedparser/namespaces/georss.py b/lib/feedparser/namespaces/georss.py new file mode 100644 index 0000000000000000000000000000000000000000..7bac04a18495b5ad15b771297997e29df989a6d0 --- /dev/null +++ b/lib/feedparser/namespaces/georss.py @@ -0,0 +1,264 @@ +# Support for the GeoRSS format +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..util import FeedParserDict + +class Namespace(object): + supported_namespaces = { + 'http://www.w3.org/2003/01/geo/wgs84_pos#': 'geo', + 'http://www.georss.org/georss': 'georss', + 'http://www.opengis.net/gml': 'gml', + } + + def __init__(self): + self.ingeometry = 0 + super(Namespace, self).__init__() + + 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 + + +# GeoRSS geometry parsers. Each return a dict with 'type' and 'coordinates' +# items, or None in the case of a parsing error. + +def _parse_poslist(value, geom_type, swap=True, dims=2): + if geom_type == 'linestring': + return _parse_georss_line(value, swap, dims) + elif geom_type == 'polygon': + ring = _parse_georss_line(value, swap, dims) + return {'type': 'Polygon', 'coordinates': (ring['coordinates'],)} + else: + return None + +def _gen_georss_coords(value, swap=True, dims=2): + # A generator of (lon, lat) pairs from a string of encoded GeoRSS + # coordinates. Converts to floats and swaps order. + latlons = (float(ll) for ll in value.replace(',', ' ').split()) + while True: + t = [next(latlons), next(latlons)][::swap and -1 or 1] + if dims == 3: + t.append(next(latlons)) + yield tuple(t) + +def _parse_georss_point(value, swap=True, dims=2): + # A point contains a single latitude-longitude pair, separated by + # whitespace. We'll also handle comma separators. + try: + coords = list(_gen_georss_coords(value, swap, dims)) + return {'type': 'Point', 'coordinates': coords[0]} + except (IndexError, ValueError): + return None + +def _parse_georss_line(value, swap=True, dims=2): + # A line contains a space separated list of latitude-longitude pairs in + # WGS84 coordinate reference system, with each pair separated by + # whitespace. There must be at least two pairs. + try: + coords = list(_gen_georss_coords(value, swap, dims)) + return {'type': 'LineString', 'coordinates': coords} + except (IndexError, ValueError): + return None + +def _parse_georss_polygon(value, swap=True, dims=2): + # A polygon contains a space separated list of latitude-longitude pairs, + # with each pair separated by whitespace. There must be at least four + # pairs, with the last being identical to the first (so a polygon has a + # minimum of three actual points). + try: + ring = list(_gen_georss_coords(value, swap, dims)) + except (IndexError, ValueError): + return None + if len(ring) < 4: + return None + return {'type': 'Polygon', 'coordinates': (ring,)} + +def _parse_georss_box(value, swap=True, dims=2): + # A bounding box is a rectangular region, often used to define the extents + # of a map or a rough area of interest. A box contains two space seperate + # latitude-longitude pairs, with each pair separated by whitespace. The + # first pair is the lower corner, the second is the upper corner. + try: + coords = list(_gen_georss_coords(value, swap, dims)) + return {'type': 'Box', 'coordinates': tuple(coords)} + except (IndexError, ValueError): + return None + +# The list of EPSG codes for geographic (latitude/longitude) coordinate +# systems to support decoding of GeoRSS GML profiles. +_geogCS = [ +3819, 3821, 3824, 3889, 3906, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, +4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4018, 4019, 4020, 4021, 4022, +4023, 4024, 4025, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, +4041, 4042, 4043, 4044, 4045, 4046, 4047, 4052, 4053, 4054, 4055, 4075, 4081, +4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, +4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, +4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, +4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, +4172, 4173, 4174, 4175, 4176, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, +4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, +4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, +4214, 4215, 4216, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, +4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, +4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, +4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, +4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, +4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293, +4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4306, 4307, +4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4322, +4324, 4326, 4463, 4470, 4475, 4483, 4490, 4555, 4558, 4600, 4601, 4602, 4603, +4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, +4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, +4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, +4643, 4644, 4645, 4646, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, +4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, +4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, +4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, +4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, +4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, +4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, +4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, +4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4801, 4802, 4803, 4804, +4805, 4806, 4807, 4808, 4809, 4810, 4811, 4813, 4814, 4815, 4816, 4817, 4818, +4819, 4820, 4821, 4823, 4824, 4901, 4902, 4903, 4904, 4979 ] diff --git a/lib/feedparser/namespaces/itunes.py b/lib/feedparser/namespaces/itunes.py new file mode 100644 index 0000000000000000000000000000000000000000..37faa7e46896bcdb086a41e978a685dadc7c116b --- /dev/null +++ b/lib/feedparser/namespaces/itunes.py @@ -0,0 +1,111 @@ +# Support for the iTunes format +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..util import FeedParserDict + +class Namespace(object): + supported_namespaces = { + # Canonical namespace + 'http://www.itunes.com/DTDs/PodCast-1.0.dtd': 'itunes', + + # Extra namespace + 'http://example.com/DTDs/PodCast-1.0.dtd': 'itunes', + } + + def _start_itunes_author(self, attrsD): + self._start_author(attrsD) + + def _end_itunes_author(self): + self._end_author() + + def _end_itunes_category(self): + self._end_category() + + def _start_itunes_name(self, attrsD): + self._start_name(attrsD) + + def _end_itunes_name(self): + self._end_name() + + def _start_itunes_email(self, attrsD): + self._start_email(attrsD) + + def _end_itunes_email(self): + self._end_email() + + def _start_itunes_subtitle(self, attrsD): + self._start_subtitle(attrsD) + + def _end_itunes_subtitle(self): + self._end_subtitle() + + def _start_itunes_summary(self, attrsD): + self._start_summary(attrsD) + + def _end_itunes_summary(self): + self._end_summary() + + def _start_itunes_owner(self, attrsD): + self.inpublisher = 1 + self.push('publisher', 0) + + def _end_itunes_owner(self): + self.pop('publisher') + self.inpublisher = 0 + self._sync_author_detail('publisher') + + def _end_itunes_keywords(self): + for term in self.pop('itunes_keywords').split(','): + if term.strip(): + self._addTag(term.strip(), 'http://www.itunes.com/', None) + + def _start_itunes_category(self, attrsD): + self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) + self.push('category', 1) + + def _start_itunes_image(self, attrsD): + self.push('itunes_image', 0) + if attrsD.get('href'): + self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) + elif attrsD.get('url'): + self._getContext()['image'] = FeedParserDict({'href': attrsD.get('url')}) + _start_itunes_link = _start_itunes_image + + def _end_itunes_block(self): + value = self.pop('itunes_block', 0) + self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 + + def _end_itunes_explicit(self): + value = self.pop('itunes_explicit', 0) + # Convert 'yes' -> True, 'clean' to False, and any other value to None + # False and None both evaluate as False, so the difference can be ignored + # 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] + diff --git a/lib/feedparser/namespaces/mediarss.py b/lib/feedparser/namespaces/mediarss.py new file mode 100644 index 0000000000000000000000000000000000000000..878ed7c8e0dbb24d60621527c65119469893148f --- /dev/null +++ b/lib/feedparser/namespaces/mediarss.py @@ -0,0 +1,142 @@ +# Support for the Media RSS format +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..util import FeedParserDict + +class Namespace(object): + supported_namespaces = { + # Canonical namespace + 'http://search.yahoo.com/mrss/': 'media', + + # Old namespace (no trailing slash) + 'http://search.yahoo.com/mrss': 'media', + } + + def _start_media_category(self, attrsD): + attrsD.setdefault('scheme', 'http://search.yahoo.com/mrss/category_schema') + self._start_category(attrsD) + + def _end_media_category(self): + self._end_category() + + def _end_media_keywords(self): + for term in self.pop('media_keywords').split(','): + if term.strip(): + self._addTag(term.strip(), None, None) + + def _start_media_title(self, attrsD): + self._start_title(attrsD) + + def _end_media_title(self): + title_depth = self.title_depth + self._end_title() + self.title_depth = title_depth + + 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_description(self, attrsD): + self._start_description(attrsD) + + def _end_media_description(self): + self._end_description() + + 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', []) + context['media_content'].append(attrsD) + + def _start_media_thumbnail(self, attrsD): + context = self._getContext() + context.setdefault('media_thumbnail', []) + self.push('url', 1) # new + context['media_thumbnail'].append(attrsD) + + def _end_media_thumbnail(self): + url = self.pop('url') + context = self._getContext() + if url != None and len(url.strip()) != 0: + if 'url' not in context['media_thumbnail'][-1]: + context['media_thumbnail'][-1]['url'] = url + + def _start_media_player(self, attrsD): + self.push('media_player', 0) + self._getContext()['media_player'] = FeedParserDict(attrsD) + + def _end_media_player(self): + value = self.pop('media_player') + context = self._getContext() + context['media_player']['content'] = value diff --git a/lib/feedparser/namespaces/psc.py b/lib/feedparser/namespaces/psc.py new file mode 100644 index 0000000000000000000000000000000000000000..c7dc843e2a5d8cdf371b78a2f888125c24340628 --- /dev/null +++ b/lib/feedparser/namespaces/psc.py @@ -0,0 +1,72 @@ +# Support for the Podlove Simple Chapters format +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +import datetime +import re + +from .. import util +class Namespace(object): + supported_namespaces = { + 'http://podlove.org/simple-chapters': 'psc', + } + + def __init__(self): + # chapters will only be captured while psc_chapters_flag is True. + self.psc_chapters_flag = False + super(Namespace, self).__init__() + + def _start_psc_chapters(self, attrsD): + context = self._getContext() + if 'psc_chapters' not in context: + self.psc_chapters_flag = True + attrsD['chapters'] = [] + context['psc_chapters'] = util.FeedParserDict(attrsD) + + def _end_psc_chapters(self): + 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(util.FeedParserDict(attrsD)) + +def _parse_psc_chapter_start(start): + FORMAT = r'^((\d{2}):)?(\d{2}):(\d{2})(\.(\d{3}))?$' + + m = re.compile(FORMAT).match(start) + if m is None: + return None + + _, h, m, s, _, ms = m.groups() + h, m, s, ms = (int(h or 0), int(m), int(s), int(ms or 0)) + return datetime.timedelta(0, h*60*60 + m*60 + s, ms*1000) diff --git a/lib/feedparser/parsers/__init__.py b/lib/feedparser/parsers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/feedparser/parsers/loose.py b/lib/feedparser/parsers/loose.py new file mode 100644 index 0000000000000000000000000000000000000000..597ce8b7afa193888f93348ed934d4a73eeca191 --- /dev/null +++ b/lib/feedparser/parsers/loose.py @@ -0,0 +1,72 @@ +# The loose feed parser that interfaces with an SGML parsing library +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +class _LooseFeedParser(object): + def __init__(self, baseuri=None, baselang=None, encoding=None, entities=None): + self.baseuri = baseuri or '' + self.lang = baselang or None + self.encoding = encoding or 'utf-8' # character encoding + self.entities = entities or {} + super(_LooseFeedParser, self).__init__() + + def _normalize_attributes(self, kv): + k = kv[0].lower() + v = k in ('rel', 'type') and kv[1].lower() or kv[1] + # the sgml parser doesn't handle entities in attributes, nor + # does it pass the attribute values through as unicode, while + # strict xml parsers do -- account for this difference + v = v.replace('&', '&') + return (k, v) + + def decodeEntities(self, element, data): + data = data.replace('<', '<') + data = data.replace('<', '<') + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('>', '>') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace('"', '"') + data = data.replace(''', ''') + data = data.replace(''', ''') + if not self.contentparams.get('type', 'xml').endswith('xml'): + data = data.replace('<', '<') + data = data.replace('>', '>') + 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]) diff --git a/lib/feedparser/parsers/strict.py b/lib/feedparser/parsers/strict.py new file mode 100644 index 0000000000000000000000000000000000000000..29ad2be362696dc5fb095e4a5cd8c5d6fd222c96 --- /dev/null +++ b/lib/feedparser/parsers/strict.py @@ -0,0 +1,135 @@ +# The strict feed parser that interfaces with an XML parsing library +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +from ..exceptions import UndeclaredNamespace + +class _StrictFeedParser(object): + def __init__(self, baseuri, baselang, encoding): + self.bozo = 0 + self.exc = None + self.decls = {} + self.baseuri = baseuri or '' + self.lang = baselang + self.encoding = encoding + super(_StrictFeedParser, self).__init__() + + def _normalize_attributes(self, kv): + k = kv[0].lower() + v = k in ('rel', 'type') and kv[1].lower() or kv[1] + return (k, v) + + def startPrefixMapping(self, prefix, uri): + if not uri: + return + # Jython uses '' instead of None; standardize on None + prefix = prefix or None + self.trackNamespace(prefix, uri) + if prefix and uri == 'http://www.w3.org/1999/xlink': + self.decls['xmlns:' + prefix] = uri + + def startElementNS(self, name, qname, attrs): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if lowernamespace.find('backend.userland.com/rss') != -1: + # match any backend.userland.com namespace + namespace = 'http://backend.userland.com/rss' + lowernamespace = namespace + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = None + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse: + raise UndeclaredNamespace("'%s' is not associated with a namespace" % givenprefix) + localname = str(localname).lower() + + # qname implementation is horribly broken in Python 2.1 (it + # doesn't report any), and slightly broken in Python 2.2 (it + # doesn't report the xml: namespace). So we match up namespaces + # with a known list first, and then possibly override them with + # the qnames the SAX parser gives us (if indeed it gives us any + # at all). Thanks to MatejC for helping me test this and + # tirelessly telling me that it didn't work yet. + attrsD, self.decls = self.decls, {} + if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML': + attrsD['xmlns']=namespace + if localname=='svg' and namespace=='http://www.w3.org/2000/svg': + attrsD['xmlns']=namespace + + if prefix: + localname = prefix.lower() + ':' + localname + elif namespace and not qname: #Expat + for name,value in self.namespacesInUse.items(): + if name and value == namespace: + localname = name + ':' + localname + break + + for (namespace, attrlocalname), attrvalue in attrs.items(): + lowernamespace = (namespace or '').lower() + prefix = self._matchnamespaces.get(lowernamespace, '') + if prefix: + attrlocalname = prefix + ':' + attrlocalname + 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, list(attrsD.items())) + + def characters(self, text): + self.handle_data(text) + + def endElementNS(self, name, qname): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = '' + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if prefix: + localname = prefix + ':' + localname + elif namespace and not qname: #Expat + for name,value in self.namespacesInUse.items(): + if name and value == namespace: + localname = name + ':' + localname + break + localname = str(localname).lower() + self.unknown_endtag(localname) + + def error(self, exc): + self.bozo = 1 + self.exc = exc + + # drv_libxml2 calls warning() in some cases + warning = error + + def fatalError(self, exc): + self.error(exc) + raise exc diff --git a/lib/feedparser/sanitizer.py b/lib/feedparser/sanitizer.py new file mode 100644 index 0000000000000000000000000000000000000000..04096b3ac4536ba5846ac6eb63659a28f9064606 --- /dev/null +++ b/lib/feedparser/sanitizer.py @@ -0,0 +1,466 @@ +from __future__ import absolute_import, unicode_literals + +import re + +from .html import _BaseHTMLProcessor +from .sgml import _SGML_AVAILABLE +from .urls import _makeSafeAbsoluteURI + +class _HTMLSanitizer(_BaseHTMLProcessor): + acceptable_elements = set(['a', 'abbr', 'acronym', 'address', 'area', + 'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button', + 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', + 'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn', + 'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset', + 'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1', + 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins', + 'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter', + 'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option', + 'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select', + 'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong', + 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot', + 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript']) + + acceptable_attributes = set(['abbr', 'accept', 'accept-charset', 'accesskey', + 'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis', + 'background', 'balance', 'bgcolor', 'bgproperties', 'border', + 'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding', + 'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff', + 'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols', + 'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data', + 'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay', + 'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for', + 'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus', + 'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode', + 'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc', + 'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max', + 'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref', + 'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size', + 'poster', 'pqg', 'preload', 'prompt', 'radiogroup', 'readonly', 'rel', + 'repeat-max', 'repeat-min', 'replace', 'required', 'rev', 'rightspacing', + 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span', + 'src', 'start', 'step', 'summary', 'suppress', 'tabindex', 'target', + 'template', 'title', 'toppadding', 'type', 'unselectable', 'usemap', + 'urn', 'valign', 'value', 'variable', 'volume', 'vspace', 'vrml', + 'width', 'wrap', 'xml:lang']) + + unacceptable_elements_with_end_tag = set(['script', 'applet', 'style']) + + acceptable_css_properties = set(['azimuth', 'background-color', + 'border-bottom-color', 'border-collapse', 'border-color', + 'border-left-color', 'border-right-color', 'border-top-color', 'clear', + 'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font', + 'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight', + 'height', 'letter-spacing', 'line-height', 'overflow', 'pause', + 'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness', + 'speak', 'speak-header', 'speak-numeral', 'speak-punctuation', + 'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent', + 'unicode-bidi', 'vertical-align', 'voice-family', 'volume', + 'white-space', 'width']) + + # survey of common keywords found in feeds + acceptable_css_keywords = set(['auto', 'aqua', 'black', 'block', 'blue', + 'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed', + 'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left', + 'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive', + 'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top', + 'transparent', 'underline', 'white', 'yellow']) + + 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', + '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([ + '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', + 'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject', + 'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern', + 'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath', + 'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop', + 'svg', 'switch', 'text', 'title', 'tspan', 'use']) + + # svgtiny + class + opacity + offset + xmlns + xmlns:xlink + svg_attributes = set(['accent-height', 'accumulate', 'additive', 'alphabetic', + 'arabic-form', 'ascent', 'attributeName', 'attributeType', + 'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height', + 'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx', + 'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity', + 'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style', + 'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2', + 'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x', + 'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines', + 'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid', + 'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max', + 'min', 'name', 'offset', 'opacity', 'orient', 'origin', + 'overline-position', 'overline-thickness', 'panose-1', 'path', + 'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY', + 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', + 'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv', + 'stop-color', 'stop-opacity', 'strikethrough-position', + 'strikethrough-thickness', 'stroke', 'stroke-dasharray', + 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', + 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage', + 'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2', + 'underline-position', 'underline-thickness', 'unicode', 'unicode-range', + 'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width', + 'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole', + 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', + 'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1', + 'y2', 'zoomAndPan']) + + svg_attr_map = None + svg_elem_map = None + + acceptable_svg_properties = set([ 'fill', 'fill-opacity', 'fill-rule', + 'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin', + 'stroke-opacity']) + + def reset(self): + _BaseHTMLProcessor.reset(self) + self.unacceptablestack = 0 + self.mathmlOK = 0 + self.svgOK = 0 + + def unknown_starttag(self, tag, attrs): + acceptable_attributes = self.acceptable_attributes + keymap = {} + if not tag in self.acceptable_elements or self.svgOK: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack += 1 + + # add implicit namespaces to html5 inline svg/mathml + if self._type.endswith('html'): + if not dict(attrs).get('xmlns'): + if tag=='svg': + attrs.append( ('xmlns','http://www.w3.org/2000/svg') ) + if tag=='math': + attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') ) + + # not otherwise acceptable, perhaps it is MathML or SVG? + if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs: + self.mathmlOK += 1 + if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs: + self.svgOK += 1 + + # chose acceptable attributes based on tag class, else bail + if self.mathmlOK and tag in self.mathml_elements: + acceptable_attributes = self.mathml_attributes + elif self.svgOK and tag in self.svg_elements: + # for most vocabularies, lowercasing is a good idea. Many + # svg elements, however, are camel case + if not self.svg_attr_map: + lower=[attr.lower() for attr in self.svg_attributes] + mix=[a for a in self.svg_attributes if a not in lower] + self.svg_attributes = lower + self.svg_attr_map = dict([(a.lower(),a) for a in mix]) + + lower=[attr.lower() for attr in self.svg_elements] + mix=[a for a in self.svg_elements if a not in lower] + self.svg_elements = lower + self.svg_elem_map = dict([(a.lower(),a) for a in mix]) + acceptable_attributes = self.svg_attributes + tag = self.svg_elem_map.get(tag,tag) + keymap = self.svg_attr_map + elif not tag in self.acceptable_elements: + return + + # declare xlink namespace, if needed + if self.mathmlOK or self.svgOK: + if any((a for a in attrs if a[0].startswith('xlink:'))): + if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs: + attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink')) + + clean_attrs = [] + for key, value in self.normalize_attrs(attrs): + if key in acceptable_attributes: + key=keymap.get(key,key) + # make sure the uri uses an acceptable uri scheme + if key == 'href': + value = _makeSafeAbsoluteURI(value) + clean_attrs.append((key,value)) + elif key=='style': + clean_value = self.sanitize_style(value) + if clean_value: + clean_attrs.append((key,clean_value)) + _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs) + + def unknown_endtag(self, tag): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack -= 1 + if self.mathmlOK and tag in self.mathml_elements: + if tag == 'math' and self.mathmlOK: + self.mathmlOK -= 1 + elif self.svgOK and tag in self.svg_elements: + tag = self.svg_elem_map.get(tag,tag) + if tag == 'svg' and self.svgOK: + self.svgOK -= 1 + else: + return + _BaseHTMLProcessor.unknown_endtag(self, tag) + + def handle_pi(self, text): + pass + + def handle_decl(self, text): + pass + + def handle_data(self, text): + if not self.unacceptablestack: + _BaseHTMLProcessor.handle_data(self, text) + + def sanitize_style(self, style): + # disallow urls + style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style) + + # gauntlet + if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): + return '' + # This replaced a regexp that used re.match and was prone to pathological back-tracking. + if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip(): + return '' + + clean = [] + for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style): + if not value: + continue + if prop.lower() in self.acceptable_css_properties: + clean.append(prop + ': ' + value + ';') + elif prop.split('-')[0].lower() in ['background','border','margin','padding']: + for keyword in value.split(): + if not keyword in self.acceptable_css_keywords and \ + not self.valid_css_values.match(keyword): + break + else: + clean.append(prop + ': ' + value + ';') + elif self.svgOK and prop.lower() in self.acceptable_svg_properties: + clean.append(prop + ': ' + value + ';') + + return ' '.join(clean) + + def parse_comment(self, i, report=1): + ret = _BaseHTMLProcessor.parse_comment(self, i, report) + if ret >= 0: + return ret + # if ret == -1, this may be a malicious attempt to circumvent + # sanitization, or a page-destroying unclosed comment + match = re.compile(r'--[^>]*>').search(self.rawdata, i+4) + if match: + return match.end() + # unclosed comment; deliberately fail to handle_data() + return len(self.rawdata) + + +def _sanitizeHTML(htmlSource, encoding, _type): + if not _SGML_AVAILABLE: + return htmlSource + p = _HTMLSanitizer(encoding, _type) + htmlSource = htmlSource.replace('<![CDATA[', '<![CDATA[') + p.feed(htmlSource) + data = p.output() + data = data.strip().replace('\r\n', '\n') + return data + +# Match XML entity declarations. +# Example: <!ENTITY copyright "(C)"> +RE_ENTITY_PATTERN = re.compile(br'^\s*<!ENTITY([^>]*?)>', re.MULTILINE) + +# Match XML DOCTYPE declarations. +# Example: <!DOCTYPE feed [ ]> +RE_DOCTYPE_PATTERN = re.compile(br'^\s*<!DOCTYPE([^>]*?)>', re.MULTILINE) + +# Match safe entity declarations. +# This will allow hexadecimal character references through, +# as well as text, but not arbitrary nested entities. +# Example: cubed "³" +# Example: copyright "(C)" +# Forbidden: explode1 "&explode2;&explode2;" +RE_SAFE_ENTITY_PATTERN = re.compile(b'\s+(\w+)\s+"(&#\w+;|[^&"]*)"') + +def replace_doctype(data): + '''Strips and replaces the DOCTYPE, returns (rss_version, stripped_data) + + rss_version may be 'rss091n' or None + stripped_data is the same XML document with a replaced DOCTYPE + ''' + + # Divide the document into two groups by finding the location + # of the first element that doesn't begin with '<?' or '<!'. + start = re.search(b'<\w', data) + start = start and start.start() or -1 + head, data = data[:start+1], data[start+1:] + + # Save and then remove all of the ENTITY declarations. + entity_results = RE_ENTITY_PATTERN.findall(head) + head = RE_ENTITY_PATTERN.sub(b'', head) + + # Find the DOCTYPE declaration and check the feed type. + doctype_results = RE_DOCTYPE_PATTERN.findall(head) + doctype = doctype_results and doctype_results[0] or b'' + if b'netscape' in doctype.lower(): + version = 'rss091n' + else: + version = None + + # Re-insert the safe ENTITY declarations if a DOCTYPE was found. + replacement = b'' + if len(doctype_results) == 1 and entity_results: + match_safe_entities = lambda e: RE_SAFE_ENTITY_PATTERN.match(e) + safe_entities = [e for e in entity_results if match_safe_entities(e)] + if safe_entities: + replacement = b'<!DOCTYPE feed [\n<!ENTITY' \ + + b'>\n<!ENTITY '.join(safe_entities) \ + + b'>\n]>' + data = RE_DOCTYPE_PATTERN.sub(replacement, head) + data + + # Precompute the safe entities for the loose parser. + safe_entities = dict((k.decode('utf-8'), v.decode('utf-8')) + for k, v in RE_SAFE_ENTITY_PATTERN.findall(replacement)) + return version, data, safe_entities diff --git a/lib/feedparser/sgml.py b/lib/feedparser/sgml.py new file mode 100644 index 0000000000000000000000000000000000000000..2cfcd86343dedb8b2be6ae090b206fef2a608e41 --- /dev/null +++ b/lib/feedparser/sgml.py @@ -0,0 +1,76 @@ +from __future__ import absolute_import + +import re + +__all__ = [ + '_SGML_AVAILABLE', + 'sgmllib', + 'charref', + 'tagfind', + 'attrfind', + 'entityref', + 'incomplete', + 'interesting', + 'shorttag', + 'shorttagopen', + 'starttagopen', + 'endbracket', +] + +# 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 and content santizing +try: + import sgmllib +except ImportError: + # This is probably Python 3, which doesn't include sgmllib anymore + _SGML_AVAILABLE = 0 + + # Mock sgmllib enough to allow subclassing later on + class sgmllib(object): + class SGMLParser(object): + def goahead(self, i): + pass + def parse_starttag(self, i): + pass +else: + _SGML_AVAILABLE = 1 + + # sgmllib defines a number of module-level regular expressions that are + # insufficient for the XML parsing feedparser needs. Rather than modify + # the variables directly in sgmllib, they're defined here using the same + # names, and the compiled code objects of several sgmllib.SGMLParser + # methods are copied into _BaseHTMLProcessor so that they execute in + # feedparser's scope instead of sgmllib's scope. + charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);') + tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') + attrfind = re.compile( + r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)[$]?(\s*=\s*' + r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?' + ) + + # Unfortunately, these must be copied over to prevent NameError exceptions + entityref = sgmllib.entityref + incomplete = sgmllib.incomplete + interesting = sgmllib.interesting + shorttag = sgmllib.shorttag + shorttagopen = sgmllib.shorttagopen + starttagopen = sgmllib.starttagopen + + class _EndBracketRegEx: + def __init__(self): + # Overriding the built-in sgmllib.endbracket regex allows the + # parser to find angle brackets embedded in element attributes. + self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''') + def search(self, target, index=0): + match = self.endbracket.match(target, index) + if match is not None: + # Returning a new object in the calling thread's context + # resolves a thread-safety. + return EndBracketMatch(match) + return None + class EndBracketMatch: + def __init__(self, match): + self.match = match + def start(self, n): + return self.match.end(n) + endbracket = _EndBracketRegEx() diff --git a/lib/feedparser/sgmllib.py b/lib/feedparser/sgmllib3.py similarity index 99% rename from lib/feedparser/sgmllib.py rename to lib/feedparser/sgmllib3.py index 899a35f0df07c26073691fcc865a1a0a73fa7b55..88a02a307f4013abccb867cac97075e22acf06a5 100644 --- a/lib/feedparser/sgmllib.py +++ b/lib/feedparser/sgmllib3.py @@ -481,9 +481,9 @@ class TestSGMLParser(SGMLParser): if not attrs: print('start tag: <' + tag + '>') else: - print('start tag: <' + tag) + print('start tag: <' + tag, end=' ') for name, value in attrs: - print(name + '=' + '"' + value + '"') + print(name + '=' + '"' + value + '"', end=' ') print('>') def unknown_endtag(self, tag): diff --git a/lib/feedparser/tests/compression/deflate-no-headers.z b/lib/feedparser/tests/compression/deflate-no-headers.z deleted file mode 100644 index 04b5c303cf7091b3e83da88ebe49e93ef4fb58e9..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/compression/deflate-no-headers.z and /dev/null differ diff --git a/lib/feedparser/tests/compression/deflate-not-compressed.z b/lib/feedparser/tests/compression/deflate-not-compressed.z deleted file mode 100644 index ddd282214ae43d31176709b06fb400c63da8c74a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/compression/deflate-not-compressed.z +++ /dev/null @@ -1 +0,0 @@ -<feed><title>deflate</title></feed> diff --git a/lib/feedparser/tests/compression/deflate.z b/lib/feedparser/tests/compression/deflate.z deleted file mode 100644 index e68e620e667c073322b750851e86ad64df8d17e6..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/compression/deflate.z and /dev/null differ diff --git a/lib/feedparser/tests/compression/gzip-not-compressed.gz b/lib/feedparser/tests/compression/gzip-not-compressed.gz deleted file mode 100644 index f74317830c1606bd655fd0af5558793704351d83..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/compression/gzip-not-compressed.gz and /dev/null differ diff --git a/lib/feedparser/tests/compression/gzip-struct-error.gz b/lib/feedparser/tests/compression/gzip-struct-error.gz deleted file mode 100644 index d4c59941f375babaeada61fadabb84832a7a8407..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/compression/gzip-struct-error.gz and /dev/null differ diff --git a/lib/feedparser/tests/compression/gzip.gz b/lib/feedparser/tests/compression/gzip.gz deleted file mode 100644 index 52a063f73f07f80e394190fd5b51d7fe29f57075..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/compression/gzip.gz and /dev/null differ diff --git a/lib/feedparser/tests/compression/sample.xml b/lib/feedparser/tests/compression/sample.xml deleted file mode 100644 index d6e8416dc630ef7fc3f8feebdcddfa3ee6035ed4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/compression/sample.xml +++ /dev/null @@ -1 +0,0 @@ -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/encoding/big5.xml b/lib/feedparser/tests/encoding/big5.xml deleted file mode 100644 index 823966bbf7ddeec8e186ec5cb52b7241a74976cd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/big5.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="big5"?> -<!-- -SkipUnless: __import__('codecs').lookup('big5') -Description: big5 -Expect: not bozo and encoding == 'big5' ---> -<rss> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml b/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml deleted file mode 100644 index 89638b7bd8b8e7589d6d80c36008387ab52eaa63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="bogus"?> -<!-- -Description: bogus encoding -Expect: bozo ---> -<rss> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml b/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml deleted file mode 100644 index b268d6a963cebc494e3cc7fd2517d977868c61f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: utf-8 interpreted as iso-8859-1 and re-encoded as utf-8 -Expect: bozo and ord(entries[0]['description']) == 8230 ---> -<rss version="2.0"> -<channel> - <item> - <description>…</description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml b/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml deleted file mode 100644 index 315980b94afeec8c30075c65175fef54d252153a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -SkipUnless: __import__('sys').version.split()[0] >= '2.2.0' -Description: crashes -Expect: 1 ---> -<rss> -<item> -<description><![CDATA[<a href="http://www.example.com/">�</a><a href="&"></a>]]></description> -</item> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/bozo_http_i18n.xml b/lib/feedparser/tests/encoding/bozo_http_i18n.xml deleted file mode 100644 index 5dae79730bbd11dd977fc59713b7e1dd7748c85f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_http_i18n.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Note: text/xml defaults to us-ascii, in conflict with the XML declaration of utf-8 -Header: Content-type: text/xml -Description: Content-type with no charset (text/xml defaults to us-ascii) -Expect: bozo and isinstance(bozo_exception, feedparser.CharacterEncodingOverride) ---> - -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Iñtërnâtiônàlizætiøn</title> -</feed> diff --git a/lib/feedparser/tests/encoding/bozo_http_text_plain.xml b/lib/feedparser/tests/encoding/bozo_http_text_plain.xml deleted file mode 100644 index 7e0adfe82bd371624a3efd2eaec261b0edfa053c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_http_text_plain.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/plain -Description: text/plain + no encoding -Expect: bozo ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml b/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml deleted file mode 100644 index 89c36e87b6a7336777398176728abb3d3237d8ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/plain; charset=utf-8 -Description: text/plain + charset -Expect: bozo and encoding == 'utf-8' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml b/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml deleted file mode 100644 index 4c1b349fba1086b861e58834e99a0e50c96ed590..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: Ensure when there are invalid bytes in encoding specified by BOM, feedparser doesn't crash -Expect: bozo ---> -<rss version="2.0"> -<channel> -<title>Valid UTF8: ѨInvalid UTF8: Espa�a</title> -<description><pre class="screen"></pre></description> -</channel> -</rss diff --git a/lib/feedparser/tests/encoding/bozo_linenoise.xml b/lib/feedparser/tests/encoding/bozo_linenoise.xml deleted file mode 100644 index 60903fce0e29f5138f57388c1a0f1d7ba8109b77..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/bozo_linenoise.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: unguessable characters -Expect: bozo and entries[0].summary == u'\xe2\u20ac\u2122\xe2\u20ac\x9d\u0160' ---> - -<rss version="2.0"> -<channel> -<item> -<description><![CDATA[ ’<>”� ]]></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/encoding/csucs4.xml b/lib/feedparser/tests/encoding/csucs4.xml deleted file mode 100644 index 6a5e88ae368e4cfde37461ae57cd2c3f799781f7..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/csucs4.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/csunicode.xml b/lib/feedparser/tests/encoding/csunicode.xml deleted file mode 100644 index aac9a437e38e387498afad922a99dc82a6236f5e..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/csunicode.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/demoronize-1.xml b/lib/feedparser/tests/encoding/demoronize-1.xml deleted file mode 100644 index 8b2345f623b71afb8e4ccf8d84923bb360c49e0c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/demoronize-1.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: using win-1252 character points instead of unicode -Expect: not bozo and entries[0]['description'] == u'don\u2019t' ---> -<rss version="2.0"> -<channel> - <item> - <description>dont</description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/demoronize-2.xml b/lib/feedparser/tests/encoding/demoronize-2.xml deleted file mode 100644 index f96d4549f816a2495f05a981ad95b493a28c0fb9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/demoronize-2.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: using win-1252 character points instead of unicode -Expect: not bozo and entries[0]['description'] == u'don\u2019t' ---> -<rss version="2.0"> -<channel> - <item> - <description>don’t</description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/demoronize-3.xml b/lib/feedparser/tests/encoding/demoronize-3.xml deleted file mode 100644 index c54ef84a39754f16c4676c0272243b2cb2a22b17..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/demoronize-3.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: using win-1252 character points instead of unicode -Expect: not bozo and entries[0]['description'] == u'don’t' ---> -<rss version="2.0"> -<channel> - <item> - <description>don&#146;t</description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/double-encoded-html.xml b/lib/feedparser/tests/encoding/double-encoded-html.xml deleted file mode 100644 index f98916c9a045896689fc5747af327ecc8c5ad563..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/double-encoded-html.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: utf-8 interpreted as iso-8859-1 and re-encoded as utf-8 -Expect: not bozo and ord(entries[0]['description']) == 8230 ---> -<rss version="2.0"> -<channel> - <item> - <description>…</description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/encoding_attribute_crash.xml b/lib/feedparser/tests/encoding/encoding_attribute_crash.xml deleted file mode 100644 index b270005a2dbb49d864f4d09598b19f49435677ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/encoding_attribute_crash.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: crashes -Expect: 1 ---> -<rss> -<item> -<description><![CDATA[<img alt="©" />]]></description> -</item> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml b/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml deleted file mode 100644 index a000acc98f9717f63f1cec175acfd1cbf8b2348c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: crashes -Expect: 1 ---> -<rss> -<item> -<description><a href="http://example.com"><img src="http://example.com/logo.gif" alt="The image &acirc;&#128;&#156;http://example.com/logo.gif&acirc;&#128;&#65533; cannot be displayed, because it contains errors."></a><br></description> -</item> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/euc-kr-attribute.xml b/lib/feedparser/tests/encoding/euc-kr-attribute.xml deleted file mode 100644 index 0dd60882309c443bb88a6ebf7968d30437416225..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/euc-kr-attribute.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="euc-kr"?> -<!-- -SkipUnless: __import__('codecs').lookup('euc-kr') -Description: euc-kr character in attribute of embedded HTML -Expect: not bozo and entries[0]['description'] == u'<img alt="\ub144" />' ---> -<rss version="2.0"> -<channel> - <item> - <description><img alt="��" /></description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/euc-kr-item.xml b/lib/feedparser/tests/encoding/euc-kr-item.xml deleted file mode 100644 index 29a316da567915dbb580b4534fadee0fde55b8cf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/euc-kr-item.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="euc-kr"?> -<!-- -SkipUnless: __import__('codecs').lookup('euc-kr') -Description: euc-kr encoding in item description -Expect: not bozo and entries[0]['description'] == u'\ub144' ---> -<rss version="2.0"> -<channel> - <item> - <description>��</description> - </item> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/euc-kr.xml b/lib/feedparser/tests/encoding/euc-kr.xml deleted file mode 100644 index 96e110f56e09a077a43c92cfd5c4980c5f340eb4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/euc-kr.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="euc-kr"?> -<!-- -SkipUnless: __import__('codecs').lookup('euc-kr') -Description: euc-kr encoding -Expect: not bozo and feed['title'] == u'\ub144' ---> -<rss version="2.0"> -<channel> - <title>��</title> -</channel> -</rss> - diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml deleted file mode 100644 index a945704e03f089905df73ba50853b3324d2f6af8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/atom+xml;charset='us-ascii' -Description: application/atom+xml + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml deleted file mode 100644 index f587bcc52419f9b56ed27da7909367d1868a9c56..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/atom+xml; charset='us-ascii' -Description: application/atom+xml + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml deleted file mode 100644 index 6ef0efeceb096ad29525f2a647590d9e6652bcb7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/atom+xml -Description: application/atom+xml + no encoding -Expect: not bozo and encoding == 'utf-8' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml deleted file mode 100644 index 4b46cab741bb857b19260b6c89de5e9300ca3314..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/atom+xml -Description: application/atom+xml + explicit encoding -Expect: not bozo and encoding == 'iso-8859-1' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml deleted file mode 100644 index 5a31ff01998527af78ac8d9223ee88522b9cd2a9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0"?> -<!-- -SkipUnless: __import__('codecs').lookup('gb2312') -Header: Content-type: application/atom+xml;charset='gb2312' -Description: application/atom+xml + explicit charset -Expect: not bozo and encoding == 'gb18030' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml deleted file mode 100644 index bb3c3fcdb0df37da72a5a0d864ac7e41e890c209..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -SkipUnless: __import__('codecs').lookup('gb2312') -Header: Content-type: application/atom+xml; charset='gb2312' -Description: application/atom+xml + charset overrides encoding -Expect: not bozo and encoding == 'gb18030' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml deleted file mode 100644 index ab91a82d4a5ba633fa8d1f4acd66eec9a2025516..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="gb2312"?> -<!-- -SkipUnless: __import__('codecs').lookup('gb2312') -Header: Content-type: application/atom+xml -Description: application/atom+xml + explicit encoding -Expect: not bozo and encoding == 'gb18030' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml deleted file mode 100644 index 8ca929b14b146bdc243d03805fbdf865ce6c89f0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/rss+xml;charset= 'us-ascii' -Description: application/rss+xml + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml deleted file mode 100644 index 80c214f15234cf4daa4a129c7a1f666e0306dbae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/rss+xml;charset= "us-ascii" -Description: application/rss+xml + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml deleted file mode 100644 index 781e703e043d2a44f85429c78223c885c16261da..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/rss+xml -Description: application/rss+xml + no encoding -Expect: not bozo and encoding == 'utf-8' ---> -<rss version="2.0"> -</rss> diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml deleted file mode 100644 index 53ee7ff154d17462bcdf7ae450c7cf071ea78ac6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/rss+xml -Description: application/rss+xml + explicit encoding -Expect: not bozo and encoding == 'iso-8859-1' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_application_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_charset.xml deleted file mode 100644 index 2ea8437e2c88213b00a773e7a3f00cb8d6e8ead9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/xml;charset= "us-ascii" -Description: application/xml + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml deleted file mode 100644 index cd314dd04f704c6386cdf34b3957ca60a7c0eaab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/xml;charset = us-ascii -Description: application/xml + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_application_xml_default.xml b/lib/feedparser/tests/encoding/http_application_xml_default.xml deleted file mode 100644 index 309496c66ca9e75cfa51caa79a2fd79d88db29ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/xml -Description: application/xml + no encoding -Expect: not bozo and encoding == 'utf-8' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml deleted file mode 100644 index 99bfcba96fedcd5b7ea3741d40f8430fb9bf663d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/xml-dtd; charset="us-ascii" -Description: application/xml-dtd + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml deleted file mode 100644 index fa01fef0b49d39d1434826041575a1092f0e8f3c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/xml-dtd; charset="us-ascii" -Description: application/xml-dtd + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml deleted file mode 100644 index 390e70e4e92a253567d9920cec9acfedf2677489..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/xml-dtd -Description: application/xml-dtd + no encoding -Expect: not bozo and encoding == 'utf-8' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml deleted file mode 100644 index ae67ce1d66920cd79bc89142c5f54b0510f2aacf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/xml-dtd -Description: application/xml-dtd + explicit encoding -Expect: not bozo and encoding == 'iso-8859-1' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_encoding.xml deleted file mode 100644 index 771663f96bb7e9c4b5d777902322e440dd3d173b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/xml -Description: application/xml + explicit encoding -Expect: not bozo and encoding == 'iso-8859-1' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml deleted file mode 100644 index 52ef00245289edb402244dd71d4141f9dac72c13..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/xml-external-parsed-entity; charset="us-ascii" -Description: application/xml-external-parsed-entity + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml deleted file mode 100644 index ce10433ebf391aab6b464e5e7f7264c2c8ff28c8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/xml-external-parsed-entity;charset=us-ascii -Description: application/xml-external-parsed-entity + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml deleted file mode 100644 index 85af85963c3e5fc0728a8e58ae31a7526756dca9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: application/xml-external-parsed-entity -Description: application/xml-external-parsed-entity + no encoding -Expect: not bozo and encoding == 'utf-8' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml deleted file mode 100644 index 4085fa2866955e5ee3da9cac6a04a3d9597ac95d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: application/xml-external-parsed-entity -Description: application/xml-parsed-entity + explicit encoding -Expect: not bozo and encoding == 'iso-8859-1' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml b/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml deleted file mode 100644 index 19c9dd63635d41825ae3a499c38be6881e61b75d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- -Header: Content-type: application/atom+xml -Description: crashes while resolving relative URIs when content contains attributes which contain (valid) non-ASCII characters -Expect: not bozo ---> -<feed xmlns='http://www.w3.org/2005/Atom'> -<entry> -<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> -<img alt="Browser market shares at ‘ongoing’" /> -</div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/encoding/http_i18n.xml b/lib/feedparser/tests/encoding/http_i18n.xml deleted file mode 100644 index e61ad6ae466a15652ed7cd026b93c2c7391e3f3f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_i18n.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Header: Content-type: application/xml -Description: application/xml with no charset (control for tests/illformed/encoding/http_i18n.xml) -Expect: not bozo ---> - -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Iñtërnâtiônàlizætiøn</title> - <link rel='alternate' type='text/html' href='http://example.com/'/> - <modified>2004-06-02T19:07:55-04:00</modified> - <tagline>If your parser thinks this is well-formed, it's right.</tagline> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml deleted file mode 100644 index bffafae6bbb076818f6eb6f50cbcae7a1941f8c3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/atom+xml;charset='us-ascii' -Description: text/atom+xml + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml deleted file mode 100644 index be4fbf9eee7f35fecb79d61c8d3d5ff5eed605de..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/atom+xml; charset='us-ascii' -Description: text/atom+xml + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml deleted file mode 100644 index 2d3088f731e05c6bd6b7b1edf52ba66eaee01f77..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/atom+xml -Description: text/atom+xml + no encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml deleted file mode 100644 index f3a25faa5e8eab952977e4bbbce4f504cc8755cf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/atom+xml -Description: text/atom+xml + explicit encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml deleted file mode 100644 index 88aa4176110e6242154b7164146a131fe845e983..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/rss+xml;charset= 'us-ascii' -Description: text/rss+xml + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml deleted file mode 100644 index 84436b53c06fd8609aab8f1df390c60e1eee26bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/rss+xml;charset= "us-ascii" -Description: text/rss+xml + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml deleted file mode 100644 index d7a90255c9e94e5875eabf188ee9293c17cc4002..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/rss+xml -Description: text/rss+xml + no encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml deleted file mode 100644 index a786e7eb60f75ab9806c5f17d09975a718bf0a0e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/rss+xml -Description: text/rss+xml + explicit encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml deleted file mode 100644 index 09997938a65af80d3d5a52e0fcddaf8cb6581b18..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml; -Description: text/xml + bogus charset -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml b/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml deleted file mode 100644 index b76cc1f5f21bdc43c876160a41339422c1990c92..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml; charset:iso-8859-1 -Description: text/xml + bogus parameter -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_charset.xml deleted file mode 100644 index 3917214ed478ed35da10c18930abf584e1d225bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml;charset= "us-ascii" -Description: text/xml + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml deleted file mode 100644 index aac1bec9a4852fcc630467595d1581e1b505ef52..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -SkipUnless: __import__('codecs').lookup('windows-1252') -Header: Content-type: text/xml; charset=windows-1252 -Description: text/xml + explicit charset (this one is harder than the others) -Expect: not bozo and entries[0]['description'] == u'This is a \xa3\u201ctest.\u201d' ---> - -<rss version="2.0"> -<channel> -<item> -<title>Foo</title> -<link>http://purl.org/rss/2.0/?item</link> -<description>This is a ��test.�</description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml deleted file mode 100644 index 5b05f6b312ec1dbe58e453ef2188d8145c6c9e50..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/xml;charset = us-ascii -Description: text/xml + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml deleted file mode 100644 index 0a0eed406b40ce546253054d768ecb47dfd5fb07..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version='1.0' encoding='iso-8859-1'?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1252') -Header: Content-type: text/xml; charset=windows-1252 -Description: text/xml + charset overrides encoding (this one is harder than the others) -Expect: not bozo and entries[0]['description'] == u'This is a \xa3\u201ctest.\u201d' ---> - -<rss version="2.0"> -<channel> -<item> -<title>Foo</title> -<link>http://purl.org/rss/2.0/?item</link> -<description>This is a ��test.�</description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/encoding/http_text_xml_default.xml b/lib/feedparser/tests/encoding/http_text_xml_default.xml deleted file mode 100644 index eb7236f506fdd25303a63faac3e0f17712ad5431..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml -Description: text/xml + no encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml deleted file mode 100644 index 2552bedf82abf1518ff8913de33ff3e0d69907b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml-external-parsed-entity; charset="us-ascii" -Description: text/xml-external-parsed-entity + explicit charset -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml deleted file mode 100644 index 353429e10451f2b2005f3d088f058d1acec0ec62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/xml-external-parsed-entity;charset=us-ascii -Description: text/xml-external-parsed-entity + charset overrides encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml deleted file mode 100644 index 7f5c0ee5f600408cd2af2c539d353317944f009d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml-external-parsed-entity -Description: text/xml-external-parsed-entity + no encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml deleted file mode 100644 index b85e3bca142ed90a44678c61d66f35a3a4fe5c9a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Header: Content-type: text/xml-external-parsed-entity -Description: text/xml-parsed-entity + explicit encoding -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/http_text_xml_qs.xml b/lib/feedparser/tests/encoding/http_text_xml_qs.xml deleted file mode 100644 index fa5f346bc2a37fc81718c2f994f4474e0b7d376d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/http_text_xml_qs.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0"?> -<!-- -Header: Content-type: text/xml; qs=0.9 -Description: text/xml + qs value -Expect: not bozo and encoding == 'us-ascii' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml b/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml deleted file mode 100644 index e2d2e93ab55e9eb184caec1f2ce33a5f164dcb03..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml b/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml deleted file mode 100644 index c111659647cb9a3f18b2330ded1df7cb82f0e77f..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/no_content_type_default.xml b/lib/feedparser/tests/encoding/no_content_type_default.xml deleted file mode 100644 index cab1544e2fe268f331a20f94dee92363efbb9f46..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/no_content_type_default.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: no content-type and no encoding -Expect: not bozo and encoding == 'utf-8' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/no_content_type_encoding.xml b/lib/feedparser/tests/encoding/no_content_type_encoding.xml deleted file mode 100644 index 6ad16c691aa423753afd6cde8ca345bfb34e3cc9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/no_content_type_encoding.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- -Description: no content-type + explicit encoding -Expect: not bozo and encoding == 'iso-8859-1' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/encoding/u16.xml b/lib/feedparser/tests/encoding/u16.xml deleted file mode 100644 index 3110f17a894a86dd2590c8ef61f8ce83bd186df7..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/u16.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/ucs-2.xml b/lib/feedparser/tests/encoding/ucs-2.xml deleted file mode 100644 index d4e3defb7cdb42eed79930cc8d3e00fdf7568950..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/ucs-2.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/ucs-4.xml b/lib/feedparser/tests/encoding/ucs-4.xml deleted file mode 100644 index 143fdcad223d42c8df449097004357c1ab9a95e5..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/ucs-4.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-16be-autodetect.xml b/lib/feedparser/tests/encoding/utf-16be-autodetect.xml deleted file mode 100644 index 08976b7a5b5813987b2cde40db9010b1991f1edf..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-16be-autodetect.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-16be-bom.xml b/lib/feedparser/tests/encoding/utf-16be-bom.xml deleted file mode 100644 index 1f629657d1e9a220e9c86141a881b482d10df6c4..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-16be-bom.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-16be.xml b/lib/feedparser/tests/encoding/utf-16be.xml deleted file mode 100644 index c9a0f145d5762cb728e8301dd9de11a542b7fb25..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-16be.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-16le-autodetect.xml b/lib/feedparser/tests/encoding/utf-16le-autodetect.xml deleted file mode 100644 index 60938826761b28a2527dd4cabff921a2eb935730..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-16le-autodetect.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-16le-bom.xml b/lib/feedparser/tests/encoding/utf-16le-bom.xml deleted file mode 100644 index 89cb4f776ad403ac77e10c847c7efa18d4a18dae..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-16le-bom.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-16le.xml b/lib/feedparser/tests/encoding/utf-16le.xml deleted file mode 100644 index ec8effdc8838c2a5d7470ccb102c4b61ccd01c27..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-16le.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-32be-autodetect.xml b/lib/feedparser/tests/encoding/utf-32be-autodetect.xml deleted file mode 100644 index deabb603eee30b20ad973937db10f69f51f2a7d4..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-32be-autodetect.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-32be-bom.xml b/lib/feedparser/tests/encoding/utf-32be-bom.xml deleted file mode 100644 index f09e8aefd67aeda483feb59d39100d59dcfb420e..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-32be-bom.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-32be.xml b/lib/feedparser/tests/encoding/utf-32be.xml deleted file mode 100644 index f912031039b3b7700391b9a1531c7d04fb354a61..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-32be.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-32le-autodetect.xml b/lib/feedparser/tests/encoding/utf-32le-autodetect.xml deleted file mode 100644 index 37fd72a64934d76635c9d70c729326812a20b243..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-32le-autodetect.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-32le-bom.xml b/lib/feedparser/tests/encoding/utf-32le-bom.xml deleted file mode 100644 index c62cae4039b2659b45eaeb949896ddad88563ffe..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-32le-bom.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-32le.xml b/lib/feedparser/tests/encoding/utf-32le.xml deleted file mode 100644 index 4b83b240f5350c646ef41222282d5e7f84000698..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf-32le.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf-8-bom.xml b/lib/feedparser/tests/encoding/utf-8-bom.xml deleted file mode 100644 index 079031567c4e41757a36d5e0badf7f2349b0c0f6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/utf-8-bom.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -SkipUnless: __import__('codecs').lookup('utf-8') -Description: Wellformed UTF-8 with Byte Order Mark -Expect: not bozo and encoding == 'utf-8' ---> -<rss> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/utf16.xml b/lib/feedparser/tests/encoding/utf16.xml deleted file mode 100644 index 053b03e347ca6a3d4a6d8140979ba3b5acf4735d..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf16.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf_16.xml b/lib/feedparser/tests/encoding/utf_16.xml deleted file mode 100644 index 63dd6a69268571f28b86daed795de7b18af25010..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf_16.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/utf_32.xml b/lib/feedparser/tests/encoding/utf_32.xml deleted file mode 100644 index 7489048375233332b0547314e1fe96840a2454c4..0000000000000000000000000000000000000000 Binary files a/lib/feedparser/tests/encoding/utf_32.xml and /dev/null differ diff --git a/lib/feedparser/tests/encoding/x80_437.xml b/lib/feedparser/tests/encoding/x80_437.xml deleted file mode 100644 index 747bffe652d653b37682624104ee613f538c2b4f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_437.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="437"?> -<!-- -SkipUnless: __import__('codecs').lookup('437') -Description: \x80 character in 437 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_850.xml b/lib/feedparser/tests/encoding/x80_850.xml deleted file mode 100644 index 89b51ddf0c7b13df7e5285d4caa28cde6662cd08..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_850.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="850"?> -<!-- -SkipUnless: __import__('codecs').lookup('850') -Description: \x80 character in 850 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_852.xml b/lib/feedparser/tests/encoding/x80_852.xml deleted file mode 100644 index 1fb1898e065e15fe2fb68c696e604f0dc8fe5c47..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_852.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="852"?> -<!-- -SkipUnless: __import__('codecs').lookup('852') -Description: \x80 character in 852 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_855.xml b/lib/feedparser/tests/encoding/x80_855.xml deleted file mode 100644 index fbd5240f4f9cb0352578c0375bb97c3ddacde2c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_855.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="855"?> -<!-- -SkipUnless: __import__('codecs').lookup('855') -Description: \x80 character in 855 encoding -Expect: not bozo and feed['title'] == u'\u0452' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_857.xml b/lib/feedparser/tests/encoding/x80_857.xml deleted file mode 100644 index 2ebe084771a1e8b609e033f6863a29d910c6cc42..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_857.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="857"?> -<!-- -SkipUnless: __import__('codecs').lookup('857') -Description: \x80 character in 857 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_860.xml b/lib/feedparser/tests/encoding/x80_860.xml deleted file mode 100644 index dbe53c9ccb2eb0337edf188c29bd8c4d5f83eb53..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_860.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="860"?> -<!-- -SkipUnless: __import__('codecs').lookup('860') -Description: \x80 character in 860 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_861.xml b/lib/feedparser/tests/encoding/x80_861.xml deleted file mode 100644 index a2a69ddfb3199f6694c711e65b42c493bbb5e5e4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_861.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="861"?> -<!-- -SkipUnless: __import__('codecs').lookup('861') -Description: \x80 character in 861 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_862.xml b/lib/feedparser/tests/encoding/x80_862.xml deleted file mode 100644 index 70947b414349cd83ea17e1338e578f674bc5e79b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_862.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="862"?> -<!-- -SkipUnless: __import__('codecs').lookup('862') -Description: \x80 character in 862 encoding -Expect: not bozo and feed['title'] == u'\u05d0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_863.xml b/lib/feedparser/tests/encoding/x80_863.xml deleted file mode 100644 index dce7c36006f30283ae390e0d5a0464732d1c55bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_863.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="863"?> -<!-- -SkipUnless: __import__('codecs').lookup('863') -Description: \x80 character in 863 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_865.xml b/lib/feedparser/tests/encoding/x80_865.xml deleted file mode 100644 index bfe7e3a6217a120514e49e9c9cf847f7442ee2ac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_865.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="865"?> -<!-- -SkipUnless: __import__('codecs').lookup('865') -Description: \x80 character in 865 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_866.xml b/lib/feedparser/tests/encoding/x80_866.xml deleted file mode 100644 index d83badab36e984930ed01553c745efa4f737c12f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_866.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="866"?> -<!-- -SkipUnless: __import__('codecs').lookup('866') -Description: \x80 character in 866 encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp037.xml b/lib/feedparser/tests/encoding/x80_cp037.xml deleted file mode 100644 index bf80bdeb9489672dc35bad37f52dad61ab85b85f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp037.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~�����on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1125.xml b/lib/feedparser/tests/encoding/x80_cp1125.xml deleted file mode 100644 index ab540d1eeda6999d5609d10df6a658b0819f1128..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1125.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1125"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1125') -Description: \x80 character in cp1125 encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1250.xml b/lib/feedparser/tests/encoding/x80_cp1250.xml deleted file mode 100644 index c32c6abe1cde6748490ce433ff0002362c90f9e0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1250.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1250"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1250') -Description: \x80 character in cp1250 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1251.xml b/lib/feedparser/tests/encoding/x80_cp1251.xml deleted file mode 100644 index 5892eb3938b288a29f7c70799a4095f67aeedd07..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1251.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1251"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1251') -Description: \x80 character in cp1251 encoding -Expect: not bozo and feed['title'] == u'\u0402' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1252.xml b/lib/feedparser/tests/encoding/x80_cp1252.xml deleted file mode 100644 index 960f8dfc302a5b5935c1f83cf68a8b1c550a54aa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1252.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1252"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1252') -Description: \x80 character in cp1252 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1253.xml b/lib/feedparser/tests/encoding/x80_cp1253.xml deleted file mode 100644 index 0f3fae968fc73a6d7bb65ffd259748b0facd2a4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1253.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1253"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1253') -Description: \x80 character in cp1253 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1254.xml b/lib/feedparser/tests/encoding/x80_cp1254.xml deleted file mode 100644 index 5a5160f569c05847e22ea60d1cfb0a33f41f9132..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1254.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1254"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1254') -Description: \x80 character in cp1254 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1255.xml b/lib/feedparser/tests/encoding/x80_cp1255.xml deleted file mode 100644 index 64fa7b6a07698a49a1a85e4a45b0d6bbea4e28f8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1255.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1255"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1255') -Description: \x80 character in cp1255 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1256.xml b/lib/feedparser/tests/encoding/x80_cp1256.xml deleted file mode 100644 index 87ad5178efa4629ec681afe92bcf7a19561b5264..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1256.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1256"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1256') -Description: \x80 character in cp1256 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1257.xml b/lib/feedparser/tests/encoding/x80_cp1257.xml deleted file mode 100644 index 9496f0b5657e2e060eeb28f61ef58b713afd2acb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1257.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1257"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1257') -Description: \x80 character in cp1257 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp1258.xml b/lib/feedparser/tests/encoding/x80_cp1258.xml deleted file mode 100644 index 4fc927e72042db3fbe1454ca9720a9f2895b989f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp1258.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp1258"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp1258') -Description: \x80 character in cp1258 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp437.xml b/lib/feedparser/tests/encoding/x80_cp437.xml deleted file mode 100644 index d6fb55cafc082ae5f10b1d0362aba6fdc99c0be8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp437.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp437"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp437') -Description: \x80 character in cp437 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp500.xml b/lib/feedparser/tests/encoding/x80_cp500.xml deleted file mode 100644 index bc7abbdcd68a5ffae855385348de03ca2b45e888..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp500.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~�����on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp737.xml b/lib/feedparser/tests/encoding/x80_cp737.xml deleted file mode 100644 index 6798237dfb54e9bda5ebe10711823f0007a7996e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp737.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp737"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp737') -Description: \x80 character in cp737 encoding -Expect: not bozo and feed['title'] == u'\u0391' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp775.xml b/lib/feedparser/tests/encoding/x80_cp775.xml deleted file mode 100644 index d04ed5f837a68f1de9b70848bb334f0b86a94821..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp775.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp775"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp775') -Description: \x80 character in cp775 encoding -Expect: not bozo and feed['title'] == u'\u0106' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp850.xml b/lib/feedparser/tests/encoding/x80_cp850.xml deleted file mode 100644 index b510c43fc45c85aa2bc84e37c524358dfe78604e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp850.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp850"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp850') -Description: \x80 character in cp850 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp852.xml b/lib/feedparser/tests/encoding/x80_cp852.xml deleted file mode 100644 index 1c7d3e9524029e9b4f560e5b97c5fa207ad1a8b5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp852.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp852"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp852') -Description: \x80 character in cp852 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp855.xml b/lib/feedparser/tests/encoding/x80_cp855.xml deleted file mode 100644 index 069b059529fe68806c2c2abdfd692983333bd1f3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp855.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp855"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp855') -Description: \x80 character in cp855 encoding -Expect: not bozo and feed['title'] == u'\u0452' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp856.xml b/lib/feedparser/tests/encoding/x80_cp856.xml deleted file mode 100644 index d4d940ab19d7d5996518b614309a2ad26c4d5c73..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp856.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp856"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp856') -Description: \x80 character in cp856 encoding -Expect: not bozo and feed['title'] == u'\u05d0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp857.xml b/lib/feedparser/tests/encoding/x80_cp857.xml deleted file mode 100644 index 5682d7fa2f3e30a38595c6f0df7c85d481ac1a3d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp857.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp857"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp857') -Description: \x80 character in cp857 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp860.xml b/lib/feedparser/tests/encoding/x80_cp860.xml deleted file mode 100644 index a572284a05c0dcaa18288bce090316ea45251501..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp860.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp860"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp860') -Description: \x80 character in cp860 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp861.xml b/lib/feedparser/tests/encoding/x80_cp861.xml deleted file mode 100644 index fb1a529d60170e531f13e9dd1d443d45e1fa052b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp861.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp861"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp861') -Description: \x80 character in cp861 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp862.xml b/lib/feedparser/tests/encoding/x80_cp862.xml deleted file mode 100644 index e9121d0f78f3cd25c2f0647f16247a269a50a0ac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp862.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp862"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp862') -Description: \x80 character in cp862 encoding -Expect: not bozo and feed['title'] == u'\u05d0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp863.xml b/lib/feedparser/tests/encoding/x80_cp863.xml deleted file mode 100644 index 3a2de4f2c89756dde948a5db8578fe85c23ab57b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp863.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp863"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp863') -Description: \x80 character in cp863 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp864.xml b/lib/feedparser/tests/encoding/x80_cp864.xml deleted file mode 100644 index fa501d7ab394232947e0bc754e349dc9bf5e2fbf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp864.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp864"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp864') -Description: \x80 character in cp864 encoding -Expect: not bozo and feed['title'] == u'\xb0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp865.xml b/lib/feedparser/tests/encoding/x80_cp865.xml deleted file mode 100644 index 1a59191f6ead8dbc4e4b8a05b589743174b89ba3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp865.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp865"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp865') -Description: \x80 character in cp865 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp866.xml b/lib/feedparser/tests/encoding/x80_cp866.xml deleted file mode 100644 index 62c9e95822d97e2e8b97056546152bdf9a99031f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp866.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp866"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp866') -Description: \x80 character in cp866 encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp874.xml b/lib/feedparser/tests/encoding/x80_cp874.xml deleted file mode 100644 index 80dd0ffd57a19e7745efea3655530f0e1d7818f0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp874.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp874"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp874') -Description: \x80 character in cp874 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp875.xml b/lib/feedparser/tests/encoding/x80_cp875.xml deleted file mode 100644 index b8b0d245ade2fa5acf7bb66e11a7dfa08ac49bd1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp875.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~�����on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}�����}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cp_is.xml b/lib/feedparser/tests/encoding/x80_cp_is.xml deleted file mode 100644 index 231ac77bfd19c5a7ad102d44e463f4a11a3d5129..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cp_is.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cp_is"?> -<!-- -SkipUnless: __import__('codecs').lookup('cp_is') -Description: \x80 character in cp_is encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm037.xml b/lib/feedparser/tests/encoding/x80_csibm037.xml deleted file mode 100644 index de1073be6c101a76f2502324ee1a16d8c3c399c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm037.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~��������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}��������}]%ą���������z@���@���������@��@��������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm500.xml b/lib/feedparser/tests/encoding/x80_csibm500.xml deleted file mode 100644 index 2a499828efc1aaa4acdd0389baa3155147ce1257..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm500.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~��������on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}��������}]%ą���������z@���@���������@��@��������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm855.xml b/lib/feedparser/tests/encoding/x80_csibm855.xml deleted file mode 100644 index cf078a7478d657066f4bccc614180f740a7fb361..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm855.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm855"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm855') -Description: \x80 character in csibm855 encoding -Expect: not bozo and feed['title'] == u'\u0452' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm857.xml b/lib/feedparser/tests/encoding/x80_csibm857.xml deleted file mode 100644 index b2df462721488849df004ae4c6a539b504f74f95..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm857.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm857"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm857') -Description: \x80 character in csibm857 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm860.xml b/lib/feedparser/tests/encoding/x80_csibm860.xml deleted file mode 100644 index 28269f79b94ab8e8cd959b1f604a00fe4dc1b52d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm860.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm860"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm860') -Description: \x80 character in csibm860 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm861.xml b/lib/feedparser/tests/encoding/x80_csibm861.xml deleted file mode 100644 index 2300d2d96cc3633a74da002d44142a043a32a2cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm861.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm861"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm861') -Description: \x80 character in csibm861 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm863.xml b/lib/feedparser/tests/encoding/x80_csibm863.xml deleted file mode 100644 index af23c2bdfda198ea2b8ccb5b656451905876507c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm863.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm863"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm863') -Description: \x80 character in csibm863 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm864.xml b/lib/feedparser/tests/encoding/x80_csibm864.xml deleted file mode 100644 index 6d820bec1390ac1baed26f663ce241ac7d62bdc3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm864.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm864"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm864') -Description: \x80 character in csibm864 encoding -Expect: not bozo and feed['title'] == u'\xb0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm865.xml b/lib/feedparser/tests/encoding/x80_csibm865.xml deleted file mode 100644 index 5ca7a89abfae529bc27e8ab6fe0f2d087542f5d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm865.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm865"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm865') -Description: \x80 character in csibm865 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csibm866.xml b/lib/feedparser/tests/encoding/x80_csibm866.xml deleted file mode 100644 index 0c962ed575e83263c9d28da96b82a2bbe4fb08c2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csibm866.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csibm866"?> -<!-- -SkipUnless: __import__('codecs').lookup('csibm866') -Description: \x80 character in csibm866 encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cskoi8r.xml b/lib/feedparser/tests/encoding/x80_cskoi8r.xml deleted file mode 100644 index 2a41be100fe3d62bf0db3a8b5d2df5b321547dad..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cskoi8r.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cskoi8r"?> -<!-- -SkipUnless: __import__('codecs').lookup('cskoi8r') -Description: \x80 character in cskoi8r encoding -Expect: not bozo and feed['title'] == u'\u2500' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_csmacintosh.xml b/lib/feedparser/tests/encoding/x80_csmacintosh.xml deleted file mode 100644 index 3d387895c892418014800c695c1651b779cdb9e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_csmacintosh.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="csmacintosh"?> -<!-- -SkipUnless: __import__('codecs').lookup('csmacintosh') -Description: \x80 character in csmacintosh encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cspc775baltic.xml b/lib/feedparser/tests/encoding/x80_cspc775baltic.xml deleted file mode 100644 index e5b9993f313f5c0948c6039ff9040a8157a6095a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cspc775baltic.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cspc775baltic"?> -<!-- -SkipUnless: __import__('codecs').lookup('cspc775baltic') -Description: \x80 character in cspc775baltic encoding -Expect: not bozo and feed['title'] == u'\u0106' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml b/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml deleted file mode 100644 index 21f5f7dc3b24985ee5f1fcace77d24f4f4aac9a0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cspc850multilingual"?> -<!-- -SkipUnless: __import__('codecs').lookup('cspc850multilingual') -Description: \x80 character in cspc850multilingual encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml b/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml deleted file mode 100644 index b282482a68e8b0c88602c54cdb0245093a68920f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cspc862latinhebrew"?> -<!-- -SkipUnless: __import__('codecs').lookup('cspc862latinhebrew') -Description: \x80 character in cspc862latinhebrew encoding -Expect: not bozo and feed['title'] == u'\u05d0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml b/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml deleted file mode 100644 index 74dffe055393f22e42ccf5591c84f7f4415228e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cspc8codepage437"?> -<!-- -SkipUnless: __import__('codecs').lookup('cspc8codepage437') -Description: \x80 character in cspc8codepage437 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_cspcp852.xml b/lib/feedparser/tests/encoding/x80_cspcp852.xml deleted file mode 100644 index bb0b3f2f1cd938e69d1b2b63ee6022f2f1b51e6b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_cspcp852.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="cspcp852"?> -<!-- -SkipUnless: __import__('codecs').lookup('cspcp852') -Description: \x80 character in cspcp852 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_dbcs.xml b/lib/feedparser/tests/encoding/x80_dbcs.xml deleted file mode 100644 index 6d7ff4157a7b1a4ed385654bce41f569e2343b9c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_dbcs.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="dbcs"?> -<!-- -SkipUnless: __import__('codecs').lookup('dbcs') -Description: \x80 character in dbcs encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml deleted file mode 100644 index 605593c4db7baf4f8e2d0cf410b7b649558ecfe3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������`��`��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml deleted file mode 100644 index 346fa178a6d7b74dff347f1bce416e29c01cf6ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml deleted file mode 100644 index 1ed34d98eb7bdee7bd7470fb0314f85007fe363b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������`��`��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml deleted file mode 100644 index 158a9b889d8f8338edb0cd5641ce0ac1b28a6c5f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml deleted file mode 100644 index 9bc45ffac671cc657557e0d3f809a109bb19199d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml deleted file mode 100644 index 692714356d1c795546f8a7c8e4000de8e32878a0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml deleted file mode 100644 index fe4d13b63e89c2b771779ebde11f8adfe400ba18..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������m��m��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml deleted file mode 100644 index 1999ff5f274256ade8148f252eb5bc5d22a3fd0f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml deleted file mode 100644 index 8a7d36df987a8d65e67de52e12a1474f40430677..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������m��m��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml deleted file mode 100644 index 2917b9543c9790615e9f6903246578565e8d64ff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml deleted file mode 100644 index 8d3d7612d618ba3f3ecc9ffafc0ce81b9609f9f9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml deleted file mode 100644 index b110ada1d132ffefb7c6d642a199ba540bec364e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm037.xml b/lib/feedparser/tests/encoding/x80_ibm037.xml deleted file mode 100644 index e3ab6ec5c3c4e7691304f15f3abca6cb9ba07b21..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm037.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm039.xml b/lib/feedparser/tests/encoding/x80_ibm039.xml deleted file mode 100644 index 211553d9f173dc9f13b9199a9618e3f672a7f151..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm039.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm1140.xml b/lib/feedparser/tests/encoding/x80_ibm1140.xml deleted file mode 100644 index c1cde5f98f49f67408c5d894ce1ed5270ad87f6b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm1140.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~�������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}�������}]%ą���������z@���@���������@��@�������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm437.xml b/lib/feedparser/tests/encoding/x80_ibm437.xml deleted file mode 100644 index c9689dc725c73d59651e7dfa5a1384ccfb77c954..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm437.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm437"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm437') -Description: \x80 character in ibm437 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm500.xml b/lib/feedparser/tests/encoding/x80_ibm500.xml deleted file mode 100644 index 1c32c88675d3036cfd3d355a6819acd5440f9574..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm500.xml +++ /dev/null @@ -1 +0,0 @@ -Lo���@�������~�K�@��������~������on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm775.xml b/lib/feedparser/tests/encoding/x80_ibm775.xml deleted file mode 100644 index a6ac0bf00d028bef455138324f1f6960cce0c010..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm775.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm775"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm775') -Description: \x80 character in ibm775 encoding -Expect: not bozo and feed['title'] == u'\u0106' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm850.xml b/lib/feedparser/tests/encoding/x80_ibm850.xml deleted file mode 100644 index e3385b76947d422142c349819baec1c967661bd3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm850.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm850"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm850') -Description: \x80 character in ibm850 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm852.xml b/lib/feedparser/tests/encoding/x80_ibm852.xml deleted file mode 100644 index ed4831087d461d0a58101232bb52a532ce025a0c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm852.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm852"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm852') -Description: \x80 character in ibm852 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm855.xml b/lib/feedparser/tests/encoding/x80_ibm855.xml deleted file mode 100644 index 7574077aa07fcbfaf317d3104bf25c806a2617cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm855.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm855"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm855') -Description: \x80 character in ibm855 encoding -Expect: not bozo and feed['title'] == u'\u0452' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm857.xml b/lib/feedparser/tests/encoding/x80_ibm857.xml deleted file mode 100644 index 41f684896fb39576f4e0e8b87e74456ed409c4aa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm857.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm857"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm857') -Description: \x80 character in ibm857 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm860.xml b/lib/feedparser/tests/encoding/x80_ibm860.xml deleted file mode 100644 index 68c3f5ef6d37acbb666acfce47eeb5b6638747de..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm860.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm860"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm860') -Description: \x80 character in ibm860 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm861.xml b/lib/feedparser/tests/encoding/x80_ibm861.xml deleted file mode 100644 index b9c19d768a4191f3e8c5b48a53417b5def345453..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm861.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm861"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm861') -Description: \x80 character in ibm861 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm862.xml b/lib/feedparser/tests/encoding/x80_ibm862.xml deleted file mode 100644 index 15a957b93588f47a771f5dac9665f9d8f948774b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm862.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm862"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm862') -Description: \x80 character in ibm862 encoding -Expect: not bozo and feed['title'] == u'\u05d0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm863.xml b/lib/feedparser/tests/encoding/x80_ibm863.xml deleted file mode 100644 index 884ca842a33bd85f6041f605ffd14e90aede1641..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm863.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm863"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm863') -Description: \x80 character in ibm863 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm864.xml b/lib/feedparser/tests/encoding/x80_ibm864.xml deleted file mode 100644 index cc5522f49fa19fe7f9336ca236d605572f583945..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm864.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm864"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm864') -Description: \x80 character in ibm864 encoding -Expect: not bozo and feed['title'] == u'\xb0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm865.xml b/lib/feedparser/tests/encoding/x80_ibm865.xml deleted file mode 100644 index 4419a8b3b35bcbc8f662a1d9a0364c2cc2f27cee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm865.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm865"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm865') -Description: \x80 character in ibm865 encoding -Expect: not bozo and feed['title'] == u'\xc7' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ibm866.xml b/lib/feedparser/tests/encoding/x80_ibm866.xml deleted file mode 100644 index cf2478793cf6e24b2cfb6352c63697cc5b9262b4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ibm866.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ibm866"?> -<!-- -SkipUnless: __import__('codecs').lookup('ibm866') -Description: \x80 character in ibm866 encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_koi8-r.xml b/lib/feedparser/tests/encoding/x80_koi8-r.xml deleted file mode 100644 index 9e6c9a6b8ef0042d30cae526344e1a8817c4ef4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_koi8-r.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="koi8-r"?> -<!-- -SkipUnless: __import__('codecs').lookup('koi8-r') -Description: \x80 character in koi8-r encoding -Expect: not bozo and feed['title'] == u'\u2500' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_koi8-t.xml b/lib/feedparser/tests/encoding/x80_koi8-t.xml deleted file mode 100644 index 502735cfc5119462be9c98b5874ff6b6d25fc119..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_koi8-t.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="koi8-t"?> -<!-- -SkipUnless: __import__('codecs').lookup('koi8-t') -Description: \x80 character in koi8-t encoding -Expect: not bozo and feed['title'] == u'\u049b' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_koi8-u.xml b/lib/feedparser/tests/encoding/x80_koi8-u.xml deleted file mode 100644 index f8ea0abbbb4fa14974cd24fc2b8a1f89f33b948b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_koi8-u.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="koi8-u"?> -<!-- -SkipUnless: __import__('codecs').lookup('koi8-u') -Description: \x80 character in koi8-u encoding -Expect: not bozo and feed['title'] == u'\u2500' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml b/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml deleted file mode 100644 index 7a49eb05ec304c0932e4a49e7ee97c3005511974..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="mac-cyrillic"?> -<!-- -SkipUnless: __import__('codecs').lookup('mac-cyrillic') -Description: \x80 character in mac-cyrillic encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_mac.xml b/lib/feedparser/tests/encoding/x80_mac.xml deleted file mode 100644 index b5361482078bf2c13bf464c9a625fa2e6246f41c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_mac.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="mac"?> -<!-- -SkipUnless: __import__('codecs').lookup('mac') -Description: \x80 character in mac encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_maccentraleurope.xml b/lib/feedparser/tests/encoding/x80_maccentraleurope.xml deleted file mode 100644 index abcedfd302d47f69c57105e9785b2b1c8bd916a1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_maccentraleurope.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="maccentraleurope"?> -<!-- -SkipUnless: __import__('codecs').lookup('maccentraleurope') -Description: \x80 character in maccentraleurope encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_maccyrillic.xml b/lib/feedparser/tests/encoding/x80_maccyrillic.xml deleted file mode 100644 index 89ae2309b1e62e9e76fb984c3e14da220778aa56..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_maccyrillic.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="maccyrillic"?> -<!-- -SkipUnless: __import__('codecs').lookup('maccyrillic') -Description: \x80 character in maccyrillic encoding -Expect: not bozo and feed['title'] == u'\u0410' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_macgreek.xml b/lib/feedparser/tests/encoding/x80_macgreek.xml deleted file mode 100644 index ac91a79d3f9d791ef91404721812d0146ec7312e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_macgreek.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="macgreek"?> -<!-- -SkipUnless: __import__('codecs').lookup('macgreek') -Description: \x80 character in macgreek encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_maciceland.xml b/lib/feedparser/tests/encoding/x80_maciceland.xml deleted file mode 100644 index d93cfa5631dbd90b28587bee9ed7bff6fc67f9be..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_maciceland.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="maciceland"?> -<!-- -SkipUnless: __import__('codecs').lookup('maciceland') -Description: \x80 character in maciceland encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_macintosh.xml b/lib/feedparser/tests/encoding/x80_macintosh.xml deleted file mode 100644 index e01a0e31692f604f008262d7d538bdb7bae7df91..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_macintosh.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="macintosh"?> -<!-- -SkipUnless: __import__('codecs').lookup('macintosh') -Description: \x80 character in macintosh encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_maclatin2.xml b/lib/feedparser/tests/encoding/x80_maclatin2.xml deleted file mode 100644 index fe1d5c43b345796c742171583cd52a5df4c0db99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_maclatin2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="maclatin2"?> -<!-- -SkipUnless: __import__('codecs').lookup('maclatin2') -Description: \x80 character in maclatin2 encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_macroman.xml b/lib/feedparser/tests/encoding/x80_macroman.xml deleted file mode 100644 index 0700f3af075ba34a1db572bf588e88c7af09cb70..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_macroman.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="macroman"?> -<!-- -SkipUnless: __import__('codecs').lookup('macroman') -Description: \x80 character in macroman encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_macturkish.xml b/lib/feedparser/tests/encoding/x80_macturkish.xml deleted file mode 100644 index fa4ec82fdeaab41fe1f988a64d76f16f59dbc668..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_macturkish.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="macturkish"?> -<!-- -SkipUnless: __import__('codecs').lookup('macturkish') -Description: \x80 character in macturkish encoding -Expect: not bozo and feed['title'] == u'\xc4' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-ansi.xml b/lib/feedparser/tests/encoding/x80_ms-ansi.xml deleted file mode 100644 index b3312ec6f2cfd8632b9d7f86ba678f2f0550d3ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-ansi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-ansi"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-ansi') -Description: \x80 character in ms-ansi encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-arab.xml b/lib/feedparser/tests/encoding/x80_ms-arab.xml deleted file mode 100644 index b67bee60161dd446d73239975e20834d347a7163..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-arab.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-arab"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-arab') -Description: \x80 character in ms-arab encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-cyrl.xml b/lib/feedparser/tests/encoding/x80_ms-cyrl.xml deleted file mode 100644 index 57bfc929b2b9b3523c8201ea9e21199baa74fd2b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-cyrl.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-cyrl"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-cyrl') -Description: \x80 character in ms-cyrl encoding -Expect: not bozo and feed['title'] == u'\u0402' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-ee.xml b/lib/feedparser/tests/encoding/x80_ms-ee.xml deleted file mode 100644 index eb034d0bfa3bc4ccd2120196915870f5642a20b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-ee.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-ee"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-ee') -Description: \x80 character in ms-ee encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-greek.xml b/lib/feedparser/tests/encoding/x80_ms-greek.xml deleted file mode 100644 index b8bfc78a832ac0fbe7a668411556a57f4cdece0a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-greek.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-greek"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-greek') -Description: \x80 character in ms-greek encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-hebr.xml b/lib/feedparser/tests/encoding/x80_ms-hebr.xml deleted file mode 100644 index d170a9c67bf2b126fa94b6d32c3904c4266aeb48..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-hebr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-hebr"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-hebr') -Description: \x80 character in ms-hebr encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_ms-turk.xml b/lib/feedparser/tests/encoding/x80_ms-turk.xml deleted file mode 100644 index dad6cbe97b848bbda60dbe6dc1b406a2e404f2dd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_ms-turk.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="ms-turk"?> -<!-- -SkipUnless: __import__('codecs').lookup('ms-turk') -Description: \x80 character in ms-turk encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_tcvn-5712.xml b/lib/feedparser/tests/encoding/x80_tcvn-5712.xml deleted file mode 100644 index 684c52f4e946f0d0e3aa6423b474512b614815fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_tcvn-5712.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="tcvn-5712"?> -<!-- -SkipUnless: __import__('codecs').lookup('tcvn-5712') -Description: \x80 character in tcvn-5712 encoding -Expect: not bozo and feed['title'] == u'\xc0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_tcvn.xml b/lib/feedparser/tests/encoding/x80_tcvn.xml deleted file mode 100644 index 5b17c9d7212bf95fe3369bd32d9f074f84438e98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_tcvn.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="tcvn"?> -<!-- -SkipUnless: __import__('codecs').lookup('tcvn') -Description: \x80 character in tcvn encoding -Expect: not bozo and feed['title'] == u'\xc0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml b/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml deleted file mode 100644 index f6e92eefbaae5d0120e621a717844796b43dbe26..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="tcvn5712-1"?> -<!-- -SkipUnless: __import__('codecs').lookup('tcvn5712-1') -Description: \x80 character in tcvn5712-1 encoding -Expect: not bozo and feed['title'] == u'\xc0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_viscii.xml b/lib/feedparser/tests/encoding/x80_viscii.xml deleted file mode 100644 index b872c5b3343416e988de71a1e9cb27ac1d8bc9b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_viscii.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="viscii"?> -<!-- -SkipUnless: __import__('codecs').lookup('viscii') -Description: \x80 character in viscii encoding -Expect: not bozo and feed['title'] == u'\u1ea0' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_winbaltrim.xml b/lib/feedparser/tests/encoding/x80_winbaltrim.xml deleted file mode 100644 index a109e279fc323620468ba501fc7fb96653fc27e0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_winbaltrim.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="winbaltrim"?> -<!-- -SkipUnless: __import__('codecs').lookup('winbaltrim') -Description: \x80 character in winbaltrim encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1250.xml b/lib/feedparser/tests/encoding/x80_windows-1250.xml deleted file mode 100644 index 7449843e2608a2653203665a75ab4ee31e053e28..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1250.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1250"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1250') -Description: \x80 character in windows-1250 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1251.xml b/lib/feedparser/tests/encoding/x80_windows-1251.xml deleted file mode 100644 index 15f51c58fe20f364d2cd3cf59dbd6fcf7f3c40b6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1251.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1251"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1251') -Description: \x80 character in windows-1251 encoding -Expect: not bozo and feed['title'] == u'\u0402' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1252.xml b/lib/feedparser/tests/encoding/x80_windows-1252.xml deleted file mode 100644 index 742278a0e96e651e6618ea03f123f2efffeca1fa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1252.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1252"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1252') -Description: \x80 character in windows-1252 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1253.xml b/lib/feedparser/tests/encoding/x80_windows-1253.xml deleted file mode 100644 index 001199908a429f029ccb0c186cf346f269c9bfff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1253.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1253"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1253') -Description: \x80 character in windows-1253 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1254.xml b/lib/feedparser/tests/encoding/x80_windows-1254.xml deleted file mode 100644 index 7e9078947b2597e0c23ce8b33a18c1d703c90a78..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1254.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1254"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1254') -Description: \x80 character in windows-1254 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1255.xml b/lib/feedparser/tests/encoding/x80_windows-1255.xml deleted file mode 100644 index 53cfc19144c096b4c07efece77fce89f98e796c8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1255.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1255"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1255') -Description: \x80 character in windows-1255 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1256.xml b/lib/feedparser/tests/encoding/x80_windows-1256.xml deleted file mode 100644 index 4b2b6303a31ea2b5ba82da83b8832020a69c7e1c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1256.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1256"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1256') -Description: \x80 character in windows-1256 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1257.xml b/lib/feedparser/tests/encoding/x80_windows-1257.xml deleted file mode 100644 index 00e807fad6294d4900674ba692e98692a540b669..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1257.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1257"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1257') -Description: \x80 character in windows-1257 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows-1258.xml b/lib/feedparser/tests/encoding/x80_windows-1258.xml deleted file mode 100644 index 7a6d4105fad1af7b251892a6d2975caec27b3a9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows-1258.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows-1258"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows-1258') -Description: \x80 character in windows-1258 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1250.xml b/lib/feedparser/tests/encoding/x80_windows_1250.xml deleted file mode 100644 index 6728513e31713066975d6083d7037219a94952a5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1250.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1250"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1250') -Description: \x80 character in windows_1250 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1251.xml b/lib/feedparser/tests/encoding/x80_windows_1251.xml deleted file mode 100644 index 9ea04a6ab692062e06b4310e8d8c3e5ea4f71857..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1251.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1251"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1251') -Description: \x80 character in windows_1251 encoding -Expect: not bozo and feed['title'] == u'\u0402' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1252.xml b/lib/feedparser/tests/encoding/x80_windows_1252.xml deleted file mode 100644 index 7adeea4b2deda4f348061f8ea3c6d36a42527f9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1252.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1252"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1252') -Description: \x80 character in windows_1252 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1253.xml b/lib/feedparser/tests/encoding/x80_windows_1253.xml deleted file mode 100644 index ab21d9ef74290eec63e8d3c8b8ed7c34efde2d92..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1253.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1253"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1253') -Description: \x80 character in windows_1253 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1254.xml b/lib/feedparser/tests/encoding/x80_windows_1254.xml deleted file mode 100644 index a35a78b821472b4c464b984aedaebbd32a87f74a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1254.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1254"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1254') -Description: \x80 character in windows_1254 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1255.xml b/lib/feedparser/tests/encoding/x80_windows_1255.xml deleted file mode 100644 index e71a73671649bf6611a63dc6ed4f1262ba853e51..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1255.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1255"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1255') -Description: \x80 character in windows_1255 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1256.xml b/lib/feedparser/tests/encoding/x80_windows_1256.xml deleted file mode 100644 index 6f9f98d3d5355b33f03e7e0acd0c358901002d78..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1256.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1256"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1256') -Description: \x80 character in windows_1256 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1257.xml b/lib/feedparser/tests/encoding/x80_windows_1257.xml deleted file mode 100644 index 42649b7423e039be34733df49ddfa820131c54f0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1257.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1257"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1257') -Description: \x80 character in windows_1257 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/encoding/x80_windows_1258.xml b/lib/feedparser/tests/encoding/x80_windows_1258.xml deleted file mode 100644 index c8bc701e4307e940d7d69c7721c32a2042f7c1fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/encoding/x80_windows_1258.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="windows_1258"?> -<!-- -SkipUnless: __import__('codecs').lookup('windows_1258') -Description: \x80 character in windows_1258 encoding -Expect: not bozo and feed['title'] == u'\u20ac' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title>�</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/160.xml b/lib/feedparser/tests/entities/160.xml deleted file mode 100644 index a6d0c7fa484d545b82721eaa9ac149af15c6d9ec..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/160.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 160 -Expect: feed['title'] == u'testing \xa0 entity' ---> -<rss> -<channel> -<title>testing   entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/732.xml b/lib/feedparser/tests/entities/732.xml deleted file mode 100644 index 89edc330b9ae3a9f789f32b1b0e57cd7a6b7a3ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/732.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 732 -Expect: feed['title'] == u'testing \u02dc entity' ---> -<rss> -<channel> -<title>testing ˜ entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/8216.xml b/lib/feedparser/tests/entities/8216.xml deleted file mode 100644 index cb45c0fdc2ef683c0c81087077f36420776f7fa4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/8216.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 8216 -Expect: feed['title'] == u'testing \u2018 entity' ---> -<rss> -<channel> -<title>testing ‘ entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/8217.xml b/lib/feedparser/tests/entities/8217.xml deleted file mode 100644 index bb2ebc1d7db1bdd3a2f70d883dda3c26456952d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/8217.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 8217 -Expect: feed['title'] == u'testing \u2019 entity' ---> -<rss> -<channel> -<title>testing ’ entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/8220.xml b/lib/feedparser/tests/entities/8220.xml deleted file mode 100644 index 1c666fd3036263b3931bb4186872e4cee4eb9f00..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/8220.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 8220 -Expect: feed['title'] == u'testing \u201c entity' ---> -<rss> -<channel> -<title>testing “ entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/8221.xml b/lib/feedparser/tests/entities/8221.xml deleted file mode 100644 index d433bd00668faaeeed94c66d8928be163cbf7356..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/8221.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 8221 -Expect: feed['title'] == u'testing \u201d entity' ---> -<rss> -<channel> -<title>testing ” entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/9830.xml b/lib/feedparser/tests/entities/9830.xml deleted file mode 100644 index bac2b7666905e312ca5f03acb6a37edc8947ffd3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/9830.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: 9830 -Expect: feed['title'] == u'testing \u2666 entity' ---> -<rss> -<channel> -<title>testing ♦ entity</title> -</channel> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/entities/aacute.xml b/lib/feedparser/tests/entities/aacute.xml deleted file mode 100644 index cbe788e59b7459584f5b33d323d19b5a97359260..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/aacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: aacute -Expect: feed['title'] == u'testing \xe1 entity' ---> -<rss> -<channel> -<title>testing á entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/acirc.xml b/lib/feedparser/tests/entities/acirc.xml deleted file mode 100644 index 88be77914222029295fb58e988a5ea9a94f6295b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/acirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: acirc -Expect: feed['title'] == u'testing \xe2 entity' ---> -<rss> -<channel> -<title>testing â entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/acute.xml b/lib/feedparser/tests/entities/acute.xml deleted file mode 100644 index bea2c4959603d3c07bc79d034be84202098a45a2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/acute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: acute -Expect: feed['title'] == u'testing \xb4 entity' ---> -<rss> -<channel> -<title>testing ´ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/aelig.xml b/lib/feedparser/tests/entities/aelig.xml deleted file mode 100644 index a616a1b65d72b52358959ffe1c57fcf0333205f8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/aelig.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: aelig -Expect: feed['title'] == u'testing \xe6 entity' ---> -<rss> -<channel> -<title>testing æ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/agrave.xml b/lib/feedparser/tests/entities/agrave.xml deleted file mode 100644 index c9f4d73fc571a5f8e43c9ff2f0a4b8c1181baf3d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/agrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: agrave -Expect: feed['title'] == u'testing \xe0 entity' ---> -<rss> -<channel> -<title>testing à entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/alefsym.xml b/lib/feedparser/tests/entities/alefsym.xml deleted file mode 100644 index c3d383d9288089e5d797c07c65e8ba33ac964cd5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/alefsym.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: alefsym -Expect: feed['title'] == u'testing \u2135 entity' ---> -<rss> -<channel> -<title>testing ℵ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/alpha.xml b/lib/feedparser/tests/entities/alpha.xml deleted file mode 100644 index b4c3aa9a379b3316ffc861a4325aa5bdfd66c875..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/alpha.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: alpha -Expect: feed['title'] == u'testing \u03b1 entity' ---> -<rss> -<channel> -<title>testing α entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/and.xml b/lib/feedparser/tests/entities/and.xml deleted file mode 100644 index 4af0849e9f1f42effa16811f8b250df9139f1257..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/and.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: and -Expect: feed['title'] == u'testing \u2227 entity' ---> -<rss> -<channel> -<title>testing ∧ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ang.xml b/lib/feedparser/tests/entities/ang.xml deleted file mode 100644 index cff7694d7272f0d725758188aa73ce3b45553f09..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ang -Expect: feed['title'] == u'testing \u2220 entity' ---> -<rss> -<channel> -<title>testing ∠ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/aring.xml b/lib/feedparser/tests/entities/aring.xml deleted file mode 100644 index d279eea210ad2ec11466fd960bcd6271e6697fff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/aring.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: aring -Expect: feed['title'] == u'testing \xe5 entity' ---> -<rss> -<channel> -<title>testing å entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/asymp.xml b/lib/feedparser/tests/entities/asymp.xml deleted file mode 100644 index 37c5eb2d47563bad5b9aa2c9be3efa555d3840a7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/asymp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: asymp -Expect: feed['title'] == u'testing \u2248 entity' ---> -<rss> -<channel> -<title>testing ≈ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/atilde.xml b/lib/feedparser/tests/entities/atilde.xml deleted file mode 100644 index 2f31e87df9c553e3afd2b289cdcee6a58042e879..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/atilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: atilde -Expect: feed['title'] == u'testing \xe3 entity' ---> -<rss> -<channel> -<title>testing ã entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/attr_amp.xml b/lib/feedparser/tests/entities/attr_amp.xml deleted file mode 100644 index 64b523feb0935dc80ae2b01a371a8028c3e96e79..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/attr_amp.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Resolve & in attributes -Expect: feed.link == u"http://domain/?a=1&b=2" ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" href="http://domain/?a=1&b=2" /> -</feed diff --git a/lib/feedparser/tests/entities/auml.xml b/lib/feedparser/tests/entities/auml.xml deleted file mode 100644 index 051c2aded990618b1c03a01c65c6c6db13aa7517..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/auml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: auml -Expect: feed['title'] == u'testing \xe4 entity' ---> -<rss> -<channel> -<title>testing ä entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/bdquo.xml b/lib/feedparser/tests/entities/bdquo.xml deleted file mode 100644 index e126e252232ce0ce7297748417aac45d125cc95c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/bdquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: bdquo -Expect: feed['title'] == u'testing \u201e entity' ---> -<rss> -<channel> -<title>testing „ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/beta.xml b/lib/feedparser/tests/entities/beta.xml deleted file mode 100644 index 588ba2d613f525130cc30bde481fc9bc6dffe8c5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/beta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: beta -Expect: feed['title'] == u'testing \u03b2 entity' ---> -<rss> -<channel> -<title>testing β entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/brvbar.xml b/lib/feedparser/tests/entities/brvbar.xml deleted file mode 100644 index 9a940e430b776a929ca2616f455ec8139bb9308e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/brvbar.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: brvbar -Expect: feed['title'] == u'testing \xa6 entity' ---> -<rss> -<channel> -<title>testing ¦ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/bull.xml b/lib/feedparser/tests/entities/bull.xml deleted file mode 100644 index d2d396da019c67bc162c94d62e1842a906657e99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/bull.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: bull -Expect: feed['title'] == u'testing \u2022 entity' ---> -<rss> -<channel> -<title>testing • entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/cap.xml b/lib/feedparser/tests/entities/cap.xml deleted file mode 100644 index f8898e38ce050815a39d89b74ed4ecf391f98af3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/cap.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cap -Expect: feed['title'] == u'testing \u2229 entity' ---> -<rss> -<channel> -<title>testing ∩ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ccedil.xml b/lib/feedparser/tests/entities/ccedil.xml deleted file mode 100644 index 9a35ab0c88a6d3aec7c85068ea11e04e623d1023..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ccedil.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ccedil -Expect: feed['title'] == u'testing \xe7 entity' ---> -<rss> -<channel> -<title>testing ç entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/cedil.xml b/lib/feedparser/tests/entities/cedil.xml deleted file mode 100644 index 9b93fb818b7f976d1fb13daa96c6e6666f6b1fda..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/cedil.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cedil -Expect: feed['title'] == u'testing \xb8 entity' ---> -<rss> -<channel> -<title>testing ¸ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/cent.xml b/lib/feedparser/tests/entities/cent.xml deleted file mode 100644 index 431017305bfd7cf21400285488409a9ffa61d0c1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/cent.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cent -Expect: feed['title'] == u'testing \xa2 entity' ---> -<rss> -<channel> -<title>testing ¢ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/chi.xml b/lib/feedparser/tests/entities/chi.xml deleted file mode 100644 index c63d3e556def1d07bf01e4d64c718ea89e18fa47..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/chi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: chi -Expect: feed['title'] == u'testing \u03c7 entity' ---> -<rss> -<channel> -<title>testing χ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/circ.xml b/lib/feedparser/tests/entities/circ.xml deleted file mode 100644 index 76b6762b3a221605592cf7ec4b55c0a5a244fbe1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/circ.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: circ -Expect: feed['title'] == u'testing \u02c6 entity' ---> -<rss> -<channel> -<title>testing ˆ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/clubs.xml b/lib/feedparser/tests/entities/clubs.xml deleted file mode 100644 index efe1ea34b29820fa50c374d32c03a092b2fdc3fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/clubs.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: clubs -Expect: feed['title'] == u'testing \u2663 entity' ---> -<rss> -<channel> -<title>testing ♣ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/cong.xml b/lib/feedparser/tests/entities/cong.xml deleted file mode 100644 index e6dd55c99722074bed3ac074c377c017283c38b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/cong.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cong -Expect: feed['title'] == u'testing \u2245 entity' ---> -<rss> -<channel> -<title>testing ≅ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/copy.xml b/lib/feedparser/tests/entities/copy.xml deleted file mode 100644 index 7ec6367f6f3ab09a558f692bfa05c1fea037811b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/copy.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: copy -Expect: feed['title'] == u'testing \xa9 entity' ---> -<rss> -<channel> -<title>testing © entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/crarr.xml b/lib/feedparser/tests/entities/crarr.xml deleted file mode 100644 index d1ced14d31c6c33741cc7dd9b7bf536c43fb1f06..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/crarr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: crarr -Expect: feed['title'] == u'testing \u21b5 entity' ---> -<rss> -<channel> -<title>testing ↵ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/cup.xml b/lib/feedparser/tests/entities/cup.xml deleted file mode 100644 index d81b582d00ff6e86f9927bea6e1f52cd0cd131b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/cup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cup -Expect: feed['title'] == u'testing \u222a entity' ---> -<rss> -<channel> -<title>testing ∪ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/curren.xml b/lib/feedparser/tests/entities/curren.xml deleted file mode 100644 index 3aa6b87191d6675c3f2ac1af8b562b12f2c2a6d7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/curren.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: curren -Expect: feed['title'] == u'testing \xa4 entity' ---> -<rss> -<channel> -<title>testing ¤ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/dagger.xml b/lib/feedparser/tests/entities/dagger.xml deleted file mode 100644 index c8360b8db297fcab436a8dfdf4ed8a808023e0b5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/dagger.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: dagger -Expect: feed['title'] == u'testing \u2020 entity' ---> -<rss> -<channel> -<title>testing † entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/darr.xml b/lib/feedparser/tests/entities/darr.xml deleted file mode 100644 index d6ccf87fcf307632c90462137f908de48070fa68..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/darr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: dArr -Expect: feed['title'] == u'testing \u21d3 entity' ---> -<rss> -<channel> -<title>testing ⇓ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/deg.xml b/lib/feedparser/tests/entities/deg.xml deleted file mode 100644 index c09fb85898f1784f9b5fe6a7f51d95b681bcbe82..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/deg.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: deg -Expect: feed['title'] == u'testing \xb0 entity' ---> -<rss> -<channel> -<title>testing ° entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/delta.xml b/lib/feedparser/tests/entities/delta.xml deleted file mode 100644 index a68be93dc2f582e4bda78b5ba26c4274dfd5a49e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/delta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: delta -Expect: feed['title'] == u'testing \u03b4 entity' ---> -<rss> -<channel> -<title>testing δ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/diams.xml b/lib/feedparser/tests/entities/diams.xml deleted file mode 100644 index f41b8b16d9cadc80693a32d9a473795b70d16da8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/diams.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: diams -Expect: feed['title'] == u'testing \u2666 entity' ---> -<rss> -<channel> -<title>testing ♦ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/divide.xml b/lib/feedparser/tests/entities/divide.xml deleted file mode 100644 index 6d9262373e0c7f71fabb47843f9025823f668c6d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/divide.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: divide -Expect: feed['title'] == u'testing \xf7 entity' ---> -<rss> -<channel> -<title>testing ÷ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/doesnotexist.xml b/lib/feedparser/tests/entities/doesnotexist.xml deleted file mode 100644 index 8712505109fdac0ce0d9771bf3280fff29ff4e99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/doesnotexist.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: doesnotexist -Expect: feed['title'] == u'testing &doesnotexist; entity' ---> -<rss> -<channel> -<title>testing &doesnotexist; entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/eacute.xml b/lib/feedparser/tests/entities/eacute.xml deleted file mode 100644 index ae8f8ece85d8b1fa7c04317c17cbbe0657fed8cd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/eacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: eacute -Expect: feed['title'] == u'testing \xe9 entity' ---> -<rss> -<channel> -<title>testing é entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ecirc.xml b/lib/feedparser/tests/entities/ecirc.xml deleted file mode 100644 index b03136f7d458268802580eba211ad66940fa7d67..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ecirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ecirc -Expect: feed['title'] == u'testing \xea entity' ---> -<rss> -<channel> -<title>testing ê entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/egrave.xml b/lib/feedparser/tests/entities/egrave.xml deleted file mode 100644 index 38bbe154881660b37e5964835ad761c7f5314c53..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/egrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: egrave -Expect: feed['title'] == u'testing \xe8 entity' ---> -<rss> -<channel> -<title>testing è entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/empty.xml b/lib/feedparser/tests/entities/empty.xml deleted file mode 100644 index e59e94de6d6e7152fa3fa556b71d7ddee9544657..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/empty.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: empty -Expect: feed['title'] == u'testing \u2205 entity' ---> -<rss> -<channel> -<title>testing ∅ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/emsp.xml b/lib/feedparser/tests/entities/emsp.xml deleted file mode 100644 index 29fe31f575957a971ebe096fb797e5ae9ff376bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/emsp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: emsp -Expect: feed['title'] == u'testing \u2003 entity' ---> -<rss> -<channel> -<title>testing   entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ensp.xml b/lib/feedparser/tests/entities/ensp.xml deleted file mode 100644 index dcaddd14f6910dbb4c84f47f6d27f0217373a556..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ensp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ensp -Expect: feed['title'] == u'testing \u2002 entity' ---> -<rss> -<channel> -<title>testing   entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/epsilon.xml b/lib/feedparser/tests/entities/epsilon.xml deleted file mode 100644 index b053ec5c9a8b2295b46832ff77a18f4c5d7fd78c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/epsilon.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: epsilon -Expect: feed['title'] == u'testing \u03b5 entity' ---> -<rss> -<channel> -<title>testing ε entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/equiv.xml b/lib/feedparser/tests/entities/equiv.xml deleted file mode 100644 index c63fe40cb0236bfae8d2df247f2de0582f205744..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/equiv.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: equiv -Expect: feed['title'] == u'testing \u2261 entity' ---> -<rss> -<channel> -<title>testing ≡ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/eta.xml b/lib/feedparser/tests/entities/eta.xml deleted file mode 100644 index e2692d50ad49af1f473851a1d966fa1302a3707b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/eta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: eta -Expect: feed['title'] == u'testing \u03b7 entity' ---> -<rss> -<channel> -<title>testing η entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/eth.xml b/lib/feedparser/tests/entities/eth.xml deleted file mode 100644 index 056d4c0c933f808c9e2cf7ba54f609efca9608da..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/eth.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: eth -Expect: feed['title'] == u'testing \xf0 entity' ---> -<rss> -<channel> -<title>testing ð entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/euml.xml b/lib/feedparser/tests/entities/euml.xml deleted file mode 100644 index e3f5640723084e7e2a6564ab4b2ed330d1fbfe2c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/euml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: euml -Expect: feed['title'] == u'testing \xeb entity' ---> -<rss> -<channel> -<title>testing ë entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/euro.xml b/lib/feedparser/tests/entities/euro.xml deleted file mode 100644 index 77a782da9eb0f6b9428d66db7ef800b6b4f440c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/euro.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: euro -Expect: feed['title'] == u'testing \u20ac entity' ---> -<rss> -<channel> -<title>testing € entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/exist.xml b/lib/feedparser/tests/entities/exist.xml deleted file mode 100644 index 7332cdd45716108604892365cf7ee8ce578b2eeb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/exist.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: exist -Expect: feed['title'] == u'testing \u2203 entity' ---> -<rss> -<channel> -<title>testing ∃ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/fnof.xml b/lib/feedparser/tests/entities/fnof.xml deleted file mode 100644 index c50f39242b60ee3d03f9c990f1743073ec6ef456..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/fnof.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: fnof -Expect: feed['title'] == u'testing \u0192 entity' ---> -<rss> -<channel> -<title>testing ƒ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/forall.xml b/lib/feedparser/tests/entities/forall.xml deleted file mode 100644 index e939eca16f7366e58f8228f56e7bbe2fa759fe80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/forall.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: forall -Expect: feed['title'] == u'testing \u2200 entity' ---> -<rss> -<channel> -<title>testing ∀ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/frac12.xml b/lib/feedparser/tests/entities/frac12.xml deleted file mode 100644 index 1d567cb92a99c5d369f60d7c200aa11d5c27ad21..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/frac12.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: frac12 -Expect: feed['title'] == u'testing \xbd entity' ---> -<rss> -<channel> -<title>testing ½ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/frac14.xml b/lib/feedparser/tests/entities/frac14.xml deleted file mode 100644 index 7d99994eca6161cdd3a5af486eded108ea5c4b99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/frac14.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: frac14 -Expect: feed['title'] == u'testing \xbc entity' ---> -<rss> -<channel> -<title>testing ¼ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/frac34.xml b/lib/feedparser/tests/entities/frac34.xml deleted file mode 100644 index c106acc98183395f3492b36610bb6dee9943cb35..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/frac34.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: frac34 -Expect: feed['title'] == u'testing \xbe entity' ---> -<rss> -<channel> -<title>testing ¾ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/frasl.xml b/lib/feedparser/tests/entities/frasl.xml deleted file mode 100644 index e0af9ea50fc50a54b35fff8265da0ae6b0f39868..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/frasl.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: frasl -Expect: feed['title'] == u'testing \u2044 entity' ---> -<rss> -<channel> -<title>testing ⁄ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/gamma.xml b/lib/feedparser/tests/entities/gamma.xml deleted file mode 100644 index f75e253a5d773d455fe0f4cbb28092d9a1ccb0be..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/gamma.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: gamma -Expect: feed['title'] == u'testing \u03b3 entity' ---> -<rss> -<channel> -<title>testing γ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ge.xml b/lib/feedparser/tests/entities/ge.xml deleted file mode 100644 index 662d99db487be96701435af5bcaf4ed1f2d88c76..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ge.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ge -Expect: feed['title'] == u'testing \u2265 entity' ---> -<rss> -<channel> -<title>testing ≥ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/hArr.xml b/lib/feedparser/tests/entities/hArr.xml deleted file mode 100644 index 0d600f34aa4d4293db8b8865e29874c9f37379eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/hArr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: harr -Expect: feed['title'] == u'testing \u2194 entity' ---> -<rss> -<channel> -<title>testing ↔ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/hearts.xml b/lib/feedparser/tests/entities/hearts.xml deleted file mode 100644 index b46f1920d70ec9cbe5541b78a693367ac5261f90..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/hearts.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: hearts -Expect: feed['title'] == u'testing \u2665 entity' ---> -<rss> -<channel> -<title>testing ♥ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/hellip.xml b/lib/feedparser/tests/entities/hellip.xml deleted file mode 100644 index 0cc416e9c9a152a679b8ce4b8eb1a9e64a31a6f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/hellip.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: hellip -Expect: feed['title'] == u'testing \u2026 entity' ---> -<rss> -<channel> -<title>testing … entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml b/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml deleted file mode 100644 index 1811573930b604ad2314fc856055ee3a79a84fc0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: test that lowercase x in A translates to 'A' -Expect: entries[0]['title'] == u'A' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml">A</title> -</entry> -</feed diff --git a/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml b/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml deleted file mode 100644 index c25fda59bf0f6406a142741f87b2619df5534cdc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: test that lowercase x in A translates to 'A' -Expect: entries[0]['title'] == u'A' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml">A</title> -</entry> -</feed diff --git a/lib/feedparser/tests/entities/iacute.xml b/lib/feedparser/tests/entities/iacute.xml deleted file mode 100644 index 4150b7db148c526a328257692b98c9700694925d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/iacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iacute -Expect: feed['title'] == u'testing \xed entity' ---> -<rss> -<channel> -<title>testing í entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/icirc.xml b/lib/feedparser/tests/entities/icirc.xml deleted file mode 100644 index 42de099af339f9cc358a6bcd962c8b278c82e214..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/icirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: icirc -Expect: feed['title'] == u'testing \xee entity' ---> -<rss> -<channel> -<title>testing î entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/iexcl.xml b/lib/feedparser/tests/entities/iexcl.xml deleted file mode 100644 index e8eb65637ee5567a24db781c52276b6809e2292d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/iexcl.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iexcl -Expect: feed['title'] == u'testing \xa1 entity' ---> -<rss> -<channel> -<title>testing ¡ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/igrave.xml b/lib/feedparser/tests/entities/igrave.xml deleted file mode 100644 index 788cf5a8fe55ecc2ad4e645bea1620e19c0b09ba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/igrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: igrave -Expect: feed['title'] == u'testing \xec entity' ---> -<rss> -<channel> -<title>testing ì entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/image.xml b/lib/feedparser/tests/entities/image.xml deleted file mode 100644 index a49bb6ec741ab168d32b93c0eca11d7771a76369..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/image.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: image -Expect: feed['title'] == u'testing \u2111 entity' ---> -<rss> -<channel> -<title>testing ℑ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/infin.xml b/lib/feedparser/tests/entities/infin.xml deleted file mode 100644 index 37e2cce3c499e25ceb9f454230bdaf976985b382..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/infin.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: infin -Expect: feed['title'] == u'testing \u221e entity' ---> -<rss> -<channel> -<title>testing ∞ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/int.xml b/lib/feedparser/tests/entities/int.xml deleted file mode 100644 index f84f9645ab1af4be8ac63cf33f70723131b0e2dd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/int.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: int -Expect: feed['title'] == u'testing \u222b entity' ---> -<rss> -<channel> -<title>testing ∫ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/iota.xml b/lib/feedparser/tests/entities/iota.xml deleted file mode 100644 index 38e239668f30d3254b992156b43865cac5e55ae9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/iota.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iota -Expect: feed['title'] == u'testing \u03b9 entity' ---> -<rss> -<channel> -<title>testing ι entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/iquest.xml b/lib/feedparser/tests/entities/iquest.xml deleted file mode 100644 index f73b3f735fa0b72f4701dc848a31964ab03a51e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/iquest.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iquest -Expect: feed['title'] == u'testing \xbf entity' ---> -<rss> -<channel> -<title>testing ¿ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/isin.xml b/lib/feedparser/tests/entities/isin.xml deleted file mode 100644 index 2ef0469b70ca3ce50def30974a367d7bca85e168..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/isin.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: isin -Expect: feed['title'] == u'testing \u2208 entity' ---> -<rss> -<channel> -<title>testing ∈ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/iuml.xml b/lib/feedparser/tests/entities/iuml.xml deleted file mode 100644 index ca69817c60ecb28cae71bdc7e5b7547feb24e616..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/iuml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iuml -Expect: feed['title'] == u'testing \xef entity' ---> -<rss> -<channel> -<title>testing ï entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/kappa.xml b/lib/feedparser/tests/entities/kappa.xml deleted file mode 100644 index 2ab0736b22698d262c48f849dce6e961b56adde4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/kappa.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: kappa -Expect: feed['title'] == u'testing \u03ba entity' ---> -<rss> -<channel> -<title>testing κ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lArr.xml b/lib/feedparser/tests/entities/lArr.xml deleted file mode 100644 index 156f8e91b8d2475d559f512c8cd8cc1db258f866..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lArr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: larr -Expect: feed['title'] == u'testing \u2190 entity' ---> -<rss> -<channel> -<title>testing ← entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lambda.xml b/lib/feedparser/tests/entities/lambda.xml deleted file mode 100644 index 8910ed30559e9165a1627d4a6424cffdb346d11b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lambda.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lambda -Expect: feed['title'] == u'testing \u03bb entity' ---> -<rss> -<channel> -<title>testing λ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lang.xml b/lib/feedparser/tests/entities/lang.xml deleted file mode 100644 index db4e4e9f205ef5dbb7de9b4d731ce24ebd221467..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lang -Expect: feed['title'] == u'testing \u2329 entity' ---> -<rss> -<channel> -<title>testing ⟨ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/laquo.xml b/lib/feedparser/tests/entities/laquo.xml deleted file mode 100644 index 79537ca0ccff6d2f3fb8c705af4c3cdc8fbfac99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/laquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: laquo -Expect: feed['title'] == u'testing \xab entity' ---> -<rss> -<channel> -<title>testing « entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lceil.xml b/lib/feedparser/tests/entities/lceil.xml deleted file mode 100644 index eef0da64178e839aa308e64cbf9e8c823b207c6c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lceil.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lceil -Expect: feed['title'] == u'testing \u2308 entity' ---> -<rss> -<channel> -<title>testing ⌈ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ldquo.xml b/lib/feedparser/tests/entities/ldquo.xml deleted file mode 100644 index 791e48919bb6dce2830e7b1daf1baddc879a4060..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ldquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ldquo -Expect: feed['title'] == u'testing \u201c entity' ---> -<rss> -<channel> -<title>testing “ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/le.xml b/lib/feedparser/tests/entities/le.xml deleted file mode 100644 index f25859512d42d2f10908a2c1b8db5ccec2002ba9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/le.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: le -Expect: feed['title'] == u'testing \u2264 entity' ---> -<rss> -<channel> -<title>testing ≤ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lfloor.xml b/lib/feedparser/tests/entities/lfloor.xml deleted file mode 100644 index 50d5a226a40b87a0144d551d1b10074654ea4f85..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lfloor.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lfloor -Expect: feed['title'] == u'testing \u230a entity' ---> -<rss> -<channel> -<title>testing ⌊ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lowast.xml b/lib/feedparser/tests/entities/lowast.xml deleted file mode 100644 index 008218044fe6cc05712b68ebdbe5f677f6cf4b7c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lowast.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lowast -Expect: feed['title'] == u'testing \u2217 entity' ---> -<rss> -<channel> -<title>testing ∗ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/loz.xml b/lib/feedparser/tests/entities/loz.xml deleted file mode 100644 index 29ffb0690e64c96198e6dd6cbc7def0187e72883..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/loz.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: loz -Expect: feed['title'] == u'testing \u25ca entity' ---> -<rss> -<channel> -<title>testing ◊ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lrm.xml b/lib/feedparser/tests/entities/lrm.xml deleted file mode 100644 index d672bc3146e908ad76c25e88b18955967d047d02..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lrm.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lrm -Expect: feed['title'] == u'testing \u200e entity' ---> -<rss> -<channel> -<title>testing ‎ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lsaquo.xml b/lib/feedparser/tests/entities/lsaquo.xml deleted file mode 100644 index 2faa2ed597064642ebc35a26bc62692589566bd3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lsaquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lsaquo -Expect: feed['title'] == u'testing \u2039 entity' ---> -<rss> -<channel> -<title>testing ‹ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/lsquo.xml b/lib/feedparser/tests/entities/lsquo.xml deleted file mode 100644 index 2297817bfa66b3c209b93f84346433e55703a151..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/lsquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: lsquo -Expect: feed['title'] == u'testing \u2018 entity' ---> -<rss> -<channel> -<title>testing ‘ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/macr.xml b/lib/feedparser/tests/entities/macr.xml deleted file mode 100644 index 4699e32dccde530cc16d9e23fd48a59e56c8a49e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/macr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: macr -Expect: feed['title'] == u'testing \xaf entity' ---> -<rss> -<channel> -<title>testing ¯ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/mdash.xml b/lib/feedparser/tests/entities/mdash.xml deleted file mode 100644 index e2f8503afefc27a5719b2c3ddf94b3a96144388e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/mdash.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: mdash -Expect: feed['title'] == u'testing \u2014 entity' ---> -<rss> -<channel> -<title>testing — entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/micro.xml b/lib/feedparser/tests/entities/micro.xml deleted file mode 100644 index 5feecd06924b6b9eee7f8f5df8ecef97c14ce3a0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/micro.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: micro -Expect: feed['title'] == u'testing \xb5 entity' ---> -<rss> -<channel> -<title>testing µ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/middot.xml b/lib/feedparser/tests/entities/middot.xml deleted file mode 100644 index c436115f953bf5978b0fae7e6875297a0e2ce922..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/middot.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: middot -Expect: feed['title'] == u'testing \xb7 entity' ---> -<rss> -<channel> -<title>testing · entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/minus.xml b/lib/feedparser/tests/entities/minus.xml deleted file mode 100644 index 08baeac43380d7a9279b4b641ae0699ba4e23214..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/minus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: minus -Expect: feed['title'] == u'testing \u2212 entity' ---> -<rss> -<channel> -<title>testing − entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/mu.xml b/lib/feedparser/tests/entities/mu.xml deleted file mode 100644 index 81eb6fa89d7854becb40becff6fa03815c0c8ba3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/mu.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: mu -Expect: feed['title'] == u'testing \u03bc entity' ---> -<rss> -<channel> -<title>testing μ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/nabla.xml b/lib/feedparser/tests/entities/nabla.xml deleted file mode 100644 index 770ce74a7ff0c5521266e392c45a41fb2eaa038d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/nabla.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: nabla -Expect: feed['title'] == u'testing \u2207 entity' ---> -<rss> -<channel> -<title>testing ∇ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/nbsp.xml b/lib/feedparser/tests/entities/nbsp.xml deleted file mode 100644 index e61d94f510eb06e9b891657a2e9b349a8e556d5e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/nbsp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: nbsp -Expect: feed['title'] == u'testing \xa0 entity' ---> -<rss> -<channel> -<title>testing entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ndash.xml b/lib/feedparser/tests/entities/ndash.xml deleted file mode 100644 index 801b4e7e4b2f4b24bc5553ad4680daa9e2d72b27..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ndash.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ndash -Expect: feed['title'] == u'testing \u2013 entity' ---> -<rss> -<channel> -<title>testing – entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ne.xml b/lib/feedparser/tests/entities/ne.xml deleted file mode 100644 index 911a7f1650d704f065d8d88639eecb4627b93b8c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ne.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ne -Expect: feed['title'] == u'testing \u2260 entity' ---> -<rss> -<channel> -<title>testing ≠ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ni.xml b/lib/feedparser/tests/entities/ni.xml deleted file mode 100644 index 5022ec68a9c5307d6666c14605df72fafcfa6ca3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ni.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ni -Expect: feed['title'] == u'testing \u220b entity' ---> -<rss> -<channel> -<title>testing ∋ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/not.xml b/lib/feedparser/tests/entities/not.xml deleted file mode 100644 index 0179bb8cf62b37c3a8188b835006fcffeb064a81..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/not.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: not -Expect: feed['title'] == u'testing \xac entity' ---> -<rss> -<channel> -<title>testing ¬ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/notin.xml b/lib/feedparser/tests/entities/notin.xml deleted file mode 100644 index 3c8f1f483f658edcd91be8a4657df2657ff5e640..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/notin.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: notin -Expect: feed['title'] == u'testing \u2209 entity' ---> -<rss> -<channel> -<title>testing ∉ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/nsub.xml b/lib/feedparser/tests/entities/nsub.xml deleted file mode 100644 index a9f4aca5eaa6c9b6ba33054482f4074e90189e39..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/nsub.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: nsub -Expect: feed['title'] == u'testing \u2284 entity' ---> -<rss> -<channel> -<title>testing ⊄ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ntilde.xml b/lib/feedparser/tests/entities/ntilde.xml deleted file mode 100644 index 0160c98e70de4c1792e0698ff4bbd33a7b49bd74..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ntilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ntilde -Expect: feed['title'] == u'testing \xf1 entity' ---> -<rss> -<channel> -<title>testing ñ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/nu.xml b/lib/feedparser/tests/entities/nu.xml deleted file mode 100644 index e9b99ef65746ee65672286673dc1df21411d4891..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/nu.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: nu -Expect: feed['title'] == u'testing \u03bd entity' ---> -<rss> -<channel> -<title>testing ν entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/oacute.xml b/lib/feedparser/tests/entities/oacute.xml deleted file mode 100644 index 7e7ad9592cc0e4967528898b0eff789a8ed97889..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/oacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: oacute -Expect: feed['title'] == u'testing \xf3 entity' ---> -<rss> -<channel> -<title>testing ó entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ocirc.xml b/lib/feedparser/tests/entities/ocirc.xml deleted file mode 100644 index 561279ceebc249441b97aac369b359519828ab45..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ocirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ocirc -Expect: feed['title'] == u'testing \xf4 entity' ---> -<rss> -<channel> -<title>testing ô entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/oelig.xml b/lib/feedparser/tests/entities/oelig.xml deleted file mode 100644 index 54322396a0d8521f4387d4be1bb81836a20e576c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/oelig.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: oelig -Expect: feed['title'] == u'testing \u0153 entity' ---> -<rss> -<channel> -<title>testing œ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ograve.xml b/lib/feedparser/tests/entities/ograve.xml deleted file mode 100644 index 44dbaf5b6cdaee9e2a84e892969c08206db5a9d8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ograve.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ograve -Expect: feed['title'] == u'testing \xf2 entity' ---> -<rss> -<channel> -<title>testing ò entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/oline.xml b/lib/feedparser/tests/entities/oline.xml deleted file mode 100644 index 193b139ecd32b974c9def980ba43ac340608495f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/oline.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: oline -Expect: feed['title'] == u'testing \u203e entity' ---> -<rss> -<channel> -<title>testing ‾ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/omega.xml b/lib/feedparser/tests/entities/omega.xml deleted file mode 100644 index 614ad7e7903810f0314578984f0fe3f963e1ccd8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/omega.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: omega -Expect: feed['title'] == u'testing \u03c9 entity' ---> -<rss> -<channel> -<title>testing ω entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/omicron.xml b/lib/feedparser/tests/entities/omicron.xml deleted file mode 100644 index 5c23feb59b36e4618189f125b9d149852638bed0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/omicron.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: omicron -Expect: feed['title'] == u'testing \u03bf entity' ---> -<rss> -<channel> -<title>testing ο entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/oplus.xml b/lib/feedparser/tests/entities/oplus.xml deleted file mode 100644 index 374d1596c2baa5640eda0b7f2c312436bceb0784..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/oplus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: oplus -Expect: feed['title'] == u'testing \u2295 entity' ---> -<rss> -<channel> -<title>testing ⊕ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/or.xml b/lib/feedparser/tests/entities/or.xml deleted file mode 100644 index 8499a33aff7c416bcdd9053836e00ae8ed5920e2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/or.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: or -Expect: feed['title'] == u'testing \u2228 entity' ---> -<rss> -<channel> -<title>testing ∨ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ordf.xml b/lib/feedparser/tests/entities/ordf.xml deleted file mode 100644 index 13faf67b93c2f86c5302ed9b31b1b363cd8db58e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ordf.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ordf -Expect: feed['title'] == u'testing \xaa entity' ---> -<rss> -<channel> -<title>testing ª entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ordm.xml b/lib/feedparser/tests/entities/ordm.xml deleted file mode 100644 index da47c1e4a32bfdf67b7a59bc28f2148cbe341fa1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ordm.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ordm -Expect: feed['title'] == u'testing \xba entity' ---> -<rss> -<channel> -<title>testing º entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/oslash.xml b/lib/feedparser/tests/entities/oslash.xml deleted file mode 100644 index 50e6c86b7e29188081c74cdf0d6f613cf245dfdb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/oslash.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: oslash -Expect: feed['title'] == u'testing \xf8 entity' ---> -<rss> -<channel> -<title>testing ø entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/otilde.xml b/lib/feedparser/tests/entities/otilde.xml deleted file mode 100644 index e5636bfef62f5820b101b4a0f90dd7d156ba0985..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/otilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: otilde -Expect: feed['title'] == u'testing \xf5 entity' ---> -<rss> -<channel> -<title>testing õ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/otimes.xml b/lib/feedparser/tests/entities/otimes.xml deleted file mode 100644 index 4f89df3ab3a85aa0cb9950c0a7473eb349b388a5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/otimes.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: otimes -Expect: feed['title'] == u'testing \u2297 entity' ---> -<rss> -<channel> -<title>testing ⊗ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ouml.xml b/lib/feedparser/tests/entities/ouml.xml deleted file mode 100644 index cc6f868de1dd7f9ed15825db8fed3c759be5b85c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ouml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ouml -Expect: feed['title'] == u'testing \xf6 entity' ---> -<rss> -<channel> -<title>testing ö entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/para.xml b/lib/feedparser/tests/entities/para.xml deleted file mode 100644 index 6d86c990fc09991fb8574b8961bfab3b800eb4f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/para.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: para -Expect: feed['title'] == u'testing \xb6 entity' ---> -<rss> -<channel> -<title>testing ¶ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/part.xml b/lib/feedparser/tests/entities/part.xml deleted file mode 100644 index a60559cf50450702d52077df2e353c0ef3b77e21..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/part.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: part -Expect: feed['title'] == u'testing \u2202 entity' ---> -<rss> -<channel> -<title>testing ∂ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/permil.xml b/lib/feedparser/tests/entities/permil.xml deleted file mode 100644 index 9d142215786b98076e1349df190faa2e24d8a5c2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/permil.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: permil -Expect: feed['title'] == u'testing \u2030 entity' ---> -<rss> -<channel> -<title>testing ‰ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/perp.xml b/lib/feedparser/tests/entities/perp.xml deleted file mode 100644 index a2a28141f0c1fc91f2f6b02faf4105ef7d42877a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/perp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: perp -Expect: feed['title'] == u'testing \u22a5 entity' ---> -<rss> -<channel> -<title>testing ⊥ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/phi.xml b/lib/feedparser/tests/entities/phi.xml deleted file mode 100644 index 815a262d20a7fa7c211bbd3ecf489f1ef26b8ad4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/phi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: phi -Expect: feed['title'] == u'testing \u03c6 entity' ---> -<rss> -<channel> -<title>testing φ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/pi.xml b/lib/feedparser/tests/entities/pi.xml deleted file mode 100644 index c20d3ed25efbc8157943ef6e1030538f16437f32..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/pi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: pi -Expect: feed['title'] == u'testing \u03c0 entity' ---> -<rss> -<channel> -<title>testing π entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/piv.xml b/lib/feedparser/tests/entities/piv.xml deleted file mode 100644 index 31560b543ae8cb2f0abfb18246c035aa20bed46c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/piv.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: piv -Expect: feed['title'] == u'testing \u03d6 entity' ---> -<rss> -<channel> -<title>testing ϖ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/plusmn.xml b/lib/feedparser/tests/entities/plusmn.xml deleted file mode 100644 index 77f181ae7f8428acdc1b70556a22e2d6af064831..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/plusmn.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: plusmn -Expect: feed['title'] == u'testing \xb1 entity' ---> -<rss> -<channel> -<title>testing ± entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/pound.xml b/lib/feedparser/tests/entities/pound.xml deleted file mode 100644 index 8f58936fae9f9316c6a4db0f96aeb2aef22affc9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/pound.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: pound -Expect: feed['title'] == u'testing \xa3 entity' ---> -<rss> -<channel> -<title>testing £ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/prime.xml b/lib/feedparser/tests/entities/prime.xml deleted file mode 100644 index 56f95ee34e05efd1827edea022fe25529d7e40c4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/prime.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: prime -Expect: feed['title'] == u'testing \u2032 entity' ---> -<rss> -<channel> -<title>testing ′ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/prod.xml b/lib/feedparser/tests/entities/prod.xml deleted file mode 100644 index 540e9350a758bcfd2952663aadfb642bc72b2461..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/prod.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: prod -Expect: feed['title'] == u'testing \u220f entity' ---> -<rss> -<channel> -<title>testing ∏ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/prop.xml b/lib/feedparser/tests/entities/prop.xml deleted file mode 100644 index 3996b342561a8cdab0c8d89270903cd400e46745..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/prop.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: prop -Expect: feed['title'] == u'testing \u221d entity' ---> -<rss> -<channel> -<title>testing ∝ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/psi.xml b/lib/feedparser/tests/entities/psi.xml deleted file mode 100644 index 104d58515b81d8d54563999e6449226f6e6735ff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/psi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: psi -Expect: feed['title'] == u'testing \u03c8 entity' ---> -<rss> -<channel> -<title>testing ψ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/query_variable_entry.xml b/lib/feedparser/tests/entities/query_variable_entry.xml deleted file mode 100644 index 565c3d905aa067aa92b8307d43aaf2f69df807de..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/query_variable_entry.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: unescaped ampersand in URL query variable doesn't affect entry URL -Expect: entries[0].link == u'http://example/?a=1&b=2&c' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://example/?a=1&b=2&c</link> -</item> -</channel> -</rss diff --git a/lib/feedparser/tests/entities/query_variable_feed.xml b/lib/feedparser/tests/entities/query_variable_feed.xml deleted file mode 100644 index 014f070b776367aa9d0bc5c7d736b305cf32cfd5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/query_variable_feed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: unescaped ampersand in URL query variable doesn't affect feed URL -Expect: feed.link == u'http://example/?a=1&b=2&c' ---> -<rss version="2.0"> -<channel> -<link>http://example/?a=1&b=2&c</link> -</channel> -</rss diff --git a/lib/feedparser/tests/entities/radic.xml b/lib/feedparser/tests/entities/radic.xml deleted file mode 100644 index e9da90e06f5b0a26fb11a2580c2a581ab967346d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/radic.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: radic -Expect: feed['title'] == u'testing \u221a entity' ---> -<rss> -<channel> -<title>testing √ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rang.xml b/lib/feedparser/tests/entities/rang.xml deleted file mode 100644 index 19be10430d30e2945efc69976c1815e94d91d5c7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rang -Expect: feed['title'] == u'testing \u232a entity' ---> -<rss> -<channel> -<title>testing ⟩ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/raquo.xml b/lib/feedparser/tests/entities/raquo.xml deleted file mode 100644 index 60dec82dd3847ea2ae8a063805ecaa42fc63e570..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/raquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: raquo -Expect: feed['title'] == u'testing \xbb entity' ---> -<rss> -<channel> -<title>testing » entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rarr.xml b/lib/feedparser/tests/entities/rarr.xml deleted file mode 100644 index 95c8403bd4cd5190f467404d45a22c118bbfde58..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rarr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rArr -Expect: feed['title'] == u'testing \u21d2 entity' ---> -<rss> -<channel> -<title>testing ⇒ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rceil.xml b/lib/feedparser/tests/entities/rceil.xml deleted file mode 100644 index 6059028b6257b39d6c3c1159bd76ace2acabd9f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rceil.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rceil -Expect: feed['title'] == u'testing \u2309 entity' ---> -<rss> -<channel> -<title>testing ⌉ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rdquo.xml b/lib/feedparser/tests/entities/rdquo.xml deleted file mode 100644 index 05c2b2dd4c3b119195f53b7e181365630b5be1d7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rdquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rdquo -Expect: feed['title'] == u'testing \u201d entity' ---> -<rss> -<channel> -<title>testing ” entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/real.xml b/lib/feedparser/tests/entities/real.xml deleted file mode 100644 index da61fb9b44ddb3ba573102ce0639adc9f90bc40b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/real.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: real -Expect: feed['title'] == u'testing \u211c entity' ---> -<rss> -<channel> -<title>testing ℜ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/reg.xml b/lib/feedparser/tests/entities/reg.xml deleted file mode 100644 index 5c4ab1d81029e6238b5972ae4bd7982352e1c901..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/reg.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: reg -Expect: feed['title'] == u'testing \xae entity' ---> -<rss> -<channel> -<title>testing ® entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rfloor.xml b/lib/feedparser/tests/entities/rfloor.xml deleted file mode 100644 index 2cbfe724e978a8a716dfb819de28ab8c3714005a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rfloor.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rfloor -Expect: feed['title'] == u'testing \u230b entity' ---> -<rss> -<channel> -<title>testing ⌋ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rho.xml b/lib/feedparser/tests/entities/rho.xml deleted file mode 100644 index 9593cf3d6efa57c0c353f41978f802024c55cc94..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rho.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rho -Expect: feed['title'] == u'testing \u03c1 entity' ---> -<rss> -<channel> -<title>testing ρ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rlm.xml b/lib/feedparser/tests/entities/rlm.xml deleted file mode 100644 index 39607338fdc4acf0ceaeea5a896af427daf6b938..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rlm.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rlm -Expect: feed['title'] == u'testing \u200f entity' ---> -<rss> -<channel> -<title>testing ‏ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rsaquo.xml b/lib/feedparser/tests/entities/rsaquo.xml deleted file mode 100644 index da3fe76443ad94dc8c29bbfa79f08de66520b1af..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rsaquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rsaquo -Expect: feed['title'] == u'testing \u203a entity' ---> -<rss> -<channel> -<title>testing › entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/rsquo.xml b/lib/feedparser/tests/entities/rsquo.xml deleted file mode 100644 index a24bc0b37dd334d2a8e80cf07dd741caa437cea6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/rsquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rsquo -Expect: feed['title'] == u'testing \u2019 entity' ---> -<rss> -<channel> -<title>testing ’ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sbquo.xml b/lib/feedparser/tests/entities/sbquo.xml deleted file mode 100644 index 65d011c9c6bf2e9991e9e18cff60fc9375bbfa11..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sbquo.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sbquo -Expect: feed['title'] == u'testing \u201a entity' ---> -<rss> -<channel> -<title>testing ‚ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/scaron.xml b/lib/feedparser/tests/entities/scaron.xml deleted file mode 100644 index 5b0a075ea2bf0bc47b9543c8606f95f40ea8a694..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/scaron.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: scaron -Expect: feed['title'] == u'testing \u0161 entity' ---> -<rss> -<channel> -<title>testing š entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sdot.xml b/lib/feedparser/tests/entities/sdot.xml deleted file mode 100644 index 580263b5a655e90de3f88fd0e48b73e29f2259a9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sdot.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sdot -Expect: feed['title'] == u'testing \u22c5 entity' ---> -<rss> -<channel> -<title>testing ⋅ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sect.xml b/lib/feedparser/tests/entities/sect.xml deleted file mode 100644 index 90d72799c0b4db08f70512f5ff98d83362c1da33..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sect.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sect -Expect: feed['title'] == u'testing \xa7 entity' ---> -<rss> -<channel> -<title>testing § entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/shy.xml b/lib/feedparser/tests/entities/shy.xml deleted file mode 100644 index e0257093e1da1e18edb30a9714a4c7f2fb2e700a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/shy.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: shy -Expect: feed['title'] == u'testing \xad entity' ---> -<rss> -<channel> -<title>testing ­ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sigma.xml b/lib/feedparser/tests/entities/sigma.xml deleted file mode 100644 index 3d080ba128d571e52defb3716346c48665d47e38..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sigma.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sigma -Expect: feed['title'] == u'testing \u03c3 entity' ---> -<rss> -<channel> -<title>testing σ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sigmaf.xml b/lib/feedparser/tests/entities/sigmaf.xml deleted file mode 100644 index 3dbf8a0111fa685c809ba24874dca238164b1a63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sigmaf.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sigmaf -Expect: feed['title'] == u'testing \u03c2 entity' ---> -<rss> -<channel> -<title>testing ς entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sim.xml b/lib/feedparser/tests/entities/sim.xml deleted file mode 100644 index 7b1eadd6d8ca438c013fc2bc73b45d8e1a83e369..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sim.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sim -Expect: feed['title'] == u'testing \u223c entity' ---> -<rss> -<channel> -<title>testing ∼ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/spades.xml b/lib/feedparser/tests/entities/spades.xml deleted file mode 100644 index 806acfe09d0c25746c061b0b3ae4b538df8987f4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/spades.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: spades -Expect: feed['title'] == u'testing \u2660 entity' ---> -<rss> -<channel> -<title>testing ♠ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sub.xml b/lib/feedparser/tests/entities/sub.xml deleted file mode 100644 index e52b46ea3436e8f89bff39ef3f540f99e7f972c5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sub.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sub -Expect: feed['title'] == u'testing \u2282 entity' ---> -<rss> -<channel> -<title>testing ⊂ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sube.xml b/lib/feedparser/tests/entities/sube.xml deleted file mode 100644 index 163e2e6bcd6cee78b89ad681eadcc9b4c83681e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sube.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sube -Expect: feed['title'] == u'testing \u2286 entity' ---> -<rss> -<channel> -<title>testing ⊆ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sum.xml b/lib/feedparser/tests/entities/sum.xml deleted file mode 100644 index 415dcc319bce2eb07e484162ca3a9ddeb0222d67..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sum.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sum -Expect: feed['title'] == u'testing \u2211 entity' ---> -<rss> -<channel> -<title>testing ∑ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sup.xml b/lib/feedparser/tests/entities/sup.xml deleted file mode 100644 index 19d6c56ef5e717a0547d9326b7ee2653653dbe17..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sup -Expect: feed['title'] == u'testing \u2283 entity' ---> -<rss> -<channel> -<title>testing ⊃ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sup1.xml b/lib/feedparser/tests/entities/sup1.xml deleted file mode 100644 index 37b4adb8f171b02c48909bb839e27d5be1cbec72..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sup1.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sup1 -Expect: feed['title'] == u'testing \xb9 entity' ---> -<rss> -<channel> -<title>testing ¹ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sup2.xml b/lib/feedparser/tests/entities/sup2.xml deleted file mode 100644 index e4793553ac1a3367a301f2a169286e0fddd3a216..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sup2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sup2 -Expect: feed['title'] == u'testing \xb2 entity' ---> -<rss> -<channel> -<title>testing ² entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/sup3.xml b/lib/feedparser/tests/entities/sup3.xml deleted file mode 100644 index dd47f583fd782c13a004a24c376db4ca151e8411..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/sup3.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: sup3 -Expect: feed['title'] == u'testing \xb3 entity' ---> -<rss> -<channel> -<title>testing ³ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/supe.xml b/lib/feedparser/tests/entities/supe.xml deleted file mode 100644 index 4091ca785f717d82265c6c5f3a44105ab96ade3a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/supe.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: supe -Expect: feed['title'] == u'testing \u2287 entity' ---> -<rss> -<channel> -<title>testing ⊇ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/szlig.xml b/lib/feedparser/tests/entities/szlig.xml deleted file mode 100644 index b7698fde49646984088085de4b6edbe7c5469908..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/szlig.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: szlig -Expect: feed['title'] == u'testing \xdf entity' ---> -<rss> -<channel> -<title>testing ß entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/tau.xml b/lib/feedparser/tests/entities/tau.xml deleted file mode 100644 index 9a367ddd896f1eaaa51d659101a739298ca8279b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/tau.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: tau -Expect: feed['title'] == u'testing \u03c4 entity' ---> -<rss> -<channel> -<title>testing τ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/there4.xml b/lib/feedparser/tests/entities/there4.xml deleted file mode 100644 index 14b9c375ba1121b17fbc3a97c44c20a9861604b0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/there4.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: there4 -Expect: feed['title'] == u'testing \u2234 entity' ---> -<rss> -<channel> -<title>testing ∴ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/theta.xml b/lib/feedparser/tests/entities/theta.xml deleted file mode 100644 index eb85cdf2af9f23f369cc0d7145e86ff24e822cd6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/theta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: theta -Expect: feed['title'] == u'testing \u03b8 entity' ---> -<rss> -<channel> -<title>testing θ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/thetasym.xml b/lib/feedparser/tests/entities/thetasym.xml deleted file mode 100644 index 8244ba1af448d74889551169ad5849abd0b346c4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/thetasym.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: thetasym -Expect: feed['title'] == u'testing \u03d1 entity' ---> -<rss> -<channel> -<title>testing ϑ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/thinsp.xml b/lib/feedparser/tests/entities/thinsp.xml deleted file mode 100644 index 580abadb06223fa4b473a4c5b1223d79cfae2ff6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/thinsp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: thinsp -Expect: feed['title'] == u'testing \u2009 entity' ---> -<rss> -<channel> -<title>testing   entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/thorn.xml b/lib/feedparser/tests/entities/thorn.xml deleted file mode 100644 index a8694f089585faeee14f68145eb518c627cf14bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/thorn.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: thorn -Expect: feed['title'] == u'testing \xfe entity' ---> -<rss> -<channel> -<title>testing þ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/tilde.xml b/lib/feedparser/tests/entities/tilde.xml deleted file mode 100644 index a12b983c524d774bff512803c26572a719b5bc12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/tilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: tilde -Expect: feed['title'] == u'testing \u02dc entity' ---> -<rss> -<channel> -<title>testing ˜ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/times.xml b/lib/feedparser/tests/entities/times.xml deleted file mode 100644 index 6c40e69e292b0db79a462e5d21945a8406c4efd8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/times.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: times -Expect: feed['title'] == u'testing \xd7 entity' ---> -<rss> -<channel> -<title>testing × entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/trade.xml b/lib/feedparser/tests/entities/trade.xml deleted file mode 100644 index e93bd48279bb02669d40d0c9675835376d1442d1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/trade.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: trade -Expect: feed['title'] == u'testing \u2122 entity' ---> -<rss> -<channel> -<title>testing ™ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/uacute.xml b/lib/feedparser/tests/entities/uacute.xml deleted file mode 100644 index 4d9cff3be9a66c02904aa4d97ac6f4366535b6e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/uacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: uacute -Expect: feed['title'] == u'testing \xfa entity' ---> -<rss> -<channel> -<title>testing ú entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/uarr.xml b/lib/feedparser/tests/entities/uarr.xml deleted file mode 100644 index ca3ae5d24e8108f70ce96a5303f242e0599768b5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/uarr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: uArr -Expect: feed['title'] == u'testing \u21d1 entity' ---> -<rss> -<channel> -<title>testing ⇑ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ucirc.xml b/lib/feedparser/tests/entities/ucirc.xml deleted file mode 100644 index 5da01a03ef2413034ab225c2a388989e79369a4b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ucirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ucirc -Expect: feed['title'] == u'testing \xfb entity' ---> -<rss> -<channel> -<title>testing û entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/ugrave.xml b/lib/feedparser/tests/entities/ugrave.xml deleted file mode 100644 index e949fa11b72272d782fd4d30024811cb4820c3fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/ugrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ugrave -Expect: feed['title'] == u'testing \xf9 entity' ---> -<rss> -<channel> -<title>testing ù entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/uml.xml b/lib/feedparser/tests/entities/uml.xml deleted file mode 100644 index 5245577f4231c547d6a56080b38e17029f695914..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/uml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: uml -Expect: feed['title'] == u'testing \xa8 entity' ---> -<rss> -<channel> -<title>testing ¨ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_AElig.xml b/lib/feedparser/tests/entities/upper_AElig.xml deleted file mode 100644 index d18840743efad949030e31e45eee32c9e2310e75..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_AElig.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: AElig -Expect: feed['title'] == u'testing \xc6 entity' ---> -<rss> -<channel> -<title>testing Æ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Aacute.xml b/lib/feedparser/tests/entities/upper_Aacute.xml deleted file mode 100644 index d33622b92abfd40e0f76bd8dc120859076a4a364..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Aacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Aacute -Expect: feed['title'] == u'testing \xc1 entity' ---> -<rss> -<channel> -<title>testing Á entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Acirc.xml b/lib/feedparser/tests/entities/upper_Acirc.xml deleted file mode 100644 index be9093cf7f5e12b36bfd5af3ef2802c240a91b64..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Acirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Acirc -Expect: feed['title'] == u'testing \xc2 entity' ---> -<rss> -<channel> -<title>testing  entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Agrave.xml b/lib/feedparser/tests/entities/upper_Agrave.xml deleted file mode 100644 index 5635d5b0f607fc255c7dcdd643ac57a2e5ebb398..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Agrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Agrave -Expect: feed['title'] == u'testing \xc0 entity' ---> -<rss> -<channel> -<title>testing À entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Alpha.xml b/lib/feedparser/tests/entities/upper_Alpha.xml deleted file mode 100644 index d78bd94e597b1944750bd0eb54f9f1573ce83f4b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Alpha.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Alpha -Expect: feed['title'] == u'testing \u0391 entity' ---> -<rss> -<channel> -<title>testing Α entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Aring.xml b/lib/feedparser/tests/entities/upper_Aring.xml deleted file mode 100644 index ce140cba442fc8f54ccf63431ebae57eb2959b46..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Aring.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Aring -Expect: feed['title'] == u'testing \xc5 entity' ---> -<rss> -<channel> -<title>testing Å entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Atilde.xml b/lib/feedparser/tests/entities/upper_Atilde.xml deleted file mode 100644 index cf4bc6fa642271a0d9fbd394f1da5f5453bc914d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Atilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Atilde -Expect: feed['title'] == u'testing \xc3 entity' ---> -<rss> -<channel> -<title>testing à entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Auml.xml b/lib/feedparser/tests/entities/upper_Auml.xml deleted file mode 100644 index 7e85269aafaa4c4609623fab1625bfb2582e9288..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Auml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Auml -Expect: feed['title'] == u'testing \xc4 entity' ---> -<rss> -<channel> -<title>testing Ä entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Beta.xml b/lib/feedparser/tests/entities/upper_Beta.xml deleted file mode 100644 index 871a11b6d4dac55034a7bc06a79a9ca0e9b2473f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Beta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Beta -Expect: feed['title'] == u'testing \u0392 entity' ---> -<rss> -<channel> -<title>testing Β entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ccedil.xml b/lib/feedparser/tests/entities/upper_Ccedil.xml deleted file mode 100644 index 38a830b8468ee23919e61272c58f3af41807e0f9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ccedil.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ccedil -Expect: feed['title'] == u'testing \xc7 entity' ---> -<rss> -<channel> -<title>testing Ç entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Chi.xml b/lib/feedparser/tests/entities/upper_Chi.xml deleted file mode 100644 index ea02cd6343846ca9d54e1d806629b3e4f883d418..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Chi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Chi -Expect: feed['title'] == u'testing \u03a7 entity' ---> -<rss> -<channel> -<title>testing Χ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Dagger.xml b/lib/feedparser/tests/entities/upper_Dagger.xml deleted file mode 100644 index 2a6c75aa7836cee91353eaa2849cc4b485b14fa2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Dagger.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Dagger -Expect: feed['title'] == u'testing \u2021 entity' ---> -<rss> -<channel> -<title>testing ‡ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Delta.xml b/lib/feedparser/tests/entities/upper_Delta.xml deleted file mode 100644 index 71d3cdd490e7075a95ff582b1fcbd15882d183af..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Delta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Delta -Expect: feed['title'] == u'testing \u0394 entity' ---> -<rss> -<channel> -<title>testing Δ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_ETH.xml b/lib/feedparser/tests/entities/upper_ETH.xml deleted file mode 100644 index 32d8606329948d43aa0c742990db6cbff643c03c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_ETH.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ETH -Expect: feed['title'] == u'testing \xd0 entity' ---> -<rss> -<channel> -<title>testing Ð entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Eacute.xml b/lib/feedparser/tests/entities/upper_Eacute.xml deleted file mode 100644 index 9ced3e1fbc42981280a2e647caa9f573b0ec7db7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Eacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Eacute -Expect: feed['title'] == u'testing \xc9 entity' ---> -<rss> -<channel> -<title>testing É entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ecirc.xml b/lib/feedparser/tests/entities/upper_Ecirc.xml deleted file mode 100644 index 2e22adab97bb3c7c74242ec37866d60a93a76b5c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ecirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ecirc -Expect: feed['title'] == u'testing \xca entity' ---> -<rss> -<channel> -<title>testing Ê entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Egrave.xml b/lib/feedparser/tests/entities/upper_Egrave.xml deleted file mode 100644 index 11323db2d38cf8456ca71e704c91084e6a285e99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Egrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Egrave -Expect: feed['title'] == u'testing \xc8 entity' ---> -<rss> -<channel> -<title>testing È entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Epsilon.xml b/lib/feedparser/tests/entities/upper_Epsilon.xml deleted file mode 100644 index a4bfd65177da1c7bdef5007d597cf2956b2f5028..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Epsilon.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Epsilon -Expect: feed['title'] == u'testing \u0395 entity' ---> -<rss> -<channel> -<title>testing Ε entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Eta.xml b/lib/feedparser/tests/entities/upper_Eta.xml deleted file mode 100644 index 0ba2a8928579076c1b78c6a34e248b5bbee15ec5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Eta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Eta -Expect: feed['title'] == u'testing \u0397 entity' ---> -<rss> -<channel> -<title>testing Η entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Euml.xml b/lib/feedparser/tests/entities/upper_Euml.xml deleted file mode 100644 index 9a7ea4a90204f5d81aa8b3fb3ee65f7c805785f9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Euml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Euml -Expect: feed['title'] == u'testing \xcb entity' ---> -<rss> -<channel> -<title>testing Ë entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Gamma.xml b/lib/feedparser/tests/entities/upper_Gamma.xml deleted file mode 100644 index d0d85bb5a8b575dd7ba4dc1a1695aca213f5a4cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Gamma.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Gamma -Expect: feed['title'] == u'testing \u0393 entity' ---> -<rss> -<channel> -<title>testing Γ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Iacute.xml b/lib/feedparser/tests/entities/upper_Iacute.xml deleted file mode 100644 index e7ebad95e33d9b5fed273826332cbb9c37e81aae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Iacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Iacute -Expect: feed['title'] == u'testing \xcd entity' ---> -<rss> -<channel> -<title>testing Í entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Icirc.xml b/lib/feedparser/tests/entities/upper_Icirc.xml deleted file mode 100644 index 03d7e45bdbb5c391d1d4c3394d3a4fe7f681fa9b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Icirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Icirc -Expect: feed['title'] == u'testing \xce entity' ---> -<rss> -<channel> -<title>testing Î entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Igrave.xml b/lib/feedparser/tests/entities/upper_Igrave.xml deleted file mode 100644 index 97a112b151ebddfee907f4e9c3ca3ca377dd6904..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Igrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Igrave -Expect: feed['title'] == u'testing \xcc entity' ---> -<rss> -<channel> -<title>testing Ì entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Iota.xml b/lib/feedparser/tests/entities/upper_Iota.xml deleted file mode 100644 index 08153102f949cbfeb9a3d09484fbed23957ecf43..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Iota.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Iota -Expect: feed['title'] == u'testing \u0399 entity' ---> -<rss> -<channel> -<title>testing Ι entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Iuml.xml b/lib/feedparser/tests/entities/upper_Iuml.xml deleted file mode 100644 index 6403c363522a51671e84ffe23cf16e5cbb0e3e5a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Iuml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Iuml -Expect: feed['title'] == u'testing \xcf entity' ---> -<rss> -<channel> -<title>testing Ï entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Kappa.xml b/lib/feedparser/tests/entities/upper_Kappa.xml deleted file mode 100644 index 347d70daacc38c12a72385a90f9cb8ff3967cd6d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Kappa.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Kappa -Expect: feed['title'] == u'testing \u039a entity' ---> -<rss> -<channel> -<title>testing Κ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Lambda.xml b/lib/feedparser/tests/entities/upper_Lambda.xml deleted file mode 100644 index e67223cb08595a295af5572499e9492ca051c2ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Lambda.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Lambda -Expect: feed['title'] == u'testing \u039b entity' ---> -<rss> -<channel> -<title>testing Λ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Mu.xml b/lib/feedparser/tests/entities/upper_Mu.xml deleted file mode 100644 index bfa0379a1411f3aff8cefb8d44dc872afba92961..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Mu.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Mu -Expect: feed['title'] == u'testing \u039c entity' ---> -<rss> -<channel> -<title>testing Μ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ntilde.xml b/lib/feedparser/tests/entities/upper_Ntilde.xml deleted file mode 100644 index bfbd3bd40f2ba2e2da34ce9a5de22882c70f0173..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ntilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ntilde -Expect: feed['title'] == u'testing \xd1 entity' ---> -<rss> -<channel> -<title>testing Ñ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Nu.xml b/lib/feedparser/tests/entities/upper_Nu.xml deleted file mode 100644 index 25779bf80853897707740937df0dd9d1d9d22a63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Nu.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Nu -Expect: feed['title'] == u'testing \u039d entity' ---> -<rss> -<channel> -<title>testing Ν entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_OElig.xml b/lib/feedparser/tests/entities/upper_OElig.xml deleted file mode 100644 index 7d4863447fd6342b4eb165372e9ff49578df6b80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_OElig.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: OElig -Expect: feed['title'] == u'testing \u0152 entity' ---> -<rss> -<channel> -<title>testing Œ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Oacute.xml b/lib/feedparser/tests/entities/upper_Oacute.xml deleted file mode 100644 index eb3822583840ea262a8d0725dd872523e8c328d8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Oacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Oacute -Expect: feed['title'] == u'testing \xd3 entity' ---> -<rss> -<channel> -<title>testing Ó entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ocirc.xml b/lib/feedparser/tests/entities/upper_Ocirc.xml deleted file mode 100644 index 54e180732706e6f330f2942ebadf62926fa28638..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ocirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ocirc -Expect: feed['title'] == u'testing \xd4 entity' ---> -<rss> -<channel> -<title>testing Ô entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ograve.xml b/lib/feedparser/tests/entities/upper_Ograve.xml deleted file mode 100644 index 89503273129d6734a7976f8ca61c169611b1fef2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ograve.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ograve -Expect: feed['title'] == u'testing \xd2 entity' ---> -<rss> -<channel> -<title>testing Ò entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Omega.xml b/lib/feedparser/tests/entities/upper_Omega.xml deleted file mode 100644 index 429ce59cb3052d9c8118ae0922b5163f5de56f5a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Omega.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Omega -Expect: feed['title'] == u'testing \u03a9 entity' ---> -<rss> -<channel> -<title>testing Ω entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Omicron.xml b/lib/feedparser/tests/entities/upper_Omicron.xml deleted file mode 100644 index c74bec184812afc15e42c59a649f4f77396fbd0f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Omicron.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Omicron -Expect: feed['title'] == u'testing \u039f entity' ---> -<rss> -<channel> -<title>testing Ο entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Oslash.xml b/lib/feedparser/tests/entities/upper_Oslash.xml deleted file mode 100644 index 0f9e35335b396636c7f26823e2ecbfeb8725a3b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Oslash.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Oslash -Expect: feed['title'] == u'testing \xd8 entity' ---> -<rss> -<channel> -<title>testing Ø entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Otilde.xml b/lib/feedparser/tests/entities/upper_Otilde.xml deleted file mode 100644 index d340030565a05bd1956b1092da75864b2a8dbd6b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Otilde.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Otilde -Expect: feed['title'] == u'testing \xd5 entity' ---> -<rss> -<channel> -<title>testing Õ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ouml.xml b/lib/feedparser/tests/entities/upper_Ouml.xml deleted file mode 100644 index e32d9644b8a7293b6fb3fe1e26b53854904f7d46..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ouml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ouml -Expect: feed['title'] == u'testing \xd6 entity' ---> -<rss> -<channel> -<title>testing Ö entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Phi.xml b/lib/feedparser/tests/entities/upper_Phi.xml deleted file mode 100644 index 8f93027d39ac2b7aed2c570fb6f77ad4b9d8ff25..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Phi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Phi -Expect: feed['title'] == u'testing \u03a6 entity' ---> -<rss> -<channel> -<title>testing Φ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Pi.xml b/lib/feedparser/tests/entities/upper_Pi.xml deleted file mode 100644 index 2b8951f92eaffb1b42168bd9d24cad7bfb7645d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Pi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Pi -Expect: feed['title'] == u'testing \u03a0 entity' ---> -<rss> -<channel> -<title>testing Π entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Prime.xml b/lib/feedparser/tests/entities/upper_Prime.xml deleted file mode 100644 index b29dc9ff68635ecf8b2b88122760289859a3ce2a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Prime.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Prime -Expect: feed['title'] == u'testing \u2033 entity' ---> -<rss> -<channel> -<title>testing ″ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Psi.xml b/lib/feedparser/tests/entities/upper_Psi.xml deleted file mode 100644 index 9d337bd47114cc4921bd2f99c27942a899b31e9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Psi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Psi -Expect: feed['title'] == u'testing \u03a8 entity' ---> -<rss> -<channel> -<title>testing Ψ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Rho.xml b/lib/feedparser/tests/entities/upper_Rho.xml deleted file mode 100644 index 0e1879736c4ff61948d002c90b2da1a7806619ed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Rho.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Rho -Expect: feed['title'] == u'testing \u03a1 entity' ---> -<rss> -<channel> -<title>testing Ρ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Scaron.xml b/lib/feedparser/tests/entities/upper_Scaron.xml deleted file mode 100644 index 784c67e1fa422c863dd40cbfd8aff1f455197d55..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Scaron.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Scaron -Expect: feed['title'] == u'testing \u0160 entity' ---> -<rss> -<channel> -<title>testing Š entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Sigma.xml b/lib/feedparser/tests/entities/upper_Sigma.xml deleted file mode 100644 index a722850961089200ddedba31876c8d11dbc7f2d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Sigma.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Sigma -Expect: feed['title'] == u'testing \u03a3 entity' ---> -<rss> -<channel> -<title>testing Σ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_THORN.xml b/lib/feedparser/tests/entities/upper_THORN.xml deleted file mode 100644 index 499d0b28c551aacd867c3bd4d8d81bd49b72305e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_THORN.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: THORN -Expect: feed['title'] == u'testing \xde entity' ---> -<rss> -<channel> -<title>testing Þ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Tau.xml b/lib/feedparser/tests/entities/upper_Tau.xml deleted file mode 100644 index 3ff9f6979af976c3bb25ab7b43e461956c34b384..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Tau.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Tau -Expect: feed['title'] == u'testing \u03a4 entity' ---> -<rss> -<channel> -<title>testing Τ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Theta.xml b/lib/feedparser/tests/entities/upper_Theta.xml deleted file mode 100644 index 85c43231d63f114211db1efce6c206a672bbdc89..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Theta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Theta -Expect: feed['title'] == u'testing \u0398 entity' ---> -<rss> -<channel> -<title>testing Θ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Uacute.xml b/lib/feedparser/tests/entities/upper_Uacute.xml deleted file mode 100644 index e714b33c5c8ecaa161ed876b2c783b8574bfcfd3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Uacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Uacute -Expect: feed['title'] == u'testing \xda entity' ---> -<rss> -<channel> -<title>testing Ú entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ucirc.xml b/lib/feedparser/tests/entities/upper_Ucirc.xml deleted file mode 100644 index 2d6ddeb0852defe669db5623ba6b677f63c9e0d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ucirc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ucirc -Expect: feed['title'] == u'testing \xdb entity' ---> -<rss> -<channel> -<title>testing Û entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Ugrave.xml b/lib/feedparser/tests/entities/upper_Ugrave.xml deleted file mode 100644 index 5d859b8eb7529b8f6c9577a848bce3816b1483a9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Ugrave.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Ugrave -Expect: feed['title'] == u'testing \xd9 entity' ---> -<rss> -<channel> -<title>testing Ù entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Upsilon.xml b/lib/feedparser/tests/entities/upper_Upsilon.xml deleted file mode 100644 index 3a8ba537726e7807986e4f2ecf2abca1844154e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Upsilon.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Upsilon -Expect: feed['title'] == u'testing \u03a5 entity' ---> -<rss> -<channel> -<title>testing Υ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Uuml.xml b/lib/feedparser/tests/entities/upper_Uuml.xml deleted file mode 100644 index 0d0c4b2ab1022ca6cd873a6fdc0a8d46519a8721..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Uuml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Uuml -Expect: feed['title'] == u'testing \xdc entity' ---> -<rss> -<channel> -<title>testing Ü entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Xi.xml b/lib/feedparser/tests/entities/upper_Xi.xml deleted file mode 100644 index 6d0411d3b6d01995bab72147c276d86a61b9b7eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Xi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Xi -Expect: feed['title'] == u'testing \u039e entity' ---> -<rss> -<channel> -<title>testing Ξ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Yacute.xml b/lib/feedparser/tests/entities/upper_Yacute.xml deleted file mode 100644 index 96157bfb10de9b276ca244aac69cf1e3a05f5857..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Yacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Yacute -Expect: feed['title'] == u'testing \xdd entity' ---> -<rss> -<channel> -<title>testing Ý entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Yuml.xml b/lib/feedparser/tests/entities/upper_Yuml.xml deleted file mode 100644 index ee49cf3a01eba769ff556c6fc780bb1e45b5e224..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Yuml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Yuml -Expect: feed['title'] == u'testing \u0178 entity' ---> -<rss> -<channel> -<title>testing Ÿ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upper_Zeta.xml b/lib/feedparser/tests/entities/upper_Zeta.xml deleted file mode 100644 index 4bcf39272152da83794361abad1823defe4fe612..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upper_Zeta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Zeta -Expect: feed['title'] == u'testing \u0396 entity' ---> -<rss> -<channel> -<title>testing Ζ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upsih.xml b/lib/feedparser/tests/entities/upsih.xml deleted file mode 100644 index 9248acdc1f8833bfda8d5248bdee5431f91b5113..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upsih.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: upsih -Expect: feed['title'] == u'testing \u03d2 entity' ---> -<rss> -<channel> -<title>testing ϒ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/upsilon.xml b/lib/feedparser/tests/entities/upsilon.xml deleted file mode 100644 index 1f916c5db9c9773633c9c71e6406a2efdcb8fb06..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/upsilon.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: upsilon -Expect: feed['title'] == u'testing \u03c5 entity' ---> -<rss> -<channel> -<title>testing υ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/uuml.xml b/lib/feedparser/tests/entities/uuml.xml deleted file mode 100644 index 4c147b2a3832c6faae301851ba4c7e5ae70c43ff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/uuml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: uuml -Expect: feed['title'] == u'testing \xfc entity' ---> -<rss> -<channel> -<title>testing ü entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/weierp.xml b/lib/feedparser/tests/entities/weierp.xml deleted file mode 100644 index 63bd70c3ad0360c5244ff7cb8d1e898472e9b212..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/weierp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: weierp -Expect: feed['title'] == u'testing \u2118 entity' ---> -<rss> -<channel> -<title>testing ℘ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/xi.xml b/lib/feedparser/tests/entities/xi.xml deleted file mode 100644 index d9b280b94244745041fa1c66a1eb87f18807a960..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/xi.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: xi -Expect: feed['title'] == u'testing \u03be entity' ---> -<rss> -<channel> -<title>testing ξ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/yacute.xml b/lib/feedparser/tests/entities/yacute.xml deleted file mode 100644 index c8b3315019a3291b9afc4d050edc21b8afc7c3b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/yacute.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: yacute -Expect: feed['title'] == u'testing \xfd entity' ---> -<rss> -<channel> -<title>testing ý entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/yen.xml b/lib/feedparser/tests/entities/yen.xml deleted file mode 100644 index af9f596c975f9b0fb0617c10e0510d8f236b276e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/yen.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: yen -Expect: feed['title'] == u'testing \xa5 entity' ---> -<rss> -<channel> -<title>testing ¥ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/yuml.xml b/lib/feedparser/tests/entities/yuml.xml deleted file mode 100644 index 253b60bc3fb18f9f35bdfddeffc5b09358b9dbe6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/yuml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: yuml -Expect: feed['title'] == u'testing \xff entity' ---> -<rss> -<channel> -<title>testing ÿ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/zeta.xml b/lib/feedparser/tests/entities/zeta.xml deleted file mode 100644 index af665ecd11aefa4b57f5b97afe3a0a424e619875..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/zeta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: zeta -Expect: feed['title'] == u'testing \u03b6 entity' ---> -<rss> -<channel> -<title>testing ζ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/zwj.xml b/lib/feedparser/tests/entities/zwj.xml deleted file mode 100644 index 881246064393de2cac0653901b649c4ee74c32db..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/zwj.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: zwj -Expect: feed['title'] == u'testing \u200d entity' ---> -<rss> -<channel> -<title>testing ‍ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/entities/zwnj.xml b/lib/feedparser/tests/entities/zwnj.xml deleted file mode 100644 index 3bcd5d4a7e6c98b6d6cc3b9b332a6c3b23ec87d7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/entities/zwnj.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: zwnj -Expect: feed['title'] == u'testing \u200c entity' ---> -<rss> -<channel> -<title>testing ‌ entity</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/http/http_redirect_to_304.xml b/lib/feedparser/tests/http/http_redirect_to_304.xml deleted file mode 100644 index a14cb0d35785a5157d3d5973769f3e507c32354c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_redirect_to_304.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Status: 302 -Header: Location: http://localhost:8097/-/return-304.xml -Description: ensure an http 302 redirect to an http 304 doesn't cause an xml parsing error -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/http_status_301.xml b/lib/feedparser/tests/http/http_status_301.xml deleted file mode 100644 index 12d159ab6c48479986e7b0b317097aa388ae63fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_301.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Status: 301 -Header: Location: http://localhost:8097/tests/http/target.xml -Description: http status 301 (moved permanently) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/http_status_302.xml b/lib/feedparser/tests/http/http_status_302.xml deleted file mode 100644 index 4b15d437de30e03c6a25fffbbcb23f6832d2c61b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_302.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Status: 302 -Header: Location: http://localhost:8097/tests/http/target.xml -Description: http status 302 (found) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/http_status_303.xml b/lib/feedparser/tests/http/http_status_303.xml deleted file mode 100644 index 2dd5d2f731ca62ec21aedcaa7ca5ef6c92f7070d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_303.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Status: 303 -Header: Location: http://localhost:8097/tests/http/target.xml -Description: http status 303 (moved permanently) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/http_status_304.xml b/lib/feedparser/tests/http/http_status_304.xml deleted file mode 100644 index a2eb6953215bff19cfd0f98c5af2f29f51aa0642..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_304.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Header: ETag: "abc123" -Header: Last-Modified: Thu, 21 Apr 2011 19:02:20 GMT -Description: http status 304 (not modified) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <item><title>title 304</title></item> -</feed> diff --git a/lib/feedparser/tests/http/http_status_307.xml b/lib/feedparser/tests/http/http_status_307.xml deleted file mode 100644 index 90074172726ca087ee7b9bd027208844d950c477..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_307.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Status: 307 -Header: Location: http://localhost:8097/tests/http/target.xml -Description: http status 307 (moved permanently) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/http_status_404.xml b/lib/feedparser/tests/http/http_status_404.xml deleted file mode 100644 index 02e08089e6defdfb602fda101f4b73d9e3a70830..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_404.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Header: Status: 404 -Description: http status 404 (not found) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/http_status_9001.xml b/lib/feedparser/tests/http/http_status_9001.xml deleted file mode 100644 index b90dce3bf1589e6186cac95a8bf47c5bbe4a0635..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/http_status_9001.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Header: Status: 9001 -Description: http status 9001 (bogus) -Expect: 0 ---> -<feed xmlns="http://www.w3.org/2005/Atom"></feed> diff --git a/lib/feedparser/tests/http/target.xml b/lib/feedparser/tests/http/target.xml deleted file mode 100644 index a81736b1048efbae345ea760ab9675c4440715df..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/http/target.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: target for http status tests; no actual evaluation -Expect: 1 ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <item><title>target</title></item> -</feed> diff --git a/lib/feedparser/tests/illformed/aaa_illformed.xml b/lib/feedparser/tests/illformed/aaa_illformed.xml deleted file mode 100644 index 044edc24026f8be483133f2fd539ee3f0ba49368..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/aaa_illformed.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: illformed XML -Expect: bozo ---> -<rss version="2.0"> -</rss \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/always_strip_doctype.xml b/lib/feedparser/tests/illformed/always_strip_doctype.xml deleted file mode 100644 index 9fc872454b6c0ddb64b2120e512dd417c730e31e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/always_strip_doctype.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://site.invalid/"> -<!-- -Description: unstripped invalid doctype -Expect: not bozo and feed['title'] == u'found' ---> -<rss> - <channel> - <title>found</title> - </channel> -</rss> diff --git a/lib/feedparser/tests/illformed/chardet/big5.xml b/lib/feedparser/tests/illformed/chardet/big5.xml deleted file mode 100644 index 91c9ec0f7aa6e7d1a31159ca7690dbb8280c97ba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/big5.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: Big5 with no encoding information -Expect: bozo and encoding == 'Big5' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>�m11�몺�����n</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/chardet/eucjp.xml b/lib/feedparser/tests/illformed/chardet/eucjp.xml deleted file mode 100644 index ba288a5e2eaa23baa90ca5346f9d275947f59c7a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/eucjp.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: EUC-JP with no encoding information -Expect: bozo and encoding == 'EUC-JP' ---> -<rss> -<channel> -<item> -<title>������������</title> -<description>��SD�������G�����ͥ졼�����NEO�٤äȥץ쥤���Ƥ��롣 �إ���ȥ�ޥ�٤ϥ��ȥ�⡼�ɤ��ơ��ۤܤ��Ԥ����Ƥ��ޤä��� G������NEO�ϡ���ä����ʤ�ĤĤ��롣 �ʤ�ۤɡ�PS2�äƤ�������������ǽ�Ϥ��ʤ��Ⱥ�����ư���Ƥ��롣 ��ǯ�����٤�ʤ��褦PS3��XBOX360���㤪���ʤ�����������ʳ��ϥ�������ˤʤ��ۤ�˻���������͡ˡ� ����ˤ��Ƥ⡢����äƿ��٤ƤФä���ǥޥ������͡�...</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/chardet/euckr.xml b/lib/feedparser/tests/illformed/chardet/euckr.xml deleted file mode 100644 index 767f3a59eee786b01c5db89e85100782e6eb3b7e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/euckr.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: EUC-KR with no encoding information -Expect: bozo and encoding == 'EUC-KR' ---> -<rss> -<channel> -<item> -<title>EUC-KR ���� TypeKey �ѱ۴г��� ǥ���ϱ�</title> -<description>TypeKey �ý����� UTF-8�� ���ư��µ�, �ű⼭ �ѱ۷� �� �г����� ���� ��쿡, EUC-KR�� �� ������Ÿ�� ���Ͽ��� �����̷�Ʈ�Ǿ� ���۵Ǿ���� �г����� UTF�� �翬�� ������ ��Ÿ����. ���� ���� ��� ����ϴ� �ʸ� ������ �г����� �ѱ۷� ����ϴ� ���� �е鵵 Ÿ��Ű������ �г����� �̷� ���������� �����ڸԱ�� ����� ���� �ִ�....</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/chardet/gb2312.xml b/lib/feedparser/tests/illformed/chardet/gb2312.xml deleted file mode 100644 index b28c101489cd59dbcde0f7e1cf15ab3e9b16feda..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/gb2312.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: GB2312 with no encoding information -Expect: bozo and encoding == 'GB2312' ---> -<rss> -<channel> -<item> -<title>������������ϵ�У�רҵ����</title> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/illformed/chardet/koi8r.xml b/lib/feedparser/tests/illformed/chardet/koi8r.xml deleted file mode 100644 index 8cdea546f3b7427e6465ead3047691a8058fa716..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/koi8r.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: KOI8-R with no encoding information -Expect: bozo and encoding == 'KOI8-R' ---> -<rss> -<channel> -<item> -<title>��� �������� ���������� ����</title> -<description> -��������, ������������, �� ��� ������� ����� ������ �������������, ��� ��� � ��, ��� ����� ��� ����������� ��������. �������� �� �� ���! ��� �� ������ ��������� ��������, ��� - ����! � ���� � ����� ������� ��������. �������� ������ � ������ ���� ���-���... � ������ ��������������� "������ �������" � "������ ��������" ������������ ������ ���� �������� ���� ����� �������, ���� ��������� ������. ���� ����������� �������� ��������� ������ �������� ���������, ������� ��������� "�����������" ������ ���������� ������������.</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/chardet/shiftjis.xml b/lib/feedparser/tests/illformed/chardet/shiftjis.xml deleted file mode 100644 index 28285d9664f619e13c1bc28ad5a2650ba8e1e057..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/shiftjis.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: SHIFT_JIS with no encoding information -Expect: bozo and encoding == 'SHIFT_JIS' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title>DrecomRSS�ɋL�����e�����f����Ȃ��c</title> - <summary>�F�X���ׂĂ���AMT3.2��RSS1.0���T�|�[�g���Ă��Ȃ����Ƃ������B ���Ƃ�...</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/chardet/tis620.xml b/lib/feedparser/tests/illformed/chardet/tis620.xml deleted file mode 100644 index 5dd109056785bb666eb1f8300a99d07d2abc0e14..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/tis620.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: TIS-620 with no encoding information -Expect: bozo and encoding == 'TIS-620' ---> -<rss> -<channel> -<item> -<description>�ӹѡ�ҹ��������ص��ˡ����Ϳ��������觪ҵ� ���� SIPA �����Ѻ MamboHub.com �����¹�ԭ�ء��ҹ���ʹ��� Template ���������û�СǴ &#8220;Mambo Template Contest&#8221; ���� Mambo 4.5.X ����Ѻ���ԧ����䫵� thaiopensource.org ���䫵��ٹ����������Ţ�����âͧ�Ϳ������ Open Source ����ͧ�� ������ö�觼ŧҹ��һ�СǴ�� ���㹹���ͧ����ѷ �ؤ�� ���� �����/��� ��駹�������Դ�͡�� ���ʹѺʹع������������ Mambo ����ͧ��������ǹ����㹡���͡Ẻ��оѲ�����䫵� thaiopensource.org �����Ҥ�</description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/illformed/chardet/windows1255.xml b/lib/feedparser/tests/illformed/chardet/windows1255.xml deleted file mode 100644 index 0ab773f508588042d7e3fd6d8a72574436190ac1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/chardet/windows1255.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: __import__('chardet') -Description: windows-1255 with no encoding information -Expect: bozo and encoding == 'windows-1255' ---> -<rss> -<channel> -<item> -<description> -��� ����� ���� �� ��� ������� ����� �� ��� ����� ��� ���� ���� ����� �� ��� ��������? ���� ����� ���, ������� �� ��� ����� ������ ����� ������ ��� ���� ������� ����� �����. ���, �� ��� �� ��. ��� ����� ����� ������. -</description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/illformed/http_high_bit_date.xml b/lib/feedparser/tests/illformed/http_high_bit_date.xml deleted file mode 100644 index 480d3ae0e866eb18762f7b3982236139ad255833..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/http_high_bit_date.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-7"?> -<!-- -SkipUnless: __import__('codecs').lookup('iso-8859-7') -Header: Content-type: text/xml -Description: non-ASCII characters in date crashes parser -Expect: 1 ---> -<rss version="2.0"> - <channel> - <pubDate>���, 29 ���� 2004 12:53:00 GMT</pubDate> - </channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/non-ascii-tag.xml b/lib/feedparser/tests/illformed/non-ascii-tag.xml deleted file mode 100644 index e07883ec29f552a1ea237858798dd7af5c92c94f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/non-ascii-tag.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: prevent UnicodeEncodeError in microformat code -Expect: bozo and entries[0]['summary'] == u'Some text' ---> -<rss version="2.0"> -<channel> - <item> - <description>Some text</� </description> - </item> -</channel> -</rss> diff --git a/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml b/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml deleted file mode 100644 index 7c09096d3a79bfbb31255d950d88c26e6f80f08a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml +++ /dev/null @@ -1,26 +0,0 @@ -<!-- -Description: empty textinput element confuses regex parser and crashes on setting item title (thinks we're still in textinput) -Expect: bozo ---> -<?xml version="1.0"?> -<rdf:RDF - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns="http://purl.org/rss/1.0/" -> - <channel rdf:about="http://example.com/"> - <items> - <rdf:Seq> - <rdf:li rdf:resource="http://example.com/1" /> - </rdf:Seq> - </items> - <textinput rdf:resource="http://example.com/" /> - </channel> - - <item rdf:about="http://example.com/1"> - <title>crashes here</title> - </item> - - <textinput rdf:about="http://meerkat.oreillynet.com/"> - </textinput> - -</rdf:RDF \ No newline at end of file diff --git a/lib/feedparser/tests/illformed/rss_empty_document.xml b/lib/feedparser/tests/illformed/rss_empty_document.xml deleted file mode 100644 index 6bddcad634fcf933569ab4280c9fcf6d89fb7033..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/rss_empty_document.xml +++ /dev/null @@ -1,4 +0,0 @@ -<!-- -Description: Empty document should be a bozo -Expect: bozo ---> diff --git a/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml b/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml deleted file mode 100644 index 8fe311b95528e1fbac873eb5b033862f1a18d4bc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: Incomplete CDATA block -Expect: bozo ---> -<?xml version="1.0"?> -<rss version="2.0"> -<channel> -<title>can feedparser read this xml</title> -<link>http://adcdefgh.com</link> -<description>feedparser goes into infinite loop while parsing this file</description> -<language>en-us</language> -<copyright>2005-10-28</copyright> -<item><title><![CD diff --git a/lib/feedparser/tests/illformed/undeclared_namespace.xml b/lib/feedparser/tests/illformed/undeclared_namespace.xml deleted file mode 100644 index cffe6f48e9c3a004b7ea7782e80e3edf43c6677a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/illformed/undeclared_namespace.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -SkipUnless: __import__('sys').version.split()[0] >= '2.2.0' -Description: undeclared namespace -Expect: bozo ---> -<rss version="2.0"> -<channel> -<itunes:subtitle>Foo</itunes:subtitle> -</channel> -</rss> diff --git a/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml b/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml deleted file mode 100644 index 0e77f778a903bf3bc5ff25713d0303c9379b1f73..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml +++ /dev/null @@ -1,23 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 2.4.2 VCARD -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT:BEGIN:vCard\\nVERSION:3.0\\nFN:Joe Friday\\nN:Friday\\;Joe\\nTEL\\;TYPE=voi\n ce:+1-919-555-7878\\nEMAIL\\;TYPE=internet:jfriday@host.com\\nTITLE:Area Admi\n nistrator\\, Assistant\\nEND:vCard\\n\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>2.4.2 VCARD</title> -<link rel="alternate" type="text/v-card" href="2-4-2-vcard.vcf" /> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<div class="agent vcard"> - <a class="email fn" href="mailto:jfriday@host.com">Joe Friday</a> - <div class="tel">+1-919-555-7878</div> - <div class="title">Area Administrator, Assistant</div> -</div> -</div> -<p><a rel="next test" href="3-1-1-fn.xhtml">next</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml b/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml deleted file mode 100644 index ffbd28530cf0486465e4c64360971bec7b09dc8e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: unicode character in microformat -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Tantek \xc7elik\nN:\xc7elik;Tantek\nURL:http://tantek.com/\nEND:vCard' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> - <item> - <content:encoded> - <![CDATA[<span class="vcard"><a class="url fn" href="http://tantek.com/">Tantek Çelik</a></span>]]> - </content:encoded> - </item> -</channel> -</rss> diff --git a/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml b/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml deleted file mode 100644 index ded9a64ba5a3bd49a412a47d98709f340caa0979..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.1 FN -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Mr. John Q. Public\\, Esq.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.1 FN</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="fn">Mr. John Q. Public, Esq.</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml deleted file mode 100644 index 4ddbbcb53a889dc2c4fe20cf99cfa934966ec671..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml +++ /dev/null @@ -1,26 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.2 N (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.2 N (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="n"> - <span class="honorific-prefix">Dr.</span> - <span class="given-name">John</span> - <span class="additional-name">Philip</span> - <span class="additional-name">Paul</span> - <span class="family-name">Stevenson</span>, - <span class="honorific-suffix">Jr.</span>, - <span class="honorific-suffix">M.D.</span>, - <span class="honorific-suffix">A.C.P.</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml deleted file mode 100644 index 07c7ebd057bef8a21408a5d925e42964344699ef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml +++ /dev/null @@ -1,30 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.2 N (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.2 N (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="n"> - <span class="honorific-prefixes">Dr.</span> - <span class="given-name">John</span> - <ul class="additional-names"> - <li>Philip</li> - <li>Paul</li> - </ul> - <span class="family-name">Stevenson</span>, - <ul class="honorific-suffixes"> - <li>Jr.</li> - <li>M.D.</li> - <li>A.C.P.</li> - </ul> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml deleted file mode 100644 index 69efcb182ef51e68cfb3719311d6a0f02f39e018..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml +++ /dev/null @@ -1,23 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.2 N -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Public;John;Quinlan;Mr.;Esq.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.2 N</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="n"> - <span class="honorific-prefixes">Mr.</span> - <span class="given-name">John</span> - <span class="additional-names">Quinlan</span> - <span class="family-name">Public</span>, - <span class="honorific-suffixes">Esq.</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml deleted file mode 100644 index 5c4087d2485f7a774fcad5e74fe71bb1c9a9d1be..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml +++ /dev/null @@ -1,23 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.2 N -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Public;John;Quinlan;Mr.;Esq.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.2 N</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="n"> - <span class="honorific-prefix">Mr.</span> - <span class="given-name">John</span> - <span class="additional-name">Quinlan</span> - <span class="family-name">Public</span>, - <span class="honorific-suffix">Esq.</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml deleted file mode 100644 index d2423183b9e740d45db83f71fd293cb6df0464ac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.3 NICKNAME (example 2, plural) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Jim,Jimmie\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.3 NICKNAME (example 2, plural)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<ul class="nickname"><li>Jim</li><li>Jimmie</li></ul> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml deleted file mode 100644 index 13cb9890d8825fb870bd5125ff2ebc13f70df359..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.3 NICKNAME (example 2, singular) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Jim,Jimmie\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.3 NICKNAME (example 2, singular)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="nickname">Jim</span>, -<span class="nickname">Jimmie</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml deleted file mode 100644 index 84b7f1b665084eeaaccef310b42d2b903a4a662d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.3 NICKNAME -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Robbie\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.3 NICKNAME</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="nickname">Robbie</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml b/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml deleted file mode 100644 index 25e62beba1a0316a3cd38cc4fd7028ef95802e4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.4 PHOTO inline -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nPHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzEL\n MAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW\n 9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.4 PHOTO inline</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<img class="photo" src="data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0" alt="" /> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml b/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml deleted file mode 100644 index 310284f18a4de2eb9aeae79263ea01a5d781a5b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.4 PHOTO -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nPHOTO;VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.4 PHOTO</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<img class="photo" src="http://www.abc.com/pub/photos/jqpublic.gif" alt="" /> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml deleted file mode 100644 index f6b020d653a0ecae64090207139002b01afa6a8d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.5 BCARD (example 2) -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1993-10-15T23:10:00Z\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.5 BCARD (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<abbr class="bday" title="1993-10-15T23:10:00Z">Oct 15, 1993</abbr> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml deleted file mode 100644 index 3ff0eb3f1d2c55f0c6c0fb7a8ad2a9ececaf70a5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.5 BCARD (example 3) -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1987-09-27T14:30:00Z\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.5 BCARD (example 3)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<abbr class="bday" title="1987-09-27T08:30:00-06:00">Sept 9, 1987</abbr> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml deleted file mode 100644 index 08a2ff3d93f6bc81d437efb9e7d95261589efd66..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.1.5 BCARD -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1996-04-15T00:00:00Z\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.1.5 BCARD</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<abbr class="bday" title="1996-04-15">April 15, 1996</abbr> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml b/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml deleted file mode 100644 index b9b37a008f473b4894bdab81384cc77cfecb71ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml +++ /dev/null @@ -1,25 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.2.1 ADR -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.2.1 ADR</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<div class="adr"> - <abbr class="type" title="dom">US</abbr> - <span class="type">home</span> address, for - <abbr class="type" title="postal">mail</abbr> and - <abbr class="type" title="parcel">shipments</abbr>: - <div class="street-address">123 Main Street</div> - <span class="locality">Any Town</span>, <span class="region">CA</span>, - <span class="postal-code">91921-1234</span> -</div> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml b/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml deleted file mode 100644 index 68624e070bcd772ea86ab0f426f669b6b9bdd0e7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml +++ /dev/null @@ -1,30 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.2.2 LABEL -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public, Esq.\nMail Drop: TNE QB\n \n123 Main Street\nAny Town, CA 91921-1234\nU.S.A.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.2.2 LABEL</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -Please use the following address label for -<div class="label"> - <abbr class="type" title="dom">local delivery</abbr> - <abbr class="type" title="home">to my home</abbr> - <abbr class="type" title="postal">of mail</abbr> - <abbr class="type" title="parcel">and packages:</abbr> -<pre> -Mr.John Q. Public, Esq. -Mail Drop: TNE QB -123 Main Street -Any Town, CA 91921-1234 -U.S.A. -</pre> -</div> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml b/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml deleted file mode 100644 index 0c59d044df05c2a01a1828f977fafad3b8d98ce9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml +++ /dev/null @@ -1,23 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.3.1 TEL -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTEL;TYPE=pref,work,voice,msg:+1-213-555-1234\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.3.1 TEL</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="tel"> - <abbr class="type" title="pref">my</abbr> - <span class="type">work</span> - <abbr class="type" title="voice">phone</abbr>, with - <abbr class="type" title="msg">voicemail</abbr>: - <span class="value">+1-213-555-1234</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml deleted file mode 100644 index 7a2093ec90d0ffc57b95e49940b5a9a610233deb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.3.2 EMAIL (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet:jdoe@isp.net\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.3.2 EMAIL (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<a class="email" href="mailto:jdoe@isp.net">email jdoe</a> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml deleted file mode 100644 index 6864e1e37a3497b44fef92ffe72db0a295668e12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.3.2 EMAIL (example 3) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet,pref:jane_doe@abc.com\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.3.2 EMAIL (example 3)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<a class="email" href="mailto:jane_doe@abc.com"> - <abbr class="type" title="pref">preferred</abbr> - email for jane_doe -</a> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml deleted file mode 100644 index 6e2715e08ff645468fbb03978bd12023c1a0221a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.3.2 EMAIL -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet:jqpublic@xyz.dom1.com\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.3.2 EMAIL</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<a class="email" href="mailto:jqpublic@xyz.dom1.com">email jqpublic</a> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml b/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml deleted file mode 100644 index 0f71191dae30ac9cc0a23bef6bb3424287d73d48..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.3.3 MAILER -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nMAILER:PigeonMail 2.1\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.3.3 MAILER</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -Jane Doe uses <span class="mailer">PigeonMail 2.1</span> for email. -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml b/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml deleted file mode 100644 index 8ac539602d33d6dcadcf0d80a90d50a330fcf016..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.4.1 TZ (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTZ:-05:00\\; EST\\; Raleigh/North America\\;This example has a single value\\, \n not a structure text value.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.4.1 TZ (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<abbr class="tz" - title="-05:00; EST; Raleigh/North America;This example has a single value, not a structure text value."> - EST -</abbr> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml b/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml deleted file mode 100644 index 999a6025faae58b89b76fd51ebeff8ecc0c98338..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.4.1 TZ -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTZ:-05:00\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.4.1 TZ</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="tz">-05:00</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml b/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml deleted file mode 100644 index b62cff56204824bbcb4da4af682851a766203360..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.4.2 GEO -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nGEO:37.386013;-122.082932\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.4.2 GEO</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="geo"> - <span class="latitude">37.386013</span>, - <span class="longitude">-122.082932</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml b/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml deleted file mode 100644 index 2831831a64a9e18692288666663234a051bc82bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.1 TITLE -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTITLE:Director\\, Research and Development\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.1 TITLE</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="title">Director, Research and Development</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml b/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml deleted file mode 100644 index bc11530b0c02f7a7f89b3573398521e9f2a2ec7c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.2 ROLE -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nROLE:Programmer\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.2 ROLE</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="role">Programmer</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml b/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml deleted file mode 100644 index 4ad497a8ffa81ac91085c2fbf613ba8ef29c3e55..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.3 LOGO (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELM\n AkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9\n uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.3 LOGO (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<img class="logo" src="data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0" alt="" /> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml b/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml deleted file mode 100644 index 6e5f7bd76da90a827a237b1a1c14ae4e5dcacc41..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.3 LOGO -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLOGO;VALUE=uri:http://www.abc.com/pub/logos/abccorp.jpg\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.3 LOGO</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<img class="logo" src="http://www.abc.com/pub/logos/abccorp.jpg" alt="my logo" /> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml b/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml deleted file mode 100644 index 329eae1c840c86464a400fa5f3fc178a47c4d568..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.4 AGENT (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT:BEGIN:vCard\\nVERSION:3.0\\nFN:Susan Thomas\\nN:\\nTEL\\;TYPE=voice:+1-919\n -555-1234\\nEMAIL\\;TYPE=internet:sthomas@host.com\\nEND:vCard\\n\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.4 AGENT (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="agent vcard"> - <a class="email fn n" href="mailto:sthomas@host.com">Susan Thomas</a>, - <span class="tel">+1-919-555-1234</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml b/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml deleted file mode 100644 index 8e53253c4d98fba084014d089501deb1da062b9f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.4 AGENT -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT;VALUE=uri:cid:JQPUBLIC.part3.960129T083020.xyzMail@host3.com\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.4 AGENT</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<a class="agent" href="cid:JQPUBLIC.part3.960129T083020.xyzMail@host3.com">JQPUBLIC</a> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml b/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml deleted file mode 100644 index 8f2d7b82dedfd03e7aae1d577d8701569ef99a72..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml +++ /dev/null @@ -1,21 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.5.5 ORG -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nORG:ABC\\, Inc.;North American Division;Marketing\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.5.5 ORG</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="org"> - <span class="organization-name">ABC, Inc.</span>, - <span class="organization-unit">North American Division</span>, - <span class="organization-unit">Marketing</span>, -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml deleted file mode 100644 index 93908196d35173ab12650033d954f437a2cf7a23..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml +++ /dev/null @@ -1,22 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.1 CATEGORIES (example 2, plural) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.1 CATEGORIES (example 2, plural)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<ul class="categories"> - <li>INTERNET</li> - <li>IETF</li> - <li>INDUSTRY</li> - <li>INFORMATION TECHNOLOGY</li> -</ul> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml deleted file mode 100644 index fa2ac06631396403e741b1e84bfe1ec40a769c98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.1 CATEGORIES (example 2, singular) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.1 CATEGORIES (example 2, singular)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="category">INTERNET</span>, -<span class="category">IETF</span>, -<span class="category">INDUSTRY</span>, -<span class="category">INFORMATION TECHNOLOGY</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml deleted file mode 100644 index 68382508fdac08f65b12b2ad1e2ff3009c12e942..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.1 CATEGORIES -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:TRAVEL AGENT\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.1 CATEGORIES</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="categories">TRAVEL AGENT</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml b/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml deleted file mode 100644 index 1f37e624b7213dd93be977cc71b8ff81a620938c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.2 NOTE -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNOTE:This fax number is operational 0800 to 1715 EST\\, Mon-Fri.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.2 NOTE</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<p class="note">This fax number is operational 0800 to 1715 EST, Mon-Fri.</p> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml deleted file mode 100644 index 24fb039700a781ad550cf2715c90b5c6a1d27fc0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.4 REV (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nREV:1997-11-15\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.4 REV (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<abbr class="rev" title="1997-11-15">Updated: November 15</abbr> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml b/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml deleted file mode 100644 index bd6daf93bc67613e95a438fe8c4489d7c6c5f4e8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.4 REV -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nREV:1995-10-31T22:27:10Z\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.4 REV</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<abbr class="rev" title="1995-10-31T22:27:10Z">Updated: 10/31 10:27p</abbr> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml deleted file mode 100644 index ca80cd8633ee8939cba5c5cb7ced9a595565f47f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml +++ /dev/null @@ -1,21 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.5 SORT-STRING (example 2) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Robert Pau Shou Chang\nN:Pau;Shou Chang;Robert\nSORT-STRING:Pau\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.5 SORT-STRING (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="fn n"> - <span class="additional-names">Robert</span> - <span class="family-name sort-string">Pau</span> - <span class="given-name">Shou Chang</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml deleted file mode 100644 index 72e36ee990c61fd2757f9c77f220a6de4c54e337..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml +++ /dev/null @@ -1,19 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.5 SORT-STRING (example 3) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Osamu Koura\nN:Koura;Osamu\nSORT-STRING:Koura\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.5 SORT-STRING (example 3)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="fn"> - Osamu <span class="sort-string">Koura</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml deleted file mode 100644 index 00857ff7447d4f5ba7a3f33d9ba3cb72f38b9915..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml +++ /dev/null @@ -1,25 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.5 SORT-STRING (example 4) -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Oscar del Pozo\nN:del Pozo Triscon;Oscar\nSORT-STRING:Pozo\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.5 SORT-STRING (example 4)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="n"> - <span class="fn"> - <span class="given-name">Oscar</span> - del <span class="sort-string">Pozo</span> - </span> - <span class="family-name" style="display:none"> - del Pozo Triscon - </span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml deleted file mode 100644 index 715e4100f3b063d12856412366bf743f7871cb01..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml +++ /dev/null @@ -1,19 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.5 SORT-STRING (example 5) -Expect: not bozo and entries[0].vcard == u"BEGIN:vCard\nVERSION:3.0\nFN:Christine d'Aboville\nN:d'Aboville;Christine\nSORT-STRING:Aboville\nEND:vCard" ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.5 SORT-STRING (example 5)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="fn"> - Christine d'<span class="sort-string">Aboville</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml deleted file mode 100644 index a5ee5c16134bd9d1bb69b30f6ab5cf27fdbbf7de..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml +++ /dev/null @@ -1,27 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.5 SORT-STRING -Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Rene van der Harten\nN:van der Harten;Rene;J.;Sir;R.D.O.N.\nSORT-STRING:Harten\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.5 SORT-STRING</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="n"> - <span class="honorific-prefixes">Sir</span> - <span class="fn"> - <span class="given-name">Rene</span> - <span class="family-name"> - van der <span class="sort-string">Harten</span> - </span> - </span> - (<span class="additional-names">J.</span>), - <span class="honorific-suffixes">R.D.O.N.</span> -</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml deleted file mode 100644 index 29e138de731ab1d0d7f1fc430f07af13681bed12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.6 SOUND (example 2) -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nSOUND;ENCODING=b;TYPE=BASIC:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzE\n LMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0a\n W9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.6 SOUND (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<object class="sound" -data="data:audio/basic;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0"> -pronounciation -</object> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml b/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml deleted file mode 100644 index 4c130bee8c21217d2adc31bdf1cbc54ca5c917b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.6 SOUND -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nSOUND;TYPE=BASIC;VALUE=uri:cid:JOHNQPUBLIC.part8.19960229T080000.xyzMail@ho\n st1.com\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.6 SOUND</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<object class="sound" type="audio/basic" - data="cid:JOHNQPUBLIC.part8.19960229T080000.xyzMail@host1.com"> -pronounciation of "JOHN Q PUBLIC" -</object> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml b/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml deleted file mode 100644 index da10a9d18a43d1a56c645bd11b52d6b5d0f0dcaa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.7 UID -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nUID:19950401-080045-40000F192713-0052\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.7 UID</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -Unique id: - <span class="uid">19950401-080045-40000F192713-0052</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml b/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml deleted file mode 100644 index dc1a1c6ec4befc03d3fc84f3496fa8eecafb19b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.6.8 URL -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nURL:http://www.swbyps.restaurant.french/~chezchic.html\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.6.8 URL</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<a class="url" href="http://www.swbyps.restaurant.french/~chezchic.html">Chez Chic</a> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml deleted file mode 100644 index 2ddcfa2d777606b85b22a35da9eb8740dbac91f6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.7.1 CLASS (example 2) -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:PRIVATE\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.7.1 CLASS (example 2)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="class">PRIVATE</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml deleted file mode 100644 index 3be1a8896d790f117c281469a544bec3a1943cf9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.7.1 CLASS (example 3) -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:CONFIDENTIAL\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.7.1 CLASS (example 3)</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="class">CONFIDENTIAL</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml deleted file mode 100644 index 795de978693d608487481932ea33745d0aa0c540..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.7.1 CLASS -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:PUBLIC\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.7.1 CLASS</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<span class="class">PUBLIC</span> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml b/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml deleted file mode 100644 index c0fc56f81ecbd1efd52878ca6603b2c7c4380b02..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 3.7.2 KEY -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nKEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMC\n VVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQ\n LExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XD\n Tk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1\n OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzM\n SEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3d\n lczBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyr\n dN2dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+EI\n BAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9w0BAQQFA\n AOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNj\n ZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7UZH\n PYVUaSgVttImOHZIKi4hlPXBOhcUQ==\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>3.7.2 KEY</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<object class="key" - data="data:application/octet-stream;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ=="> -Key -</object> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/hcard/7-authors.xml b/lib/feedparser/tests/microformats/hcard/7-authors.xml deleted file mode 100644 index 5c134fe12aaa0b61babff1d9a6460a7a2f727c41..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/hcard/7-authors.xml +++ /dev/null @@ -1,64 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: 7. Authors -Expect: not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nFN:Frank Dawson\nN:Dawson;Frank\nADR;TYPE=work,postal,parcel:;;6544 Battleford Drive;Raleigh;NC;27613-3502;U\n .S.A.\nTEL;TYPE=WORK,VOICE,MSG:+1-919-676-9515\nTEL;TYPE=WORK,FAX:+1-919-676-9564\nEMAIL;TYPE=internet,pref:Frank_Dawson@Lotus.com\nEMAIL;TYPE=internet:fdawson@earthlink.net\nORG:Lotus Development Corporation\nURL:http://home.earthlink.net/~fdawson\nEND:vCard\nBEGIN:vCard\nVERSION:3.0\nFN:Tim Howes\nN:Howes;Tim\nADR;TYPE=work:;;501 E. Middlefield Rd.;Mountain View;CA;94043;U.S.A.\nTEL;TYPE=WORK,VOICE,MSG:+1-415-937-3419\nTEL;TYPE=WORK,FAX:+1-415-528-4164\nEMAIL;TYPE=internet:howes@netscape.com\nORG:Netscape Communications Corp.\nEND:vCard' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title>7. Authors</title> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<div class="vcard"> -<a class="url fn" href="http://home.earthlink.net/~fdawson">Frank Dawson</a> -<div class="org">Lotus Development Corporation</div> -<div class="adr"> - <span class="type">work</span> address -(<abbr class="type" title="postal">mail</abbr> and - <abbr class="type" title="parcel">packages</abbr>): - <div class="street-address">6544 Battleford Drive</div> - <span class="locality">Raleigh</span> - <span class="region">NC</span> - <span class="postal-code">27613-3502</span> - <div class="country-name">U.S.A.</div> -</div> -<div class="tel"> - <span class="value">+1-919-676-9515</span> -(<abbr class="type" title="WORK">w</abbr>, - <abbr class="type" title="VOICE">v</abbr><abbr class="type" title="MSG">m</abbr>) -</div> -<div class="tel"> - <span class="value">+1-919-676-9564</span> -(<abbr class="type" title="WORK">w</abbr><abbr class="type" title="FAX">f</abbr>) -</div> -<a class="email" href="mailto:Frank_Dawson@Lotus.com"> - <span class="type">pref</span>erred email -</a>, -<a class="email" href="mailto:fdawson@earthlink.net"> - alternate email -</a> -</div> -<div class="vcard"> -<a class="email fn" href="mailto:howes@netscape.com">Tim Howes</a> -<div class="org">Netscape Communications Corp.</div> -<div class="adr"> - <span class="type">work</span> address: - <div class="street-address">501 E. Middlefield Rd.</div> - <span class="locality">Mountain View</span>, - <span class="region">CA</span> - <span class="postal-code">94043</span> - <div class="country-name">U.S.A.</div> -</div> -<div class="tel"> - <span class="value">+1-415-937-3419</span> -(<abbr class="type" title="WORK">w</abbr>, - <abbr class="type" title="VOICE">v</abbr><abbr class="type" title="MSG">m</abbr>) -</div> -<div class="tel"> - <span class="value">+1-415-528-4164</span> -(<abbr class="type" title="WORK">w</abbr><abbr class="type" title="FAX">f</abbr>) -</div> -</div> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml deleted file mode 100644 index bc86bacf04afef4a8fd5395ec36ceec9c0906cd2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/movie.mp4' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml deleted file mode 100644 index 02ba14fbb59d9b3c7c5f2ccb156c2a2857991261..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.avi' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.avi">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml deleted file mode 100644 index 069e3abb49307c2dff7f908546d388aa49e6b320..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.bin' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.bin">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml deleted file mode 100644 index ad3e8721d475b5c307c4e89eb46c5023c81dc1d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.bz2' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.bz2">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml deleted file mode 100644 index 602638eaeef80321583b1b448586d84f48d78e20..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.deb' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.deb">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml deleted file mode 100644 index d0e74b20eba8a4376306af01e7562a33f603f61a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.dmg' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.dmg">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml deleted file mode 100644 index 73fd39f21c9443a5f8d942ac8739841d33be713c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.exe' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.exe">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml deleted file mode 100644 index 9c95cdb8109d51f8ba0353d097aae4b7e63a03b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.gz' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.gz">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml deleted file mode 100644 index 4047a729d0bcf52433e7029113881a2c40825df2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.hqx' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.hqx">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml deleted file mode 100644 index 322125ea933abfa618b21fd1b5a17aab37a0cefd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.img' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.img">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml deleted file mode 100644 index 683add447f3cb5f4ed01814793bb8ddeef087e15..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.iso' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.iso">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml deleted file mode 100644 index e39f8325c6b7cf74f45c145d16c1869d14006cf5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.jar' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.jar">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml deleted file mode 100644 index 84fc77825121166ec0fb09fecfe7dfb7b547fd25..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.m4a' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.m4a">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml deleted file mode 100644 index b3dcd9091b1a5130d2f7dae9e53e61087fe854b3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.m4v' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.m4v">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml deleted file mode 100644 index 3d3c6c70bf8b56da8be94ac936ae42089dd8ed0f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp2' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.mp2">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml deleted file mode 100644 index c67a4143998698005dda7f246d3697b0278cfcb6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp3' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.mp3">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml deleted file mode 100644 index e10bb622b063d6b021c00366a36f83725ad62fd1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp4' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.mp4">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml deleted file mode 100644 index fcf83d2c38e79f3cdb03a42af7689408b3a45eb9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.msi' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.msi">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml deleted file mode 100644 index 4547dda097ee17ed2a5cf47abdab435e323e11c1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.ogg' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.ogg">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml deleted file mode 100644 index 81a56ee0e431d4b55939da0a71bbc4e31023d559..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.rar' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.rar">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml deleted file mode 100644 index e635cf2468a2b828485790e8decfc5c5cfa50751..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.rpm' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.rpm">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml deleted file mode 100644 index fb3845a7a14a8cf01a66eea4f31aad8a381e4274..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.sit' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.sit">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml deleted file mode 100644 index 5ac2cb294ad8e8894ba7d5067b4ada0973e6a3ad..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.sitx' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.sitx">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml deleted file mode 100644 index 1ad3e78e2cf838ce7f0e6b5691413b8bc62396e9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tar' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.tar">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml deleted file mode 100644 index c53147bdcc4a7fd9b1edc38c5fce1b703e428c82..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tbz2' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.tbz2">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml deleted file mode 100644 index 676fb48ab3c32b54b7f7ccd18801cf958b31dec8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tgz' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.tgz">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml deleted file mode 100644 index 626d6ba47df0cd12f84a9de5a7b607c8e1711de1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.wma' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.wma">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml deleted file mode 100644 index 4f1931b2b531ac78cdddc42221bb235ad94922d8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.wmv' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.wmv">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml deleted file mode 100644 index ed2bc37ac85725e9719aa1e7edb23af7178cf148..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.z' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.z">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml deleted file mode 100644 index ba6759c2f3a4c6b3a230b850fa1f79e886b951d3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.zip' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/enclosure.zip">click here</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml deleted file mode 100644 index 1ccbe63a67f2ae5998c3e302d9ab2b514b8f9ecd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-enclosure.php' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/generate-enclosure.php" type="application/ogg">my song</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml deleted file mode 100644 index 908e9016284dacd1fe3d01d6a6ad9544e4326e08..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-audio.php' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/generate-audio.php" type="audio/aiff">my movie</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml deleted file mode 100644 index 6ac974795df8ad299da5807057d1e3b888ddb046..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-movie.php' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/generate-movie.php" type="video/mpeg">my movie</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml deleted file mode 100644 index 0cf5716f88ce6c3e05df2e9c506739c8920414a9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: ensure that isProbablyDownloadable() will not throw ValueError on a bad URL -Expect: not bozo ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://bad]test">isProbablyDownloadable crasher</a></p> -</div> -</content> -</entry> -</feed> diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml deleted file mode 100644 index 18a5fd469f0f7e10ec47fbaf471046799e88aa16..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and not entries[0].has_key('enclosures') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/generate-enclosure.php">my song</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml deleted file mode 100644 index b5d2d3a7f9e7dc3101674b0fe942003b9c628bcf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and not entries[0].has_key('enclosures') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a href="http://example.com/generate-enclosure.php" type="application/atom+xml">my song</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml deleted file mode 100644 index ba812b5caa9f02198d41c2668bafc4ecb563924c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['title'] == u'my movie' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg" title="my movie"></a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml deleted file mode 100644 index b69d85e76b62baf3c90c9e3aac550807af63f2b4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['title'] == u'my movie' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml deleted file mode 100644 index 79c2a713204f1667a97fa878a102951026896e25..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['title'] == u'real title' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg" title="real title">my movie</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml deleted file mode 100644 index bc6ced7ed7addd5400ca378304f46a00efc38da1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='enclosure' link -Expect: not bozo and entries[0]['enclosures'][0]['type'] == u'video/mpeg' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml deleted file mode 100644 index 62ae4950de71d562c1575b28913ffc4839e6ec8f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains duplicate rel='tag' link -Expect: not bozo and len(entries[0]['tags']) == 1 ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<category term="tech" scheme="http://del.icio.us/tag/" label="Technology"/> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml deleted file mode 100644 index 81aacadb07f2ac3cbc93dec6087e0fbf133df303..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='tag' link -Expect: not bozo and entries[0]['tags'][0]['label'] == u'Technology' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml deleted file mode 100644 index 50a115e273dac24f1b1e573953d3ca53609028cd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='tag' link -Expect: not bozo and entries[0]['tags'][0]['scheme'] == u'http://del.icio.us/tag/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml deleted file mode 100644 index c7876530379b2184b0c148ae9eec97d41b69d0ac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='tag' link -Expect: not bozo and entries[0]['tags'][0]['term'] == u'tech' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml deleted file mode 100644 index 56f75e2b29e991a738974e4c01311ff4db4b0ffc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains rel='tag' link -Expect: not bozo and entries[0]['tags'][0]['term'] == u'tech' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="tag" href="http://del.icio.us/tag/tech/">Technology</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml b/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml deleted file mode 100644 index aef6e37627865bb215d95ed105923a0267895438..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'acquaintance'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="acquaintance" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_brother.xml b/lib/feedparser/tests/microformats/xfn/xfn_brother.xml deleted file mode 100644 index eb201bf0abfeef81be8ec6bd404c6140948ef759..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_brother.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'brother'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="brother" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_child.xml b/lib/feedparser/tests/microformats/xfn/xfn_child.xml deleted file mode 100644 index 507d91bb1d1c441319a4551d9a2e37085516a698..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_child.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'child'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="child" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml b/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml deleted file mode 100644 index 10267a9a47857a6af59d92d3ae4786529f40891b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'co-resident'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="co-resident" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml b/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml deleted file mode 100644 index c385aeec1609ad7e7990f2141656b50360144e39..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'co-worker'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="co-worker" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml b/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml deleted file mode 100644 index 9a8ca3b1c0b3234e24d89890ec99f6232938a0bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'colleague'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="colleague" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_contact.xml b/lib/feedparser/tests/microformats/xfn/xfn_contact.xml deleted file mode 100644 index 8ba482e62e65a0cd37929ccc14ad5b7c87220750..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_contact.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'contact'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="contact" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml b/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml deleted file mode 100644 index 64ecec5edab0ea2e8e367b02a665d847e3cd2da0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'coresident'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="coresident" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml b/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml deleted file mode 100644 index 9217d400416ce304343cefbed5124ced51ec8e07..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'coworker'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_crush.xml b/lib/feedparser/tests/microformats/xfn/xfn_crush.xml deleted file mode 100644 index f5675382a073696d9a35614643e82762d96b2783..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_crush.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'crush'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="crush" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_date.xml b/lib/feedparser/tests/microformats/xfn/xfn_date.xml deleted file mode 100644 index 1048765010217b22cca7a35619dc673329536e6a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_date.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'date'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="date" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_friend.xml b/lib/feedparser/tests/microformats/xfn/xfn_friend.xml deleted file mode 100644 index b70aa2a360b5169501b8c8c4d906bad7fe77bba3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_friend.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'friend'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="friend" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_href.xml b/lib/feedparser/tests/microformats/xfn/xfn_href.xml deleted file mode 100644 index e05a65914126b5561784467a112eaa2550617e6a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_href.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['href'] == u'http://example.com/johndoe' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_husband.xml b/lib/feedparser/tests/microformats/xfn/xfn_husband.xml deleted file mode 100644 index e68275bc6dfc97f9d8b590cd2dac8fbbf66474df..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_husband.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'husband'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="husband" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_kin.xml b/lib/feedparser/tests/microformats/xfn/xfn_kin.xml deleted file mode 100644 index 1d07e07966e9cb4fccbc2738825689b83f643541..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_kin.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'kin'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="kin" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_me.xml b/lib/feedparser/tests/microformats/xfn/xfn_me.xml deleted file mode 100644 index cffd9fdedb2a5e2914acbbc4043363c2fa6f8a25..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_me.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'me'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="me" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_met.xml b/lib/feedparser/tests/microformats/xfn/xfn_met.xml deleted file mode 100644 index f8df859efe7c75c1471581c57cff486e546d8222..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_met.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'met'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="met" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml b/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml deleted file mode 100644 index 9574495ded268b60af41233a93d259f54896d5f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'coworker', u'friend'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="coworker friend" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_muse.xml b/lib/feedparser/tests/microformats/xfn/xfn_muse.xml deleted file mode 100644 index 7832f542bc3523cdf96d0bc5acdb4dc96cb447fd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_muse.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'muse'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="muse" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_name.xml b/lib/feedparser/tests/microformats/xfn/xfn_name.xml deleted file mode 100644 index cd1e9c377000b265261f37a13229470073a27955..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_name.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['name'] == u'John Doe' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml b/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml deleted file mode 100644 index 6b1b1aae24cbdfa891af80623f0dd877df3e75cf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'neighbor'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="neighbor" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_parent.xml b/lib/feedparser/tests/microformats/xfn/xfn_parent.xml deleted file mode 100644 index 13739d324cf85f44f9ddc0cd5e69d602a4c11ba6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_parent.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'parent'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="parent" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_relative.xml b/lib/feedparser/tests/microformats/xfn/xfn_relative.xml deleted file mode 100644 index 06e5e37143a3af2bd2e3c88cbfe23f5cb3d1071e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_relative.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'relative'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="relative" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml b/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml deleted file mode 100644 index 7c12ed3cd9ff0db3687a6ca0f492e8f9da32b297..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'sibling'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="sibling" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sister.xml b/lib/feedparser/tests/microformats/xfn/xfn_sister.xml deleted file mode 100644 index 411ac9832ea437ec4bfbea9a966a855fa4d80b60..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_sister.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'sister'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="sister" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml b/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml deleted file mode 100644 index 157f26a54256be7d4517fe61850f1cce0231401f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'spouse'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="spouse" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml b/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml deleted file mode 100644 index 427156123f3c98db5cc3389eec54d439d96a7469..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'sweetheart'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="sweetheart" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/microformats/xfn/xfn_wife.xml b/lib/feedparser/tests/microformats/xfn/xfn_wife.xml deleted file mode 100644 index 529b7af91bcf3353a73a886b6913ac831cba05f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/microformats/xfn/xfn_wife.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: content contains XFN link -Expect: not bozo and entries[0]['xfn'][0]['relationships'] == [u'wife'] ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"> -<div xmlns="http://www.w3.org/1999/xhtml"> -<p><a rel="wife" href="http://example.com/johndoe">John Doe</a></p> -</div> -</content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/amp/amp01.xml b/lib/feedparser/tests/wellformed/amp/amp01.xml deleted file mode 100644 index 3ca45835355386c2f67bd8c9a8851e724eb9b5b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp01.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 1 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&#38;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp02.xml b/lib/feedparser/tests/wellformed/amp/amp02.xml deleted file mode 100644 index 86e049f597110fb20c068a985eb38f4512e030c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp02.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 2 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&#x26;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp03.xml b/lib/feedparser/tests/wellformed/amp/amp03.xml deleted file mode 100644 index 8fe783013f4db0b47348a5b8766dd61f21f5179a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp03.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 3 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>&</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp04.xml b/lib/feedparser/tests/wellformed/amp/amp04.xml deleted file mode 100644 index 7df221df0cb40d0aa201048c15e311396ad228fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp04.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 4 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&amp;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp05.xml b/lib/feedparser/tests/wellformed/amp/amp05.xml deleted file mode 100644 index 4a8a46e323519c627c6222b7677322c3c4d10061..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp05.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 5 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&#38;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp06.xml b/lib/feedparser/tests/wellformed/amp/amp06.xml deleted file mode 100644 index 5a59cd4ddbae5e5a881bccebf0d5fad5b51ab3c2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp06.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 6 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&#x26;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp07.xml b/lib/feedparser/tests/wellformed/amp/amp07.xml deleted file mode 100644 index a324d4ba17a26338d3e28b16e64093eb4a18d61e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp07.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 7 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>&</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp08.xml b/lib/feedparser/tests/wellformed/amp/amp08.xml deleted file mode 100644 index 42ac2c70c3c58d150c0ca0ce76b91a194db5afd0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp08.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 8 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&amp;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp09.xml b/lib/feedparser/tests/wellformed/amp/amp09.xml deleted file mode 100644 index b634a90fd126012470be86635a7d02d86c122f59..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp09.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 9 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&#38;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp10.xml b/lib/feedparser/tests/wellformed/amp/amp10.xml deleted file mode 100644 index 87a050c522d0fc7ec4eadd9e42676b051b012a19..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp10.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 10 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&#x26;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp11.xml b/lib/feedparser/tests/wellformed/amp/amp11.xml deleted file mode 100644 index 2b8d57447501caa5afe8b95dfaa7ca7714be757f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp11.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 11 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>&</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp12.xml b/lib/feedparser/tests/wellformed/amp/amp12.xml deleted file mode 100644 index ff9622c7776ebce89354a3ac92a44fb7c8d71c0c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp12.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 12 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">&amp;</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp13.xml b/lib/feedparser/tests/wellformed/amp/amp13.xml deleted file mode 100644 index 486ce4858a83c74d7cc565313d3fefd09c425450..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp13.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 13 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#38;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp14.xml b/lib/feedparser/tests/wellformed/amp/amp14.xml deleted file mode 100644 index fc60ae17dc50c36607828e580e32d9b5f3803ef0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp14.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 14 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#x26;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp15.xml b/lib/feedparser/tests/wellformed/amp/amp15.xml deleted file mode 100644 index f2fecbdd475ffa61893682158ba99162d8aa2ccc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp15.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 15 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&amp;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp16.xml b/lib/feedparser/tests/wellformed/amp/amp16.xml deleted file mode 100644 index 92ab7e45ba5361633d1b300d3163bc28727c4dc0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp16.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 16 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#38;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp17.xml b/lib/feedparser/tests/wellformed/amp/amp17.xml deleted file mode 100644 index 1a4f2fa0131d8ad9ecc96b8d8a3537f4be899bcd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp17.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 17 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#x26;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp18.xml b/lib/feedparser/tests/wellformed/amp/amp18.xml deleted file mode 100644 index dda68b05a91736b723218dedbddddc50bfc9bd77..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp18.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 18 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&amp;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp19.xml b/lib/feedparser/tests/wellformed/amp/amp19.xml deleted file mode 100644 index 168e7446be973e70f1fc86ddafb91fd043b59525..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp19.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 19 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#38;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp20.xml b/lib/feedparser/tests/wellformed/amp/amp20.xml deleted file mode 100644 index d105aba1baa2a41237ca52b9d5f14ed0c5ea0a63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp20.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 20 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#x26;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp21.xml b/lib/feedparser/tests/wellformed/amp/amp21.xml deleted file mode 100644 index 15b987d8e8c825a852c21a2e70b5c1bc1d58e6cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp21.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 21 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&amp;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp22.xml b/lib/feedparser/tests/wellformed/amp/amp22.xml deleted file mode 100644 index a54b0aa6e3e5563300b8fb29cf7afac0c62e9746..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp22.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 22 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#38;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp23.xml b/lib/feedparser/tests/wellformed/amp/amp23.xml deleted file mode 100644 index c4b09b534383e922718af4cb6811bbc1bc39d951..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp23.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 23 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#x26;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp24.xml b/lib/feedparser/tests/wellformed/amp/amp24.xml deleted file mode 100644 index 8ff8f50b13ed569130c99506c0019e0dc3d18148..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp24.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 24 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&amp;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp25.xml b/lib/feedparser/tests/wellformed/amp/amp25.xml deleted file mode 100644 index edac63bc1f468ad710764fc45bcb1949180ee195..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp25.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 25 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#38;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp26.xml b/lib/feedparser/tests/wellformed/amp/amp26.xml deleted file mode 100644 index 0b0752faf2a85b9f57b6f8625c148db3fd13ee60..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp26.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 26 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#x26;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp27.xml b/lib/feedparser/tests/wellformed/amp/amp27.xml deleted file mode 100644 index 9c9419d1d7e78608990a2fe411a3e62b4ab2b94e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp27.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 27 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&amp;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp28.xml b/lib/feedparser/tests/wellformed/amp/amp28.xml deleted file mode 100644 index 8d6da5301f2a4d834ec266562fed178638e1c0b3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp28.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 28 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#38;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp29.xml b/lib/feedparser/tests/wellformed/amp/amp29.xml deleted file mode 100644 index 7baae50b21a51084ad7c4cefb92d128d7091aa6a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp29.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 29 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&#x26;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp30.xml b/lib/feedparser/tests/wellformed/amp/amp30.xml deleted file mode 100644 index 5f6399c8286f7df79303091eaece149049a13db1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp30.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 30 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><b>&amp;</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp31.xml b/lib/feedparser/tests/wellformed/amp/amp31.xml deleted file mode 100644 index 47b445ed65ceb04038bb05fa6bffe031054eb5b3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp31.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 31 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#38;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp32.xml b/lib/feedparser/tests/wellformed/amp/amp32.xml deleted file mode 100644 index ac95fffd0e56fd27c3914bf9b2ed3dc3e3efa4f8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp32.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 32 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#x26;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp33.xml b/lib/feedparser/tests/wellformed/amp/amp33.xml deleted file mode 100644 index 442c79e0ead41992608e4a3bd81dc4fa315390d7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp33.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 33 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&amp;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp34.xml b/lib/feedparser/tests/wellformed/amp/amp34.xml deleted file mode 100644 index fd69c68005bdd5a9085f8dde4f32df4e48c0ca61..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp34.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 34 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#38;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp35.xml b/lib/feedparser/tests/wellformed/amp/amp35.xml deleted file mode 100644 index d2e6c6049723a934cc2627aa209bbcd18ed0615d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp35.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 35 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#x26;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp36.xml b/lib/feedparser/tests/wellformed/amp/amp36.xml deleted file mode 100644 index 545f4ddd3ec111686b1ec889377107c270a8b745..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp36.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 36 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&amp;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp37.xml b/lib/feedparser/tests/wellformed/amp/amp37.xml deleted file mode 100644 index 5ed3590d00879522ece49548486a760fa3d70c13..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp37.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 37 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#38;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp38.xml b/lib/feedparser/tests/wellformed/amp/amp38.xml deleted file mode 100644 index c4710040a2319c31305f6622fbf233f6dc949e4f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp38.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 38 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#x26;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp39.xml b/lib/feedparser/tests/wellformed/amp/amp39.xml deleted file mode 100644 index 2d3a3d2b4c249f89d6d1b5eaaf1c805754f3c049..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp39.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 39 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&amp;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp40.xml b/lib/feedparser/tests/wellformed/amp/amp40.xml deleted file mode 100644 index ddf24f362c6a78d08a294b791d65b58b167acf07..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp40.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 40 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#38;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp41.xml b/lib/feedparser/tests/wellformed/amp/amp41.xml deleted file mode 100644 index 18f570e8c674f46a2ef6f747fc4c9b3724389080..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp41.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 41 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#x26;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp42.xml b/lib/feedparser/tests/wellformed/amp/amp42.xml deleted file mode 100644 index 3857d6076775d58f08acccf17885a556995d28dd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp42.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 42 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&amp;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp43.xml b/lib/feedparser/tests/wellformed/amp/amp43.xml deleted file mode 100644 index e5e35cf766e62a18d52f384d6bc0f86fdd4e8c1c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp43.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 43 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#38;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp44.xml b/lib/feedparser/tests/wellformed/amp/amp44.xml deleted file mode 100644 index 290c33352259f6f4cb25aa882ab6f68fa2d0ef20..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp44.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 44 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#x26;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp45.xml b/lib/feedparser/tests/wellformed/amp/amp45.xml deleted file mode 100644 index ecba32b029da5d080875cd8625383b6478b8062c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp45.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 45 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&amp;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp46.xml b/lib/feedparser/tests/wellformed/amp/amp46.xml deleted file mode 100644 index 32b2f633d8105cda6fac4d20b0f4212ca34c6004..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp46.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 46 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#38;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp47.xml b/lib/feedparser/tests/wellformed/amp/amp47.xml deleted file mode 100644 index 9e81f91f1d4a9212411e17944f693efc61022bed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp47.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 47 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&#x26;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp48.xml b/lib/feedparser/tests/wellformed/amp/amp48.xml deleted file mode 100644 index 3c0c26ea316e48654a288a348b8f370c5e7193a1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp48.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 48 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><strong>&amp;</strong></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp49.xml b/lib/feedparser/tests/wellformed/amp/amp49.xml deleted file mode 100644 index 102f803a359201d3c6ef64b03d230e85349035d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp49.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 49 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[&]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp50.xml b/lib/feedparser/tests/wellformed/amp/amp50.xml deleted file mode 100644 index 3f1ae00cb66209b1cacc0dafb320261ff10ef08b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp50.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 50 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[&]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp51.xml b/lib/feedparser/tests/wellformed/amp/amp51.xml deleted file mode 100644 index a5644ff18fb58f6375cef92d054a85840e51580a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp51.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 51 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title><![CDATA[&]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp52.xml b/lib/feedparser/tests/wellformed/amp/amp52.xml deleted file mode 100644 index b6e89c263817bc8dfba78d32308a4d61ae51a65a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp52.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 52 -Expect: not bozo and entries[0]['title_detail']['value'] == u'&' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[&]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp53.xml b/lib/feedparser/tests/wellformed/amp/amp53.xml deleted file mode 100644 index 0556638d6dd61e982a383bed1bbf46f8f7d7d6bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp53.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 53 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[<b>&</b>]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp54.xml b/lib/feedparser/tests/wellformed/amp/amp54.xml deleted file mode 100644 index 69dbde91f1427a12e0fc86a41fae246a1c798229..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp54.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 54 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[<b>&</b>]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp55.xml b/lib/feedparser/tests/wellformed/amp/amp55.xml deleted file mode 100644 index 3173c775736b68eeeddc633bb92fb1586b8261b4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp55.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 55 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<b>&</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[<b>&</b>]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp56.xml b/lib/feedparser/tests/wellformed/amp/amp56.xml deleted file mode 100644 index c577628bae710a2c1ac0c569ccee8e11a1dd9c11..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp56.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 56 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[<strong>&</strong>]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp57.xml b/lib/feedparser/tests/wellformed/amp/amp57.xml deleted file mode 100644 index 7abad46b90779411f97b2ee28557e770e72225a0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp57.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 57 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[<strong>&</strong>]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp58.xml b/lib/feedparser/tests/wellformed/amp/amp58.xml deleted file mode 100644 index a204980d818ca708d9c5bcf8509fc9ba8f121a84..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp58.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 58 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<strong>&</strong>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><![CDATA[<strong>&</strong>]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp59.xml b/lib/feedparser/tests/wellformed/amp/amp59.xml deleted file mode 100644 index 708471ad1a5f30f2214c76efadd7654901861373..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp59.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 59 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<div><b>&</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&</b></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp60.xml b/lib/feedparser/tests/wellformed/amp/amp60.xml deleted file mode 100644 index baac7d49becc742c8bcc0c8616dae582d12ffece..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp60.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 60 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<div><b>&</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&</b></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp61.xml b/lib/feedparser/tests/wellformed/amp/amp61.xml deleted file mode 100644 index c77686f6dd334f9e494f62bfe4bc62289bd61ddd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp61.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 61 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<div><b>&</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&</b></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp62.xml b/lib/feedparser/tests/wellformed/amp/amp62.xml deleted file mode 100644 index 4016635e6bbfaba0564d14d819074491210f6c1b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp62.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 62 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&</strong></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&</strong></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp63.xml b/lib/feedparser/tests/wellformed/amp/amp63.xml deleted file mode 100644 index 29eb52668a2b1117604754eebcb237f636609d4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp63.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 63 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&</strong></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&</strong></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/amp64.xml b/lib/feedparser/tests/wellformed/amp/amp64.xml deleted file mode 100644 index b26a921e9aad10882e1430c1e133db5ff70baaab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/amp64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & test 64 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&</strong></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&</strong></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/amp/attr01.xml b/lib/feedparser/tests/wellformed/amp/attr01.xml deleted file mode 100644 index 1f3cdbc42ba1b0b5849ee86a266f41ad94634432..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/attr01.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & attr test 1 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<a title="&">&</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><a title="&#38;">&#38;</a></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/amp/attr02.xml b/lib/feedparser/tests/wellformed/amp/attr02.xml deleted file mode 100644 index 8086e7b0a195a0b36024ceecb932b7ec2c35db80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/attr02.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & attr test 2 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<a title="&">&</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><a title="&amp;">&amp;</a></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/amp/attr03.xml b/lib/feedparser/tests/wellformed/amp/attr03.xml deleted file mode 100644 index 33d79f94d9e31b6e15b2e3aaa6042d18610ce53f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/attr03.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & attr test 3 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<a title="&">&</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped"><a title="&#x26;">&#x26;</a></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/amp/attr04.xml b/lib/feedparser/tests/wellformed/amp/attr04.xml deleted file mode 100644 index a4be12190e0add7fe7d6ee2ba2efc1740e1b32e4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/attr04.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & attr test 4 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<a title="&">&</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&">&</a></div></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/amp/attr05.xml b/lib/feedparser/tests/wellformed/amp/attr05.xml deleted file mode 100644 index 3457934b63263546c1e14b85ad93bbcad9f60201..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/attr05.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & attr test 5 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<a title="&">&</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&">&</a></div></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/amp/attr06.xml b/lib/feedparser/tests/wellformed/amp/attr06.xml deleted file mode 100644 index b01196e79525eceb3733721b71818cd60ea5e3dd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/amp/attr06.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: & attr test 6 -Expect: not bozo and entries[0]['title_detail']['value'] == u'<a title="&">&</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&">&</a></div></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml deleted file mode 100644 index 96a90ce69cbd6d7c8319c55d0dba03490323b943..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Atom namespace (official) -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml deleted file mode 100644 index 90cc0d3bf320c85e209285f96c86c9be3aeed41f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Atom namespace (example.com) -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://example.com/newformat#"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml deleted file mode 100644 index d866205d5cd7d4b22074196b216bf4657c75dc9b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Atom namespace (necho) -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://example.com/necho"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml deleted file mode 100644 index a805d9781cd7e04b5a1c727d52cf1c17743a2e4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Atom namespace (echo) -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/echo/"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml deleted file mode 100644 index 0e6fa46efb872990fdc42b1c512a1a09404b85f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Atom namespace (pie) -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/pie/"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_email.xml b/lib/feedparser/tests/wellformed/atom/entry_author_email.xml deleted file mode 100644 index 8210f4cab8186627dcc63281baa3e6717dd8449c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_email.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author email -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml b/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml deleted file mode 100644 index 21fdcae76ca5b129734eb4926a9fe408f53fb6da..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author homepage -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <homepage>http://example.com/</homepage> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml b/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml deleted file mode 100644 index dfb004dc7994e9521b5727edc3e7e0b45af6cbf3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author name + email maps to author -Expect: not bozo and entries[0]['author'] == u'Example author (me@example.com)' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml deleted file mode 100644 index bcd47e7788107d8b8d404df579fc3325d1fd2a57..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: entry author name maps to author if no email present -Expect: not bozo and entries[0]['author'] == u'Example author' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <url>http://example.com/</url> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_name.xml b/lib/feedparser/tests/wellformed/atom/entry_author_name.xml deleted file mode 100644 index 6b302b01e055d1ada58ea37314976be933f7fb27..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_name.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author name -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example author' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml b/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml deleted file mode 100644 index 653980846e4bd737897a8f26091e84cb87e82e3c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author uri -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_url.xml b/lib/feedparser/tests/wellformed/atom/entry_author_url.xml deleted file mode 100644 index 7192d04a95d4fe8b43f4094b4ce8840393b1979d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_author_url.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author url -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml deleted file mode 100644 index 91818ba7cdce78e6ab57630b555a6d75b7dd7a4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry content mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml deleted file mode 100644 index 67da8383e79b9df0857092e40dd07cc6878c6d79..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content type="text/html" mode="escaped">Example <b>Atom</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_content_type.xml deleted file mode 100644 index fd556e8820c6bf8711ec81b6f9c9e76f062f9d0f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_content_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content content type defaults to 'text/plain' -Expect: not bozo and entries[0]['content'][0]['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content>Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml deleted file mode 100644 index 656dbd455de2125a15a612b473e5eca97126744e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content type='text/plain' -Expect: not bozo and entries[0]['content'][0]['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content type="text/plain">Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_content_value.xml deleted file mode 100644 index 6da460d0a140847dc4604a4c6050557cdfb4ccf5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content content value -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content>Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml deleted file mode 100644 index f51fc17a095ceb5a11e69bed6e9325af98eeaa88..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor email -Expect: not bozo and entries[0]['contributors'][0]['email'] == u'me@example.com' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml deleted file mode 100644 index f5a398d127b4710985e7d40f5ace05c4ce14b9a9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor homepage -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <homepage>http://example.com/</homepage> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml deleted file mode 100644 index c58cd9165daaa8455bb2e95623ee7b0cb68cd40e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -Description: multiple entry contributors -Expect: not bozo and entries[0]['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': u'http://two.example.com/'} ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <contributor> - <name>Contributor 1</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> - <contributor> - <name>Contributor 2</name> - <email>you@example.com</email> - <url>http://two.example.com/</url> - </contributor> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml deleted file mode 100644 index 1b82beebbd26cf8bf92997b373a3e4bd6e5a30b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor name -Expect: not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml deleted file mode 100644 index a37f5773d905dc3c375c2f2c7df58091fa758558..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor uri -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml deleted file mode 100644 index 618511902f274e3dd31f51479ec3253bde138b2a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor url -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_created.xml b/lib/feedparser/tests/wellformed/atom/entry_created.xml deleted file mode 100644 index 3175de0279ce9018f157f97256a46f9a520cc27c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_created.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry created -Expect: not bozo and entries[0]['created'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<created>Thu, 01 Jan 2004 19:48:21 GMT</created> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml b/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml deleted file mode 100644 index 95688edd31d34b7354991e61ed38ce6c761942f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry parsed created, multiple values, ensure overwrite -Expect: not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<created>2010-12-01T10:14:55Z</created> -<created>2003-12-31T10:14:55Z</created> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml deleted file mode 100644 index e7f9e9c380fda509ea972b53e6aa415b7f77c7e9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry created parsed -Expect: not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<created>2003-12-31T10:14:55Z</created> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_id.xml b/lib/feedparser/tests/wellformed/atom/entry_id.xml deleted file mode 100644 index 827ca3792f361e9e9e634634ee7a7d39e0c7c22c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_id.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id -Expect: not bozo and entries[0]['id'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <id>http://example.com/</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml deleted file mode 100644 index bc2dfb10dc444cc376e28add35e17853782df511..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id maps to guid -Expect: not bozo and entries[0]['guid'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <id>http://example.com/</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_issued.xml b/lib/feedparser/tests/wellformed/atom/entry_issued.xml deleted file mode 100644 index fdc508141b6398527d8b15ff88f7e463bc4dc6e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_issued.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry issued -Expect: not bozo and entries[0]['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<issued>Thu, 01 Jan 2004 19:48:21 GMT</issued> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml deleted file mode 100644 index 5cf2729854ba43183a4a00ec69798dd18026956d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry issued parsed -Expect: not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<issued>2003-12-31T10:14:55Z</issued> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml deleted file mode 100644 index d618df928a2a164bb6e27517e09ee5997b10be1f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href maps to link if rel="alternate" and type="text/html" -Expect: not bozo and entries[0]['link'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml deleted file mode 100644 index 11e03b46f541c26f4fd78038cb55c55b0c2d7a54..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href maps to link if rel="alternate" and type="application/xhtml+xml" -Expect: not bozo and entries[0]['link'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_href.xml b/lib/feedparser/tests/wellformed/atom/entry_link_href.xml deleted file mode 100644 index 2be6dc7fa00ec0c3a22f5841030ad49c4c53036a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_href.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href -Expect: not bozo and entries[0]['links'][0]['href'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml b/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml deleted file mode 100644 index 9d7228cef3c1a463be90c9e85359661da6f575d1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry multiple links -Expect: not bozo and entries[0]['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': u'http://www.example.com/post'} ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> - <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml b/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml deleted file mode 100644 index db5d78a2a91fb0fe38061f182d2a795e264b5698..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel -Expect: not bozo and entries[0]['links'][0]['rel'] == u'alternate' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_title.xml b/lib/feedparser/tests/wellformed/atom/entry_link_title.xml deleted file mode 100644 index 4d71c0574b365eb943c1e71c2c0602035c0ed566..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link title -Expect: not bozo and entries[0]['links'][0]['title'] == u'Example title' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_type.xml b/lib/feedparser/tests/wellformed/atom/entry_link_type.xml deleted file mode 100644 index 8dbe49555bfa44a62f3054ea213ed192f374322d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_link_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link type -Expect: not bozo and entries[0]['links'][0]['type'] == u'text/html' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_modified.xml b/lib/feedparser/tests/wellformed/atom/entry_modified.xml deleted file mode 100644 index 7bf362ccdd7efc5d35d8d7f879c5004a19942874..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_modified.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry modified -Expect: not bozo and entries[0]['updated'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml deleted file mode 100644 index 0eaa5c101b5609d60e319ececf17311efbd09be9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry modified parsed and mapped to updated_parsed -Expect: not bozo and entries[0]['updated_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0) ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml deleted file mode 100644 index 6c0c05058f06dea1c27438fa9bc3f89fda627508..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry published parsed -Expect: not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<published>2003-12-31T10:14:55Z</published> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml b/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml deleted file mode 100644 index bd30e91acbdcaa4847f36a4515f91f91b9a1b6eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry conflicting published/issued values overwrite parsed values -Expect: not bozo and entries[0]['published_parsed'] == (2010, 1, 1, 19, 48, 21, 4, 1, 0) ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<issued>Thu, 01 Jan 2004 19:48:21 GMT</issued> -<published>Sat, 01 Jan 2010 19:48:21 GMT</published> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml deleted file mode 100644 index d518d3dfb89e3e70bf1673d018c1ab8452dc5349..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source updated parsed -Expect: not bozo and entries[0]['source']['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> -<updated>2003-12-31T10:14:55Z</updated> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary.xml b/lib/feedparser/tests/wellformed/atom/entry_summary.xml deleted file mode 100644 index e12454b118807b490aa5463b437057dc3d79bcf3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary -Expect: not bozo and entries[0]['summary'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary>Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml deleted file mode 100644 index 9c34f5775bf41f557dfcfe40bc4d27f7f7f3cee3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry summary base64-encoded -Expect: not bozo and entries[0]['summary'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml deleted file mode 100644 index bfcd183693ff1fa45f692e5360ad73fa661a7f8d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry summary base64-encoded -Expect: not bozo and entries[0]['summary'] == u'<p>History of the <blink> tag</p>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary mode="base64"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml deleted file mode 100644 index 282cff83b2c56a77d567bf8e08fbc4b99fce0306..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry summary mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml deleted file mode 100644 index 1be7ac6518ad032791f81689ed87371230878436..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="text/html" mode="escaped">Example <b>Atom</b></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml deleted file mode 100644 index f20078f7d810f99ba8c19f39e64adabcf7bb1e38..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content type defaults to 'text/plain' -Expect: not bozo and entries[0]['summary_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary>Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml deleted file mode 100644 index 704d21b60f4b7050eabce9ec7ce8d2957a204f87..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary type='text/plain' -Expect: not bozo and entries[0]['summary_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="text/plain">Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml deleted file mode 100644 index bbb74f71eacf200f6ced2fab44fe31c865902aa1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content value -Expect: not bozo and entries[0]['summary_detail']['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary>Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml deleted file mode 100644 index fa1cd246e8c16909ad9651e94f85ae1de381620a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary escaped HTML -Expect: not bozo and entries[0]['summary'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="text/html" mode="escaped">Example <b>Atom</b></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml deleted file mode 100644 index be60d2c180e6e0517fd2957ee5cb3e6983f6cbcd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary inline XHTML -Expect: not bozo and entries[0]['summary'] == u'<div>Example <b>Atom</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml deleted file mode 100644 index fbd4dd80084ee4a93fc3409d89b3a8f3dfa689bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary inline XHTML with escaped markup -Expect: not bozo and entries[0]['summary'] == u'<div>History of the <blink> tag</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml deleted file mode 100644 index d5926a7b21226951d3b5feade921e7a0336615ed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary with undeclared unqualified inline markup -Expect: not bozo and entries[0]['summary'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary>Example <b>Atom</b></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml deleted file mode 100644 index 3839a854ce0dbea631538f9e215e2b709281b079..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary with explicit type='text/plain' -Expect: not bozo and entries[0]['summary'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="text/plain">Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title.xml b/lib/feedparser/tests/wellformed/atom/entry_title.xml deleted file mode 100644 index 1dd56fcdc08ccf6c5443cd7bd7d873d77d5817ba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title -Expect: not bozo and entries[0]['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml deleted file mode 100644 index 85ac6caa5207655754cd683d328235b641a8bd83..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry title base64-encoded -Expect: not bozo and entries[0]['title'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml deleted file mode 100644 index 330d38738c21148500b97ebbe91aac47e1d1e323..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry title base64-encoded -Expect: not bozo and entries[0]['title'] == u'<p>History of the <blink> tag</p>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title mode="base64"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml deleted file mode 100644 index fc9893de07a21dfc8d0ca946f0003b47b2c4dd90..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry title mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml deleted file mode 100644 index eb6dd1bf0f7417bd85a6480abfdcb4ec6c94bf86..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">Example <b>Atom</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml deleted file mode 100644 index c14ef5a7afc519ec19e56f76f5edbe78b8f0d118..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content type defaults to 'text/plain' -Expect: not bozo and entries[0]['title_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml deleted file mode 100644 index bb0a1dcef39cc5d833d7e6f9b25da2b432b222a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title type='text/plain' -Expect: not bozo and entries[0]['title_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/plain">Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml deleted file mode 100644 index 043d0af58806d57f6b3d1d9cedd1bf5bd384beb7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content value -Expect: not bozo and entries[0]['title_detail']['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml deleted file mode 100644 index ccc24b8a754d8d4a52dd17c74a3e4092fbacd200..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title escaped HTML -Expect: not bozo and entries[0]['title'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/html" mode="escaped">Example <b>Atom</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml deleted file mode 100644 index eb7c9315e2687983124be362b88906c014d933cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title inline XHTML -Expect: not bozo and entries[0]['title'] == u'<div>Example <b>Atom</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml deleted file mode 100644 index 71cfc507216a27b71ed0b737b6cb54416a1058f3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title inline XHTML with escaped markup -Expect: not bozo and entries[0]['title'] == u'<div>History of the <blink> tag</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml deleted file mode 100644 index ffc9aa93f150c89bf4f01daddca3e8b1a81e4f13..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title with undeclared unqualified inline markup -Expect: not bozo and entries[0]['title'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title>Example <b>Atom</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml deleted file mode 100644 index f02a6264b4f21ca4f9ded0123fc39d9dc9353dc7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title with explicit type='text/plain' -Expect: not bozo and entries[0]['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/plain">Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml deleted file mode 100644 index cbd327cb1c5b72a3aa05aa944dd9b10d3c2f3d01..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title with explicit type='text/plain' contains brackets that are not markup -Expect: not bozo and entries[0]['title'] == u'History of the <blink> tag' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="text/plain">History of the <blink> tag</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml b/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml deleted file mode 100644 index 386cd0761ce1d6257c6c8936f19bbb47720f7161..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry parsed updated, multiple values, ensure overwrite -Expect: not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<updated>2010-12-01T10:14:55Z</updated> -<updated>2003-12-31T10:14:55Z</updated> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml deleted file mode 100644 index 66a315be94a96ee632635b2baa1d1226f96ec6e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry updated parsed -Expect: not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<updated>2003-12-31T10:14:55Z</updated> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_email.xml b/lib/feedparser/tests/wellformed/atom/feed_author_email.xml deleted file mode 100644 index 3eb3f4a51f10bf55f993adbc918dd4c1979ee9d3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author email -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml b/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml deleted file mode 100644 index 3d7abf7995ffb767d19422ef2ea052d443f6ea00..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author homepage -Expect: not bozo and feed['author_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <homepage>http://example.com/</homepage> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml b/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml deleted file mode 100644 index 003a1f4d4e7aada125d9196598597c20bc9db03f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author name + email maps to author -Expect: not bozo and feed['author'] == u'Example author (me@example.com)' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml deleted file mode 100644 index 977142f86ba34c9e6a1ff9cf66bdd0a8559debc0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: feed author name maps to author if no email present -Expect: not bozo and feed['author'] == u'Example author' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <url>http://example.com/</url> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_name.xml b/lib/feedparser/tests/wellformed/atom/feed_author_name.xml deleted file mode 100644 index 8e2e0277fc0ff97e2ee79c926af2e1f7d1f1adf4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author name -Expect: not bozo and feed['author_detail']['name'] == u'Example author' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml b/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml deleted file mode 100644 index 3df7ce32bf12c0f3c44caac626f35b21a4fdbba1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author uri -Expect: not bozo and feed['author_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_url.xml b/lib/feedparser/tests/wellformed/atom/feed_author_url.xml deleted file mode 100644 index dd7cb1f90985b7aa91346be8f09d63ce1e59fdfb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_author_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author url -Expect: not bozo and feed['author_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml deleted file mode 100644 index 664e2a5e68e16665ef362aa24070ec99f97286d8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor email -Expect: not bozo and feed['contributors'][0]['email'] == u'me@example.com' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml deleted file mode 100644 index 14d518e2b2e3ba7fca95a0f38eddca88d76a3e0a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor homepage -Expect: not bozo and feed['contributors'][0]['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <homepage>http://example.com/</homepage> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml deleted file mode 100644 index 64a1326ec6fe14b54f9e7865c203b70aaa03ff83..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: multiple feed contributors -Expect: not bozo and feed['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and feed['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': u'http://two.example.com/'} ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <contributor> - <name>Contributor 1</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> - <contributor> - <name>Contributor 2</name> - <email>you@example.com</email> - <url>http://two.example.com/</url> - </contributor> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml deleted file mode 100644 index 56de55938236e8c5dbc8f5b99013f7d775005aa1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor name -Expect: not bozo and feed['contributors'][0]['name'] == u'Example contributor' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml deleted file mode 100644 index c462dcabbc835bac0a176281fb4fe69e29f4e89e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor uri -Expect: not bozo and feed['contributors'][0]['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml deleted file mode 100644 index f42c4ea9cafa2fbbe5cc17b0c91eee6f032bb8bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor url -Expect: not bozo and feed['contributors'][0]['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright.xml deleted file mode 100644 index e1a8218160c0599a9e08d4a86e47c6c743a28ab6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright -Expect: not bozo and feed['copyright'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright>Example Atom</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml deleted file mode 100644 index 7b65999357b74726de7861d697417013f13bbc37..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed copyright base64-encoded -Expect: not bozo and feed['copyright'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml deleted file mode 100644 index 3cffcff44b0207f08621abd3ecd3170f8cfbe5a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed copyright base64-encoded -Expect: not bozo and feed['copyright'] == u'<p>History of the <blink> tag</p>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright mode="base64"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml deleted file mode 100644 index 3c68739acc224fd6df5aff91f211f9c198bd69d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed copyright mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml deleted file mode 100644 index 72132f8e14669e18015ef20e64d415b9eb672e63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="text/html" mode="escaped">Example <b>Atom</b></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml deleted file mode 100644 index e77a8ee0c1013aa84f2d40155523a7ce1bad0c3e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright content type defaults to 'text/plain' -Expect: not bozo and feed['copyright_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright>Example Atom</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml deleted file mode 100644 index 390313961a8db373b62479d0f620ba82d3383557..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright type='text/plain' -Expect: not bozo and feed['copyright_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="text/plain">Example Atom</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml deleted file mode 100644 index 491c10e412dc64419fd7ae68102990f18c0e3284..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright content value -Expect: not bozo and feed['copyright_detail']['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright>Example Atom</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml deleted file mode 100644 index 2f97df3e179dfeaca4eb242a2bba620417b5214f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright escaped HTML -Expect: not bozo and feed['copyright'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="text/html" mode="escaped">Example <b>Atom</b></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml deleted file mode 100644 index bf8f211b0445cb2338b341f74106a32d590f2981..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright inline XHTML -Expect: not bozo and feed['copyright'] == u'<div>Example <b>Atom</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml deleted file mode 100644 index d4e4df3a4eddea360879bda09af42f7380421061..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright inline XHTML with escaped markup -Expect: not bozo and feed['copyright'] == u'<div>History of the <blink> tag</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml deleted file mode 100644 index a04eed41b6c270ba6c778bdb4a54e5467b3b7183..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright with undeclared unqualified inline markup -Expect: not bozo and feed['copyright'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright>Example <b>Atom</b></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml deleted file mode 100644 index 5c71c1b9ee2a9e79494391ec9697f77d37c46ac5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright with explicit type='text/plain' -Expect: not bozo and feed['copyright'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="text/plain">Example Atom</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator.xml b/lib/feedparser/tests/wellformed/atom/feed_generator.xml deleted file mode 100644 index 21bce92b6fb48fde37ee2841f9f51bd60474863a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_generator.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator -Expect: not bozo and feed['generator'] == u'Example generator' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <generator url="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml deleted file mode 100644 index 349ed2deb9530ae0f3c9631c457043970712dd5d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator name -Expect: not bozo and feed['generator_detail']['name'] == u'Example generator' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <generator url="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml deleted file mode 100644 index 4efaed264e73cbd03a8297af619f214c1ba6dbb4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator url -Expect: not bozo and feed['generator_detail']['url'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <generator url="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml deleted file mode 100644 index c6c088559406bd33b971a8927c4c634c35c99359..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator version -Expect: not bozo and feed['generator_detail']['version'] == u'2.65' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <generator url="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_id.xml b/lib/feedparser/tests/wellformed/atom/feed_id.xml deleted file mode 100644 index a875baeb95a331c91ef1d353bddc16ef0c4dd047..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_id.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed id -Expect: not bozo and feed['id'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <id>http://example.com/</id> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml deleted file mode 100644 index 9e6392dc73d3c91ee10eab5b1170327fe482174b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed id -Expect: not bozo and feed['guid'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <id>http://example.com/</id> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info.xml b/lib/feedparser/tests/wellformed/atom/feed_info.xml deleted file mode 100644 index a4f98f723d595148df0538a001c270fd8bbfcf30..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info -Expect: not bozo and feed['info'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info>Example Atom</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml deleted file mode 100644 index df6136f365fe7db848a4d230855e649d0b7c31fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed info base64-encoded -Expect: not bozo and feed['info'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml deleted file mode 100644 index 4f50e30f0a902047351a2d4b17718918dc060fae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed info base64-encoded -Expect: not bozo and feed['info'] == u'<p>History of the <blink> tag</p>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info mode="base64"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml deleted file mode 100644 index 0c3de70436e35c7b06fe23983d52b04a0262e7c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed info mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml deleted file mode 100644 index fdc27e69ad5ef13d1558def08b036f4a76053a3a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="text/html" mode="escaped">Example <b>Atom</b></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml deleted file mode 100644 index 615d4d6855394b6dfd260e57d6a4ea966a90f116..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info content type defaults to 'text/plain' -Expect: not bozo and feed['info_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info>Example Atom</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml deleted file mode 100644 index c97aef9e031b0326920b85095e5da03d01ec375b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info type='text/plain' -Expect: not bozo and feed['info_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="text/plain">Example Atom</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml deleted file mode 100644 index d601f03ea1062ce56bd011622713cac816ec8899..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info content value -Expect: not bozo and feed['info_detail']['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info>Example Atom</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml deleted file mode 100644 index 4820f8be6942c2be8f4d2535b65039e041b3f69e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info escaped HTML -Expect: not bozo and feed['info'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="text/html" mode="escaped">Example <b>Atom</b></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml deleted file mode 100644 index 76e02eb060f32b846d1a83c927541f7d0b0daf55..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info inline XHTML -Expect: not bozo and feed['info'] == u'<div>Example <b>Atom</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml deleted file mode 100644 index a6313b75a1ca01dd166d6bdd61d42c35a81a0510..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info inline XHTML with escaped markup -Expect: not bozo and feed['info'] == u'<div>History of the <blink> tag</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml deleted file mode 100644 index 9dab661ccefcca72e2a3b664363c175a4b0e2049..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info with undeclared unqualified inline markup -Expect: not bozo and feed['info'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info>Example <b>Atom</b></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml deleted file mode 100644 index e61ed050ab18275ae2c2238b5c1d14680b294a6c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info with explicit type='text/plain' -Expect: not bozo and feed['info'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="text/plain">Example Atom</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml deleted file mode 100644 index 12842ffd7222f35e65d5e2558d51d462d061fb91..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href maps to link if rel="alternate" and type="text/html" -Expect: not bozo and feed['link'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml deleted file mode 100644 index e63141c533c719566c23207512f9b2cd4b8299e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href maps to link if rel="alternate" and type="application/xhtml+xml" -Expect: not bozo and feed['link'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_href.xml b/lib/feedparser/tests/wellformed/atom/feed_link_href.xml deleted file mode 100644 index 6ab44d88b68ff9cf80839ae96e2277b708bff0bc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_href.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href -Expect: not bozo and feed['links'][0]['href'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml b/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml deleted file mode 100644 index 154fbbc33047c3e78438e7b640fb8b7db0f4f177..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed multiple links -Expect: not bozo and feed['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and feed['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': u'http://www.example.com/post'} ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> - <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml b/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml deleted file mode 100644 index dd2fe64a47189474f888e84a17f56b18c539787e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel -Expect: not bozo and feed['links'][0]['rel'] == u'alternate' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_title.xml b/lib/feedparser/tests/wellformed/atom/feed_link_title.xml deleted file mode 100644 index b8339eb3caba37c300cacbf137a36b1cec64f72f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_title.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link title -Expect: not bozo and feed['links'][0]['title'] == u'Example title' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_type.xml b/lib/feedparser/tests/wellformed/atom/feed_link_type.xml deleted file mode 100644 index 4fddbfd8f6da6ab2b7bcb3109d747e7d06de0bb6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_link_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link type -Expect: not bozo and feed['links'][0]['type'] == u'text/html' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_modified.xml b/lib/feedparser/tests/wellformed/atom/feed_modified.xml deleted file mode 100644 index 984f8ab6b4409c1d070294ae198089bcfdf9629f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_modified.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed modified -Expect: not bozo and feed['updated'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - -<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified> - -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml deleted file mode 100644 index 9099adaf73f8bc474cd7d2ea3499ce807d2bd4e7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed modified parsed and mapped to updated_parsed -Expect: not bozo and feed['updated_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0) ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - -<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified> - -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline.xml deleted file mode 100644 index ce170ef8320bf8e66a41a74506863d40889a3fb2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline -Expect: not bozo and feed['tagline'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline>Example Atom</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml deleted file mode 100644 index 196e08603bf0ed4db630f099c55ccd202b96cf35..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed tagline base64-encoded -Expect: not bozo and feed['tagline'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml deleted file mode 100644 index eb57d1515ab9410d755f9256ddf8478daf98d083..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed tagline base64-encoded -Expect: not bozo and feed['tagline'] == u'<p>History of the <blink> tag</p>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline mode="base64"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml deleted file mode 100644 index ff55466c0eff03c55528405ecd89df07973f0d6f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed tagline mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml deleted file mode 100644 index 2a28f0b4951bcbede6f46c789365c773d8c8afcb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="text/html" mode="escaped">Example <b>Atom</b></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml deleted file mode 100644 index 8d7c831aa40834180b0eeea63d51698bf2c2cc22..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline content type defaults to 'text/plain' -Expect: not bozo and feed['tagline_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline>Example Atom</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml deleted file mode 100644 index a63a3ca787acd722ed53a13a172ea0b66376c6f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline type='text/plain' -Expect: not bozo and feed['tagline_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="text/plain">Example Atom</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml deleted file mode 100644 index 24bc7ae774dad2a9dc8ca81f9c11eb61bdefedb4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline content value -Expect: not bozo and feed['tagline_detail']['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline>Example Atom</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml deleted file mode 100644 index 4530eabc800ada2d8784bbaf3db92341da146331..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline escaped HTML -Expect: not bozo and feed['tagline'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="text/html" mode="escaped">Example <b>Atom</b></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml deleted file mode 100644 index 6330c385d69c9763953ff29a70950c5e72b7cc1b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline inline XHTML -Expect: not bozo and feed['tagline'] == u'<div>Example <b>Atom</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml deleted file mode 100644 index afb7ebee6cbe8bf073403b355ab1b803f1686d81..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline inline XHTML with escaped markup -Expect: not bozo and feed['tagline'] == u'<div>History of the <blink> tag</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml deleted file mode 100644 index 4e213464ddadd866caf84316fff09d4a91c6f784..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline with undeclared unqualified inline markup -Expect: not bozo and feed['tagline'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline>Example <b>Atom</b></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml deleted file mode 100644 index 96d7d9cd20af8d4e692e22be51bef9bc5f6a90e6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline with explicit type='text/plain' -Expect: not bozo and feed['tagline'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="text/plain">Example Atom</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title.xml b/lib/feedparser/tests/wellformed/atom/feed_title.xml deleted file mode 100644 index b59200cb749d98a113ec0ed182951173d93b2ddd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml deleted file mode 100644 index f13b3c13cb4367c76c5d977f83429d8cefbacfab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed title base64-encoded -Expect: not bozo and feed['title'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml deleted file mode 100644 index a372b8396ee1a44b25114d42bc5414b9e4b992c3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed title base64-encoded -Expect: not bozo and feed['title'] == u'<p>History of the <blink> tag</p>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title mode="base64"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml deleted file mode 100644 index ac9ff5942b5617e4f9ae1bae334fe20517d0f588..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed title mode=base64 -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title mode="base64"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml deleted file mode 100644 index 3ff055a1d914ca8ef56ae88a58171d76a19e340c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title mode=escaped -Expect: 1 ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="text/html" mode="escaped">Example <b>Atom</b></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml deleted file mode 100644 index c207503179a03f6540485474cb1d0b9c9ac40869..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content type defaults to 'text/plain' -Expect: not bozo and feed['title_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml deleted file mode 100644 index 8bf0060bdf1b4b6575548a249814411b49a2d034..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title type='text/plain' -Expect: not bozo and feed['title_detail']['type'] == u'text/plain' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="text/plain">Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml deleted file mode 100644 index ac5cbdbe87560fffdbaa8bf7da78d812ab3eca9a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content value -Expect: not bozo and feed['title_detail']['value'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml deleted file mode 100644 index b2daea2b05d0dd3fbe1acbe9a638ac0ce3d0432a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title escaped HTML -Expect: not bozo and feed['title'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="text/html" mode="escaped">Example <b>Atom</b></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml deleted file mode 100644 index 0b675936b3ba5d42d00c6a98df8111225823a3bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title inline XHTML -Expect: not bozo and feed['title'] == u'<div>Example <b>Atom</b></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml deleted file mode 100644 index e687f4029ab4fc0bb93c44ada4b6eb38c89624d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title inline XHTML with escaped markup -Expect: not bozo and feed['title'] == u'<div>History of the <blink> tag</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml deleted file mode 100644 index fa4c30561046c1b9bb191a6b2cc8c33682e9ad7c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title with undeclared unqualified inline markup -Expect: not bozo and feed['title'] == u'Example <b>Atom</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title>Example <b>Atom</b></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml deleted file mode 100644 index 3c94b7eefd9c0c835ab60cff627dec0ad570498b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title with explicit type='text/plain' -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="text/plain">Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml deleted file mode 100644 index a5ddfec1a5fdd31658a13ad97bfe9717eeb00d8f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed updated parsed -Expect: not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<updated>2003-12-31T10:14:55Z</updated> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/media_player1.xml b/lib/feedparser/tests/wellformed/atom/media_player1.xml deleted file mode 100644 index c95a7b2c624dc1d6a5e4ebe906a15c19ed7b8b3b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/media_player1.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: media player content -Expect: not bozo and entries[0]['media_player']['url'] == u'http://www.example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <media:player xmlns:media="http://search.yahoo.com/mrss/" url="http://www.example.com/" /> - <title>Example Atom</title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml b/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml deleted file mode 100644 index 6288bfa57f696c03ae30729c8e88d2325a844c6d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: media_thumbnail -Expect: entries[0]['media_thumbnail'][0]['url'] == u'http://example.com/thumbnail.jpg' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" - url="http://example.com/thumbnail.jpg" height="72" width="72" /> - <title>Example Atom</title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri.xml b/lib/feedparser/tests/wellformed/atom/relative_uri.xml deleted file mode 100644 index 0de466ddc07815f34ab15105ee965e402221fcbf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/relative_uri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains relative URI resolved relative to xml:base -Expect: not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml b/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml deleted file mode 100644 index a2195de9ce78942777e6a2af2e2f8a674acd4ba7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains relative URI resolved relative to xml:base inherited from parent element -Expect: not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml b/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml deleted file mode 100644 index 8ce7778a6f13d76c93351f47eb56e7c96a9ee8f5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains relative URI resolved relative to xml:base overriding parent xml:base -Expect: not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml deleted file mode 100644 index 2dcec4289b1c019ac5d0c01b40f6884256a45be1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains URI with an ampersand -Expect: not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/?a=1&b=2">test</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="http://example.com/?a=1&b=2">test</a></div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml b/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml deleted file mode 100644 index c12785300d15a864c2f880edaa755409bffbaeea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: Atom namespace (official) -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/atom10_version.xml b/lib/feedparser/tests/wellformed/atom10/atom10_version.xml deleted file mode 100644 index e27c9111045ee0e0b8cff2e38d1734054a86eb3c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/atom10_version.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: Atom 1.0 version from namespace -Expect: not bozo and version == u'atom10' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml deleted file mode 100644 index 45d71fbf1c36c4e8fad10e84fa6115ea28e71938..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author email -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml deleted file mode 100644 index 84a0776a288377019c2dadff284ce0a39d8ca59e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author name + email maps to author -Expect: not bozo and entries[0]['author'] == u'Example author (me@example.com)' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml deleted file mode 100644 index 687d3d036feb159b7765f4ea471d2e7478f69fc6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: entry author name maps to author if no email present -Expect: not bozo and entries[0]['author'] == u'Example author' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <author> - <name>Example author</name> - <uri>http://example.com/</uri> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml deleted file mode 100644 index fb2157d62ae44df041b4954c10213eeabf0e0092..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author name -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example author' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml deleted file mode 100644 index 86e1e856805b9c08dcc8273f526f23e1a86171fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author uri -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml deleted file mode 100644 index dae246ae4a1a159b1b7878f70c25d347c08b1dc4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry author url -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml deleted file mode 100644 index d5a6369a763e7ffda031c623d4e868fe96dae3c4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author emails -Expect: not bozo and (entries[0]['authors'][0]['email'] == u'one@one.com') and (entries[0]['authors'][1]['email'] == u'two@two.com') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <author> - <email>one@one.com</email> - </author> - <author> - <email>two@two.com</email> - </author> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml deleted file mode 100644 index a0e74ae4ddf2a20020613ad2b8778f015fc43211..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author names -Expect: not bozo and (entries[0]['authors'][0]['name'] == u'one') and (entries[0]['authors'][1]['name'] == u'two') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <author> - <name>one</name> - </author> - <author> - <name>two</name> - </author> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml deleted file mode 100644 index 68dbc03b33ba3af34488fb31242565e44f090709..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author uris -Expect: not bozo and (entries[0]['authors'][0]['url'] == u'http://one.com/') and (entries[0]['authors'][1]['url'] == u'http://two.com/') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <author> - <uri>http://one.com/</uri> - </author> - <author> - <uri>http://two.com/</uri> - </author> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml deleted file mode 100644 index 09a1f843f8799222c0e3d4b45734eef2dee020fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author urls -Expect: not bozo and (entries[0]['authors'][0]['url'] == u'http://one.com/') and (entries[0]['authors'][1]['url'] == u'http://two.com/') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <author> - <url>http://one.com/</url> - </author> - <author> - <url>http://two.com/</url> - </author> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml deleted file mode 100644 index 7691de3795ad360b453f02ea712f09af2830871e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry category label -Expect: not bozo and entries[0]['tags'][0]['label'] == u'Atom 1.0 tests' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml deleted file mode 100644 index a88defc2193fcf4c7c0103ef39875ba07fecf128..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry category scheme -Expect: not bozo and entries[0]['tags'][0]['scheme'] == u'http://feedparser.org/tests/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml deleted file mode 100644 index f0755b39f948b0464c4abc6b068dddeb241e4556..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry category term -Expect: not bozo and entries[0]['tags'][0]['term'] == u'atom10' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml deleted file mode 100644 index a2529b5f7df6be4fb7954ca95939311f392310a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry category term -Expect: not bozo and entries[0]['tags'][0]['term'] == u'Freir\xe4ume' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <category term="Freiräume" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml deleted file mode 100644 index 9506726e64bfb6168e9739937a8651b6e9927516..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content inline XML -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml deleted file mode 100644 index 09ff3b0ca764c8d445b2faa6cd393a100a58160f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry content base64-encoded -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml deleted file mode 100644 index 84de7fe1aa1691d3052e37e497a0daded1007b03..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry content base64-encoded -Expect: not bozo and entries[0]['content'][0]['value'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml deleted file mode 100644 index f1f0a974c25eacf3631651b713283bf74efc681a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: typepad style entry content escaped HTML with div -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="html"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml deleted file mode 100644 index 44a6e0a27dda97f91c0ebc246e3d2574cc0ac5b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content escaped HTML -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="html">Example <b>Atom</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml deleted file mode 100644 index 1dc354e63e7d8c759c70377d64062513f1b3f4db..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content inline XHTML -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml deleted file mode 100644 index e47e68f84ce86202a10a1b4176a9140ec7d368e9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content inline XHTML with escaped markup -Expect: not bozo and entries[0]['content'][0]['value'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml deleted file mode 100644 index 0b808a8de0c3fad3735130563f00abaa6d058025..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content src -Expect: not bozo and entries[0]['content'][0]['src'] == u'http://example.com/movie.mp4' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content src="http://example.com/movie.mp4"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml deleted file mode 100644 index 402d6dd931c60600ecbf668d21085c52ca9a6c0a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content with explicit type='text' -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="text">Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml deleted file mode 100644 index b6f7401cc5b60f3cdca4a0c11e5586c0400b7d28..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content with explicit type='text' contains brackets that are not markup -Expect: not bozo and entries[0]['content'][0]['value'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="text">History of the <blink> tag</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml deleted file mode 100644 index c2d3adb842a103af9e7ad68eb5593594004925b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content content type defaults to 'text/plain' -Expect: not bozo and entries[0]['content'][0]['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content>Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml deleted file mode 100644 index e6a5e98b9f4113e13e1e38a80ed8c04e83337cfe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content type='text' -Expect: not bozo and entries[0]['content'][0]['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content type="text">Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml deleted file mode 100644 index 9fd290b40d935769ddb44007bf69dcc868facc8b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content content value -Expect: not bozo and entries[0]['content'][0]['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <content>Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml deleted file mode 100644 index ab60eeff2263f57e13b0f972c93ff764ed6df85d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor email -Expect: not bozo and entries[0]['contributors'][0]['email'] == u'me@example.com' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml deleted file mode 100644 index f132f41b4d9039aeb6d561c50cd6b1b537f967d5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -Description: multiple entry contributors -Expect: not bozo and entries[0]['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'} ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <contributor> - <name>Contributor 1</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> - <contributor> - <name>Contributor 2</name> - <email>you@example.com</email> - <uri>http://two.example.com/</uri> - </contributor> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml deleted file mode 100644 index 3ac96e82331446fb4de9b24516978f6e1fc036e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor name -Expect: not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml deleted file mode 100644 index 4a176b6d5fd79ad12bf7a0a61169046229af6d5a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor uri -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml deleted file mode 100644 index dcc87f9be0177d878088812b684b72f6a898fcd0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry contributor url -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id.xml b/lib/feedparser/tests/wellformed/atom10/entry_id.xml deleted file mode 100644 index b06db1b54e2257eb75070910f8d580f06a24641a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id -Expect: not bozo and entries[0]['id'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://example.com/</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml deleted file mode 100644 index aa4b2befe15a37bbc5d7e248b08fa55f75757f33..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id maps to guid -Expect: not bozo and entries[0]['guid'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://example.com/</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml deleted file mode 100644 index ea4f6e5c1ed84efbf03d84f236ee6d3236a75912..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'http://www.example.org/thing' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://www.example.org/thing</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml deleted file mode 100644 index 8b4df51c11d00144fc9fbd3764fbf4d5dfa52189..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'http://www.example.org/Thing' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://www.example.org/Thing</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml deleted file mode 100644 index e7f613eab273faba4a84be8634c28444cb2d93f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'http://www.EXAMPLE.org/thing' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://www.EXAMPLE.org/thing</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml deleted file mode 100644 index 3232936639d1df3eb78d88c97a2bb3504bc4fe1e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'HTTP://www.example.org/thing' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>HTTP://www.example.org/thing</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml deleted file mode 100644 index 0c08db8d44594cc6244f35720bd9f4115d69ad6a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'http://www.example.com/~bob' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://www.example.com/~bob</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml deleted file mode 100644 index 45db81fa4c16cff81ec8951e513247392822e87a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'http://www.example.com/%7ebob' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://www.example.com/%7ebob</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml deleted file mode 100644 index 25b6f7c77557fb22a90879cd796543e519870866..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id not normalized (see Atom 1.0 section 4.2.6.1) -Expect: not bozo and entries[0]['id'] == u'http://www.example.com/%7Ebob' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>http://www.example.com/%7Ebob</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml deleted file mode 100644 index 0829da9111d581a3bfca5839cb74d3a01e154947..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id retrieved when element contains attributes -Expect: not bozo and entries[0]['id'] == u'right' ---> -<feed xmlns:bogus="http://dom.test/ns"> - <entry> - <id bogus:attr="wrong">right</id> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml deleted file mode 100644 index a507ee3e6c7c4b975c9fd306601374668e49f370..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href maps to link if rel="alternate" and type="text/html" -Expect: not bozo and entries[0]['link'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml deleted file mode 100644 index f46e8b619ce0fa4fe96951622b8b66a9df2f536c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href maps to link if rel="alternate" and type="application/xhtml+xml" -Expect: not bozo and entries[0]['link'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml deleted file mode 100644 index ec49b56045656f14c9c0818706f4795b6f2674f4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry link href maps to link if rel="alternate", even if type is not present -Expect: not bozo and entries[0]['link'] == u'http://www.example.com/alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" href="http://www.example.com/alternate"></link> - <link rel="related" type="text/html" href="http://www.example.com/related"></link> - <link rel="via" type="text/html" href="http://www.example.com/via"></link> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml deleted file mode 100644 index f69da53bb1e03250f89f2f3006c4cd59d4693dc6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href -Expect: not bozo and entries[0]['links'][0]['href'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml deleted file mode 100644 index 15b23a0e962eadd758a0314f36727fff9a663bc2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link hreflang -Expect: not bozo and entries[0]['links'][0]['hreflang'] == u'en' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml deleted file mode 100644 index c41378ee0dedd1afaf6586e1042bc347fa2f8757..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link length -Expect: not bozo and entries[0]['links'][0]['length'] == u'42301' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml deleted file mode 100644 index c50f93eeb8424cd8a1ef19b9ef7bbb23810fe3a8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry multiple links -Expect: not bozo and entries[0]['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'} ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> - <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml deleted file mode 100644 index d18a8115c578cb4aef674583921b4ccbe35b6cb7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel defaults to 'alternate' -Expect: not bozo and entries[0]['links'][0]['rel'] == u'alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml deleted file mode 100644 index a056a8a7c07509b28a564ccda3b37d33393b99e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel -Expect: not bozo and entries[0]['links'][0]['rel'] == u'alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml deleted file mode 100644 index 26f4d7f797ec7fe6196ac2f7ae4cb323e994110b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='enclosure' -Expect: not bozo and entries[0]['links'][0]['rel'] == u'enclosure' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="enclosure" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml deleted file mode 100644 index 8798fa0e9353e611160f920763925632fdc55c01..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='enclosure' -Expect: not bozo and entries[0]['enclosures'][0]['length'] == u'42301' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml deleted file mode 100644 index 73e8e16e8c9802ca7afcf3d2e7e74696bdb71dcc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='enclosure' -Expect: not bozo and entries[0]['enclosures'][0]['type'] == u'video/mpeg4' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml deleted file mode 100644 index 4c085d6ba346ef8f94418da54fceaedd572df665..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='enclosure' -Expect: not bozo and entries[0]['enclosures'][0]['href'] == u'http://www.example.com/movie.mp4' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml deleted file mode 100644 index 2438a177c4440b0bb3f15a5dbcb3110dfd41e21f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='enclosure' -Expect: not bozo and entries[0]['links'][0]['rel'] == u'license' and entries[0]['links'][0]['href'] == u'http://www.creativecommons.org/licenses/by-nc/1.0' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="license" href="http://www.creativecommons.org/licenses/by-nc/1.0"/> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml deleted file mode 100644 index b4117738ff494af20df0b78c898dd782fa6fe1af..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel as URI -Expect: not bozo and entries[0]['links'][0]['rel'] == u'http://feedparser.org/rel/test' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml deleted file mode 100644 index 5661405067ce253e0d5d201b133f80cf4f2f8293..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='related' -Expect: not bozo and entries[0]['links'][0]['rel'] == u'related' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="related" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml deleted file mode 100644 index cf0570cb0a8fb07620d25eb4dfa331743262ae49..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='self' -Expect: not bozo and entries[0]['links'][0]['rel'] == u'self' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="self" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml deleted file mode 100644 index e60edd95400719eead486c7b288a4eeaa4638d33..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link rel='via' -Expect: not bozo and entries[0]['links'][0]['rel'] == u'via' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="via" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml deleted file mode 100644 index 590c9b3b9ead2a643194dbb14ba7c14720bdcbdc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link title -Expect: not bozo and entries[0]['links'][0]['title'] == u'Example title' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml deleted file mode 100644 index 04ec5f7d2b9e0e2b06b640e778578f0b15b22c61..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link type -Expect: not bozo and entries[0]['links'][0]['type'] == u'text/html' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights.xml deleted file mode 100644 index c86d9b9401c674b865f469fe7450cd45409c975d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights -Expect: not bozo and entries[0]['rights'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights>Example Atom</rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml deleted file mode 100644 index 4f8276538e3595a53316671138e75958689af0e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights content value -Expect: not bozo and entries[0]['rights_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights>Example Atom</rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml deleted file mode 100644 index 94dabcb7d4278f850e99d7f90058771e1b4640d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights escaped HTML -Expect: not bozo and entries[0]['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights type="html">Example <b>Atom</b></rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml deleted file mode 100644 index 95d20ace91bacb2e4a152bd3dfe9327c40c610cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights inline XHTML -Expect: not bozo and entries[0]['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml deleted file mode 100644 index 276167311cba42da4d4a0f1f37ac2cd57773beea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights inline XHTML with escaped markup -Expect: not bozo and entries[0]['rights'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></rights> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml deleted file mode 100644 index bc887b3053695710f830dcf6d36b78eff76ff4dd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights with explicit type='text' -Expect: not bozo and entries[0]['rights'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights type="text">Example Atom</rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml deleted file mode 100644 index 3516f961718d3900c77d8896c1318815c8118069..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights with explicit type='text' contains brackets that are not markup -Expect: not bozo and entries[0]['rights'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights type="text">History of the <blink> tag</rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml deleted file mode 100644 index 31b400197bdf0b20e4b575c9fbec45262c9f4e23..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights content type defaults to 'text/plain' -Expect: not bozo and entries[0]['rights_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights>Example Atom</rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml deleted file mode 100644 index c1b82cef7b137d19e415b09fd6be052f0e5e18aa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry rights type='text' -Expect: not bozo and entries[0]['rights_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <rights type="text">Example Atom</rights> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml deleted file mode 100644 index fffb319793eceb726357cd1ee42f7f7b44381436..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source author email -Expect: not bozo and entries[0]['source']['author_detail']['email'] == u'me@example.com' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml deleted file mode 100644 index 4db9605e9124d6b8c25a16e87f7099294dd8d2d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source author name + email maps to author -Expect: not bozo and entries[0]['source']['author'] == u'Example author (me@example.com)' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml deleted file mode 100644 index 6d2c00df92dc5f2ade544c864ec2968ed5f354d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -Description: entry source author name maps to author if no email present -Expect: not bozo and entries[0]['source']['author'] == u'Example author' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <author> - <name>Example author</name> - <uri>http://example.com/</uri> - </author> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml deleted file mode 100644 index d4d5c74f9780d42e72624a4cab8f2995a9a14b19..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source author name -Expect: not bozo and entries[0]['source']['author_detail']['name'] == u'Example author' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml deleted file mode 100644 index df971db85faabc5c8b21f78780502d373bbfb45c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source author uri -Expect: not bozo and entries[0]['source']['author_detail']['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml deleted file mode 100644 index b8125eb1015203c530ef541d852c2373d682a1c3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author emails -Expect: not bozo and (entries[0]['source']['authors'][0]['email'] == u'one@one.com') and (entries[0]['source']['authors'][1]['email'] == u'two@two.com') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <source> - <author> - <email>one@one.com</email> - </author> - <author> - <email>two@two.com</email> - </author> - </source> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml deleted file mode 100644 index 1c846064ba25a80d014690e1f9ffa1e5d3af2d85..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author names -Expect: not bozo and (entries[0]['source']['authors'][0]['name'] == u'one') and (entries[0]['source']['authors'][1]['name'] == u'two') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <source> - <author> - <name>one</name> - </author> - <author> - <name>two</name> - </author> - </source> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml deleted file mode 100644 index 9901ab75de96ee314398051a95f7581beff5ed87..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author uris -Expect: not bozo and (entries[0]['source']['authors'][0]['url'] == u'http://one.com/') and (entries[0]['source']['authors'][1]['url'] == u'http://two.com/') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <source> - <author> - <uri>http://one.com/</uri> - </author> - <author> - <uri>http://two.com/</uri> - </author> - </source> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml deleted file mode 100644 index c48af3437721105e83f4ee68962172b21bfca441..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: entry contains multiple author urls -Expect: not bozo and (entries[0]['source']['authors'][0]['url'] == u'http://one.com/') and (entries[0]['source']['authors'][1]['url'] == u'http://two.com/') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <source> - <author> - <url>http://one.com/</url> - </author> - <author> - <url>http://two.com/</url> - </author> - </source> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml deleted file mode 100644 index 037b357afabefccb9104b6f171ff66a9bf03e2f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source category label -Expect: not bozo and entries[0]['source']['tags'][0]['label'] == u'Atom 1.0 tests' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml deleted file mode 100644 index a93edaaba3960393413c38d4552fe6357ca1d20f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source category scheme -Expect: not bozo and entries[0]['source']['tags'][0]['scheme'] == u'http://feedparser.org/tests/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml deleted file mode 100644 index d75748d93fcefbed94f627dd9851d1f7462ccf9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source category term -Expect: not bozo and entries[0]['source']['tags'][0]['term'] == u'atom10' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml deleted file mode 100644 index 5b1bd14467a0c9aab5c3027b8ef34fde6e4cda5a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source category term -Expect: not bozo and entries[0]['source']['tags'][0]['term'] == u'Freir\xe4ume' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <category term="Freiräume" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml deleted file mode 100644 index 8662a9ac577939acf203e9eb4bada9798c04abb5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source contributor email -Expect: not bozo and entries[0]['source']['contributors'][0]['email'] == u'me@example.com' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml deleted file mode 100644 index 4dd68e37d370c91ff2fb56abc111ee4c0eeee99c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml +++ /dev/null @@ -1,20 +0,0 @@ -<!-- -Description: multiple entry source contributors -Expect: not bozo and entries[0]['source']['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['source']['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'} ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <contributor> - <name>Contributor 1</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> - <contributor> - <name>Contributor 2</name> - <email>you@example.com</email> - <uri>http://two.example.com/</uri> - </contributor> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml deleted file mode 100644 index 6455366e815889452df12976a451b6bc258ecf94..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source contributor name -Expect: not bozo and entries[0]['source']['contributors'][0]['name'] == u'Example contributor' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml deleted file mode 100644 index cedf60f8eb106f9dc8f753767a3db2731528e969..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: entry source contributor uri -Expect: not bozo and entries[0]['source']['contributors'][0]['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml deleted file mode 100644 index 6c4605bf1b627edbb9354584bcadfdeb5af9e7c7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source generator -Expect: not bozo and entries[0]['source']['generator'] == u'Example generator' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml deleted file mode 100644 index be328aafb44cec613074f88cf737008e925d04ed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source generator name -Expect: not bozo and entries[0]['source']['generator_detail']['name'] == u'Example generator' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml deleted file mode 100644 index ec5696a6dadd489ca27574d17de5a7e4978fec5d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source generator uri -Expect: not bozo and entries[0]['source']['generator_detail']['href'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml deleted file mode 100644 index cfbe01d0c83e49b9ee3c633955747a7130d4bdcb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source generator version -Expect: not bozo and entries[0]['source']['generator_detail']['version'] == u'2.65' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml deleted file mode 100644 index 1b40b28f3c2baaca09ac46524b8dbb66b0df7c12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source icon -Expect: not bozo and entries[0]['source']['icon'] == u'http://example.com/favicon.ico' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <icon>http://example.com/favicon.ico</icon> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml deleted file mode 100644 index 56fa819179d6bfd5433a639634c1ed12cf6b33af..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source id -Expect: not bozo and entries[0]['source']['id'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <id>http://example.com/</id> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml deleted file mode 100644 index 9982b6b5e09c567067a564a661fab2bec46a9df1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link href maps to link if rel="alternate" and type="text/html" -Expect: not bozo and entries[0]['source']['link'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml deleted file mode 100644 index 140e749cd7c288f21bf1152ad17f1a95e0c8a29b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link href maps to link if rel="alternate" and type="application/xhtml+xml" -Expect: not bozo and entries[0]['source']['link'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml deleted file mode 100644 index 5e2bccf41a25c5d764ebcfa7dc7fe585a7109647..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link href -Expect: not bozo and entries[0]['source']['links'][0]['href'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml deleted file mode 100644 index 973a28df12cd74a733ccdf9f0dd47382df3ef1b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link hreflang -Expect: not bozo and entries[0]['source']['links'][0]['hreflang'] == u'en' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml deleted file mode 100644 index 5fd2f859676b87c837975797493b01221c884a15..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link length -Expect: not bozo and entries[0]['source']['links'][0]['length'] == u'42301' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml deleted file mode 100644 index a96562426eb1e16c46ba6dbf63e0be5b2777cce4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: entry source multiple links -Expect: not bozo and entries[0]['source']['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['source']['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'} ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> - <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml deleted file mode 100644 index ee9a6ea7756f641dda901e63bf15ebad1f6105eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link rel defaults to 'alternate' -Expect: not bozo and entries[0]['source']['links'][0]['rel'] == u'alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml deleted file mode 100644 index 5b1a8cdd2f4faaab540da0ab0f8e50d9acceb306..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link rel -Expect: not bozo and entries[0]['source']['links'][0]['rel'] == u'alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml deleted file mode 100644 index e24399f30e75513a8f42a97a4c27e411f0829a38..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link rel as URI -Expect: not bozo and entries[0]['source']['links'][0]['rel'] == u'http://feedparser.org/rel/test' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml deleted file mode 100644 index 5eb719768be191b0fc3ae2d898d1f9ae1d9c59a6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entries sourcelink rel='related' -Expect: not bozo and entries[0]['source']['links'][0]['rel'] == u'related' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="related" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml deleted file mode 100644 index ee04ef85a54a9621607329fc179847b264357668..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link rel='self' -Expect: not bozo and entries[0]['source']['links'][0]['rel'] == u'self' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="self" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml deleted file mode 100644 index 15b9bbfb7c553a3a5d8b43ccbee5c1b624a48530..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link rel='via' -Expect: not bozo and entries[0]['source']['links'][0]['rel'] == u'via' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="via" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml deleted file mode 100644 index 1c8ff561d7031af8bcc391564a5032f325d66ce4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link title -Expect: not bozo and entries[0]['source']['links'][0]['title'] == u'Example title' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml deleted file mode 100644 index d77060bb36d6d9d308f209ec3c331b2d4f5ef0fa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source link type -Expect: not bozo and entries[0]['source']['links'][0]['type'] == u'text/html' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml deleted file mode 100644 index 2b43b39c3b31b29f1e1f25cb5fbf806536afd712..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source logo -Expect: not bozo and entries[0]['source']['logo'] == u'http://example.com/logo.jpg' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <logo>http://example.com/logo.jpg</logo> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml deleted file mode 100644 index d8d6ede84cad650dc37c557fc406d299c79dbf58..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights -Expect: not bozo and entries[0]['source']['rights'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights>Example Atom</rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml deleted file mode 100644 index a101d3f1acff7f123736456ea383efe2a9259560..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry source rights base64-encoded -Expect: not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml deleted file mode 100644 index f0a5c1de99f207ada615f7c74c491e93352d5339..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry source rights base64-encoded -Expect: not bozo and entries[0]['source']['rights'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> -<rights type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml deleted file mode 100644 index acf70585faef9adbedbca329bbdfaba0feb31373..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights content type defaults to 'text/plain' -Expect: not bozo and entries[0]['source']['rights_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights>Example Atom</rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml deleted file mode 100644 index 5bd7d1316359ae0dd75e40903db6e9290312433a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights type='text' -Expect: not bozo and entries[0]['source']['rights_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights type="text">Example Atom</rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml deleted file mode 100644 index 7a47e880d9a3d0b102f79dedbda8413777d73222..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights content value -Expect: not bozo and entries[0]['source']['rights_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights>Example Atom</rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml deleted file mode 100644 index 4501ae5920c5825d0264ab204fb8cc8d614d2703..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights escaped HTML -Expect: not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights type="html">Example <b>Atom</b></rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml deleted file mode 100644 index 1c264fb551b5b61945e4da9034f7b434bc527cb7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights inline XHTML -Expect: not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml deleted file mode 100644 index 9467b79b8e3266587b5230616e1840561e0f2633..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights inline XHTML with escaped markup -Expect: not bozo and entries[0]['source']['rights'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></rights> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml deleted file mode 100644 index f5bc9d36b14cfd1eb13a5a59cf8e19ba62badcba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source rights with explicit type='text' -Expect: not bozo and entries[0]['source']['rights'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <rights type="text">Example Atom</rights> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml deleted file mode 100644 index c4dda8320110965bd315113cb348c1a29ea74fed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle type='text' -Expect: not bozo and entries[0]['source']['subtitle_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle type="text">Example Atom</subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml deleted file mode 100644 index 828129b03122f90082001dbe888110547a3433d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle -Expect: not bozo and entries[0]['source']['subtitle'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle>Example Atom</subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml deleted file mode 100644 index 5821b8cd682fe09f66d42bfa578668ac4ebda64d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry source subtitle base64-encoded -Expect: not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml deleted file mode 100644 index 10fea62ba0bda42e07621eca1433d01a792b7653..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry source subtitle base64-encoded -Expect: not bozo and entries[0]['source']['subtitle'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> -<subtitle type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml deleted file mode 100644 index b92408ede7a98911c389f68c69d5b16477dbdc93..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle content type defaults to 'text/plain' -Expect: not bozo and entries[0]['source']['subtitle_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle>Example Atom</subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml deleted file mode 100644 index 5a8d120eb21b06bf5ee924d7a9121a416f945963..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle content value -Expect: not bozo and entries[0]['source']['subtitle_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle>Example Atom</subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml deleted file mode 100644 index 4b7cf90c24abfc2644c07e2893df2b38db982f67..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle escaped HTML -Expect: not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle type="html">Example <b>Atom</b></subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml deleted file mode 100644 index a82035be001d9caf3ada54407b9227796ea48f87..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle inline XHTML -Expect: not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></subtitle> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml deleted file mode 100644 index 10df20c064b2a24ef374b79258e7f8d1f55e41f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle inline XHTML with escaped markup -Expect: not bozo and entries[0]['source']['subtitle'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></subtitle> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml deleted file mode 100644 index e59944801411d5a005c981e68bddf93067dd7620..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source subtitle with explicit type='text' -Expect: not bozo and entries[0]['source']['subtitle'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <subtitle type="text">Example Atom</subtitle> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml deleted file mode 100644 index f76409796e8712810210415d3e54085f7e52153b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title -Expect: not bozo and entries[0]['source']['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title>Example Atom</title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml deleted file mode 100644 index 32727421c73c16c4202c5ca427ded994b5ef998a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry source title base64-encoded -Expect: not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml deleted file mode 100644 index 1687b7cb8d8530b6dd864947f4945736d1aa81bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: entry source title base64-encoded -Expect: not bozo and entries[0]['source']['title'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> -<title type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml deleted file mode 100644 index de8c0d330c30d437b681e4c0fbd8f1bbb976904b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title content type defaults to 'text/plain' -Expect: not bozo and entries[0]['source']['title_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title>Example Atom</title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml deleted file mode 100644 index d14b9aff3ed06c4c546efe568da9853d6d4c75cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title type='text' -Expect: not bozo and entries[0]['source']['title_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title type="text">Example Atom</title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml deleted file mode 100644 index 149e9a5c425d2a04af10ee6d245c2e9d326c216b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title content value -Expect: not bozo and entries[0]['source']['title_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title>Example Atom</title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml deleted file mode 100644 index 1d6068686aadd86ff5250cc1460644aec3d6f449..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title escaped HTML -Expect: not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title type="html">Example <b>Atom</b></title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml deleted file mode 100644 index e2060b56eee0e4d101b670085a657ada93429970..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title inline XHTML -Expect: not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml deleted file mode 100644 index bc1867188fecf429137832b1ef194dd0714279cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title inline XHTML with escaped markup -Expect: not bozo and entries[0]['source']['title'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></title> -</source> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml deleted file mode 100644 index 34f190b917026029a95fa926c2e7f0da3eb0800f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry source title with explicit type='text' -Expect: not bozo and entries[0]['source']['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<source> - <title type="text">Example Atom</title> -</source> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary.xml deleted file mode 100644 index 65ed3d6d8f07032a274fb3333e320651c20579c1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary -Expect: not bozo and entries[0]['summary'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary>Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml deleted file mode 100644 index 8c34a40d14ee41b2548198918dfa8b4b53216c98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry summary base64-encoded -Expect: not bozo and entries[0]['summary'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml deleted file mode 100644 index 7cd162589c3ad50b458de0943dd92a62baf0a326..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry summary base64-encoded -Expect: not bozo and entries[0]['summary'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<summary type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml deleted file mode 100644 index ecf48929e0e164ce51f35aa67653eccf1f60fd12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content value -Expect: not bozo and entries[0]['summary_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary>Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml deleted file mode 100644 index c6236c1da26c2b303f1e024909d128e069db6d66..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary escaped HTML -Expect: not bozo and entries[0]['summary'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary type="html">Example <b>Atom</b></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml deleted file mode 100644 index b174bf8ff0f7b5fc73ffe17658f41db7f8515122..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary inline XHTML -Expect: not bozo and entries[0]['summary'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></summary> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml deleted file mode 100644 index 45ecf452807b1a3b08953424d4ba9be937d1a932..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary inline XHTML with escaped markup -Expect: not bozo and entries[0]['summary'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></summary> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml deleted file mode 100644 index 2a1731f99d3e6a314ba2cbf6f988a1417b952fb2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary with explicit type='text' -Expect: not bozo and entries[0]['summary'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary type="text">Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml deleted file mode 100644 index ac7d18ef57960896576e6030068d51ed0b5bda22..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content type defaults to 'text/plain' -Expect: not bozo and entries[0]['summary_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary>Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml deleted file mode 100644 index 70a0e23c0b4f0e829ab6fa7b9910aa8e95de070c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary type='text' -Expect: not bozo and entries[0]['summary_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <summary type="text">Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_title.xml deleted file mode 100644 index b3ed03f841f014b21e6faadcbf72be897a90bf72..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title -Expect: not bozo and entries[0]['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title>Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml deleted file mode 100644 index 856b9b2c7fbd7515ceb93d68ce9ad338d1221732..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry title base64-encoded -Expect: not bozo and entries[0]['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml deleted file mode 100644 index 30e2bd8e05859e0aef669121a52f8ba3d2676cbc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry title base64-encoded -Expect: not bozo and entries[0]['title'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<title type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml deleted file mode 100644 index b33242057eea28218eac80317fefff5dca0c002c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content value -Expect: not bozo and entries[0]['title_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title>Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml deleted file mode 100644 index 71e6e6d5bd8c2b3cea38d8b4c954fee58744f05a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title escaped HTML -Expect: not bozo and entries[0]['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="html">Example <b>Atom</b></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml deleted file mode 100644 index 650468b48081bfd4f2ed2072a8fc5f4b3c6f0ebb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title inline XHTML -Expect: not bozo and entries[0]['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml deleted file mode 100644 index 6998214dbcfd964ee91f2c529662e3824d55b49a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title inline XHTML with escaped markup -Expect: not bozo and entries[0]['title'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml deleted file mode 100644 index 7692469e2e0528be9486e3a717d983d609151fdd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title with explicit type='text' -Expect: not bozo and entries[0]['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="text">Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml deleted file mode 100644 index 5a6e72e0786db06cf3a4cfbc9b44e2786e650ecf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title with explicit type='text' contains brackets that are not markup -Expect: not bozo and entries[0]['title'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="text">History of the <blink> tag</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml deleted file mode 100644 index 07fd597ffd77b60b45ce283bd32bd340973ccddc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content type defaults to 'text/plain' -Expect: not bozo and entries[0]['title_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title>Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml deleted file mode 100644 index d7621b06d9434f234d0a95b07da96c85bea5f612..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title type='text' -Expect: not bozo and entries[0]['title_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="text">Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml deleted file mode 100644 index 78e898d2de2dd4c25521a269e799c7b74c9d7665..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author email -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml deleted file mode 100644 index a85c04367c8d3aa6b10120b8e4f61c34bebab8ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author name + email maps to author -Expect: not bozo and feed['author'] == u'Example author (me@example.com)' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml deleted file mode 100644 index af8eb617cd69dd35f4d71a93fbd247fc5ff6a133..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: feed author name maps to author if no email present -Expect: not bozo and feed['author'] == u'Example author' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>Example author</name> - <uri>http://example.com/</uri> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml deleted file mode 100644 index d0aa2f71be71b3d314928f20a3291e8b0c20c87f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author name -Expect: not bozo and feed['author_detail']['name'] == u'Example author' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml deleted file mode 100644 index b5e56f5d19d867faf9136cfa2f8197aa6dded472..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author uri -Expect: not bozo and feed['author_detail']['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml deleted file mode 100644 index 0b6e40f2724ca6cbe8d22133b58fac26932c83d0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed author url -Expect: not bozo and feed['author_detail']['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>Example author</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml deleted file mode 100644 index 83591e131f2100df9eddf04eb738b5019e21752d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: feed contains multiple author emails -Expect: not bozo and (feed['authors'][0]['email'] == u'one@one.com') and (feed['authors'][1]['email'] == u'two@two.com') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <email>one@one.com</email> - </author> - <author> - <email>two@two.com</email> - </author> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml deleted file mode 100644 index 7b02089cbeb0b98a68a9afbb2224ac2aac84f5c2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: feed contains multiple author names -Expect: not bozo and (feed['authors'][0]['name'] == u'one') and (feed['authors'][1]['name'] == u'two') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <name>one</name> - </author> - <author> - <name>two</name> - </author> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml deleted file mode 100644 index 794299677d98196048a81e3092c4c7e115351f48..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: feed contains multiple author uris -Expect: not bozo and (feed['authors'][0]['url'] == u'http://one.com/') and (feed['authors'][1]['url'] == u'http://two.com/') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <uri>http://one.com/</uri> - </author> - <author> - <uri>http://two.com/</uri> - </author> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml deleted file mode 100644 index d7fcde820b8f6aabc7e5ef0a04ce258bf1088c34..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: feed contains multiple author urls -Expect: not bozo and (feed['authors'][0]['url'] == u'http://one.com/') and (feed['authors'][1]['url'] == u'http://two.com/') ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <author> - <url>http://one.com/</url> - </author> - <author> - <url>http://two.com/</url> - </author> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml deleted file mode 100644 index f93819174fb9586ebbb7c5542420c47ed140ab90..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor email -Expect: not bozo and feed['contributors'][0]['email'] == u'me@example.com' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml deleted file mode 100644 index 8095a7411665baf53830e2b8c0bbc6de36adc230..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: multiple feed contributors -Expect: not bozo and feed['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and feed['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'} ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <contributor> - <name>Contributor 1</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> - <contributor> - <name>Contributor 2</name> - <email>you@example.com</email> - <uri>http://two.example.com/</uri> - </contributor> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml deleted file mode 100644 index 4d7d163bc098bd37e4abaacbd18888563050a25b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor name -Expect: not bozo and feed['contributors'][0]['name'] == u'Example contributor' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml deleted file mode 100644 index a8fc8626e970f7ae5363518e50d5a0677a3fbacb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor uri -Expect: not bozo and feed['contributors'][0]['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <uri>http://example.com/</uri> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml deleted file mode 100644 index b6cc8da9092fbca961e875a70fddecac0296c35b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: feed contributor url -Expect: not bozo and feed['contributors'][0]['url'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <contributor> - <name>Example contributor</name> - <email>me@example.com</email> - <url>http://example.com/</url> - </contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator.xml deleted file mode 100644 index 88c3abfb0743482742ea76762471716c5af0f911..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_generator.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator -Expect: not bozo and feed['generator'] == u'Example generator' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml deleted file mode 100644 index fd89ce59d4e6dc101339819fe9954d286ad233b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator name -Expect: not bozo and feed['generator_detail']['name'] == u'Example generator' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml deleted file mode 100644 index a321577ecf7444c095b517c698811bc6bd2d3284..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator uri -Expect: not bozo and feed['generator_detail']['href'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml deleted file mode 100644 index 0660672ce6db09ff365ef62bf88a6f758658e91a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator version -Expect: not bozo and feed['generator_detail']['version'] == u'2.65' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <generator uri="http://example.com/" version="2.65">Example generator</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_icon.xml b/lib/feedparser/tests/wellformed/atom10/feed_icon.xml deleted file mode 100644 index 498b4d07ce645e27f5e5133f2f92cdf30ce55bc2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_icon.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed icon -Expect: not bozo and feed['icon'] == u'http://example.com/favicon.ico' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <icon>http://example.com/favicon.ico</icon> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_id.xml b/lib/feedparser/tests/wellformed/atom10/feed_id.xml deleted file mode 100644 index dae9b121bbcbf3be5ce8dbaea93c88fed66c81fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_id.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed id -Expect: not bozo and feed['id'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <id>http://example.com/</id> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml deleted file mode 100644 index 94fe01c81722f8ed74b317fb1bfa0eb70081a820..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed id -Expect: not bozo and feed['guid'] == u'http://example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <id>http://example.com/</id> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml deleted file mode 100644 index e25189f0f5e4f9b9a03d81872ad4a4ee2dc7ba3d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href maps to link if rel="alternate" and type="text/html" -Expect: not bozo and feed['link'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml deleted file mode 100644 index 26f09699d3bf2a4f1396f9dc66ce4e4f5dec8df7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href maps to link if rel="alternate" and type="application/xhtml+xml" -Expect: not bozo and feed['link'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml deleted file mode 100644 index 6d8919fcedda3bc4cdcea84e0f649626fb67e0bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href -Expect: not bozo and feed['links'][0]['href'] == u'http://www.example.com/' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml deleted file mode 100644 index ea03612953be60619adbcfbf946939fb81fc9ff4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link hreflang -Expect: not bozo and feed['links'][0]['hreflang'] == u'en' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml deleted file mode 100644 index b9e04e95d8642b999ec975dbc31173545097b623..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link length -Expect: not bozo and feed['links'][0]['length'] == u'42301' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml deleted file mode 100644 index 8745e6ef45d8e4e3bf5bee7cb0c407a139977324..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed multiple links -Expect: not bozo and feed['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and feed['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'} ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/> - <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml deleted file mode 100644 index 69af2b88695ae97f31093da7ca4ed2285f6d935a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel defaults to 'alternate' -Expect: not bozo and feed['links'][0]['rel'] == u'alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml deleted file mode 100644 index eb935d8d5eff4cf4a989bc947a54592ad560782a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel -Expect: not bozo and feed['links'][0]['rel'] == u'alternate' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml deleted file mode 100644 index c721a447bd224f0f5dd97f2158cb91774e41f081..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel as URI -Expect: not bozo and feed['links'][0]['rel'] == u'http://feedparser.org/rel/test' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml deleted file mode 100644 index b19d09bb67214c975f02e3a21728820dbe8047c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel='related' -Expect: not bozo and feed['links'][0]['rel'] == u'related' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="related" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml deleted file mode 100644 index 601402acc1eef6825473f394ecb868f514bad1e4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel='self' -Expect: not bozo and feed['links'][0]['rel'] == u'self' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="self" type="application/atom+xml" href="http://www.example.com/"/> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml deleted file mode 100644 index 11a542e3f74c14b9d3165d0b4f4e95914b34cdaf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel='self' default mimetype -Expect: not bozo and feed['links'][0]['type'] == u'application/atom+xml' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="self" href="http://www.example.com/"/> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml deleted file mode 100644 index 12993fde2f6ae6f545eb216b7d356ea112955add..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link rel='via' -Expect: not bozo and feed['links'][0]['rel'] == u'via' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="via" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml deleted file mode 100644 index 72cc9e92297b5281b6458b5912c0649f174746b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link title -Expect: not bozo and feed['links'][0]['title'] == u'Example title' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml deleted file mode 100644 index 8bf83efbe60d9df3155ce779e946cdba1ffcd17b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link type -Expect: not bozo and feed['links'][0]['type'] == u'text/html' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" type="text/html" href="http://www.example.com/"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_logo.xml b/lib/feedparser/tests/wellformed/atom10/feed_logo.xml deleted file mode 100644 index 1dbf1a1d271254652a822ce1b0361fb8c7117243..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_logo.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed logo -Expect: not bozo and feed['logo'] == u'http://example.com/logo.jpg' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <logo>http://example.com/logo.jpg</logo> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights.xml deleted file mode 100644 index a44db6faf6493b12e398f8037499f1f1b4081a8d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights -Expect: not bozo and feed['rights'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights>Example Atom</rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml deleted file mode 100644 index 956daca3e9bf6567fe67a54560d7a4aa2ac852e0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed rights base64-encoded -Expect: not bozo and feed['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml deleted file mode 100644 index 76b1b2b7c3ee35a6d9e5083b53e251cfb28c9038..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed rights base64-encoded -Expect: not bozo and feed['rights'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<rights type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml deleted file mode 100644 index ee44d5adf037a9bf422c40364f36a492febad562..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights content type defaults to 'text/plain' -Expect: not bozo and feed['rights_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights>Example Atom</rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml deleted file mode 100644 index 6aa0412aa6ca12136bb29435fdf3c00da366353a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights type='text' -Expect: not bozo and feed['rights_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights type="text">Example Atom</rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml deleted file mode 100644 index fb0780031e30af9e8f028d3af81942fea86cf888..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights content value -Expect: not bozo and feed['rights_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights>Example Atom</rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml deleted file mode 100644 index 8384d2998261641a97df67eae194b6015fd2fc27..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights escaped HTML -Expect: not bozo and feed['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights type="html">Example <b>Atom</b></rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml deleted file mode 100644 index 080f880e366e1d33b12eb73ad740e8548f1658ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights inline XHTML -Expect: not bozo and feed['rights'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml deleted file mode 100644 index d8b953fd27f97949be628ddd939dc8250e2a2f5e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights inline XHTML with escaped markup -Expect: not bozo and feed['rights'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></rights> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml deleted file mode 100644 index 54e7e612df7ff8911b9f31eaa13bbf31b7c9f86f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed rights with explicit type='text' -Expect: not bozo and feed['rights'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <rights type="text">Example Atom</rights> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml deleted file mode 100644 index 8a07142c424d282315b659fa0cc41b0db5e5602b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle -Expect: not bozo and feed['subtitle'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle>Example Atom</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml deleted file mode 100644 index 8dd6a864fe2079e637701f58e3d9d85b7ed5a1c5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed subtitle base64-encoded -Expect: not bozo and feed['subtitle'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml deleted file mode 100644 index d2ef0d6e7a1ffbaf5319a4a4e0a5372fa08bc24b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed subtitle base64-encoded -Expect: not bozo and feed['subtitle'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<subtitle type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml deleted file mode 100644 index 2e3395140328d99427f3bee26b0612fbc052bc6e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle content type defaults to 'text/plain' -Expect: not bozo and feed['subtitle_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle>Example Atom</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml deleted file mode 100644 index ce20736660a27fa093d659a4dfa56c43ac55db06..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle type='text' -Expect: not bozo and feed['subtitle_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle type="text">Example Atom</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml deleted file mode 100644 index 309deafbe2f0c7c82a67c9b18dccfcf8f6c7fb22..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle content value -Expect: not bozo and feed['subtitle_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle>Example Atom</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml deleted file mode 100644 index fc7a85b87766caf1f7a42c6d75a412f5ce383e62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle escaped HTML -Expect: not bozo and feed['subtitle'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle type="html">Example <b>Atom</b></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml deleted file mode 100644 index 2742f68e5cb427e1bde5183dd90ac669b5953c29..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle inline XHTML -Expect: not bozo and feed['subtitle'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></subtitle> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml deleted file mode 100644 index 4b36e24abb8190f39ea4667afb0be3ca8de58441..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle inline XHTML with escaped markup -Expect: not bozo and feed['subtitle'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></subtitle> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml deleted file mode 100644 index bf97397aba01f0cfa9f40620fe13d94a2b2ff2c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle with explicit type='text' -Expect: not bozo and feed['subtitle'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <subtitle type="text">Example Atom</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title.xml b/lib/feedparser/tests/wellformed/atom10/feed_title.xml deleted file mode 100644 index 37a26ea51da7d7c9535f1912666355307160eb53..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml deleted file mode 100644 index 5c07e7295ba5ef3b2322e5307f69b080ea030d88..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed title base64-encoded -Expect: not bozo and feed['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="application/octet-stream"> - RXhhbXBsZSA8Yj5BdG9tPC9iPg== - </title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml deleted file mode 100644 index 409c1f328ff528df92081f0aaa329cc15c9470e0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed title base64-encoded -Expect: not bozo and feed['title'] == u'<p>History of the <blink> tag</p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<title type="application/octet-stream"> -PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+ -</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml deleted file mode 100644 index 52d45675718614b4541070d13f2534d42d92e9fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content type defaults to 'text/plain' -Expect: not bozo and feed['title_detail']['type'] == u'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml deleted file mode 100644 index d1649921c9f61df7eb228135cc7c24d73a05db97..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title type='text' -Expect: not bozo and feed['title_detail']['type'] == 'text/plain' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="text">Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml deleted file mode 100644 index 7d31b22e4744c6e2bec9d6ed5df68864343a1e02..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content value -Expect: not bozo and feed['title_detail']['value'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title>Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml deleted file mode 100644 index ba23dc0bf65f4de7999737c4cf40c7fea4b68486..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title escaped HTML -Expect: not bozo and feed['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html">Example <b>Atom</b></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml deleted file mode 100644 index fea23a77cbd782fdc32d53334b1b9e5b7c3c8aff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title inline XHTML -Expect: not bozo and feed['title'] == u'Example <b>Atom</b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml deleted file mode 100644 index ec2da6b045820c8a00f517bfd386223873b9e56c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title inline XHTML with escaped markup -Expect: not bozo and feed['title'] == u'History of the <blink> tag' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the <blink> tag</div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml deleted file mode 100644 index 0f7ff95927f072410b32ca00258029b48f44e5bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title with explicit type='text' -Expect: not bozo and feed['title'] == u'Example Atom' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="text">Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml deleted file mode 100644 index c66c46d1cac888676624af641826a100cfe90c51..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: multiple media:category tags - label -Expect: not bozo and entries[0].tags[0].label == u'lab1' ---> -<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> - <channel> - <item> - <media:category label="lab1">cat1</media:category> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml deleted file mode 100644 index 95b2f48c6d9e778ebaa83a27c23f0eec748cd662..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: multiple media:category tags - multiple categories -Expect: not bozo and len(entries[0].tags) == 2 and entries[0].tags[1].term == u'cat2' ---> -<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> - <channel> - <item> - <media:category>cat1</media:category> - <media:category>cat2</media:category> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml deleted file mode 100644 index d1de91e2b4adceb020061264405fad1cfe045c72..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: multiple media:category tags - default scheme -Expect: not bozo and entries[0].tags[0].scheme == u'http://search.yahoo.com/mrss/category_schema' ---> -<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> - <channel> - <item> - <media:category>cat1</media:category> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml deleted file mode 100644 index 62f5c3657be2c3f6e2bf6eb1137bc5eb0b4e676d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: multiple media:category tags - custom scheme -Expect: not bozo and entries[0].tags[0].scheme == u'http://example.INVALID/' ---> -<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> - <channel> - <item> - <media:category scheme="http://example.INVALID/">cat1</media:category> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml deleted file mode 100644 index d01d81fb037e47ec627501103b5f2a8a28ecc180..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: multiple media:category tags - term -Expect: not bozo and entries[0].tags[0].term == u'cat1' ---> -<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> - <channel> - <item> - <media:category>cat1</media:category> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml b/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml deleted file mode 100644 index 4262d196240ed60dacc62aa28c0ba53dd849d2bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: media:title @type="plain" -Expect: not bozo and entries[0]['title_detail']['type'] == u'text/plain' ---> -<rss xmlns:media="http://search.yahoo.com/mrss/"> - <channel> - <item> - <media:title type="plain">plain means text/plain</media:title> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml deleted file mode 100644 index a62a0d9ecf0d4dc0793f3d7a96661ad1f7dd82ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: href is missing a quote -Expect: not bozo and feed['title_detail']['value'] == u'<a href="http://example.com/"">example</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html"><![CDATA[<a href=http://example.com/">example</a>]]></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/qna.xml b/lib/feedparser/tests/wellformed/atom10/qna.xml deleted file mode 100644 index 6198ec1e3588d73bfa1fbf873fab01f4580f0013..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/qna.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: Q&A -Expect: not bozo and entries[0]['title_detail']['value'] == u'Q&A session' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title type="html">Q&A session</title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml deleted file mode 100644 index 88c133c76b3f9281c859fdf598dcd12355e0e7ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains URI with an amperand -Expect: not bozo and feed['title_detail']['value'] == u'<a title=""test"">test</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a title='"test"'>test</a></div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri.xml deleted file mode 100644 index 8c5509bd47728b1d05a5f3fe10a555f00c680dab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/relative_uri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains relative URI resolved relative to xml:base -Expect: not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="xhtml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml deleted file mode 100644 index 5462c18f42a3ce264b45f14ccf734026f2aeacdd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains relative URI resolved relative to xml:base inherited from parent element -Expect: not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.com/test/"> - <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml deleted file mode 100644 index e018e2df2e2658c232655efb1de8ff598470b763..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains relative URI resolved relative to xml:base overriding parent xml:base -Expect: not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.com/parent/"> - <title type="xhtml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml deleted file mode 100644 index 9e4d3bebbd8141c59cabd963e29d58a71883fa8c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: image attribute contains angle brackets -Expect: not bozo and feed['title_detail']['value'] == u'<img alt="cat<br />dog" src="http://example.com/cat-dog.jpg" />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html"><![CDATA[<img src="http://example.com/cat-dog.jpg" alt="cat<br />dog">]]></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml b/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml deleted file mode 100644 index f90968e407602b4dd4042139fbc1579c5a1da719..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -Description: CDF item abstract xml:base -Expect: not bozo and entries[0]['summary_detail']['base'] == u'http://base.example.org/' ---> -<CHANNEL - BASE="http://base.example.org/" - HREF="http://www.example.org/" - LASTMOD="2004-04-06T23:05:43-05:00" - PRECACHE="No"> - <TITLE>channel title</TITLE> - <ABSTRACT>channel abstract</ABSTRACT> - <ITEM HREF="/item/1" - PRECACHE="No" - LASTMOD="2004-04-06T23:05:43-05:00"> - <TITLE>item title</TITLE> - <ABSTRACT>item abstract</ABSTRACT> - </ITEM> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml deleted file mode 100644 index d64344ec9cb57f881c7ab22fa39f4d0f1e56418d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content xml:base -Expect: not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml deleted file mode 100644 index cd09929e7d848272875998e789284ea14dfaed53..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content xml:base inherited from parent element -Expect: not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> -<entry> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml deleted file mode 100644 index 58c699d4c547c1e199af963f885296a4b5676491..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content xml:base overrides parent element -Expect: not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml deleted file mode 100644 index 49c3ceabe1a92a9a17208ad37573817e0b2fff69..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry content xml:base resets properly on new element -Expect: not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml deleted file mode 100644 index 64053cf42cfc146ed47504c8ebcf7a44ab191706..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry content xml:base inherits properly on new element -Expect: not bozo and entries[0]['content'][0]['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml deleted file mode 100644 index ae49ecf397c144fa5bb34ab5fed86cf76a98cd62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content xml:base -Expect: not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml deleted file mode 100644 index 3fe2334802bbc1cb959bbce56dc757a108ad5814..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content xml:base inherited from parent element -Expect: not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> -<entry> - <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml deleted file mode 100644 index cf0c95fd8f0ee5af454197d3c071c718d1d5767a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content xml:base overrides parent element -Expect: not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <summary type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml deleted file mode 100644 index 75f442b6c03428cfe08cc59ee0c0d382699dcc47..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry summary content xml:base resets properly on new element -Expect: not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/summary/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <summary type="application/xhtml+xml" xml:base="http://example.com/summary/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml deleted file mode 100644 index d36029944a100965485b62241cc81c7ea623367f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry summary content xml:base inherits properly on new element -Expect: not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml deleted file mode 100644 index 10a13fe86d1aa14befa61b1174b5e6137f9218dd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content xml:base -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml deleted file mode 100644 index b838c9ec313df3376e6fceebcd1e31b5c4448ae3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content xml:base inherited from parent element -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> -<entry> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml deleted file mode 100644 index 7bef55e6682b1afda2f045d97daf44c96f5aa1ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title content xml:base overrides parent element -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml deleted file mode 100644 index 28518d98f90aeb78dc4c1f63d41296cd91c1605b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry title content xml:base resets properly on new element -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml deleted file mode 100644 index 7104e0981ce1c918036ccd418f5a4818bb014bcb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry title content xml:base inherits properly on new element -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> -<entry> - <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml deleted file mode 100644 index 22a3de836f29ac88fe7a20ca24fb03c610bb7989..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright content xml:base -Expect: not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml deleted file mode 100644 index fd19cc4b88ee8bbf1221b7bc1d74d8a9dcb7430b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright content xml:base inherited from parent element -Expect: not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> - <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml deleted file mode 100644 index 5d2b7a66c7bb45178a3963add53555e15c1eca42..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright content xml:base overrides parent element -Expect: not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml deleted file mode 100644 index eddb60afadd5efcfd78999230c29eb2af3619928..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed copyright content xml:base resets properly on new element -Expect: not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml deleted file mode 100644 index 14afc9d789654508a957455ff5027d21bda91d98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed copyright content xml:base inherits properly on new element -Expect: not bozo and feed['copyright_detail']['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml deleted file mode 100644 index 2f830c6ad3e751c482ec2076cfe895c83ee0aa99..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info content xml:base -Expect: not bozo and feed['info_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml deleted file mode 100644 index 50cf9cd4750fec290c1640e1b15eda0051aff756..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info content xml:base inherited from parent element -Expect: not bozo and feed['info_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> - <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml deleted file mode 100644 index 3a095a58e0e3820ed0c1b4d8a05d9be4cee39d2e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info content xml:base overrides parent element -Expect: not bozo and feed['info_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml deleted file mode 100644 index 92f6d36f654c98b761a777a9380115510f4683d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed info content xml:base resets properly on new element -Expect: not bozo and feed['info_detail']['base'] == u'http://example.com/info/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml deleted file mode 100644 index 09dcc337da5727c4f8eb4a24619cdf2f612dc06a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed info content xml:base inherits properly on new element -Expect: not bozo and feed['info_detail']['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml b/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml deleted file mode 100644 index 4777baa2e427c711805ad8e2f67fb6db9be7b9cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: xml:base is an IRI -Expect: not bozo and feed['links'][0]['href'] == u'http://www.\u8a79\u59c6\u65af.com/feed' ---> -<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://www.詹姆斯.com/feed"> - <link rel="self" type="application/atom+xml" href=""/> -</feed> diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml deleted file mode 100644 index 953f2b8088daabcfe005cf19053ccf1f4d9d1cd4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline content xml:base -Expect: not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml deleted file mode 100644 index c6339d7f0ba2a8964fc2f8cdddb3a458610e4c7c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline content xml:base inherited from parent element -Expect: not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> - <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml deleted file mode 100644 index 5ce1d77f2701d31b0143f9027cc60b994c555af2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline content xml:base overrides parent element -Expect: not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml deleted file mode 100644 index 0e8403636a6e61148f711b83aaf7d9d2a0aeac82..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed tagline content xml:base resets properly on new element -Expect: not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml deleted file mode 100644 index 6248bbd6a73145f5221c5d737cbaf1c315346e97..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed tagline content xml:base inherits properly on new element -Expect: not bozo and feed['tagline_detail']['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml deleted file mode 100644 index 3613c680b656c29f1dc20dabfcb45481c5c95a76..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content xml:base -Expect: not bozo and feed['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml deleted file mode 100644 index 8c06788b80c9805dccdc0be493ba5f8dd96ca3a6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content xml:base inherited from parent element -Expect: not bozo and feed['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/"> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml deleted file mode 100644 index 8137b7f541a7cd7547c99123f3ee915f54269776..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content xml:base overrides parent element -Expect: not bozo and feed['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml deleted file mode 100644 index 5123fb5db8f4551fffb2267f57c7aa9c9f491840..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed title content xml:base resets properly on new element -Expect: not bozo and feed['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml deleted file mode 100644 index 5675be27c3d3df5402824599ea4581de6fa18622..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed title content xml:base inherits properly on new element -Expect: not bozo and feed['title_detail']['base'] == u'http://example.com/parent/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/"> - <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml deleted file mode 100644 index 26f7ccd166077db986a234309ea2488919ab3f9d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: channel docs relative to Content-Location header -Expect: not bozo and feed['docs'] == u'http://example.com/relative/uri' ---> -<rss version="2.0"> -<channel> -<docs>/relative/uri</docs> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml deleted file mode 100644 index 933567e05e2727249b8b464d452a48fb958ae169..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel docs relative to document URI -Expect: not bozo and feed['docs'] == u'http://127.0.0.1:8097/relative/uri' ---> -<rss version="2.0"> -<channel> -<docs>/relative/uri</docs> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml deleted file mode 100644 index 400976b314ca3767e485afa2a6b96972a9dacc82..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: channel link relative to Content-Location header -Expect: not bozo and feed['link'] == u'http://example.com/relative/uri' ---> -<rss version="2.0"> -<channel> -<link>/relative/uri</link> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml deleted file mode 100644 index 4611b5918a3ddef428f39cf8544eae295bb491eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel link relative to document URI -Expect: not bozo and feed['link'] == u'http://127.0.0.1:8097/relative/uri' ---> -<rss version="2.0"> -<channel> -<link>/relative/uri</link> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml deleted file mode 100644 index ad89d1d453331c5c03af53feabaa3c2bd32f5fa9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry author url relative to Content-Location header -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<author> - <url>/relative/link</url> -</author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml deleted file mode 100644 index 90de1ea27d3f380752c20cd0b121069297cdc557..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry author url relative to document URI -Expect: not bozo and entries[0]['author_detail']['url'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<author> - <url>/relative/link</url> -</author> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml deleted file mode 100644 index 5bdf866d6fff7b4aab206bfa5a30032ce9b94b76..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry content relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml deleted file mode 100644 index c2672064cac049e0709ed0e0bc88c84ccbfe1c8e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry content relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml deleted file mode 100644 index 650fbd93a26637e8891ea86a7f9402e3f97b5cb5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry content relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml deleted file mode 100644 index 97c0e437a726af2f8daa070c8852dc01491a136b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml deleted file mode 100644 index 71855723618d5bf165d4cf0cafedc39033d2638f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry content relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml deleted file mode 100644 index cbd82ca0da067dbbfe290ea4e8c3e8b69569b5ed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml deleted file mode 100644 index 84f38b96fe305768aa1429d6661eaf35be134366..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry contributor url relative to Content-Location header -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<item> -<contributor> - <url>/relative/link</url> -</contributor> -</item> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml deleted file mode 100644 index 7bf7738b52095a2e458e7977da4860fb31e97a19..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry contributor url relative to document URI -Expect: not bozo and entries[0]['contributors'][0]['url'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<item> -<contributor> - <url>/relative/link</url> -</contributor> -</item> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml deleted file mode 100644 index 2a3cf901b15355d0d4df995c10c2c4e013be9c9d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry id relative to Content-Location header -Expect: not bozo and entries[0]['id'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <id>/relative/link</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml deleted file mode 100644 index a9e146d0d5d36db55c6044b23b28544521c3140e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry id relative to document URI -Expect: not bozo and entries[0]['id'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <id>/relative/link</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml deleted file mode 100644 index b09bde6934e54cf1d81388b9a639e7a45eee6e62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry link href relative to Content-Location header -Expect: not bozo and entries[0]['links'][0]['href'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" href="/relative/link"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml deleted file mode 100644 index ec49b0825ec6a3803366a25a142a841b5b987d0b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry link href relative to document URI -Expect: not bozo and entries[0]['links'][0]['href'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <link rel="alternate" type="text/html" href="/relative/link"/> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml deleted file mode 100644 index 0833f8112b94ea278f38db8114f86690b0665e8d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry summary relative to Content-Location header -Expect: not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml deleted file mode 100644 index 4ae879cf74a78addc285a352e4cd072a2192cded..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry summary relative to document URI -Expect: not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml deleted file mode 100644 index 031cbdcce613a2538a601691ce19955ac16c517c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry summary relative to Content-Location header -Expect: not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml deleted file mode 100644 index 27279f602e617c09c515fa2668d7567f1d48614c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary relative to document URI -Expect: not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml deleted file mode 100644 index 32c365e5cb57cd518e713e06f4cdd020eb967553..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry summary relative to Content-Location header -Expect: not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml deleted file mode 100644 index ea7820db25acc8f9f890bf918a04b1b81a79d105..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary relative to document URI -Expect: not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml deleted file mode 100644 index e23bdbb5a78b537e24b4ecc959040d4cca4b8757..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry title relative to Content-Location header -Expect: not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml deleted file mode 100644 index b9a673f0a664a0f7bb098c83f7faca0f72092a81..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: entry title relative to document URI -Expect: not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml deleted file mode 100644 index 9a0bc2b44dd84674f3e7ece9c5dbea8d7d2c38ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry title relative to Content-Location header -Expect: not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml deleted file mode 100644 index 776fbcde60bb0f878c19a2a94512a571a3d30b91..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title relative to document URI -Expect: not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml deleted file mode 100644 index 95f6bc07a36dbe64fdd372b63438d43e1ba82b41..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: entry title relative to Content-Location header -Expect: not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml deleted file mode 100644 index cb76689364dcf044feae6f3ba18f70504935fade..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title relative to document URI -Expect: not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml deleted file mode 100644 index f9c757fc841750a90da8ad092b4cedabd226977b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed author url relative to Content-Location header -Expect: not bozo and feed['author_detail']['url'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<author> - <url>/relative/link</url> -</author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml deleted file mode 100644 index f4c5ab2bee486228558c60e816854358a017fa5c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed author url relative to document URI -Expect: not bozo and feed['author_detail']['url'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<author> - <url>/relative/link</url> -</author> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml deleted file mode 100644 index 07c762e625fd697dbbd26b72f42b4a63e2c4d2bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed contributor url relative to Content-Location header -Expect: not bozo and feed['contributors'][0]['url'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<contributor> - <url>/relative/link</url> -</contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml deleted file mode 100644 index 962836c82f800f1541a0b974c5b131b115f4f2a0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed contributor url relative to document URI -Expect: not bozo and feed['contributors'][0]['url'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<contributor> - <url>/relative/link</url> -</contributor> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml deleted file mode 100644 index 045f730ec2552cf5e1690b67362a94defa0c16f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed copyright relative to Content-Location header -Expect: not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml deleted file mode 100644 index 717641426dc59eb03845d50f012f95a9f8dd7d8a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed copyright relative to document URI -Expect: not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml deleted file mode 100644 index a15fe2a016f422a63ad3d39d43e3b0a481b777d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed copyright relative to Content-Location header -Expect: not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml deleted file mode 100644 index ff363af77b775357c1e4e6d3c81cf86e623356e6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright relative to document URI -Expect: not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml deleted file mode 100644 index f9e8555f34126c85be125752a0ae4c6c1ac63fc7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed copyright relative to Content-Location header -Expect: not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml deleted file mode 100644 index b076c7a1b152b0cfb059050b07c3dbb1e6927291..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright relative to document URI -Expect: not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml deleted file mode 100644 index 3b418bc0d2651bde90ba1462cddba15684a23255..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed generator url relative to Content-Location header -Expect: not bozo and feed['generator_detail']['url'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<generator url="/relative/link" version="2.66">Movable Type</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml deleted file mode 100644 index b9d9e66e04fb02973b15237fb9b603b223e62e83..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed generator url relative to document URI -Expect: not bozo and feed['generator_detail']['url'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<generator url="/relative/link" version="2.66">Movable Type</generator> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml deleted file mode 100644 index 3f8b6ae62d82e924ce5c1426056e316548d397a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed id relative to Content-Location header -Expect: not bozo and feed['id'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <id>/relative/link</id> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml deleted file mode 100644 index a4c67022466c7a7bdd14755c019163c3d3547b8e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed id relative to document URI -Expect: not bozo and feed['id'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <id>/relative/link</id> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml deleted file mode 100644 index 6bb78e83ca5c4e71dc14de614c5997720710cd31..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed info relative to Content-Location header -Expect: not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml deleted file mode 100644 index 66ba7854fe2ec5a9c5a28ea583d1b5a66546a297..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed info relative to document URI -Expect: not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml deleted file mode 100644 index 78a09e5af21d13bb4cb2e9058e6821eaeecbb119..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed info relative to Content-Location header -Expect: not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml deleted file mode 100644 index a19e737e8167d2d004eea22a2fd9203146633f38..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info relative to document URI -Expect: not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml deleted file mode 100644 index 8e60e15723ce6f8a5acafb47be7bb0aa82f55771..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed info relative to Content-Location header -Expect: not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml deleted file mode 100644 index 41bd64a1ad817cfe8fd6dfdae913f28010d0debd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info relative to document URI -Expect: not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml deleted file mode 100644 index 3c416b1f4cd78d563355eb87fb55883c261fe5d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed link href relative to Content-Location header -Expect: not bozo and feed['links'][0]['href'] == u'http://example.com/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" href="/relative/link"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml deleted file mode 100644 index ab7fe93d721012f288d8edf8c8f210fef3e159a6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed link href relative to document URI -Expect: not bozo and feed['links'][0]['href'] == u'http://127.0.0.1:8097/relative/link' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <link rel="alternate" type="text/html" href="/relative/link"/> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml deleted file mode 100644 index cfa216da7ec28c48ce68a8894e8d4b8f47878ede..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed tagline relative to Content-Location header -Expect: not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml deleted file mode 100644 index 2bd63232734b83740d519837ada835013f27800d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed tagline relative to document URI -Expect: not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml deleted file mode 100644 index 29e93e545b5baae3fee780e7c8cde382c9c0ac9b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed tagline relative to Content-Location header -Expect: not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml deleted file mode 100644 index 2fe14caa368ea7441d5751e84124d70f849d91c1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline relative to document URI -Expect: not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml deleted file mode 100644 index 619b3a6acff679159cb8235e2d1d6724fbc82487..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed tagline relative to Content-Location header -Expect: not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml deleted file mode 100644 index e5a05f409f0643396fc3a2c89a656a306f4b866a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline relative to document URI -Expect: not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml deleted file mode 100644 index 38975b42edcfdc4969d25ae8038461c679f1d506..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed title relative to Content-Location header -Expect: not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml deleted file mode 100644 index 88ee5ab398e75589a50acf9d06d325df0390fc90..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed title relative to document URI -Expect: not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="base64"> -PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg== -</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml deleted file mode 100644 index a0d29406808bbe8b6ea0d2baafc49163b52b1696..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed title relative to Content-Location header -Expect: not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml deleted file mode 100644 index 0a9a941445bfbe9bc03a4f6902326b4635a9b659..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title relative to document URI -Expect: not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><div><a href="/relative/uri">click here</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml deleted file mode 100644 index 2287791d6476e9d28a5fc0b4c0899a36d613b61c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: feed title relative to Content-Location header -Expect: not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml deleted file mode 100644 index 2eb83ad463deb78c2f71a091e9939b8bf79f2fe1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title relative to document URI -Expect: not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml deleted file mode 100644 index 036295ac884faad873c29211e766eacccdfc2a90..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item body relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<body><a href="/relative/uri">click here</a></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml deleted file mode 100644 index 1abea1066dd10cd2dd1128a7265a03bdafbfe812..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item body relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<body><a href="/relative/uri">click here</a></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml deleted file mode 100644 index 128cdddd28bd8d6c414414a8546faf81c5508c80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item comments relative to Content-Location header -Expect: not bozo and entries[0]['comments'] == u'http://example.com/relative/uri' ---> -<rss version="2.0"> -<channel> -<item> -<comments>/relative/uri</comments> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml deleted file mode 100644 index a42a28481099899a8a02627676ccd4deb9c8b734..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item comments relative to document URI -Expect: not bozo and entries[0]['comments'] == u'http://127.0.0.1:8097/relative/uri' ---> -<rss version="2.0"> -<channel> -<item> -<comments>/relative/uri</comments> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml deleted file mode 100644 index 03526eba2546ca0f457cd08a791ae853dd473e8b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item content:encoded relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><a href="/relative/uri">click here</a></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml deleted file mode 100644 index d7e7430b1da84f8ec0debcca8379285d0f616721..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><a href="/relative/uri">click here</a></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml deleted file mode 100644 index f935976f03e0d99144495e268b5cd62c294cb58f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item description relative to Content-Location header -Expect: not bozo and entries[0]['description'] == u'<a href="http://example.com/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<description><a href="/relative/uri">click here</a></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml deleted file mode 100644 index 0e56e0a8983ed71ad1eb20ce1e086ee4390c0e8a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description relative to document URI -Expect: not bozo and entries[0]['description'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<description><a href="/relative/uri">click here</a></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml b/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml deleted file mode 100644 index 1efc8b7c334fd4b26dd743d541e4e52d0f139f12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description relative to document URI -Expect: not bozo and entries[0]['description'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<description><a href=" /relative/uri ">click here</a></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml deleted file mode 100644 index a10d10545fa91ab3be407091704bb2b3adab03ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item fullitem relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><a href="/relative/uri">click here</a></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml deleted file mode 100644 index 145fb7c1022b2f201325583c0a48a8ca4538cd44..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><a href="/relative/uri">click here</a></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml deleted file mode 100644 index ad5fec181c514ba047298435b50aea3de49cb7e6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item link relative to Content-Location header -Expect: not bozo and entries[0]['link'] == u'http://example.com/relative/uri' ---> -<rss version="2.0"> -<channel> -<item> -<link>/relative/uri</link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml deleted file mode 100644 index c3dabac3a0893e0602441f2c1af5bb5cea4431fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item link relative to document URI -Expect: not bozo and entries[0]['link'] == u'http://127.0.0.1:8097/relative/uri' ---> -<rss version="2.0"> -<channel> -<item> -<link>/relative/uri</link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml deleted file mode 100644 index fe5c1a7211149a107647dc929ed1b3b18d512a4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item wfw:commentRSS relative to Content-Location header -Expect: not bozo and entries[0]['wfw_commentrss'] == u'http://example.com/relative/uri' ---> -<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"> -<channel> -<item> -<wfw:commentRSS>/relative/uri</wfw:commentRSS> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml deleted file mode 100644 index 0704efdbd3b34735df734206b13d94746793df7a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item wfw:commentRSS relative to document URI -Expect: not bozo and entries[0]['wfw_commentrss'] == u'http://127.0.0.1:8097/relative/uri' ---> -<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"> -<channel> -<item> -<wfw:commentRSS>/relative/uri</wfw:commentRSS> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml deleted file mode 100644 index f15c73a17a646c6d5ffc279aa255c7ec6c786392..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item wfw:comment relative to Content-Location header -Expect: not bozo and entries[0]['wfw_comment'] == u'http://example.com/relative/uri' ---> -<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"> -<channel> -<item> -<wfw:comment>/relative/uri</wfw:comment> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml deleted file mode 100644 index f01880b127ee137e8b10481c9f373e2f93e54313..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item wfw:comment relative to document URI -Expect: not bozo and entries[0]['wfw_comment'] == u'http://127.0.0.1:8097/relative/uri' ---> -<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"> -<channel> -<item> -<wfw:comment>/relative/uri</wfw:comment> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml deleted file mode 100644 index a30fdcea785c21f4217c34d4c7d842ceae0f5cff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: item body relative to Content-Location header -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml deleted file mode 100644 index c7a441ea34e01e17b33968f07e2908848029ab26..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item body relative to document URI -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml b/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml deleted file mode 100644 index 46aa556e1d23085d847fab492107e54dbb1ef3ef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: xml:base relative to parent (and Content-Location) -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/feed/entry/title/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="feed/"> -<entry xml:base="entry/"> - <title type="application/xhtml+xml" xml:base="title/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml b/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml deleted file mode 100644 index 362d948e6b701ee49228f11a16364d3eb6054dc6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Location: http://example.com/ -Description: xml:base relative to parent (and Content-Location) -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/entry/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="feed/base/"> -<entry xml:base="/entry/base/"> - <title type="application/xhtml+xml" xml:base="../"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/item_media_title1.xml b/lib/feedparser/tests/wellformed/base/item_media_title1.xml deleted file mode 100644 index d3c272e38054c8ac0b66a3aaf95b6c9cd2bf7f2e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/item_media_title1.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: media title as a fallback -Expect: not bozo and entries[0]['title'] == u'bar' ---> -<rss xmlns:media="http://search.yahoo.com/mrss/"> - <channel> - <item> - <media:title>bar</media:title> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/base/item_media_title2.xml b/lib/feedparser/tests/wellformed/base/item_media_title2.xml deleted file mode 100644 index 57c7aef9f1f3cdfa55f5c28d2f41dd3aaee456b4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/item_media_title2.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: media title as a fallback -Expect: not bozo and entries[0]['title'] == u'foo' ---> -<rss xmlns:media="http://search.yahoo.com/mrss/"> - <channel> - <item> - <media:title>bar</media:title> - <title>foo</title> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/base/item_media_title3.xml b/lib/feedparser/tests/wellformed/base/item_media_title3.xml deleted file mode 100644 index a9fbd31c55789f37209c1d4f987f661ae14864ca..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/item_media_title3.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: media title as a fallback -Expect: not bozo and entries[0]['title'] == u'foo' ---> -<rss xmlns:media="http://search.yahoo.com/mrss/"> - <channel> - <item> - <title>foo</title> - <media:title>bar</media:title> - </item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/base/malformed_base.xml b/lib/feedparser/tests/wellformed/base/malformed_base.xml deleted file mode 100644 index 3bed7b02fb593bfd082dac8c7053168b74aeff36..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/malformed_base.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: xml:base is malformed (too many slashes after scheme) -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry xml:base="http://example.com/"> - <title type="application/xhtml+xml" xml:base="http:///example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml b/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml deleted file mode 100644 index 2f8d9330afe9bc96230a84e1da78a6238850d90a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: relative uri resolution with non-ascii characters -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://any.test/\u00c0">uri</a>' ---> -<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:base="http://any.test/"> -<channel> -<item> - <content:encoded><a href="À">uri</a></content:encoded> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/base/relative_xml_base.xml b/lib/feedparser/tests/wellformed/base/relative_xml_base.xml deleted file mode 100644 index 1c686c63f98bac6390c64fdd57f116f1c27f01ca..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/relative_xml_base.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: xml:base relative to parent -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry xml:base="http://example.com/"> - <title type="application/xhtml+xml" xml:base="test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml b/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml deleted file mode 100644 index 4d2115e4b9eb6c593f4f21c6d9302f78f01e6be6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: xml:base relative to parent (recursive) -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/"> -<entry xml:base="test/entry/"> - <title type="application/xhtml+xml" xml:base="../"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/base/unsafe_base.xml b/lib/feedparser/tests/wellformed/base/unsafe_base.xml deleted file mode 100644 index 50b8c30fd079b567c81c393969d4c659c6e2ad05..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/base/unsafe_base.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -SkipUnless: feedparser.ACCEPTABLE_URI_SCHEMES -Description: xml:base is unsafe (uses unacceptable URI protocol) -Expect: not bozo and entries[0]['title_detail']['base'] == u'http://example.com/' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry xml:base="http://example.com/"> - <title type="application/xhtml+xml" xml:base="javascript:alert('unsafe')"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml b/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml deleted file mode 100644 index 8bce8d9ee64c7d4d4a23852c32d7975703d1909d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: CDF channel abstract maps to description -Expect: not bozo and feed['description'] == u'Example description' ---> -<CHANNEL> - <ABSTRACT>Example description</ABSTRACT> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml b/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml deleted file mode 100644 index 04feca0c1e384f47dff2b54c60128332f1d450fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: CDF channel abstract maps to tagline -Expect: not bozo and feed['tagline_detail']['value'] == u'Example description' ---> -<CHANNEL> - <ABSTRACT>Example description</ABSTRACT> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml b/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml deleted file mode 100644 index 133f14194cb7af629494dc78f773927ec7ff538b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: CDF channel href maps to link -Expect: not bozo and feed['link'] == u'http://www.example.org/' ---> -<CHANNEL HREF="http://www.example.org/"> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml b/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml deleted file mode 100644 index 0c65bc27a883c68bcb48dcbe3363b4b177acc50e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: CDF channel href maps to links -Expect: not bozo and feed['links'][0]['href'] == u'http://www.example.org/' ---> -<CHANNEL HREF="http://www.example.org/"> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml b/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml deleted file mode 100644 index 7b91da4df60612c151ec45e13312118e80887a2f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: CDF channel lastmod -Expect: not bozo and feed['updated'] == u'2004-04-06T23:05:43-05:00' ---> -<CHANNEL LASTMOD="2004-04-06T23:05:43-05:00"> -</CHANNEL> diff --git a/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml b/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml deleted file mode 100644 index 65faa72c148ad19bc33ed380b6dff39b7ca0f935..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: CDF channel lastmod parsed -Expect: not bozo and feed['updated_parsed'] == (2004, 4, 7, 4, 5, 43, 2, 98, 0) ---> -<CHANNEL LASTMOD="2004-04-06T23:05:43-05:00"> -</CHANNEL> diff --git a/lib/feedparser/tests/wellformed/cdf/channel_title.xml b/lib/feedparser/tests/wellformed/cdf/channel_title.xml deleted file mode 100644 index 080c725fa7b556c47dc19730edf4ac07a43634da..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/channel_title.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: CDF channel title -Expect: not bozo and feed['title'] == u'Example feed' ---> -<CHANNEL> - <TITLE>Example feed</TITLE> -</CHANNEL> diff --git a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml b/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml deleted file mode 100644 index 64821d07df37f2b52ec028e345714efaf8dfcea7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: CDF item abstract maps to description -Expect: not bozo and entries[0]['description'] == u'Example description' ---> -<CHANNEL> -<ITEM> - <ABSTRACT>Example description</ABSTRACT> -</ITEM> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml b/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml deleted file mode 100644 index 14946c9d781e11f344964903d210a7105dc0e85d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: CDF item abstract maps to summary -Expect: not bozo and entries[0]['summary_detail']['value'] == u'Example description' ---> -<CHANNEL> -<ITEM> - <ABSTRACT>Example description</ABSTRACT> -</ITEM> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml b/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml deleted file mode 100644 index 973609ebaf518b4055967c67cfef3a438cd445b5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: CDF item href maps to link -Expect: not bozo and entries[0]['link'] == u'http://www.example.org/' ---> -<CHANNEL> -<ITEM HREF="http://www.example.org/"> -</ITEM> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml b/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml deleted file mode 100644 index a55082e919c0e1b56c3f301307c28bc2923742e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: CDF item href maps to links -Expect: not bozo and entries[0]['links'][0]['href'] == u'http://www.example.org/' ---> -<CHANNEL> -<ITEM HREF="http://www.example.org/"> -</ITEM> -</CHANNEL> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml b/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml deleted file mode 100644 index 50db8a1374d41032d15c96883506c2be1eb2c4ac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: CDF item lastmod -Expect: not bozo and entries[0]['updated'] == u'2004-04-06T23:05:43-05:00' ---> -<CHANNEL> -<ITEM LASTMOD="2004-04-06T23:05:43-05:00"> -</ITEM> -</CHANNEL> diff --git a/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml b/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml deleted file mode 100644 index 1767352f181a159a51fe9082487219288857141d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: CDF item lastmod parsed -Expect: not bozo and entries[0]['updated_parsed'] == (2004, 4, 7, 4, 5, 43, 2, 98, 0) ---> -<CHANNEL> -<ITEM LASTMOD="2004-04-06T23:05:43-05:00"> -</ITEM> -</CHANNEL> diff --git a/lib/feedparser/tests/wellformed/cdf/item_title.xml b/lib/feedparser/tests/wellformed/cdf/item_title.xml deleted file mode 100644 index 50fb359d5c8b69f53c25809ca6ab76943eed8967..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/cdf/item_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: CDF item title -Expect: not bozo and entries[0]['title'] == u'Example item' ---> -<CHANNEL> -<ITEM> - <TITLE>Example item</TITLE> -</ITEM> -</CHANNEL> diff --git a/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml b/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml deleted file mode 100644 index 4d341cf017fc3b671cb227c956a177a959af077d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: FeedBurner browserFriendly maps to info -Expect: not bozo and feed['info'] == u'This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.' ---> -<rss version="2.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"> -<channel> - <feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml b/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml deleted file mode 100644 index 4c0254fe70e3d86a685f38bc2539986d3820d9f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Header: Content-Location: /feed/pg.cgi -Description: Content-Location header relative URI -Expect: not bozo and feed.link == u'http://127.0.0.1:8097/feed/absolute' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" href="absolute"/> -</feed> diff --git a/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml b/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml deleted file mode 100644 index e22c2625775f98b079720242fdf5d2a59e4e7229..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -SkipUnless: feedparser.ACCEPTABLE_URI_SCHEMES -Header: Content-Location: javascript:alert('unsafe'); -Description: Content-Location header unsafe URI -Expect: not bozo and feed.link == u'http://127.0.0.1:8097/abs' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <link rel="alternate" href="/abs"/> -</feed> diff --git a/lib/feedparser/tests/wellformed/http/headers_etag.xml b/lib/feedparser/tests/wellformed/http/headers_etag.xml deleted file mode 100644 index af4f905c621a0205015f433adf99402f2fe07d6c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/http/headers_etag.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: ETag: foo -Description: etag should only exist in results if present in HTTP headers -Expect: not bozo and etag ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/http/headers_foo.xml b/lib/feedparser/tests/wellformed/http/headers_foo.xml deleted file mode 100644 index e32833fb090e65a082acb8945c24af9156d8a3c7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/http/headers_foo.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: X-Foo: bar -Description: capture arbitrary HTTP header -Expect: not bozo and headers.get('x-foo', headers.get('X-Foo')) == 'bar' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> diff --git a/lib/feedparser/tests/wellformed/http/headers_no_etag.xml b/lib/feedparser/tests/wellformed/http/headers_no_etag.xml deleted file mode 100644 index 051c2a154cd637e135b7a6500836fe1bfe2173bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/http/headers_no_etag.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: X-Foo: bar -Description: etag should not exist in results if not present in HTTP headers -Expect: not bozo and not 'etag' in locals() ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -</feed> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml deleted file mode 100644 index 1d7b87ed0d4e0e0daa0a75b9cbe025214099f9ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes block -Expect: not bozo and feed['itunes_block'] == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>yes</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml deleted file mode 100644 index a935e1ce7518ae9a310d05647cdde77a2ecb6c8f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes block="false" -Expect: not bozo and feed['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>false</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml deleted file mode 100644 index 1aa627589f02a07ff795ef4ed3bf8546ebb71c39..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes block='no' -Expect: not bozo and feed['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>no</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml deleted file mode 100644 index 93655ae57cb66bce1e51160b607cf60cdfc9e5b4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes block="true" -Expect: not bozo and feed['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>true</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml deleted file mode 100644 index c031ef2c4f0ced380014d2cfe4786884014d71cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes block="YES" -Expect: not bozo and feed['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>YES</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml deleted file mode 100644 index 864f5e3d84c633598c01b487cb8497ec4259f19f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes block with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en -Expect: not bozo and feed['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block> yes </itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml deleted file mode 100644 index 7a670a2729c1884e6a0794eb392c485e4e28df1f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel category -Expect: not bozo and feed['tags'][0]['term'] == u'Technology' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:category text="Technology"></itunes:category> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml deleted file mode 100644 index 7ec9d5881c94690b6a09298a4fe7b3efb6cda5f9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes channel nested category -Expect: not bozo and feed['tags'][1]['term'] == u'Gadgets' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:category text="Technology"> - <itunes:category text="Gadgets"></itunes:category> -</itunes:category> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml deleted file mode 100644 index 00fde6bc825153fa8cf2d999b19d9b084ffab5fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel category scheme -Expect: not bozo and feed['tags'][0]['scheme'] == u'http://www.itunes.com/' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:category text="Technology"></itunes:category> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml deleted file mode 100644 index 584f1fd628cdf047a677c4d1b4a30e19ca5cb64c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel explicit -Expect: not bozo and feed['itunes_explicit'] == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit>yes</itunes:explicit> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml deleted file mode 100644 index caec32fd2e3145d421d85b46cc524dd8db22dae5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes explicit='clean' -Expect: not bozo and feed['itunes_explicit'] is False ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit>clean</itunes:explicit> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml deleted file mode 100644 index 71b2e0086c3f66572fb6f3e2708d0de4eeea1af3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes explicit="false" -Expect: not bozo and feed['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit>false</itunes:explicit> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml deleted file mode 100644 index 369021b68e3f1b68ae44602581030d4e8f2adfa0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes explicit='no' -Expect: not bozo and feed['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit>no</itunes:explicit> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml deleted file mode 100644 index ddb7a8bd649d2058fc73d379d71e7c635dcbe045..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes explicit="true" -Expect: not bozo and feed['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit>true</itunes:explicit> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml deleted file mode 100644 index a9fc6fa8cbd5ca6a26a84995040b3bf84fde5e7f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes explicit="YES" -Expect: not bozo and feed['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit>YES</itunes:explicit> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml deleted file mode 100644 index 381053161f4ef84a10b334dd7b4276e1e510de4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes explicit with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en , I'm assuming the same rules apply for explicit -Expect: not bozo and feed['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:explicit> yes </itunes:explicit> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml deleted file mode 100644 index 883352ef4fcb814220d9a58ed5208fbc68ed8277..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel image -Expect: not bozo and feed['image']['href'] == u'http://example.com/logo.jpg' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:image href="http://example.com/logo.jpg"></itunes:image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml deleted file mode 100644 index a0d455a853e857856b191482304827600295b066..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: missing itunes:image@href doesn't overwrite existing image information -Expect: not bozo and feed['image']['href'] == u'http://i.INVALID/i.gif' ---> -<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> -<channel> -<image> - <url>http://i.INVALID/i.gif</url> -</image> -<itunes:image></itunes:image> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml deleted file mode 100644 index 4778c7157219fc8d9a5490403100d44d57fa4db6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel image (incorrectly using url attribute) -Expect: not bozo and feed['image']['href'] == u'http://a.b/i.png' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:image url="http://a.b/i.png"></itunes:image> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml deleted file mode 100644 index 299fb7b3eed56d7b66b880ab4bdb2c3b482588d3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel keywords -Expect: not bozo and feed['tags'][0]['term'] == u'Technology' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:keywords>Technology</itunes:keywords> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml deleted file mode 100644 index 5ca4085dd79147a2043d82f4a6940e84495590f8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel duplicate keywords -Expect: not bozo and len(feed['tags']) == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:keywords>Technology,Technology</itunes:keywords> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml deleted file mode 100644 index 4fcfa5b95772fbc572963e520b28350b14315eb9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: iTunes channel keyword duplicated as category -Expect: not bozo and len(feed['tags']) == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:category text="Technology"></itunes:category> -<itunes:keywords>Technology</itunes:keywords> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml deleted file mode 100644 index 9629e014fd0c955699ea711c19f7a14416bd8161..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel multiple keywords -Expect: not bozo and feed['tags'][1]['term'] == u'Gadgets' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:keywords>Technology, Gadgets</itunes:keywords> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml deleted file mode 100644 index c89dc9f1ee0dbee285f2b831c15958b0b36e2dca..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel image as old-style link rel=image -Expect: not bozo and feed['image']['href'] == u'http://example.com/logo.jpg' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:link rel="image" href="http://example.com/logo.jpg"></itunes:link> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml deleted file mode 100644 index 92c433b466b60dddb3c3bdc1e5154a810297cb88..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: iTunes channel owner name -Expect: not bozo and feed['publisher_detail']['email'] == u'mark@example.com' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:owner> -<itunes:name>Mark Pilgrim</itunes:name> -<itunes:email>mark@example.com</itunes:email> -</itunes:owner> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml deleted file mode 100644 index 6d3d54fe32cc0790638792481c320a26c4b4dd1f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: iTunes channel owner name -Expect: not bozo and feed['publisher_detail']['name'] == u'Mark Pilgrim' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<itunes:owner> -<itunes:name>Mark Pilgrim</itunes:name> -<itunes:email>mark@example.com</itunes:email> -</itunes:owner> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml deleted file mode 100644 index c638bf5b4978ab88f08064e58502d0f8f9a39c30..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel subtitle -Expect: not bozo and feed['subtitle'] == u'Example subtitle' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:subtitle>Example subtitle</itunes:subtitle> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml deleted file mode 100644 index f23b3284497e751b663bd7e37e652cdca12e97b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes channel summary -Expect: not bozo and feed['description'] == u'Example summary' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:summary>Example summary</itunes:summary> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml deleted file mode 100644 index 9b3e91f2837dc98f1add7156dd6e68cb95866748..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes treats non-iTunes element names as case-insensitive -Expect: not bozo and feed['title'] == u'Example title' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<TiTlE>Example title</TiTlE> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml deleted file mode 100644 index e6764845082b89ca3c05cab6a5752c7ca16e2766..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item author maps to author -Expect: not bozo and entries[0]['author'] == u'Mark Pilgrim' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:author>Mark Pilgrim</itunes:author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml deleted file mode 100644 index e7d05ccd056eb057bfc5b3baf0b46a243c3f7b63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes block -Expect: not bozo and entries[0]['itunes_block'] == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:block>yes</itunes:block> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml deleted file mode 100644 index 7f9d4da7c12f6d9fccf49ae9fed8bd008d83f499..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes block="false" -Expect: not bozo and entries[0]['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:block>false</itunes:block> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml deleted file mode 100644 index f09435bbfd6a6effba3f4e95793709e3afefe5eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes block='no' -Expect: not bozo and entries[0]['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:block>no</itunes:block> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml deleted file mode 100644 index e30de679d4bc1916e913448ec3cff833ef784992..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes block="true" -Expect: not bozo and entries[0]['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:block>true</itunes:block> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml deleted file mode 100644 index 8ebabeab5de9cf2784911703afd2193788b399d0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes block="YES" -Expect: not bozo and entries[0]['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:block>YES</itunes:block> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml deleted file mode 100644 index ca71b54e196b4df1b1081ba46b323864fe4654f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes block with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en -Expect: not bozo and entries[0]['itunes_block'] == 0 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:block> yes </itunes:block> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml deleted file mode 100644 index 54e312ca21bd145bf1928c167810aa4a02712b7d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item category -Expect: not bozo and entries[0]['tags'][0]['term'] == u'Technology' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> -<itunes:category text="Technology"></itunes:category> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml deleted file mode 100644 index 4939da1bf6ca09d08e4318d5744d0e5ffdd30b04..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: iTunes item nested category -Expect: not bozo and entries[0]['tags'][1]['term'] == u'Gadgets' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> -<itunes:category text="Technology"> - <itunes:category text="Gadgets"></itunes:category> -</itunes:category> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml deleted file mode 100644 index ab66dcc47074fb68c06737c23f87841771fe7243..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes channel category scheme -Expect: not bozo and entries[0]['tags'][0]['scheme'] == u'http://www.itunes.com/' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> -<itunes:category text="Technology"></itunes:category> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml deleted file mode 100644 index 20a83efbdef1590a5998920d6ea9b202fb7916e8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes duration -Expect: not bozo and entries[0]['itunes_duration'] == u'3:00' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:duration>3:00</itunes:duration> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml deleted file mode 100644 index e5d9d39ce2375df95ec5a7e7b1e95a3ca7ed3b4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit -Expect: not bozo and entries[0]['itunes_explicit'] == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit>yes</itunes:explicit> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml deleted file mode 100644 index eb4e89e898704ae5ac59a2ee8d7dfe2eb994e941..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit='clean' -Expect: not bozo and entries[0]['itunes_explicit'] is False ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit>clean</itunes:explicit> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml deleted file mode 100644 index f3c0610d006c582e29179262c95a8d9926de5858..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit="false" -Expect: not bozo and entries[0]['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit>false</itunes:explicit> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml deleted file mode 100644 index b2a0b3cd279fb42bb083977cf08069264cd71c74..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit='no' -Expect: not bozo and entries[0]['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit>no</itunes:explicit> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml deleted file mode 100644 index c42c3c58c1b676663d19b15e54d514127900fa61..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit="true" -Expect: not bozo and entries[0]['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit>true</itunes:explicit> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml deleted file mode 100644 index 017c24d58b5a006052f0d736627b49cf72ce248d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit="YES" -Expect: not bozo and entries[0]['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit>YES</itunes:explicit> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml deleted file mode 100644 index 8bf2f5392cf7e8c0ebfcff36401050068d798087..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes explicit with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en -Expect: not bozo and entries[0]['itunes_explicit'] is None ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:explicit> yes </itunes:explicit> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml deleted file mode 100644 index 2c0f9c76f3206dde175cd8f3fd8addf82f5c05b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item image -Expect: not bozo and entries[0]['image']['href'] == u'http://example.com/logo.jpg' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:image href="http://example.com/logo.jpg"></itunes:image> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml deleted file mode 100644 index 3a23c495e681d8ad3bb5c0849a77b9787a925140..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item image (incorrectly using url attribute) -Expect: not bozo and entries[0]['image']['href'] == u'http://a.b/i.png' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:image url="http://a.b/i.png"></itunes:image> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml deleted file mode 100644 index befa0ac97f43feec9bbe376e2ad62685251587d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item image as old-style link rel=image -Expect: not bozo and entries[0]['image']['href'] == u'http://example.com/logo.jpg' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:link rel="image" href="http://example.com/logo.jpg"></itunes:link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml deleted file mode 100644 index 7a485236b7387b2f6200e1281939024919ba61e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item subtitle -Expect: not bozo and entries[0]['subtitle'] == u'Example subtitle' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:subtitle>Example subtitle</itunes:subtitle> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml deleted file mode 100644 index 159918a1d8ade62040649f8cbe4476bc5aa8729e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: iTunes item summary -Expect: not bozo and entries[0]['summary'] == u'Example summary' ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> -<item> - <itunes:summary>Example summary</itunes:summary> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml deleted file mode 100644 index 8a1fc43bc70299a2e073d835eb6ff37e45e74378..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes namespace (2005-07-07 spec) -Expect: not bozo and feed['itunes_block'] == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>yes</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml deleted file mode 100644 index 24221d80df1ed1059e7c4a2d3f55c6eb821298b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes namespace (example in 2005-07-07 spec) -Expect: not bozo and feed['itunes_block'] == 1 ---> -<rss xmlns:itunes="http://example.com/DTDs/Podcast-1.0.dtd"> -<channel> - <itunes:block>yes</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml deleted file mode 100644 index fdceb9e2269ef56ce0cd158049315c1790591507..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes namespace (lowercase) -Expect: not bozo and feed['itunes_block'] == 1 ---> -<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"> -<channel> - <itunes:block>yes</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml deleted file mode 100644 index 9d78ea5e19b57ae279d3cff1e19ef5ce0e6af2a8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: iTunes namespace (uppercase) -Expect: not bozo and feed['itunes_block'] == 1 ---> -<rss xmlns:itunes="HTTP://WWW.ITUNES.COM/DTDS/PODCAST-1.0.DTD"> -<channel> - <itunes:block>yes</itunes:block> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml b/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml deleted file mode 100644 index 8ca66fbea037ebf89fbeacf8cde1905bfed565e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:language -Expect: not bozo and feed['language'] == u'en' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:language>en</dc:language> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/channel_language.xml b/lib/feedparser/tests/wellformed/lang/channel_language.xml deleted file mode 100644 index 85009399a296037b92208879a0544dcaedb5bc4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/channel_language.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: normal language -Expect: not bozo and feed['language'] == u'en-us' ---> -<rss version="2.0"> -<channel> -<language>en-us</language> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml deleted file mode 100644 index 96bf686bf476d4d3e6e8de48de6ae46a9a45cecf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content language from xml:lang -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content xml:lang="en">Example Atom</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml deleted file mode 100644 index 25bf9c34c6698b19db2febfb3aab8506fd0b6805..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content defines blank xml:lang -Expect: not bozo and entries[0]['content'][0]['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <content type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml deleted file mode 100644 index 6c50849800defe9be49d8b8d329d516f41d6c847..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry defines blank xml:lang which children inherit -Expect: not bozo and entries[0]['content'][0]['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry xml:lang=""> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml deleted file mode 100644 index ea34db9da66fe7d8b286dfe2cb6631aa28b0b400..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: entry defines blank xml:lang which siblings do not inherit -Expect: not bozo and entries[1]['content'][0]['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry xml:lang=""> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -<entry> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml deleted file mode 100644 index 80445b1788f75c1ef6b66581126fef661caabd6b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content xml:lang inherited from parent element -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml deleted file mode 100644 index fe1d3b073264492c622b4799c54beb244d51e302..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content xml:lang overrides parent element -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> -<entry> - <content type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml deleted file mode 100644 index c80c753ddd868b8ef16d6880ae29144494469ed3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry content xml:lang resets properly on new element -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> -<entry> - <summary type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <content type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml deleted file mode 100644 index 8399d1f1779bc5b724a3721c44681f4f844ecf12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry content xml:lang inherits properly on new element -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <summary type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml deleted file mode 100644 index 9de86a43fadb070e40949829dc885b68fbe9ef80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content language from xml:lang -Expect: not bozo and entries[0]['content'][0]['language'] == u'en-US' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <content xml:lang="en_US">Example Atom</content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml deleted file mode 100644 index 63d8966c09940bf29fcea2da043c5f4618581dc5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary content language from xml:lang -Expect: not bozo and entries[0]['summary_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <summary xml:lang="en">Example Atom</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml deleted file mode 100644 index 39383476ea3b850e9d14683b0ef80b0d8dc1657e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary defines blank xml:lang -Expect: not bozo and entries[0]['summary_detail']['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <summary type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml deleted file mode 100644 index 4d1b16591db663205c2a594fd1a8f53e54a54af3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary xml:lang inherited from parent element -Expect: not bozo and entries[0]['summary_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml deleted file mode 100644 index 3d8940612b08871028ab928fd0792266b7c15c78..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary xml:lang overrides parent element -Expect: not bozo and entries[0]['summary_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> -<entry> - <summary type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml deleted file mode 100644 index 37ada76cea5f9b2e47f08ef24256a794bf2b1ccc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry summary xml:lang resets properly on new element -Expect: not bozo and entries[0]['summary_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de"> -<entry> - <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <summary type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml deleted file mode 100644 index 4a5909e2be8c739d6f76498733e43fc4e4f4517a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry summary xml:lang inherits properly on new element -Expect: not bozo and entries[0]['summary_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml deleted file mode 100644 index e10a4fd69887369004f52a8538fee6bd5f5a28cf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title language from xml:lang -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> - <title xml:lang="en">Example Atom</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml deleted file mode 100644 index 0152a4aa67d7dc1b038ff74a751d6f986d43cf5c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title defines blank xml:lang -Expect: not bozo and entries[0]['title_detail']['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <title type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml deleted file mode 100644 index 752bf686b26c660e3bcc7da5d15f7a234648fe5c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title xml:lang inherited from parent element -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml deleted file mode 100644 index 2fa32a825c9f4c31b879eb47aabc6927efeae19f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title xml:lang overrides parent element -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> -<entry> - <title type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml deleted file mode 100644 index 93efc4d211667d737fa87a969cd136bdb806510b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry title xml:lang resets properly on new element -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> -<entry> - <summary type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <title type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml deleted file mode 100644 index 28c8a0df22eeaddb5ef70cf362f361fc14059084..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: entry title xml:lang inherits properly on new element -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<entry> - <summary type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml deleted file mode 100644 index 2ec0dffc59fc9a73f9dc0c6a8aa4470d48ba1c80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright content language from xml:lang -Expect: not bozo and feed['copyright_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <copyright xml:lang="en">Example Atom</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml deleted file mode 100644 index 1dc0b95d1bb7b8978c3030dc8fa5847c9b570998..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright defines blank xml:lang -Expect: not bozo and feed['copyright_detail']['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <copyright type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml deleted file mode 100644 index 0edff944e1351919af5ac00d16ca3b1d9691a422..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright xml:lang inherited from parent element -Expect: not bozo and feed['copyright_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml deleted file mode 100644 index 900a3242b36a8dc84534809cb9751993d775f7b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright xml:lang overrides parent element -Expect: not bozo and feed['copyright_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> - <copyright type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml deleted file mode 100644 index 3957f45475a8a99c9be536ffdf9f5dfdbb77e1a2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed copyright xml:lang resets properly on new element -Expect: not bozo and feed['copyright_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de"> - <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <copyright type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml deleted file mode 100644 index 0752e96621058d23b59d8c6deac6d1baf965726e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed copyright xml:lang inherits properly on new element -Expect: not bozo and feed['copyright_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml deleted file mode 100644 index e863e8de99b75f17e924c34159bbfbabc83bca15..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info content language from xml:lang -Expect: not bozo and feed['info_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <info xml:lang="en">Example Atom</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml deleted file mode 100644 index cb8f7f5aa0c0706a864b9f7ebd43daae9b7d6fc2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info defines blank xml:lang -Expect: not bozo and feed['info_detail']['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml deleted file mode 100644 index b36cfa8d523055b8e6330f23247fc5893315e663..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info xml:lang inherited from parent element -Expect: not bozo and feed['info_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml deleted file mode 100644 index 8e66540609e41e5d0405d9f2f8bb59fa8c34fac5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info xml:lang overrides parent element -Expect: not bozo and feed['info_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> - <info type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml deleted file mode 100644 index 5aaf56a25b1d937ba6665457f4b213ccf13e6471..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed info xml:lang resets properly on new element -Expect: not bozo and feed['info_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> - <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <info type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml deleted file mode 100644 index 4764fb03bd868ad029f39fe36c21fc4cedc1f835..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed info xml:lang inherits properly on new element -Expect: not bozo and feed['info_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> - <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_language.xml b/lib/feedparser/tests/wellformed/lang/feed_language.xml deleted file mode 100644 index 4301594c88b3a713857abfc1bb8be1b2fc4c430e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_language.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed language from language -Expect: not bozo and feed['language'] == u'en' ---> -<rss> -<channel> -<language>en</language> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_language_override.xml b/lib/feedparser/tests/wellformed/lang/feed_language_override.xml deleted file mode 100644 index 4301594c88b3a713857abfc1bb8be1b2fc4c430e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_language_override.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: feed language from language -Expect: not bozo and feed['language'] == u'en' ---> -<rss> -<channel> -<language>en</language> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml deleted file mode 100644 index 6e89e9c932fe08a27491ee1403ddff99fcd5211a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed language from xml:lang -Expect: not bozo and feed['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -<title xml:lang="fr">foo</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml b/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml deleted file mode 100644 index 5ea58f5e7196b6ae4dfa5ca38ee534f3e03b9da3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed language from language -Expect: not bozo and not feed.has_key('language') ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title xml:lang="en">foo</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml deleted file mode 100644 index c7a3088e452323ac350a8d80e4430162119d1fda..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline content language from xml:lang -Expect: not bozo and feed['tagline_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <tagline xml:lang="en">Example Atom</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml deleted file mode 100644 index ece120842e4c536d667e4b74a963f44536488028..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline defines blank xml:lang -Expect: not bozo and feed['tagline_detail']['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <tagline type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml deleted file mode 100644 index 97d7889637e76516366f1b128268825ffd44fc83..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline xml:lang inherited from parent element -Expect: not bozo and feed['tagline_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml deleted file mode 100644 index 72fea3c621f7087e7ec368926c986428177ac0e2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline xml:lang overrides parent element -Expect: not bozo and feed['tagline_detail']['language'] == u'fr' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <tagline type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml deleted file mode 100644 index bda6b065fb238d6ee6a415713114eacb03dd75ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed tagline xml:lang resets properly on new element -Expect: not bozo and feed['tagline_detail']['language'] == u'de' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <tagline type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml deleted file mode 100644 index 8d9b83dd8e59d1573ae235a494f710103ee9c0d5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed tagline xml:lang inherits properly on new element -Expect: not bozo and feed['tagline_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml deleted file mode 100644 index 3ce6b48d35efb7daf59fe5dad29fca5ba523b92c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title content language from xml:lang -Expect: not bozo and feed['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> - <title xml:lang="en">Example Atom</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml deleted file mode 100644 index 12a5d46566002146edaca0116efeed35dbd4b89e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title defines blank xml:lang -Expect: not bozo and feed['title_detail']['language'] == None ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <title type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml deleted file mode 100644 index 0a2e6b205333ca9875e5e8aa51a1f84bb8f6621d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title xml:lang inherited from parent element -Expect: not bozo and feed['title_detail']['language'] == u'de' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de"> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml deleted file mode 100644 index 1d9a636d5f21180998079c47c875e1412988b351..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title xml:lang overrides parent element -Expect: not bozo and feed['title_detail']['language'] == u'de' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml deleted file mode 100644 index 535e34e83f438ea5d3e05530a585e49da503aeeb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed title xml:lang resets properly on new element -Expect: not bozo and feed['title_detail']['language'] == u'de' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml deleted file mode 100644 index de9bff9efde8c70e70bf36c690cc84adf2e9ecec..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: feed title xml:lang inherits properly on new element -Expect: not bozo and feed['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> - <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info> - <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml deleted file mode 100644 index e60bc55931b00f991150248c80a3b023ebdf1639..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: feed language from xml:lang -Expect: not bozo and feed['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en"> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml b/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml deleted file mode 100644 index d29a49e78541c759cfb2a743fa39f0a41ac2f04a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: feed language from xml:lang -Expect: not bozo and feed['language'] == u'en-US' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en_US"> -</feed> diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language.xml b/lib/feedparser/tests/wellformed/lang/http_content_language.xml deleted file mode 100644 index cc245abb878473fa5a626ca2c7f5511dd7f913e8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/http_content_language.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Content-Language: en -Description: feed language from content-language -Expect: not bozo and feed['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml deleted file mode 100644 index 97c4b199bc6e36aa2f073aabfd607496959edb26..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Language: en -Description: entry title language from content-language -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title>foo</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml deleted file mode 100644 index cc573e9a4d04fcaaaeaf550446ae8850e376b5a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Header: Content-Language: en -Description: entry title language from content-language (this one is harder than the others) -Expect: not bozo and entries[0]['title_detail']['language'] == u'en' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<id xml:lang="fr">1</id> -<title>foo</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml deleted file mode 100644 index 4421746b9c1171018c7aa58bfcce769874da92f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Header: Content-Language: en -Description: feed language overrides content-language -Expect: not bozo and feed['language'] == u'fr' ---> -<rss> -<channel> -<language>fr</language> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml deleted file mode 100644 index 0ab11869e6b9d078158a90380412260b33e317a6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Header: Content-Language: en -Description: feed xml:lang overrides content-language -Expect: not bozo and feed['language'] == u'fr' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr"> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml deleted file mode 100644 index 0a61f55b2a2242fbcca48aa2ad5b100eae4968fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: content:encoded -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded xml:lang="en"><p>Example content</p></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml deleted file mode 100644 index 69397d46c1e31715c0566f90c241344eecf844e4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: content:encoded -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="en"> -<channel> -<item> -<content:encoded><p>Example content</p></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_dc_language.xml b/lib/feedparser/tests/wellformed/lang/item_dc_language.xml deleted file mode 100644 index 045a4715a29b2063d35935f628a7702d03e96a14..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_dc_language.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:language -Expect: not bozo and entries[0]['language'] == u'en' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:language>en</dc:language> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml deleted file mode 100644 index 0a4da4ad0558eae696f615d5b6d1564c9f8aab7d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: fullitem language -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem xml:lang="en"><p>Example content</p></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml deleted file mode 100644 index 7fe98d1ceb3d80a978adc7ae551a44cb6bdeb997..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: fullitem xml:lang inherited from parent element -Expect: not bozo and entries[0]['content'][0]['language'] == u'en' ---> -<rss version="2.0" xml:lang="en"> -<channel> -<item> -<fullitem><p>Example content</p></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml deleted file mode 100644 index 4f48387768708a8ae92c7330c0c3bdd2edad4da4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: xhtml:body xml:lang -Expect: not bozo and entries[0]['content'][0]['language'] == 'en' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> -<p>Example content</p> -</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml deleted file mode 100644 index a9eb6347a306880d3d5bb0fb3b547ddb11c55a74..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: xhtml:body xml:lang -Expect: not bozo and entries[0]['content'][0]['language'] == 'en' ---> -<rss version="2.0" xml:lang="en"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"> -<p>Example content</p> -</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml b/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml deleted file mode 100644 index 3cb6c96f8584de1af0cbfce96ac10323f26fc17b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: hcard contains non-ascii character -Expect: not bozo and entries[0]['vcard'] == u"BEGIN:vCard\nVERSION:3.0\nORG:\u00b4\nEND:vCard" ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <content type="html"> -<div class="vcard"> -<span class='org'>´</span> -</div> - </content> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml b/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml deleted file mode 100644 index 75db178e8660dacf0df7a7c6e65e25812d33e09f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -SkipUnless: feedparser.BeautifulSoup -Description: rel='tag' link contains no actual term -Expect: not bozo and 'tags' not in entries[0] ---> -<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"> -<channel> -<item> -<content:encoded><a href='http://empty-path.test' rel='tag'>anything</a></content:encoded> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/namespace/atommathml.xml b/lib/feedparser/tests/wellformed/namespace/atommathml.xml deleted file mode 100644 index 1795a2e0332253fd258272d7956946840feb09c1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atommathml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: MathML w/XLink -Expect: not bozo and entries[0]['description'] == '<math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:href="http://golem.ph.utexas.edu" xlink:show="replace" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry xmlns:xlink="http://www.w3.org/1999/xlink"> -<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:type="simple" xlink:show="replace" xlink:href="http://golem.ph.utexas.edu"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvg.xml b/lib/feedparser/tests/wellformed/namespace/atomsvg.xml deleted file mode 100644 index ecee5ed7f04967e88f03b22b6d360f8e446f9073..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomsvg.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg"> -<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg:svg version="1.1" baseProfile="full" width="300px" height="200px"><svg:circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg:svg></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml deleted file mode 100644 index d28c9e336e5c9636409f9d0d670f4be44a0ca6e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml +++ /dev/null @@ -1,36 +0,0 @@ -<!-- -Description: SVG -Expect: 1 ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <entry> - <content type="xhtml"> - <div xmlns="http://www.w3.org/1999/xhtml"> - <p>Before</p> - <svg xmlns="http://www.w3.org/2000/svg"> - <metadata> - <rdf:RDF xmlns:cc="http://web.resource.org/cc/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <cc:Work rdf:about=""> - <dc:title>Christmas Tree</dc:title> - <dc:description></dc:description> - <dc:creator> - <cc:Agent> - <dc:title>Aaron Spike</dc:title> - </cc:Agent> - </dc:creator> - </cc:Work> - <cc:License rdf:about="http://web.resource.org/cc/PublicDomain"> - <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/> - <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/> - <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/> - </cc:License> - </rdf:RDF> - </metadata> - </svg> - <p>After</p> - </div> - </content> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml deleted file mode 100644 index 5f9311cd997ffb74fde87b7df57e4b251a6d8536..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><desc><abbr>foo</abbr></desc><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><desc><abbr>foo</abbr></desc><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml deleted file mode 100644 index 7848e992f14fe1c0dc19bdd7cefb1d8d047d74a3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomthreading.xml b/lib/feedparser/tests/wellformed/namespace/atomthreading.xml deleted file mode 100644 index b5d6ea66dcf996995db754f73962141afcc3f915..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomthreading.xml +++ /dev/null @@ -1,5 +0,0 @@ -<!-- -Description: Atom threading extension -Expect: not bozo and feed['thr_in-reply-to']['href'] == u'http://salmon-test.blogspot.com/2009/10/test-post.html' and feed['thr_in-reply-to']['ref'] == u'tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' and feed['thr_in-reply-to']['source'] == u'http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' and feed['thr_in-reply-to']['type'] == u'text/html' ---> -<feed xmlns="http://www.w3.org/2005/Atom"><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://salmon-test.blogspot.com/2009/10/test-post.html' ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' source='http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' type='text/html'/></feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml b/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml deleted file mode 100644 index 79c7e4d0b413a8b05486ca2e21de9cb3baa6493e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?> -<!-- -Description: Atom threading extension -Expect: not bozo and entries[0]['thr_in-reply-to']['href'] == u'http://salmon-test.blogspot.com/2009/10/test-post.html' and entries[0]['thr_in-reply-to']['ref'] == u'tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' and entries[0]['thr_in-reply-to']['source'] == u'http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' and entries[0]['thr_in-reply-to']['type'] == u'text/html' ---> -<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-893591374313312737.post3861663258538857954..comments</id><updated>2009-12-08T16:59:02.563-08:00</updated><title type='text'>Comments on salmon-test: Test post</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://salmon-test.blogspot.com/feeds/3861663258538857954/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default'/><link rel='alternate' type='text/html' href='http://salmon-test.blogspot.com/2009/10/test-post.html'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default?start-index=26&max-results=25'/><author><name>John</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-893591374313312737.post-4788628857625737701</id><published>2009-12-08T16:59:02.544-08:00</published><updated>2009-12-08T16:59:02.544-08:00</updated><title type='text'>bloffo bliff by te...</title><content type='html'>bloffo bliff by <a href="http://example.org/profile/te..." rel="nofollow">te...</a></content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default/4788628857625737701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default/4788628857625737701'/><link rel='alternate' type='text/html' href='http://salmon-test.blogspot.com/2009/10/test-post.html?showComment=1260320342544#c4788628857625737701' title=''/><author><name>John</name><uri>http://www.blogger.com/profile/12344017489797258795</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07886630143387711930'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://salmon-test.blogspot.com/2009/10/test-post.html' ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' source='http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' type='text/html'/></entry></feed> diff --git a/lib/feedparser/tests/wellformed/namespace/atomxlink.xml b/lib/feedparser/tests/wellformed/namespace/atomxlink.xml deleted file mode 100644 index ed7105ece180ac1971bf9ae31b23b1ad080af9a2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/atomxlink.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></a></svg>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg"> -<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg:svg version="1.1" baseProfile="full" width="300px" height="200px"><svg:a xlink:href="http://example.com/"><svg:circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg:a></svg:svg></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml deleted file mode 100644 index 469b7630e89ae06689dced752ede18a5097697f4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml +++ /dev/null @@ -1,47 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss1.0withModules.xml - included here with permission -Description: RSS 1.0 with modules -Expect: not bozo and entries[0]['title'] == u'Test Item - RSS 1.0' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns="http://purl.org/rss/1.0/" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <channel rdf:about="http://www.pocketsoap.com/rssTests/"> - <title>RSS Tests - RSS 1.0</title> - <link>http://www.pocketsoap.com/rssTests/rss1.0withModules.xml</link> - <description>A set of test RSS files for examining the state of extension support in RSS aggregators</description> - <dc:language>en-gb</dc:language> - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - - <dc:date>2002-09-28T20:01:19Z</dc:date> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - <image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" /> - <items> - <rdf:Seq> - <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1" /> - </rdf:Seq> - </items> - - </channel> - <item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1"> - <title>Test Item - RSS 1.0</title> - <link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1</link> - <l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink" l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1" /> - <description>This is a fairly standard RSS 1.0 feed with a few modules, with no localname clashes, any aggregator that supports RSS 1.0 should handle this fine (RSS 1.0)</description> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - </item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml deleted file mode 100644 index d0442be1ff3a7dbed419534211833e392489c2bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml +++ /dev/null @@ -1,48 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNS.xml - included here with permission -Description: RSS 1.0, no default namespace -Expect: not bozo and entries[0]['title'] == u'Test Item - RSS 1.0 no Default NS' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rss="http://purl.org/rss/1.0/" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <rss:channel rdf:about="http://www.pocketsoap.com/rssTests/"> - <rss:title>RSS Tests - RSS 1.0 no Default NS</rss:title> - <rss:link>http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNS.xml</rss:link> - <rss:description>A set of test RSS files for examining the state of extension support in RSS aggregators</rss:description> - <dc:language>en-gb</dc:language> - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - - <dc:date>2002-09-28T20:01:19Z</dc:date> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - <rss:image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" /> - <rss:items> - <rdf:Seq> - <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1" /> - </rdf:Seq> - </rss:items> - - </rss:channel> - <rss:item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1"> - <rss:title>Test Item - RSS 1.0 no Default NS</rss:title> - <rss:link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1</rss:link> - <l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink" l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1" /> - <rss:description>This is a fairly standard RSS 1.0 feed with a few modules, with no localname clashes, any aggregator that supports RSS 1.0 should handle this fine. This doesn't use - any default namespace declarations, all namespaces are mapped to prefixes. As far the namespace spec is concerned this is identical to the rss1.0withModules.xml version (RSS 1.0 no Default NS)</rss:description> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - </rss:item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml deleted file mode 100644 index f09c9f5fd45a8714e7a36ca2ac6304a716dc71b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml +++ /dev/null @@ -1,53 +0,0 @@ -<!-- -Credits: Simon Fell - adapted from http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml - included here with permission -Description: RSS 1.0, no default namespace, local namespace clash -Expect: not bozo and entries[0]['description'] == u'correct description' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rss="http://purl.org/rss/1.0/" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <rss:channel rdf:about="http://www.pocketsoap.com/rssTests/"> - <rss:title>RSS Tests - RSS 1.0 no Default NS, localName clashes</rss:title> - <rss:link>http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml</rss:link> - <rss:description>A set of test RSS files for examining the state of extension support in RSS aggregators</rss:description> - <dc:language>en-gb</dc:language> - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - - <dc:date>2002-09-28T20:01:19Z</dc:date> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - <rss:image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" /> - <rss:items> - <rdf:Seq> - <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1" /> - </rdf:Seq> - </rss:items> - - </rss:channel> - <rss:item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1"> - <rss:title>Test Item - RSS 1.0 no Default NS, localName clashes</rss:title> - <rss:link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1</rss:link> - <l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink" l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1" /> - <szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. - This shouldn't appear in your aggregator, but probably does. (pre rss:description RSS 1.0 no Default NS, localName clashes) - </szf:description> - <rss:description>correct description</rss:description> - <szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. - This shouldn't appear in your aggregator, but probably does. (post rss:description RSS 1.0 no Default NS, localName clashes) - </szf:description> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - </rss:item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml deleted file mode 100644 index 99f40d7709b3b9a679ab5016dfe0b87fa5154f87..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml +++ /dev/null @@ -1,50 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModules.xml - included here with permission -Description: RSS 2.0 in Username namespace -Expect: not bozo and entries[0]['title'] == u'Test Item - RSS2.0 w/ NS' ---> -<rss version="2.0" - xmlns="http://backend.userland.com/rss2" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <channel> - <title>RSS Tests - RSS2.0 w/ NS</title> - <link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModules.xml</link> - <description>A set of test RSS files for examining the state of extension support in RSS aggregators</description> - <language>en-gb</language> - <copyright>Copyright 2002 Simon Fell</copyright> - - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - <dc:date>2002-09-28T21:00:02Z</dc:date> - <lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate> - <pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - <managingEditor>sf@zaks.demon.co.uk</managingEditor> - - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <generator>ultraedit-32</generator> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - - <item> - <title>Test Item - RSS2.0 w/ NS</title> - <link>http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModules.xml#1</link> - <description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements are in the http://backend.userland.com/rss2 namespace, all module elements are in their required namespaces. - there are no localname clashes. This is very similar to a RSS1.0 feed. (RSS2.0 w/ NS) - </description> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - </item> - </channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml deleted file mode 100644 index 7f374dd2046f353c1b2f370d96201c8f97cf8943..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml +++ /dev/null @@ -1,50 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNS.xml - included here with permission -Description: RSS 2.0 in Username namespace, no default namespace -Expect: not bozo and entries[0]['title'] == u'Test Item - - RSS2.0 w/ NS no default NS' ---> -<r:rss version="2.0" - xmlns:r="http://backend.userland.com/rss2" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <r:channel> - <r:title>RSS Tests - RSS2.0 w/ NS no default NS</r:title> - <r:link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNS.xml</r:link> - <r:description>A set of test RSS files for examining the state of extension support in RSS aggregators</r:description> - <r:language>en-gb</r:language> - <r:copyright>Copyright 2002 Simon Fell</r:copyright> - - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - <dc:date>2002-09-28T21:00:02Z</dc:date> - <r:lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</r:lastBuildDate> - <r:pubDate>Sat, 28 Sep 2002 21:00:02 GMT</r:pubDate> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - <r:managingEditor>sf@zaks.demon.co.uk</r:managingEditor> - - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <r:generator>ultraedit-32</r:generator> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <r:webMaster>sf@zaks.demon.co.uk (Simon Fell)</r:webMaster> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - - <r:item> - <r:title>Test Item - - RSS2.0 w/ NS no default NS</r:title> - <r:link>http://www.pocketsoap.com/weblog/rssTests/rss2.0withModulesNoDefNS.xml#1</r:link> - <r:description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements are in the http://backend.userland.com/rss2 namespace, all module elements are in their required namespaces. - there are no localname clashes, all elements uses namespace prefixes, there is no default namespace declared. This is very similar to a RSS1.0 feed. (RSS2.0 w/ NS no default NS) - </r:description> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - </r:item> - </r:channel> -</r:rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml deleted file mode 100644 index be99b57c4caf5cb5b87f9bea25822bc9bde5784e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml +++ /dev/null @@ -1,58 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml - included here with permission -Description: RSS 2.0 in Username namespace, no default namespace, local namespace clash -Expect: not bozo and entries[0]['description'] == u'correct description' ---> -<r:rss version="2.0" - xmlns:r="http://backend.userland.com/rss2" - xmlns:admin="http://webns.net/mvcb/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <r:channel> - <r:title>RSS Tests - RSS2.0 w/ NS, no default NS, localName clash</r:title> - <r:link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml</r:link> - <r:description>A set of test RSS files for examining the state of extension support in RSS aggregators</r:description> - <r:language>en-gb</r:language> - <dc:language>en-gb</dc:language> - - <r:copyright>Copyright 2002 Simon Fell</r:copyright> - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - <dc:date>2002-09-28T21:00:02Z</dc:date> - <r:lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</r:lastBuildDate> - <r:pubDate>Sat, 28 Sep 2002 21:00:02 GMT</r:pubDate> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - - <r:managingEditor>sf@zaks.demon.co.uk</r:managingEditor> - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <r:generator>ultraedit-32</r:generator> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <r:webMaster>sf@zaks.demon.co.uk (Simon Fell)</r:webMaster> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - - <r:item> - <r:title>Test Item - RSS2.0 w/ NS, no default NS, localName clash</r:title> - <r:link>http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml#1</r:link> - - <l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink" l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModulesLocalNameClash.xml#1" /> - <szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. - This shouldn't appear in your aggregator, but probably does. (pre rss:description - RSS2.0 w/ NS, no default NS, localName clash) - </szf:description> - <r:description>correct description</r:description> - <szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. - This shouldn't appear in your aggregator, but probably does. (post rss:description - RSS2.0 w/ NS, no default NS, localName clash) - </szf:description> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - - </r:item> - </r:channel> -</r:rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml deleted file mode 100644 index 0a1bbca74bdcdf0434cbdefc26a85473bd6a6ea8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: MathML w/XLink -Expect: not bozo and entries[0]['description'] == '<math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:href="http://golem.ph.utexas.edu" xlink:show="replace" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math>' ---> -<rss version="2.0"> -<channel> -<item> -<description><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow xlink:type="simple" xlink:show="replace" xlink:href="http://golem.ph.utexas.edu"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml deleted file mode 100644 index 3869d9641bf64068a8ee317bd5d8133983b27799..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml +++ /dev/null @@ -1,49 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0noNSwithModules.xml - included here with permission -Description: RSS 2.0 with modules -Expect: not bozo and entries[0]['title'] == u'Test Item - RSS 2.0 no NS' ---> -<rss version="2.0" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <channel> - <title>RSS Tests - RSS2.0 no NS</title> - <link>http://www.pocketsoap.com/rssTests/rss2.0noNSwithModules.xml</link> - <description>A set of test RSS files for examining the state of extension support in RSS aggregators</description> - <language>en-gb</language> - <copyright>Copyright 2002 Simon Fell</copyright> - - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - <dc:date>2002-09-28T21:00:02Z</dc:date> - <lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate> - <pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - <managingEditor>sf@zaks.demon.co.uk</managingEditor> - - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <generator>ultraedit-32</generator> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - - <item> - <title>Test Item - RSS 2.0 no NS</title> - <link>http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModules.xml</link> - <description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements aren't in any namespace, all module elements are in their required namespaces. - there are no localname clashes. This is largely backwardly compatible with 0.9x. (RSS 2.0 no NS) - </description> - - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - </item> - </channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml deleted file mode 100644 index 174de089d77eca97148f7c252c3252fc54b63d1b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml +++ /dev/null @@ -1,57 +0,0 @@ -<!-- -Credits: Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0noNSwithModulesLocalNameClash.xml - included here with permission -Description: RSS 2.0 with modules, local namespace clash -Expect: not bozo and entries[0]['description'] == u'correct description' ---> -<rss version="2.0" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:admin="http://webns.net/mvcb/" - xmlns:ag="http://purl.org/rss/modules/aggregation/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:dcterms="http://purl.org/dc/terms/" - xmlns:l="http://purl.org/rss/1.0/modules/link/" - xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/" - xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"> - <channel> - <title>RSS Tests - RSS2.0 no NS localName clash</title> - <link>http://www.pocketsoap.com/rssTests/rss2.0noNSwithModulesLocalNameClash.xml</link> - <description>A set of test RSS files for examining the state of extension support in RSS aggregators</description> - <language>en-gb</language> - <dc:language>en-gb</dc:language> - - <copyright>Copyright 2002 Simon Fell</copyright> - <dc:rights>Copyright 2002 Simon Fell</dc:rights> - <dc:date>2002-09-28T21:00:02Z</dc:date> - <lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate> - <pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate> - <dc:creator>sf@zaks.demon.co.uk</dc:creator> - - <managingEditor>sf@zaks.demon.co.uk</managingEditor> - <dc:publisher>sf@zaks.demon.co.uk</dc:publisher> - <generator>ultraedit-32</generator> - <admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" /> - <webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster> - <dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued> - - <dcterms:created>2002-01-12T02:15:32Z</dcterms:created> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted> - - <item> - <title>Test Item - RSS2.0 no NS localName clash</title> - <link>http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModulesLocalNameClash.xml#1</link> - - <l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink" l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModulesLocalNameClash.xml#1" /> - <szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. - This shouldn't appear in your aggregator, but probably does. (pre rss:description - RSS2.0 no NS localName clash) - </szf:description> - <description>correct description</description> - <szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. - This shouldn't appear in your aggregator, but probably does. (post rss:description - RSS2.0 no NS localName clash) - </szf:description> - <dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified> - <dcterms:created>2002-09-28T20:01:19Z</dcterms:created> - - </item> - </channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml deleted file mode 100644 index 1a7a55465bd6fd96b1aa60fb0c0132fddc613e86..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>' ---> -<rss version="2.0"> -<channel> -<item> -<description><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /></svg></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml deleted file mode 100644 index 8119615b28ac5108677343d73520dc3652ec8196..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>' ---> -<rss version="2.0"> -<channel> -<item> -<description><svg version="1.1" baseProfile="full" width="300px" height="200px"><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /></svg></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml deleted file mode 100644 index e06a69ca40e5a30ab838bddf2622678a3d9b5932..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>' ---> -<rss version="2.0"> -<channel> -<item> -<description><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml deleted file mode 100644 index 6f4bbe0b2d914699d854387ac1e50595af3625bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml +++ /dev/null @@ -1,27 +0,0 @@ -<!-- -Description: rss feed with Atom namespace -Expect: not bozo and version == 'rss20' ---> -<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/"> - <channel> - <title>Delicious/wearehugh</title> - <link>http://delicious.com/wearehugh</link> - <description>bookmarks posted by wearehugh</description> - <atom:link rel="self" type="application/rss+xml" href="http://feeds.delicious.com/v2/rss/wearehugh"/> - <item> - <title>rsync and vfat | Geek at Play</title> - <pubDate>Fri, 25 Dec 2009 03:30:22 +0000</pubDate> - <guid isPermaLink="false">http://delicious.com/url/174603f9d836a1aafac49e28ace1c19e#wearehugh</guid> - <link>http://www.kylev.com/2005/03/29/rsync-and-vfat/</link> - <dc:creator><![CDATA[wearehugh]]></dc:creator> - <comments>http://delicious.com/url/174603f9d836a1aafac49e28ace1c19e</comments> - <wfw:commentRss>http://feeds.delicious.com/v2/rss/url/174603f9d836a1aafac49e28ace1c19e</wfw:commentRss> - <source url="http://feeds.delicious.com/v2/rss/wearehugh">wearehugh's bookmarks</source> - <category domain="http://delicious.com/wearehugh/">rsync</category> - <category domain="http://delicious.com/wearehugh/">vfat</category> - <category domain="http://delicious.com/wearehugh/">windows</category> - <category domain="http://delicious.com/wearehugh/">linux</category> - <category domain="http://delicious.com/wearehugh/">mount</category> - </item> - </channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml deleted file mode 100644 index 047c0bce39ac8a804467e32b271aba785a02b8cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: SVG -Expect: not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></a></svg>' ---> -<rss version="2.0"> -<channel> -<item> -<description><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/"><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /></a></svg></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml deleted file mode 100644 index 4421f817d219d61bf74c1d4e0b33f1ba13b593ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -Description: The arbitrarily named node of the least depth should be preferred to those with the same name of greater depth. -Expect: not bozo and entries[0]['abcdefg'] == entries[1]['abcdefg'] == u'Correct Value' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <abcdefg>Correct Value</abcdefg> - <image> - <abcdefg>Incorrect Value</abcdefg> - </image> -</entry> -<entry> - <image> - <abcdefg>Incorrect Value</abcdefg> - </image> - <abcdefg>Correct Value</abcdefg> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml deleted file mode 100644 index e6741531dfb529eeb254dfc9ef342eef011043d1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -Description: The id node which is a child of entry should be used regardless of source order. -Expect: not bozo and entries[0]['id'] == entries[1]['id'] == u'Correct Value' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <id>Correct Value</id> - <image> - <id>Incorrect Value</id> - </image> -</entry> -<entry> - <image> - <id>Incorrect Value</id> - </image> - <id>Correct Value</id> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml deleted file mode 100644 index bf3a201bad9686a222222e377eaf9ac95698b176..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- -Description: The title node which is a child of entry should be used regardless of source order. -Expect: not bozo and entries[0]['title'] == entries[1]['title'] == u'Correct Value' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> - <title>Correct Value</title> - <image> - <title>Incorrect Value</title> - </image> -</entry> -<entry> - <image> - <title>Incorrect Value</title> - </image> - <title>Correct Value</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml b/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml deleted file mode 100644 index e235aa05d4ec07c46992ad34cb8407fb73e6132f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0"?> -<!-- -Description: not stripping doctype properly if doctype contains entity declaration -Expect: not bozo ---> -<!DOCTYPE rdf:RDF [ -<!ENTITY % HTMLlat1 PUBLIC - "-//W3C//ENTITIES Latin 1 for XHTML//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> -%HTMLlat1; -]> - -<rdf:RDF - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns="http://purl.org/rss/1.0/" -> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml deleted file mode 100644 index 26be54e788cd3b80e64d594325bb90c9a286b186..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel description -Expect: not bozo and feed['description'] == u'Example description' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <description>Example description</description> -</channel> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml deleted file mode 100644 index 9c50f64a33fe5e438562d997e829469e08c8203c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel link -Expect: not bozo and feed['link'] == u'http://example.com/' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <link>http://example.com/</link> -</channel> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml deleted file mode 100644 index edca2428e0321d88b09b34097f405409ee8e0ab1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel title -Expect: not bozo and feed['title'] == u'Example feed' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <title>Example feed</title> -</channel> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml deleted file mode 100644 index a40ea0807cdd310ad8d81868573cd26ac795a1ec..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: item description -Expect: not bozo and entries[0]['description'] == u'Example description' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <items> - <rdf:Seq> - <rdf:li resource="http://example.com/1"/> - </rdf:Seq> - </items> -</channel> -<item rdf:about="http://example.com/1"> - <description>Example description</description> -</item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml deleted file mode 100644 index 8f0a07c7df858f8d5f74aaf7e864bc491de9f4f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: item link -Expect: not bozo and entries[0]['link'] == u'http://example.com/1' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <items> - <rdf:Seq> - <rdf:li resource="http://example.com/1"/> - </rdf:Seq> - </items> -</channel> -<item rdf:about="http://example.com/1"> - <link>http://example.com/1</link> -</item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml deleted file mode 100644 index 1362e1b103e9abcbde2ba5b316d566ed8e258e3b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -Description: item rdf:about -Expect: not bozo and entries[0]['id'] == u'http://example.org/1' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <items> - <rdf:Seq> - <rdf:li resource="http://example.org/1"/> - </rdf:Seq> - </items> -</channel> -<item rdf:about="http://example.org/1"> -</item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml deleted file mode 100644 index 04ec848db3999069fd0e178ee938577c9671c119..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: item title -Expect: not bozo and entries[0]['title'] == u'Example title' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -<channel rdf:about="http://example.com/index.rdf"> - <items> - <rdf:Seq> - <rdf:li resource="http://example.com/1"/> - </rdf:Seq> - </items> -</channel> -<item rdf:about="http://example.com/1"> - <title>Example title</title> -</item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml b/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml deleted file mode 100644 index 0169e311e1742c01ff9da350b257e5a87d23cf25..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: RSS version 0.90 channel title -Expect: not bozo and feed['title'] == u'Example title' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/"> -<channel> -<title>Example title</title> -</channel> -<item> -<title>Item title</title> -</item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml b/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml deleted file mode 100644 index 41d88e31dd9c315ea269684dc8d6a025315ed54e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: RSS version 0.90 item title -Expect: not bozo and entries[0]['title'] == u'Item title' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/"> -<channel> -<title>Example title</title> -</channel> -<item> -<title>Item title</title> -</item> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml b/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml deleted file mode 100644 index b51a1130ed71ad38c6a3072de9ec3a2f4bd66b9a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 1.0 -Expect: not bozo and version == u'rss10' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml b/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml deleted file mode 100644 index e033013ef2e6e7cffb7ee56a824c1eda57794d8b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml +++ /dev/null @@ -1,8 +0,0 @@ -<!-- -Description: RSS version 1.0 -Expect: not bozo and version == 'rss10' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/"> -<rss:channel rdf:about="http://www.osswatch.ac.uk/rss/summary.rss"> -</rss:channel> -</rdf:RDF> diff --git a/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml b/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml deleted file mode 100644 index c9c70bededa6585f833cf88a3ee9416c21c53a44..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: wellformed XML -Expect: not bozo ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_author.xml b/lib/feedparser/tests/wellformed/rss/channel_author.xml deleted file mode 100644 index 74aecd762f30af4904d72477d442d4b282e479e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_author.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel author -Expect: not bozo and feed['author'] == u'Example editor (me@example.com)' ---> -<rss version="2.0"> -<channel> -<author>Example editor (me@example.com)</author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml deleted file mode 100644 index c0919c2b33d494018f510278347088843133e99f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel author maps to author_detail email if both name and email are given -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<author>Example editor (me@example.com)</author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml deleted file mode 100644 index da0b9c19e3c32b45fb0fb2c03b62531e5d009249..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel author maps to author_detail email if both name and email are given (email contains +) -Expect: not bozo and feed['author_detail']['email'] == u'me+spam@example.com' ---> -<rss version="2.0"> -<channel> -<author>Example editor (me+spam@example.com)</author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml deleted file mode 100644 index 8deba3e75023e17bc3909c0323bb22b8812ead10..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel author maps to author_detail email if both name and email are given (name in parens) -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<author>me@example.com (Example editor)</author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml deleted file mode 100644 index 3e5f87056a18e095a2211de4170115c926401d42..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel author maps to author_detail name if both name and email are given -Expect: not bozo and feed['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<author>Example editor (me@example.com)</author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml deleted file mode 100644 index ec133699347db2260fe350be726069f678978886..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel author maps to author_detail name if both name and email are given (name in parens) -Expect: not bozo and feed['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<author>me@example.com (Example editor)</author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_category.xml b/lib/feedparser/tests/wellformed/rss/channel_category.xml deleted file mode 100644 index 37ddf22dff03cbf39e3f1b1facc59227c2273abd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_category.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel single category -Expect: not bozo and feed['category'] == u'Example category' ---> -<rss version="2.0"> -<channel> -<category>Example category</category> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml b/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml deleted file mode 100644 index 6c07ccc594baa49c0e35bc9fc3ed6d129f2198ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel single category with domain -Expect: not bozo and feed['tags'][0]['scheme'] == u'http://www.example.com/' ---> -<rss version="2.0"> -<channel> -<category domain="http://www.example.com/">Example category</category> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml b/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml deleted file mode 100644 index 9effbfddb26910354d5f00564c9d37bd13fea0fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: channel multiple categories -Expect: not bozo and feed['tags'][1]['scheme'] == u'http://www.example.com/2' ---> -<rss version="2.0"> -<channel> -<category domain="http://www.example.com/1">Example category 1</category> -<category domain="http://www.example.com/2">Example category 2</category> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml b/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml deleted file mode 100644 index 00daebe24c5f649d485a62cfb6be82a31d5df708..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: channel multiple categories -Expect: not bozo and feed['tags'][1]['term'] == u'Example category 2' ---> -<rss version="2.0"> -<channel> -<category>Example category 1</category> -<category>Example category 2</category> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml deleted file mode 100644 index ef926b6c1c268c57a39b1093f01ff65ef53dc583..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cloud domain -Expect: not bozo and feed['cloud']['domain'] == u'rpc.sys.com' ---> -<rss version="2.0"> -<channel> -<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" /> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml deleted file mode 100644 index eccf1b9d997969584ba6c013dfb9dadfabcb682c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cloud path -Expect: not bozo and feed['cloud']['path'] == u'/RPC2' ---> -<rss version="2.0"> -<channel> -<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" /> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml deleted file mode 100644 index 0cd2bc655e11f362c94d67284876aafdd7ef9bb8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cloud port -Expect: not bozo and feed['cloud']['port'] == u'80' ---> -<rss version="2.0"> -<channel> -<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" /> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml deleted file mode 100644 index 73e3392c265f8c3e5d6e21c3ecf6aa23fb16ac54..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cloud protocol -Expect: not bozo and feed['cloud']['protocol'] == u'xml-rpc' ---> -<rss version="2.0"> -<channel> -<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" /> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml deleted file mode 100644 index 703f53658d822a3845e084f74bb3679a291ceae1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: cloud registerProcedure -Expect: not bozo and feed['cloud']['registerprocedure'] == u'myCloud.rssPleaseNotify' ---> -<rss version="2.0"> -<channel> -<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" /> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_copyright.xml b/lib/feedparser/tests/wellformed/rss/channel_copyright.xml deleted file mode 100644 index c1dec40c22aeee655ec6661f1a815be16b4c6c2b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_copyright.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: normal copyright -Expect: not bozo and feed['copyright'] == u'Example copyright' ---> -<rss version="2.0"> -<channel> -<copyright>Example copyright</copyright> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml deleted file mode 100644 index 6bae15e1587c212c8d01a42f726573d68a93b830..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:author -Expect: not bozo and feed['author'] == u'Example editor' and feed['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:author>Example editor</dc:author> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml deleted file mode 100644 index b5d73d55c130bd68ed676a49ce2ebe6ed62fccb8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:author maps to author_detail email if both name and email are given -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:author>Example editor (me@example.com)</dc:author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml deleted file mode 100644 index f689445696b176452e16b3e9a40b1310762e447f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:author maps to author_detail name if both name and email are given -Expect: not bozo and feed['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:author>Example editor (me@example.com)</dc:author> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml deleted file mode 100644 index 76450c2f14808a691a5a15cb7757f0d0fa8ed471..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:contributor -Expect: not bozo and feed['contributors'][0]['name'] == u'Example contributor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:contributor>Example contributor</dc:contributor> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml deleted file mode 100644 index 111ae8ba47ab6d3acf96883a5d921a13a0516833..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:creator maps to author -Expect: not bozo and feed['author'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:creator>Example editor</dc:creator> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml deleted file mode 100644 index 05cb34ac513d37ebadcf2d2fa1322a60133c8c25..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:creator maps to author_detail email if both name and email are given -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:creator>Example editor (me@example.com)</dc:creator> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml deleted file mode 100644 index 451dd86e2aba6f59032ad5872f00a7b7d4af9913..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:creator maps to author_detail name if both name and email are given -Expect: not bozo and feed['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:creator>Example editor (me@example.com)</dc:creator> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml deleted file mode 100644 index cbf3fa79acbbd11e2f0f7ba75fc9ae9f3b949e88..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:date -Expect: not bozo and feed['updated'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:date>2003-12-31T10:14:55Z</dc:date> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml deleted file mode 100644 index 795114883e177942126b2bcfe36daa0ced27c039..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:date parsed -Expect: not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:date>2003-12-31T10:14:55Z</dc:date> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml deleted file mode 100644 index b21d4ad804c021eb2bc86098bcd27d894f4a2c37..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:publisher -Expect: not bozo and feed['publisher'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:publisher>Example editor</dc:publisher> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml deleted file mode 100644 index 1c5d8cd1bf42341661cdb349c5464b2eb91e5534..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:publisher -Expect: not bozo and feed['publisher_detail']['email'] == u'me@example.com' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:publisher>Example editor (me@example.com)</dc:publisher> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml deleted file mode 100644 index e581af65d4abec30912fcfa2ce0f06ad3e59c171..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:publisher -Expect: not bozo and feed['publisher_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:publisher>Example editor (me@example.com)</dc:publisher> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml deleted file mode 100644 index 9d33d75ca5bdd5582a1028d326e60befec4717c5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:rights -Expect: not bozo and feed['copyright'] == u'Example copyright' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:rights>Example copyright</dc:rights> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml deleted file mode 100644 index c8ab301024966a3c1c11140bce65ef08b796d870..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:subject -Expect: not bozo and feed['category'] == u'Example category' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:subject>Example category</dc:subject> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml deleted file mode 100644 index 953d4d3fc21f523d600056841773478ee4058819..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:subject maps to categories -Expect: not bozo and feed['tags'][0]['term'] == u'Example category' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:subject>Example category</dc:subject> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml deleted file mode 100644 index 3ff2558c4c91814b3a996eb3d732af92d7e86db4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: multiple dc:subject -Expect: not bozo and feed['tags'][1]['term'] == u'Example category 2' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:subject>Example category 1</dc:subject> -<dc:subject>Example category 2</dc:subject> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml deleted file mode 100644 index 299ae2339fb3233c2907b0edbadc70885c18ba9f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dc:title -Expect: not bozo and feed['title'] == u'Example title' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<dc:title>Example title</dc:title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml deleted file mode 100644 index aa36aadb1e196457c780bb93c8e84d5877de780b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dcterms:created -Expect: not bozo and feed['created'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<dcterms:created>2003-12-31T10:14:55Z</dcterms:created> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml deleted file mode 100644 index 211178596618bd5b20a2b2d2a2324030972bf39f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dcterms:created parsed -Expect: not bozo and feed['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<dcterms:created>2003-12-31T10:14:55Z</dcterms:created> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml deleted file mode 100644 index a17cee672aefe32d3a40d4a734cf7eb8ae2ab59f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dcterms:issued -Expect: not bozo and feed['published'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml deleted file mode 100644 index dda97dca5c905e9810029446a81adb95b75da199..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dcterms:issued parsed -Expect: not bozo and feed['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml deleted file mode 100644 index 5a436d2cb8c0e98922f35cbb5db366a416fcec2a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dcterms:modified -Expect: not bozo and feed['updated'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml deleted file mode 100644 index 53ed3b264fd92d82c544272eda6317e02a6cb7fd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel dcterms:modified parsed -Expect: not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_description.xml b/lib/feedparser/tests/wellformed/rss/channel_description.xml deleted file mode 100644 index d2621011335f22b9927bc1e212bb4e591883c5c7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_description.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: normal description -Expect: not bozo and feed['description'] == u'Example description' ---> -<rss version="2.0"> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml b/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml deleted file mode 100644 index fa86a59cee1563d0c5a951d92cce47b535bf812e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: escaped markup in description -Expect: not bozo and feed['description'] == u'<p>Example description</p>' ---> -<rss version="2.0"> -<channel> -<description><p>Example description</p></description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml b/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml deleted file mode 100644 index f83cc50dd7c7c85aaca75ef7b076f18c716695b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel description is mapped to tagline -Expect: not bozo and feed['tagline'] == u'Example description' ---> -<rss version="2.0"> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml b/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml deleted file mode 100644 index 671452fbdba59dc0338bfc73cf9ad13949309a74..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: naked markup in description -Expect: not bozo and feed['description'] == u'<p>Example description</p>' ---> -<rss version="2.0"> -<channel> -<description><p>Example description</p></description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml b/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml deleted file mode 100644 index d0d4928575d872237047e50e33b9d2a79b369987..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: description shorttag and link following -Expect: not bozo and feed['description'] == u'' and feed['link'] == u'http://example.com/' ---> -<rss version="2.0"> -<channel> -<description/> -<link>http://example.com/</link> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_docs.xml b/lib/feedparser/tests/wellformed/rss/channel_docs.xml deleted file mode 100644 index f2e312a947874d8defc556e4d0b57a2945867361..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_docs.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: docs -Expect: not bozo and feed['docs'] == u'http://www.example.com/' ---> -<rss version="2.0"> -<channel> -<docs>http://www.example.com/</docs> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_generator.xml b/lib/feedparser/tests/wellformed/rss/channel_generator.xml deleted file mode 100644 index 5c046e353939f977bb80cd1d888215968012580d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_generator.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: generator -Expect: not bozo and feed['generator'] == u'Example generator' ---> -<rss version="2.0"> -<channel> -<generator>Example generator</generator> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_description.xml b/lib/feedparser/tests/wellformed/rss/channel_image_description.xml deleted file mode 100644 index e498675e708bab67b99c9851b02e9e0930f774c0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_description.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: image description -Expect: not bozo and feed['image']['description'] == u'Available in Netscape RSS 0.91' ---> -<rss version="0.91"> -<channel> -<image> -<title>Sample image</title> -<url>http://example.org/url</url> -<link>http://example.org/link</link> -<width>80</width> -<height>15</height> -<description>Available in Netscape RSS 0.91</description> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_height.xml b/lib/feedparser/tests/wellformed/rss/channel_image_height.xml deleted file mode 100644 index 97c68b3400f024c7b2b2a2b5bfd72fb8db02b80b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_height.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: image height -Expect: not bozo and feed['image']['height'] == 15 ---> -<rss version="2.0"> -<channel> -<image> -<title>Sample image</title> -<url>http://example.org/url</url> -<link>http://example.org/link</link> -<width>80</width> -<height>15</height> -<description>Available in Netscape RSS 0.91</description> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link.xml deleted file mode 100644 index 3e1ad8c4de14ff9cfff1a743bf901addb897c533..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_link.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: image link -Expect: not bozo and feed['image']['link'] == u'http://example.org/link' ---> -<rss version="2.0"> -<channel> -<image> -<title>Sample image</title> -<url>http://example.org/url</url> -<link>http://example.org/link</link> -<width>80</width> -<height>15</height> -<description>Available in Netscape RSS 0.91</description> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml deleted file mode 100644 index d6b1c026bc16f5e8e1f92616f3177d4679e270ca..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: image link does not bleed into channel link array -Expect: not bozo and len(feed['links']) == 1 ---> -<rss version="2.0"> -<channel> -<link>http://channel.example.com/</link> -<image> -<link>http://image.example.com/</link> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml deleted file mode 100644 index 6187df74315729381ccacbb1947ac1e39d8fbd86..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: image link does not conflict with channel link -Expect: not bozo and feed['link'] == u'http://channel.example.com/' ---> -<rss version="2.0"> -<channel> -<link>http://channel.example.com/</link> -<image> -<link>http://image.example.com/</link> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_title.xml b/lib/feedparser/tests/wellformed/rss/channel_image_title.xml deleted file mode 100644 index 66d8fe830dfd2ce03c11b5e4c34db44662178030..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_title.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: image title -Expect: not bozo and feed['image']['title'] == u'Sample image' ---> -<rss version="2.0"> -<channel> -<image> -<title>Sample image</title> -<url>http://example.org/url</url> -<link>http://example.org/link</link> -<width>80</width> -<height>15</height> -<description>Available in Netscape RSS 0.91</description> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml deleted file mode 100644 index aac174d6439f0da413428b15ee5cad8f847915eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: image title does not conflict with channel title -Expect: not bozo and feed['title'] == u'Real title' ---> -<rss version="2.0"> -<channel> -<title>Real title</title> -<image> -<title>textInput title</title> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_url.xml b/lib/feedparser/tests/wellformed/rss/channel_image_url.xml deleted file mode 100644 index cd3c05290e7f1cddca1079a70c4816297e505736..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_url.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: image url -Expect: not bozo and feed['image']['url'] == u'http://example.org/url' ---> -<rss version="2.0"> -<channel> -<image> -<title>Sample image</title> -<url>http://example.org/url</url> -<link>http://example.org/link</link> -<width>80</width> -<height>15</height> -<description>Available in Netscape RSS 0.91</description> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_width.xml b/lib/feedparser/tests/wellformed/rss/channel_image_width.xml deleted file mode 100644 index 96470d64a508f5a270e835ee93b98e75bf0fd2f3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_image_width.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: image width -Expect: not bozo and feed['image']['width'] == 80 ---> -<rss version="2.0"> -<channel> -<image> -<title>Sample image</title> -<url>http://example.org/url</url> -<link>http://example.org/link</link> -<width>80</width> -<height>15</height> -<description>Available in Netscape RSS 0.91</description> -</image> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml b/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml deleted file mode 100644 index 88b1398a6537f8182fcbefe8cc3985ab350cb341..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel lastBuildDate -Expect: not bozo and feed['updated'] == u'Sat, 07 Sep 2002 00:00:01 GMT' ---> -<rss version="2.0"> -<channel> - <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml deleted file mode 100644 index aa0ff822aac75829a238fa99f1c1484fdf8ad455..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel lastBuildDate parsed -Expect: not bozo and feed['updated_parsed'] == (2002, 9, 7, 0, 0, 1, 5, 250, 0) ---> -<rss version="2.0"> -<channel> - <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_link.xml b/lib/feedparser/tests/wellformed/rss/channel_link.xml deleted file mode 100644 index 51b616fa39d2b353d91f0c5fbdb542bfa29def7a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: normal link -Expect: not bozo and feed['link'] == u'http://example.com/' ---> -<rss version="2.0"> -<channel> -<link>http://example.com/</link> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml deleted file mode 100644 index 56cfa70fd4b468a3f84fb30d2618001e7034cdeb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel managingEditor maps to author -Expect: not bozo and feed['author'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<managingEditor>Example editor</managingEditor> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml deleted file mode 100644 index bfe888576f5272096ddb89c207713bc19d563098..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: managingEditor maps to author_detail email if both name and email are given -Expect: not bozo and feed['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<managingEditor>Example editor (me@example.com)</managingEditor> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml deleted file mode 100644 index 58294445e7cfc7a0d48ec799a33d71c7dab812ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: managingEditor maps to author_detail name if both name and email are given -Expect: not bozo and feed['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<managingEditor>Example editor (me@example.com)</managingEditor> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml b/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml deleted file mode 100644 index b60f8474b1fd636fa38098c5e2508982573bca8a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel pubDate -Expect: not bozo and feed['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<rss version="2.0"> -<channel> -<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml deleted file mode 100644 index 271338d8d24eccac2131e0eb828f0de21b2bfe55..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel pubDate parsed and mapped to published_parsed -Expect: not bozo and feed['published_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0) ---> -<rss version="2.0"> -<channel> -<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml deleted file mode 100644 index 91ca14baf37f0fa1b96852245a18999b23478750..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -Description: textInput description -Expect: not bozo and feed['textinput']['description'] == u'textInput description' ---> -<rss version="2.0"> -<channel> -<title>Real title</title> -<description>Real description</description> -<textInput> -<title>textInput title</title> -<description>textInput description</description> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml deleted file mode 100644 index 3eb6e7bcdec4fe671e354da693e11a9b9dc504ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: textInput description does not conflict with channel description -Expect: not bozo and feed['description'] == u'Real description' ---> -<rss version="2.0"> -<channel> -<description>Real description</description> -<textInput> -<description>textInput description</description> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml deleted file mode 100644 index ce5073bdcfef26df30c9848aca65d6281375207f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: textInput link -Expect: not bozo and feed['textinput']['link'] == u'http://textinput.example.com/' ---> -<rss version="2.0"> -<channel> -<link>http://channel.example.com/</link> -<textInput> -<link>http://textinput.example.com/</link> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml deleted file mode 100644 index 77d1aca60db27c82b1e4e2610d5fa717549860f3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: textInput link does not bleed into channel link array -Expect: not bozo and len(feed['links']) == 1 ---> -<rss version="2.0"> -<channel> -<link>http://channel.example.com/</link> -<textInput> -<link>http://textinput.example.com/</link> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml deleted file mode 100644 index 9d1ffb67dc937811209783ddf1346f911da24f9c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: textInput link does not conflict with channel link -Expect: not bozo and feed['link'] == u'http://channel.example.com/' ---> -<rss version="2.0"> -<channel> -<link>http://channel.example.com/</link> -<textInput> -<link>http://textinput.example.com/</link> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml deleted file mode 100644 index cf2316ca472b006b141686f8b688210adfcd13b5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: textInput name -Expect: not bozo and feed['textinput']['name'] == u'textinput name' ---> -<rss version="2.0"> -<channel> -<textInput> -<name>textinput name</name> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml deleted file mode 100644 index 7d2f4b70426849df9e066dc297a626e85eaf1fbb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: textInput title -Expect: not bozo and feed['textinput']['title'] == u'textInput title' ---> -<rss version="2.0"> -<channel> -<title>Real title</title> -<textInput> -<title>textInput title</title> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml deleted file mode 100644 index f6a9d37459edfc9f797fbe5dff9f218c876b8542..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: textInput title does not conflict with channel title -Expect: not bozo and feed['title'] == u'Real title' ---> -<rss version="2.0"> -<channel> -<title>Real title</title> -<textInput> -<title>textInput title</title> -</textInput> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_title.xml b/lib/feedparser/tests/wellformed/rss/channel_title.xml deleted file mode 100644 index c4ea8c076b2ef26dc66b6ef8c5129b090f640326..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: normal title -Expect: not bozo and feed['title'] == u'Example feed' ---> -<rss version="2.0"> -<channel> -<title>Example feed</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml b/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml deleted file mode 100644 index 35b36f3f271b336ec6fa145475588bcb125cae30..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel title contains apos entity -Expect: not bozo and feed['title'] == u"Mark's title" ---> -<rss version="0.91"> -<channel> -<title>Mark's title</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml b/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml deleted file mode 100644 index dec60c1a6a774ea2527a315b9df5b4b2c83ffc92..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel title contains gt entity -Expect: not bozo and feed['title'] == u'2 > 1' ---> -<rss version="0.91"> -<channel> -<title>2 > 1</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml b/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml deleted file mode 100644 index c1cf9ec5a3c42fb1be4118f400eb029eca2872db..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel title contains lt entity -Expect: not bozo and feed['title'] == u'1 < 2' ---> -<rss version="0.91"> -<channel> -<title>1 < 2</title> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_ttl.xml b/lib/feedparser/tests/wellformed/rss/channel_ttl.xml deleted file mode 100644 index 781d05857562e49fbae78badcdbe22c4a0d49c48..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_ttl.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ttl -Expect: not bozo and feed['ttl'] == u'60' ---> -<rss version="2.0"> -<channel> -<ttl>60</ttl> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml deleted file mode 100644 index 2f0ff5f148337e470f82575ab909edd362e833c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel webMaster maps to publisher -Expect: not bozo and feed['publisher'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<webMaster>Example editor</webMaster> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml deleted file mode 100644 index ff0410db96eadce927aa4d7dc0007d4f48aee828..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel webMaster maps to publisher -Expect: not bozo and feed['publisher_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<webMaster>Example editor (me@example.com)</webMaster> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml deleted file mode 100644 index 1fad57321b6596209d3134a61892fc7ed3e5282d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: channel webMaster maps to publisher -Expect: not bozo and feed['publisher_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<webMaster>Example editor (me@example.com)</webMaster> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml b/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml deleted file mode 100644 index b88907638bccc06b88c7801d41415ae16dec971f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml +++ /dev/null @@ -1,16 +0,0 @@ -<!-- -Description: AT&T -Expect: not bozo and entries[0]['guid'] == 'tag:example.com,2006-05-04:/blog/' ---> - -<!DOCTYPE rss [ - <!ENTITY id "tag:example.com,"> -]> - -<rss version="2.0"> -<channel> -<item> -<guid isPermaLink='false'>&id;2006-05-04:/blog/</guid> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_author.xml b/lib/feedparser/tests/wellformed/rss/item_author.xml deleted file mode 100644 index 176ce1c9e95447e5410aa4b65900c9953b67bfc3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author -Expect: not bozo and entries[0]['author'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<item> -<author>Example editor</author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml deleted file mode 100644 index e990c9f5ab089cf9c0ee3d6ebcaae8277abdf8c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author maps to author_detail email if both name and email are given -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<item> -<author>Example editor (me@example.com)</author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml deleted file mode 100644 index 4cbf2da9b1580342af17d41b1eaf2819cd8bc3f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author maps to author_detail email if both name and email are given -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<item> -<author>Example editor <me@example.com></author> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml deleted file mode 100644 index 42aafb03cd392003a2a755ded55a673f2dd7deee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author maps to author_detail email if both name and email are given -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0"> -<channel> -<item> -<author>me@example.com (Example editor)</author> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml deleted file mode 100644 index 8083ff44dbf0421d8881cb8f062d5bc987efb70c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author maps to author_detail_name if both name and email are given -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<item> -<author>Example editor (me@example.com)</author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml deleted file mode 100644 index bcc451355f793933089120ce4c8553225b9a3793..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author maps to author_detail_name if both name and email are given -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<item> -<author>Example editor <me@example.com></author> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml deleted file mode 100644 index c0f64169bd2581de2c03a6a1b166a6a847771fad..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item author maps to author_detail_name if both name and email are given -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0"> -<channel> -<item> -<author>me@example.com (Example editor)</author> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_category.xml b/lib/feedparser/tests/wellformed/rss/item_category.xml deleted file mode 100644 index 2b50558cd83c5fe5671ba3e02c30cc778a8d7bd2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_category.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item single category -Expect: not bozo and entries[0]['category'] == u'Example category' ---> -<rss version="2.0"> -<channel> -<item> -<category>Example category</category> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_category_domain.xml b/lib/feedparser/tests/wellformed/rss/item_category_domain.xml deleted file mode 100644 index 8cbe25fd98085132079e75314a9901409ce424ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_category_domain.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item category with domain -Expect: not bozo and entries[0]['tags'][0]['scheme'] == u'http://www.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<category domain="http://www.example.com/">Example category</category> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_category_image.xml b/lib/feedparser/tests/wellformed/rss/item_category_image.xml deleted file mode 100644 index 6c1c5e8512ac1cae381ae6f9d082e7529b3a7f7f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_category_image.xml +++ /dev/null @@ -1,17 +0,0 @@ -<!-- -Description: item with an image inside a category should not cause error -Expect: not bozo and entries[0]['category'] != None ---> -<rss version="2.0"> -<channel> -<item> -<category>Example category - <image> - <url>http://www.thestranger.com/imager/b/story/4281993/a0a6/SavageLove-400.jpg</url> - <title><![CDATA[Savage Love]]></title> - <link><![CDATA[http://www.thestranger.com/seattle/SavageLove?oid=4281993]]></link> - </image> -</category> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml deleted file mode 100644 index c2f121d3498f1c6322bf5301bba3a4c0dacd8d96..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item multiple categories -Expect: not bozo and entries[0]['tags'][1]['scheme'] == u'http://www.example.com/2' ---> -<rss version="2.0"> -<channel> -<item> -<category domain="http://www.example.com/1">Example category 1</category> -<category domain="http://www.example.com/2">Example category 2</category> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml b/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml deleted file mode 100644 index 861dd92e5df10dd6655e884a3701a5cbce795812..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item multiple categories -Expect: not bozo and entries[0]['tags'][1]['term'] == u'Example category 2' ---> -<rss version="2.0"> -<channel> -<item> -<category>Example category 1</category> -<category>Example category 2</category> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_cc_license.xml b/lib/feedparser/tests/wellformed/rss/item_cc_license.xml deleted file mode 100644 index 6b023b9a829ce62d641f99e3e7ac4febffe493bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_cc_license.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: creative commons license -Expect: not bozo and entries[0]['license'] == u'http://www.creativecommons.org/licenses/by-nc/1.0' ---> -<rss version="2.0" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> -<channel> -<item> -<cc:license rdf:resource="http://www.creativecommons.org/licenses/by-nc/1.0"/> -<link>http://example.com/</link> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_comments.xml b/lib/feedparser/tests/wellformed/rss/item_comments.xml deleted file mode 100644 index 9751403cd314d5ac52a0e91b0d234f12139511d3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_comments.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item comments -Expect: not bozo and entries[0]['comments'] == u'http://example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<comments>http://example.com/</comments> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml deleted file mode 100644 index e826c39b03f4b6ce56ed28cc74b41d5289d5bd9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: content:encoded -Expect: not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><p>Example content</p></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml deleted file mode 100644 index 6cbd874b019219aca9fe29a696d4b54564720cfc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: content:encoded mode -Expect: 1 ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><p>Example content</p></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml deleted file mode 100644 index 3640386bb0f81f0d8c6aefff0d723db7dcccb9fd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: content:encoded type -Expect: not bozo and entries[0]['content'][0]['type'] == u'text/html' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><p>Example content</p></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml b/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml deleted file mode 100644 index 65353d91df53a598ba70044b186997b68e55d857..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: creative commons license -Expect: not bozo and entries[0]['license'] == u'http://www.creativecommons.org/licenses/by-nc/1.0' ---> -<rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"> -<channel> -<item> -<creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/1.0</creativeCommons:license> -<link>http://example.com/</link> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author.xml deleted file mode 100644 index 22e71c64b21955f77a1a36a30f588859843c624a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_author.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:author -Expect: not bozo and entries[0]['author'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:author>Example editor</dc:author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml deleted file mode 100644 index eb81dc96594e667ada676a99649503025ac43495..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:author maps to author_detail email if both name and email are given -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:author>Example editor (me@example.com)</dc:author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml deleted file mode 100644 index 5139a243540d2f89b8453e8c5f3f8a7991b73bda..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:author maps to author_detail name if both name and email are given -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:author>Example editor (me@example.com)</dc:author> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml b/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml deleted file mode 100644 index 79d16d030da629574b66b18a1bc94cbb98655209..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:contributor -Expect: not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:contributor>Example contributor</dc:contributor> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml deleted file mode 100644 index c214414b044b8fb4858e903bf5e78706ead331fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:creator maps to author -Expect: not bozo and entries[0]['author'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:creator>Example editor</dc:creator> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml deleted file mode 100644 index 899464eca341ba2fb1b7213170a07668c55b4e89..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:creator maps to author_detail email if both name and email are given -Expect: not bozo and entries[0]['author_detail']['email'] == u'me@example.com' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:creator>Example editor (me@example.com)</dc:creator> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml deleted file mode 100644 index ca20ab083c9517023cb3ca028f1032d84dd57557..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:creator maps to author_detail name if both name and email are given -Expect: not bozo and entries[0]['author_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:creator>Example editor (me@example.com)</dc:creator> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_date.xml b/lib/feedparser/tests/wellformed/rss/item_dc_date.xml deleted file mode 100644 index 0f0f11797e503d2aaeec0325d398f66cde9ad05b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_date.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:date -Expect: not bozo and entries[0]['updated'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:date>2003-12-31T10:14:55Z</dc:date> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml deleted file mode 100644 index 1d39df93813ceaa3506bbee12d881036be06cf77..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:date parsed -Expect: not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:date>2003-12-31T10:14:55Z</dc:date> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_description.xml b/lib/feedparser/tests/wellformed/rss/item_dc_description.xml deleted file mode 100644 index 973d736c0c3b113c7075d7e3cca40a34c7024282..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_description.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:description -Expect: not bozo and entries[0]['description'] == u'Example description' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:description>Example description</dc:description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml deleted file mode 100644 index 7b4e82b53aa92d03cb971ad7801ba07f393a6ee8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:publisher -Expect: not bozo and entries[0]['publisher'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:publisher>Example editor</dc:publisher> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml deleted file mode 100644 index d321bed4d50f29b97b55ee7b1f06f0b413de20cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:publisher -Expect: not bozo and entries[0]['publisher_detail']['email'] == u'me@example.com' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:publisher>Example editor (me@example.com)</dc:publisher> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml deleted file mode 100644 index 636c739e55b0cb29be11b4e54fe7cf2256db00c5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:publisher -Expect: not bozo and entries[0]['publisher_detail']['name'] == u'Example editor' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:publisher>Example editor (me@example.com)</dc:publisher> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml b/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml deleted file mode 100644 index 2d734a98f8638d8150e0605ef47828f44404681a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:rights -Expect: not bozo and entries[0]['copyright'] == u'Example copyright' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:rights>Example copyright</dc:rights> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml deleted file mode 100644 index 745a7864576976e4ebed1fc7dbfb97657eaea04d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:subject -Expect: not bozo and entries[0]['category'] == u'Example category' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:subject>Example category</dc:subject> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml deleted file mode 100644 index b7de4cc0185b061f931b22ba8371925a1bc5694d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:subject maps to categories -Expect: not bozo and entries[0]['tags'][0]['term'] == u'Example category' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:subject>Example category</dc:subject> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml deleted file mode 100644 index aa7722d6bddea7689ca171735ed0efc83df13354..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: multiple item dc:subject -Expect: not bozo and entries[0]['tags'][1]['term'] == u'Example category 2' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:subject>Example category 1</dc:subject> -<dc:subject>Example category 2</dc:subject> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_title.xml b/lib/feedparser/tests/wellformed/rss/item_dc_title.xml deleted file mode 100644 index dbe113439609d9f28ed35634e7a79e19f866b364..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dc_title.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dc:title -Expect: not bozo and entries[0]['title'] == u'Example title' ---> -<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<channel> -<item> -<dc:title>Example title</dc:title> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml deleted file mode 100644 index f70882b12903f171e20d02afac49eb33c6d6478f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dcterms:created -Expect: not bozo and entries[0]['created'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<item> -<dcterms:created>2003-12-31T10:14:55Z</dcterms:created> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml deleted file mode 100644 index 5d235c1471d318c479103b0b691ca0c4a066ecf0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dcterms:created parsed -Expect: not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<item> -<dcterms:created>2003-12-31T10:14:55Z</dcterms:created> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml deleted file mode 100644 index 789d514ceff7631165b51618a40a479d1faecff7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dcterms:issued -Expect: not bozo and entries[0]['published'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<item> -<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml deleted file mode 100644 index 4a3db36e1262b1f0f149e07e6942e3adce4ccb45..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dcterms:issued parsed -Expect: not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<item> -<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml deleted file mode 100644 index 00409dd570fdbeb23527f2322218c1759de67fdd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dcterms:modified -Expect: not bozo and entries[0]['updated'] == u'2003-12-31T10:14:55Z' ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<item> -<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml deleted file mode 100644 index 388e3e70288007e3723a1424011a76e6e9e96bfc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item dcterms:modified parsed -Expect: not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0) ---> -<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/"> -<channel> -<item> -<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_description.xml b/lib/feedparser/tests/wellformed/rss/item_description.xml deleted file mode 100644 index f5a49448ef98dfe67e77f9ce3d5fd806e8d30641..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description -Expect: not bozo and entries[0]['description'] == u'Example description' ---> -<rss version="2.0"> -<channel> -<item> -<description>Example description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml b/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml deleted file mode 100644 index 355f1c47a7dd7bf5843e94d8445fc4807c47c4aa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item contains both description and summary elements -Expect: not bozo and entries[0]['description'] == u'Example description' and entries[0]['content'][0]['value'] == u'Example summary' ---> -<rss version="2.0"> -<channel> -<item> -<description>Example description</description> -<summary>Example summary</summary> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_br.xml b/lib/feedparser/tests/wellformed/rss/item_description_br.xml deleted file mode 100644 index 19a5a121c84c2e817c639f8d820101bb009324de..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_br.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains both <br/> and <br /> -Expect: not bozo and entries[0]['description'] == u'article title<br /><br /> article byline<br /><br />text of article' ---> -<rss version="2.0"> -<channel> -<item> -<description><![CDATA[article title<br /><br /> article byline<br/><br/>text of article]]></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml b/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml deleted file mode 100644 index aa11391fc1c854c6ff90fdec9059f148b9df0839..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item description ends with <br /> -Expect: not bozo and entries[0]['description'] == u'<b>x</b><br />' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://www.example.com/</link> -<description><b>x</b><br/></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml b/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml deleted file mode 100644 index d5b98d625b937ed4b8b8b59c841dd57cf7af8c4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item description contains <code> with <br /> -Expect: not bozo and entries[0]['description'] == u'<code><br /></code>' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://www.example.com/</link> -<description><![CDATA[<code><br /></code>]]></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml b/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml deleted file mode 100644 index 4f461a30cca0a986917e1a1337b05c9086bb5243..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: escaped markup in item description -Expect: not bozo and entries[0]['description'] == u'<p>Example description</p>' ---> -<rss version="2.0"> -<channel> -<item> -<description><p>Example description</p></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml b/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml deleted file mode 100644 index a43ece73f02ebd3f7107dd60ec8140824303d280..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description is mapped to summary -Expect: not bozo and entries[0]['summary'] == u'Example description' ---> -<rss version="2.0"> -<channel> -<item> -<description>Example description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml b/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml deleted file mode 100644 index 95d54460846fde6e898495c0c351be028f776caf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: naked markup in item description -Expect: not bozo and entries[0]['description'] == u'<p>Example description</p>' ---> -<rss version="2.0"> -<channel> -<item> -<description><p>Example description</p></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml b/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml deleted file mode 100644 index 1930555ca2e95755f9983ef87e2f7404ee59a278..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: item description is not a DOCTYPE (but HTML parser thinks it is) -Expect: not bozo and entries[0]['description'] == """<!' <a href="foo">""" ---> -<rss> -<item> -<description><!' <a href="foo"></description> -</item> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml b/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml deleted file mode 100644 index a32d25edccb79625bfd92cff144abbd64a7048f5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: item description is not a DOCTYPE (but HTML parser thinks it is) -Expect: not bozo and entries[0]['description'] == "<!DOCTYPE" ---> -<rss> -<item> -<description><![CDATA[ <!DOCTYPE ]]></description> -</item> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml deleted file mode 100644 index 5f0f72fecdca1191842885a4d8e5dd6f48a8d9d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item enclosure length -Expect: not bozo and entries[0]['enclosures'][0]['length'] == u'100000' ---> -<rss version="2.0"> -<channel> -<item> -<enclosure url="http://example.com/" length="100000" type="image/jpeg" /> -<link>http://example.com/</link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml deleted file mode 100644 index 0e40abd03cbb71e5098c1f6ecb0fcae0a344f8bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: multiple enclosures -Expect: not bozo and entries[0]['enclosures'][1] == {'href': u'http://example.com/2', 'length': u'200000', 'type': u'image/gif'} ---> -<rss version="2.0"> -<channel> -<item> -<enclosure url="http://example.com/1" length="100000" type="image/jpeg" /> -<enclosure url="http://example.com/2" length="200000" type="image/gif" /> -<link>http://example.com/</link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml deleted file mode 100644 index 3b191c6db4d7927c242057c6d40c88e831b2ca0c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item enclosure type -Expect: not bozo and entries[0]['enclosures'][0]['type'] == u'image/jpeg' ---> -<rss version="2.0"> -<channel> -<item> -<enclosure url="http://example.com/" length="100000" type="image/jpeg" /> -<link>http://example.com/</link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml deleted file mode 100644 index b5da8cd5a05f4745985538147461a5db4a1b4da3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item enclosure url -Expect: not bozo and entries[0]['enclosures'][0]['url'] == u'http://example.com/' and entries[0]['links'][0]['rel'] == 'enclosure' ---> -<rss version="2.0"> -<channel> -<item> -<enclosure url="http://example.com/" length="100000" type="image/jpeg" /> -<link>http://example.com/</link> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml deleted file mode 100644 index c4738acdc4afa09385b52547f365aed80ef10c32..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item expirationDate -Expect: not bozo and entries[0]['expired'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<rss version="0.93"> -<channel> -<item> -<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml deleted file mode 100644 index 59a099f633df5dbac35c2ff465efebd4783aafd2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item expirationDate with multiple values -Expect: not bozo and entries[0]['expired_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0) ---> -<rss version="0.93"> -<channel> -<item> -<expirationDate>Wed, 01 Dec 2010 19:48:21 GMT</expirationDate> -<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml deleted file mode 100644 index 39ec50d679031f2f1280a71020486f3c36c2a853..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item expirationDate parsed -Expect: not bozo and entries[0]['expired_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0) ---> -<rss version="0.93"> -<channel> -<item> -<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem.xml deleted file mode 100644 index afe454b9e8e17b96fad1bcf0f5a310c5e79498ab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_fullitem.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: fullitem -Expect: not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><p>Example content</p></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml deleted file mode 100644 index bc14adaa1f9ddbce8071c349329ab512e4eaa2cd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: fullitem mode -Expect: 1 ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><p>Example content</p></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml deleted file mode 100644 index f667d695b100fe8dc984e6fd0f2c198e4607abd7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: fullitem type -Expect: not bozo and entries[0]['content'][0]['type'] == u'text/html' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><p>Example content</p></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid.xml b/lib/feedparser/tests/wellformed/rss/item_guid.xml deleted file mode 100644 index 52ed08439c6ba335e5922cab975e3bb98a341d47..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item guid -Expect: not bozo and entries[0]['guid'] == u'http://guid.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<guid>http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml deleted file mode 100644 index b579c3cd4c1162c4401dd55aebd816c0610f67cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item guid does not override link -Expect: not bozo and entries[0]['link'] == u'http://link.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://link.example.com/</link> -<guid>http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml deleted file mode 100644 index 1f9705e87e3cdf59d0b1ac528f1ec5fa22807462..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: guidislink -Expect: not bozo and entries[0]['guidislink'] ---> -<rss version="2.0"> -<channel> -<item> -<guid>http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml deleted file mode 100644 index 64bd5753f34a6630032515182cb8e955889506f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item guid does not override link even if isPermaLink="true" -Expect: not bozo and entries[0]['link'] == u'http://link.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://link.example.com/</link> -<guid isPermaLink="true">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml deleted file mode 100644 index d8505fb1e61630992aa72c6b956980077c7b8e4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: not guidislink when link present (even if isPermaLink="true") -Expect: not bozo and not entries[0]['guidislink'] ---> -<rss version="2.0"> -<channel> -<item> -<link>http://link.example.com/</link> -<guid isPermaLink="true">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml deleted file mode 100644 index bed21fec3ad7486d10a090146facbda54a42ed88..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: guidislink when isPermaLink="true" -Expect: not bozo and entries[0]['guidislink'] ---> -<rss version="2.0"> -<channel> -<item> -<guid isPermaLink="true">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml deleted file mode 100644 index ce2e90cb53b0eddbc2b6f9a194535ced418e7ab0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item guid maps to link when isPermaLink="true" -Expect: not bozo and entries[0]['link'] == u'http://guid.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<guid isPermaLink="true">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml deleted file mode 100644 index bb778e79aa4111cf43bbed18905566b8626957cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item guid maps to link -Expect: not bozo and entries[0]['link'] == u'http://guid.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<guid>http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml deleted file mode 100644 index 79f20e247f7581d9bc9969d2cffff243950c1933..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item guid not permalink is not duplicated into link -Expect: not bozo and not entries[0].has_key('link') ---> -<rss version="2.0"> -<channel> -<item> -<guid isPermaLink="false">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml deleted file mode 100644 index 5f16a2923e92ccfe9e4894de916b3c0cbbc272da..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item guid (not permalink) is not duplicated into link -Expect: not bozo and entries[0]['link'] == u'http://link.example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://link.example.com/</link> -<guid isPermaLink="false">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml deleted file mode 100644 index c25de446d2f5349a5cc8816ee2eb3b01db6b5042..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: not guidislink since item guid is not permalink -Expect: not bozo and not entries[0]['guidislink'] ---> -<rss version="2.0"> -<channel> -<item> -<guid isPermaLink="false">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml deleted file mode 100644 index 7052b455ab2c964b83bc044e8ba781f3e38a6ffc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: not guidislink because guid is not permalink -Expect: not bozo and not entries[0]['guidislink'] ---> -<rss version="2.0"> -<channel> -<item> -<link>http://link.example.com/</link> -<guid isPermaLink="false">http://guid.example.com/</guid> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml deleted file mode 100644 index cb9e82d3584c43141b0a7423708b8c3c39395f44..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item guid not permalink is not resolved as a URL -Expect: not bozo and entries[0]['id'] == u'abc' ---> -<rss version="2.0" xml:base="http://dom.test/"> -<channel> -<item> -<guid isPermaLink="false">abc</guid> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml deleted file mode 100644 index ae5b9864f5a1cee0563480bdff15e1436851f650..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -Description: image link does not bleed into item link array -Expect: not bozo and len(entries[0]['links']) == 1 ---> -<rss version="2.0"> -<channel> - <item> - <link>http://item.TEST/</link> - <image> - <link>http://item.TEST/imagelink</link> - </image> - </item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml deleted file mode 100644 index 3fa86ae7ddfec1ccb3b4dcca8c61477bc281d13b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!-- -Description: image link does not conflict with item link -Expect: not bozo and entries[0]['link'] == u'http://item.TEST/' ---> -<rss version="2.0"> -<channel> - <item> - <link>http://item.TEST/</link> - <image> - <link>http://item.TEST/imagelink</link> - </image> - </item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_link.xml b/lib/feedparser/tests/wellformed/rss/item_link.xml deleted file mode 100644 index f56a3d4c7ff0e32a2dd787c5a02d1907e78ef457..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item link -Expect: not bozo and entries[0]['link'] == u'http://example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<link>http://example.com/</link> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_pubDate.xml b/lib/feedparser/tests/wellformed/rss/item_pubDate.xml deleted file mode 100644 index 23c3c89662e5461e49a89b170f448a8ba93d16bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_pubDate.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item pubDate -Expect: not bozo and entries[0]['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT' ---> -<rss version="2.0"> -<channel> -<item> -<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml deleted file mode 100644 index 32db8be4baa44e09a3b175e90dcc51f8bb76be97..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item pubDate parsed and mapped to published_parsed -Expect: not bozo and entries[0]['published_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0) ---> -<rss version="2.0"> -<channel> -<item> -<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_source.xml b/lib/feedparser/tests/wellformed/rss/item_source.xml deleted file mode 100644 index 12b7745e1af284543c83497f6c4831eb7c698c98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_source.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item source -Expect: not bozo and entries[0]['source']['title'] == 'Example source' ---> -<rss version="2.0"> -<channel> -<item> -<source url="http://example.com/">Example source</source> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_source_url.xml b/lib/feedparser/tests/wellformed/rss/item_source_url.xml deleted file mode 100644 index c5f235a4f13528e99bff33b75805e975f89508db..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_source_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item source url -Expect: not bozo and entries[0].source.href == u'http://example.com/' ---> -<rss version="2.0"> -<channel> -<item> -<source url="http://example.com/">Example source</source> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml b/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml deleted file mode 100644 index 9fd152f0b680034a96dd6d083ae7e54db8584122..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: item contains both summary and description elements -Expect: not bozo and entries[0]['summary'] == u'Example summary' and entries[0]['content'][0]['value'] == u'Example description' ---> -<rss version="2.0"> -<channel> -<item> -<summary>Example summary</summary> -<description>Example description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_title.xml b/lib/feedparser/tests/wellformed/rss/item_title.xml deleted file mode 100644 index b0d62660df28a7955fbd7fd1420c9cb402092da2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_title.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item title -Expect: not bozo and entries[0]['title'] == u'Item 1 title' ---> -<rss version="2.0"> -<channel> -<item> -<title>Item 1 title</title> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml deleted file mode 100644 index cf41c29a69f97f9f51827610f359aecd129c9b10..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: xhtml:body -Expect: not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"> -<p>Example content</p> -</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml deleted file mode 100644 index 5d30b0f2e78cd899e10229d9eb268ea30e6902c7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: xhtml:body mode -Expect: 1 ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"> -<p>Example content</p> -</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml deleted file mode 100644 index ded661a08f042711f0f58fa47a1d3782a7fa6d66..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml +++ /dev/null @@ -1,13 +0,0 @@ -<!-- -Description: xhtml:body type -Expect: not bozo and entries[0]['content'][0]['type'] == u'application/xhtml+xml' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"> -<p>Example content</p> -</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/newlocation.xml b/lib/feedparser/tests/wellformed/rss/newlocation.xml deleted file mode 100644 index b6b9923940615ff7c165721dbe48df8b72c8e497..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/newlocation.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: rss newLocation -Expect: not bozo and feed.newlocation == u'http://example/new' ---> -<rss version="2.0"> -<redirect> - <newLocation>http://example/new</newLocation> -</redirect> -</rss> diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml deleted file mode 100644 index 9f583c69167680174cb54dfc771caa551c8063a3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: RSS Userland namespace #1 -Expect: not bozo and feed['description'] == u'Example description' ---> -<rss xmlns="http://backend.userland.com/rss"> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml deleted file mode 100644 index 38af22008a308162b4a459a5ec7b8b1dbf650793..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: RSS Userland namespace #2 -Expect: not bozo and feed['description'] == u'Example description' ---> -<rss xmlns="http://backend.userland.com/rss2"> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml deleted file mode 100644 index 8bd75469b5138549c504ca97a8c0381aec016bd2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: RSS Userland namespace #3 -Expect: not bozo and feed['description'] == u'Example description' ---> -<rss xmlns="http://backend.userland.com/rss2.1"> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml deleted file mode 100644 index 52dc603eba4e35db8f03416d64d5f98d95a06a93..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: RSS Userland namespace #4 -Expect: not bozo and feed['description'] == u'Example description' ---> -<rss xmlns="http://blogs.law.harvard.edu/tech/rss"> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_090.xml b/lib/feedparser/tests/wellformed/rss/rss_version_090.xml deleted file mode 100644 index a73e246b2003e198b3c8142bf61219e9c72a9b67..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_090.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 0.90 -Expect: not bozo and version == u'rss090' ---> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/"> -</rdf:RDF> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml b/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml deleted file mode 100644 index fbcc15cec610bded502cf5c2d91871fbd457a10f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: RSS version 0.91 (Netscape) -Expect: not bozo and version == u'rss091n' ---> -<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> -<rss version="0.91"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml b/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml deleted file mode 100644 index ee9f1cc353ec03dc5d49275158bfa69f6b4a2295..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 0.91 (Userland) -Expect: not bozo and version == u'rss091u' ---> -<rss version="0.91"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_092.xml b/lib/feedparser/tests/wellformed/rss/rss_version_092.xml deleted file mode 100644 index 3f3b82ad4e1ba1f16671d448e4722be3833fdddb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_092.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 0.92 -Expect: not bozo and version == u'rss092' ---> -<rss version="0.92"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_093.xml b/lib/feedparser/tests/wellformed/rss/rss_version_093.xml deleted file mode 100644 index 5855af68cc4cf505fddebf329f0b62ce830fc3df..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_093.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 0.93 -Expect: not bozo and version == u'rss093' ---> -<rss version="0.93"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_094.xml b/lib/feedparser/tests/wellformed/rss/rss_version_094.xml deleted file mode 100644 index 8b03e17d92b7c29964bbb79ef1f54090b661c9bc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_094.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 0.94 -Expect: not bozo and version == u'rss094' ---> -<rss version="0.94"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_20.xml b/lib/feedparser/tests/wellformed/rss/rss_version_20.xml deleted file mode 100644 index 56ffbdde0184dc7fd9e939e1e9846988daaa61ac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_20.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 2.0 -Expect: not bozo and version == u'rss20' ---> -<rss version="2.0"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_201.xml b/lib/feedparser/tests/wellformed/rss/rss_version_201.xml deleted file mode 100644 index 749659793ffefd4306626810c2cc9b273b852856..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_201.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 2.01 -Expect: not bozo and version == u'rss20' ---> -<rss version="2.01"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_21.xml b/lib/feedparser/tests/wellformed/rss/rss_version_21.xml deleted file mode 100644 index b7d45ef75810308a34ed1671bb7c43523fb8909a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_21.xml +++ /dev/null @@ -1,6 +0,0 @@ -<!-- -Description: RSS version 2.1 -Expect: not bozo and version == u'rss20' ---> -<rss version="2.1"> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml b/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml deleted file mode 100644 index e6440d8810a6a2456029677961707e1cd2ebce29..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: missing RSS version number -Expect: not bozo and version == u'rss' ---> -<rss> -<channel> -<description>Example description</description> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml deleted file mode 100644 index 71c1aa744efe3faa0f9606f28f475c7b4f5ef8af..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain abbr attribute -Expect: not bozo and entries[0]['description'] == '<span abbr=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span abbr=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml deleted file mode 100644 index 28c8497760695ee4f508ea14332c4a5a6b87f9f6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain accept-charset attribute -Expect: not bozo and entries[0]['description'] == '<span accept-charset=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span accept-charset=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml deleted file mode 100644 index 9eaee23358d4b739d82a849c453e807bdd33ee50..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain accept attribute -Expect: not bozo and entries[0]['description'] == '<span accept=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span accept=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml deleted file mode 100644 index dd41be8684831d21bd66706c83ccf5bc0fb8620e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain accesskey attribute -Expect: not bozo and entries[0]['description'] == '<span accesskey=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span accesskey=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml deleted file mode 100644 index fa15e1e951da852fbce5cae84cdf8333a24551f4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain action attribute -Expect: not bozo and entries[0]['description'] == '<span action=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span action=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml deleted file mode 100644 index 9d1c53b74b5f60251425a7b346e607d9d9253d34..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain align attribute -Expect: not bozo and entries[0]['description'] == '<span align=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span align=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml deleted file mode 100644 index 88c0b19434d46a49490e27434736374e7fc3a36b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain alt attribute -Expect: not bozo and entries[0]['description'] == '<span alt=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span alt=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml deleted file mode 100644 index 71399464bcd9642a96aefbe6b2e168af3c74d02f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain autocomplete attribute -Expect: not bozo and entries[0]['description'] == '<span autocomplete=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span autocomplete=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml deleted file mode 100644 index 77cd3fa3462e722233707f50fc880d27e6dbc78e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain autofocus attribute -Expect: not bozo and entries[0]['description'] == '<span autofocus=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span autofocus=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml deleted file mode 100644 index 0d872934386c01909203f83c65cd7f84cd23a5c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain autoplay attribute -Expect: not bozo and entries[0]['description'] == '<span></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span autoplay=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml deleted file mode 100644 index 2d3232f1fc652a798a2b8ee2ac9652d506df3609..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain axis attribute -Expect: not bozo and entries[0]['description'] == '<span axis=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span axis=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml deleted file mode 100644 index bc0fb9b94850ed0b22bb8bc33b47c99c53fb6504..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain background attribute -Expect: not bozo and entries[0]['description'] == '<span background=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span background=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml deleted file mode 100644 index 9a9dfc74128888df54fd3c46738714dc19ed4eeb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain balance attribute -Expect: not bozo and entries[0]['description'] == '<span balance=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span balance=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml deleted file mode 100644 index efc9f5c3599f6eac6f4213f32b0809b5c2a6a8bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain bgcolor attribute -Expect: not bozo and entries[0]['description'] == '<span bgcolor=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span bgcolor=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml deleted file mode 100644 index 8f964272e93362c0f303f64f968a89b76cd011df..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain bgproperties attribute -Expect: not bozo and entries[0]['description'] == '<span bgproperties=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span bgproperties=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml deleted file mode 100644 index 80b118dd9d6f6bcf085295cc8b024a513a55a35b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain border attribute -Expect: not bozo and entries[0]['description'] == '<span border=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span border=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml deleted file mode 100644 index 5b314be88a4f7e04d7ac80ee10b132195ff67eb2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain bordercolor attribute -Expect: not bozo and entries[0]['description'] == '<span bordercolor=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span bordercolor=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml deleted file mode 100644 index 5913ffabb71daa6733af1cbe6421c043f4843498..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain bordercolordark attribute -Expect: not bozo and entries[0]['description'] == '<span bordercolordark=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span bordercolordark=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml deleted file mode 100644 index 4883e64a6571b01561822b34226990d43a058365..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain bordercolorlight attribute -Expect: not bozo and entries[0]['description'] == '<span bordercolorlight=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span bordercolorlight=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml deleted file mode 100644 index beaad75f1a0ba39d34c5c81aea8c8e3d49163142..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain bottompadding attribute -Expect: not bozo and entries[0]['description'] == '<span bottompadding=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span bottompadding=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml deleted file mode 100644 index 27c4df18b5d239274e1e0b233beedfa3e2fd7302..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain cellpadding attribute -Expect: not bozo and entries[0]['description'] == '<span cellpadding=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span cellpadding=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml deleted file mode 100644 index 4043ac5cf496cf57ec70679fdd11bba4d4ed96e0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain cellspacing attribute -Expect: not bozo and entries[0]['description'] == '<span cellspacing=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span cellspacing=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml deleted file mode 100644 index e1dcbcec6c30894dc60abad8103170ab2cd84774..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain ch attribute -Expect: not bozo and entries[0]['description'] == '<span ch=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span ch=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml deleted file mode 100644 index 2eb2869ca7de7fdb302c9f622f47452d4f8987f6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain challenge attribute -Expect: not bozo and entries[0]['description'] == '<span challenge=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span challenge=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml deleted file mode 100644 index 31d30b4ea66e5663c7293d87096e59322aec32ea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain char attribute -Expect: not bozo and entries[0]['description'] == '<span char=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span char=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml deleted file mode 100644 index 4f866340410f3a23ea636cda330b8ef28c4a040d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain charoff attribute -Expect: not bozo and entries[0]['description'] == '<span charoff=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span charoff=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml deleted file mode 100644 index 85d2a1fb1c9993606e23e469fcf2beb67ac81d7b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain charset attribute -Expect: not bozo and entries[0]['description'] == '<span charset=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span charset=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml deleted file mode 100644 index 259e17c75bd37b5a03f8fcc09c19842947a44e11..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain checked attribute -Expect: not bozo and entries[0]['description'] == '<span checked=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span checked=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml deleted file mode 100644 index 2e3e79bfe7afcdcad297c85a4684e19c47e653ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain choff attribute -Expect: not bozo and entries[0]['description'] == '<span choff=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span choff=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml deleted file mode 100644 index 5eb0011fa660f733219b57e4b75ccb99bc4d0967..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain cite attribute -Expect: not bozo and entries[0]['description'] == '<span cite=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span cite=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml deleted file mode 100644 index bd2577dbe362abe58a7b72339943640d4b51f642..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain class attribute -Expect: not bozo and entries[0]['description'] == '<span class=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span class=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml deleted file mode 100644 index a1a572dc53d9424fc32d6e391a15d4d290874790..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain clear attribute -Expect: not bozo and entries[0]['description'] == '<span clear=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span clear=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml deleted file mode 100644 index 980ccfc14fc40b764e70f2248a0240682d68759c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain color attribute -Expect: not bozo and entries[0]['description'] == '<span color=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span color=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml deleted file mode 100644 index ceeef598cb783acec5efb36c8c290c8a4065e994..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain cols attribute -Expect: not bozo and entries[0]['description'] == '<span cols=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span cols=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml deleted file mode 100644 index eef6cb6c61b2c61bf8c8a933c745872ecc83cbef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain colspan attribute -Expect: not bozo and entries[0]['description'] == '<span colspan=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span colspan=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml deleted file mode 100644 index 61a0bbe68101093ec0bbf8f5d5b06c25f47742c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain compact attribute -Expect: not bozo and entries[0]['description'] == '<span compact=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span compact=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml deleted file mode 100644 index 328c6249b3af554ef074504c4fc6e91ba62334d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain contenteditable attribute -Expect: not bozo and entries[0]['description'] == '<span contenteditable=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span contenteditable=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml deleted file mode 100644 index 9d389fb687e4146fbb407f450210c9593fd12574..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain coords attribute -Expect: not bozo and entries[0]['description'] == '<span coords=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span coords=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml deleted file mode 100644 index 537d331eae30cfa53f9cd32876f907151f22f8d5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain data attribute -Expect: not bozo and entries[0]['description'] == '<span data=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span data=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml deleted file mode 100644 index 44837182d12505283f49609366c25b11d2820e04..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain datafld attribute -Expect: not bozo and entries[0]['description'] == '<span datafld=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span datafld=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml deleted file mode 100644 index 4093280af61b0f2e060703b3745a4a3826f433db..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain datapagesize attribute -Expect: not bozo and entries[0]['description'] == '<span datapagesize=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span datapagesize=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml deleted file mode 100644 index 3d86946b95664b1dc62b962d5618f852f90e2ad8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain datasrc attribute -Expect: not bozo and entries[0]['description'] == '<span datasrc=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span datasrc=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml deleted file mode 100644 index 6554045bd4f31ea7d059108b98386c20a4c615a9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain datetime attribute -Expect: not bozo and entries[0]['description'] == '<span datetime=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span datetime=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml deleted file mode 100644 index 17829c043b2cae35b0a1adb1d1acae3bce535d58..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain default attribute -Expect: not bozo and entries[0]['description'] == '<span default=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span default=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml deleted file mode 100644 index ee7777d7260fb0b49269c13f5b880f3a209b2e59..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain delay attribute -Expect: not bozo and entries[0]['description'] == '<span delay=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span delay=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml deleted file mode 100644 index c0618cc1e044685b28f8308f1b16d6012fe12993..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain dir attribute -Expect: not bozo and entries[0]['description'] == '<span dir=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span dir=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml deleted file mode 100644 index aa9194a9e554d51b00d8a9aeb69783b42f487a98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain disabled attribute -Expect: not bozo and entries[0]['description'] == '<span disabled=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span disabled=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml deleted file mode 100644 index 88720d3d997ef5074bdde8570ac81d31009036e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain draggable attribute -Expect: not bozo and entries[0]['description'] == '<span draggable=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span draggable=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml deleted file mode 100644 index c57ccb7649b6957ce7b17848d8a0fc3cfbb10bbe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain dynsrc attribute -Expect: not bozo and entries[0]['description'] == '<span dynsrc=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span dynsrc=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml deleted file mode 100644 index ab50610ae5915a212db2978b824e961939cb0906..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain enctype attribute -Expect: not bozo and entries[0]['description'] == '<span enctype=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span enctype=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml deleted file mode 100644 index 22cc29e443f5e40c2613a8a7ec400debd0c0f7d3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain end attribute -Expect: not bozo and entries[0]['description'] == '<span end=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span end=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml deleted file mode 100644 index 6c595b0357d7895c737650d8b3eacaf4a395c821..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain face attribute -Expect: not bozo and entries[0]['description'] == '<span face=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span face=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml deleted file mode 100644 index 2b08493f5347163f029bc9f5b457d506b51aed4d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain for attribute -Expect: not bozo and entries[0]['description'] == '<span for=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span for=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml deleted file mode 100644 index 4b37f62c9d5961651b90bf10b65f7aa87efe349c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain form attribute -Expect: not bozo and entries[0]['description'] == '<span form=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span form=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml deleted file mode 100644 index ed8d85a2253670b12645e7b3701684d945e62e16..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain frame attribute -Expect: not bozo and entries[0]['description'] == '<span frame=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span frame=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml deleted file mode 100644 index f46682585bca4f5ccbedea0a59a3658d1f7b0778..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain galleryimg attribute -Expect: not bozo and entries[0]['description'] == '<span galleryimg=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span galleryimg=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml deleted file mode 100644 index ed5a8f5a697cab96c3894ed53a1795c570a46add..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain gutter attribute -Expect: not bozo and entries[0]['description'] == '<span gutter=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span gutter=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml deleted file mode 100644 index 6e805fcce946536e604b61b329f2ede94d33e1f6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain headers attribute -Expect: not bozo and entries[0]['description'] == '<span headers=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span headers=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml deleted file mode 100644 index 881636bc43c48376ad92ba4e4b4e3235a488c6fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain height attribute -Expect: not bozo and entries[0]['description'] == '<span height=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span height=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml deleted file mode 100644 index 7e45d5b42335590e154f17e4c73d076968147c53..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain hidden attribute -Expect: not bozo and entries[0]['description'] == '<span hidden=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span hidden=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml deleted file mode 100644 index b1ae3e0832348faa81aa6a3c60e147c9d88dfb8c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain hidefocus attribute -Expect: not bozo and entries[0]['description'] == '<span hidefocus=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span hidefocus=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml deleted file mode 100644 index b89160b75777d34fe6df985fe53d9f6aa06cc840..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain high attribute -Expect: not bozo and entries[0]['description'] == '<span high=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span high=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml deleted file mode 100644 index 4382e9fca3127f302b83e3dd3779d267f5569d61..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain href attribute -Expect: not bozo and entries[0]['description'] == '<span href=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span href=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml deleted file mode 100644 index a48b42f33fb7161383a953c75582d53156c29288..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain hreflang attribute -Expect: not bozo and entries[0]['description'] == '<span hreflang=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span hreflang=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml deleted file mode 100644 index c08a60273c23f1492ac228e3e299ce1eb860d9cf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain hspace attribute -Expect: not bozo and entries[0]['description'] == '<span hspace=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span hspace=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml deleted file mode 100644 index 444a6b8f1179081c75e2718b131598b359eec5be..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain icon attribute -Expect: not bozo and entries[0]['description'] == '<span icon=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span icon=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml deleted file mode 100644 index d9f93a8428cc655cad7348724b1875a84736e76d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain id attribute -Expect: not bozo and entries[0]['description'] == '<span id=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span id=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml deleted file mode 100644 index b09563904a2a7b61ce9242243d2c31d916989e9a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain inputmode attribute -Expect: not bozo and entries[0]['description'] == '<span inputmode=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span inputmode=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml deleted file mode 100644 index eda48b6ef801c06ddae4a0224317b80a7999e3ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain ismap attribute -Expect: not bozo and entries[0]['description'] == '<span ismap=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span ismap=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml deleted file mode 100644 index 074727b9d0ca315c6aa25b7badda1d48f79f195e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain keytype attribute -Expect: not bozo and entries[0]['description'] == '<span keytype=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span keytype=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml deleted file mode 100644 index 340a4c389803b06cff47f45215ab8ef3b636f3af..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain label attribute -Expect: not bozo and entries[0]['description'] == '<span label=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span label=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml deleted file mode 100644 index 2d7e5261e5e23ec61788fea90feea4d1a530d899..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain lang attribute -Expect: not bozo and entries[0]['description'] == '<span lang=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span lang=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml deleted file mode 100644 index a6432e0cd5a98c7c4071c75b60d51c177ddcbf0b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain leftspacing attribute -Expect: not bozo and entries[0]['description'] == '<span leftspacing=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span leftspacing=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml deleted file mode 100644 index 360b27f81822f29d000c8f6a7e4175014b7b387b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain list attribute -Expect: not bozo and entries[0]['description'] == '<span list=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span list=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml deleted file mode 100644 index 97b7d94122a3d94a41b1eea5a94dca02fe5ce807..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain longdesc attribute -Expect: not bozo and entries[0]['description'] == '<span longdesc=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span longdesc=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml deleted file mode 100644 index 8201f52dc9da874e0c720a03ecd5cebef42509a2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain loop attribute -Expect: not bozo and entries[0]['description'] == '<span loop=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span loop=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml deleted file mode 100644 index 8bde8e88866ba305fe4c0b164837aa535f0a2bca..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain loopcount attribute -Expect: not bozo and entries[0]['description'] == '<span loopcount=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span loopcount=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml deleted file mode 100644 index fa608d175727210dc0e31922b962beb219c6f519..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain loopend attribute -Expect: not bozo and entries[0]['description'] == '<span loopend=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span loopend=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml deleted file mode 100644 index f11901278dfd5f6347daf77e66cab637abb67256..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain loopstart attribute -Expect: not bozo and entries[0]['description'] == '<span loopstart=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span loopstart=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml deleted file mode 100644 index 8ec062fe61fbf47aa335115664a5358345230410..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain low attribute -Expect: not bozo and entries[0]['description'] == '<span low=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span low=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml deleted file mode 100644 index a4258e36e2e894b72b3b863d3a0dc9202d14a261..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain lowsrc attribute -Expect: not bozo and entries[0]['description'] == '<span lowsrc=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span lowsrc=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml deleted file mode 100644 index 80cbaebad58cebb89cb3240c72c44d75c320e491..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain max attribute -Expect: not bozo and entries[0]['description'] == '<span max=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span max=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml deleted file mode 100644 index ad16126e3d32daa3b84154880f817c6f6f485405..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain maxlength attribute -Expect: not bozo and entries[0]['description'] == '<span maxlength=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span maxlength=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml deleted file mode 100644 index daeea441760e8fb6125a608c8c19fe7a413d4104..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain media attribute -Expect: not bozo and entries[0]['description'] == '<span media=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span media=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml deleted file mode 100644 index c3a81ce5537f2dadba96b5b8af5b109c22ebf608..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain method attribute -Expect: not bozo and entries[0]['description'] == '<span method=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span method=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml deleted file mode 100644 index ad28c081f582418a0db7716775b70f89c4189e88..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain min attribute -Expect: not bozo and entries[0]['description'] == '<span min=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span min=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml deleted file mode 100644 index ef1e17ac005504a746af948eb9bf1ba29f11b7c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain multiple attribute -Expect: not bozo and entries[0]['description'] == '<span multiple=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span multiple=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml deleted file mode 100644 index 0f98d769691a741eb66f2458f4d1fd8bcd3e3278..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain name attribute -Expect: not bozo and entries[0]['description'] == '<span name=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span name=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml deleted file mode 100644 index 1b7fb0d966cadc86e483bc2fde4f7f2675264608..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain nohref attribute -Expect: not bozo and entries[0]['description'] == '<span nohref=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span nohref=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml deleted file mode 100644 index b1371da35c1a969ab24909259a313d166729d19f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain noshade attribute -Expect: not bozo and entries[0]['description'] == '<span noshade=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span noshade=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml deleted file mode 100644 index b312dea07e4d2553ec40ef7bbec5c6f103ccfcb4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain nowrap attribute -Expect: not bozo and entries[0]['description'] == '<span nowrap=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span nowrap=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml deleted file mode 100644 index 2f4fc43caae6c065d85fce62a898cd8d80e59b52..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain open attribute -Expect: not bozo and entries[0]['description'] == '<span open=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span open=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml deleted file mode 100644 index a1220763487dee747e0503b8ff2503757df941d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain optimum attribute -Expect: not bozo and entries[0]['description'] == '<span optimum=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span optimum=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml deleted file mode 100644 index c4e10322cf77ea0b7779425ca8cbe7e98e085056..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain pattern attribute -Expect: not bozo and entries[0]['description'] == '<span pattern=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span pattern=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml deleted file mode 100644 index 03b4f233aff23b27905d1f8ca90e9dc389308a64..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain ping attribute -Expect: not bozo and entries[0]['description'] == '<span ping=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span ping=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml deleted file mode 100644 index f6a6713f2f72a82a754259f23c485b84f3851fe0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain point-size attribute -Expect: not bozo and entries[0]['description'] == '<span point-size=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span point-size=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml deleted file mode 100644 index 4148f5e7078785eb5455898b5f64f3fe917186ce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain poster attribute -Expect: not bozo and entries[0]['description'] == '<video poster="http://d.test/p.jpeg"></video>' ---> -<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://d.test/"> -<entry> -<content type="html"><video poster="p.jpeg"></video></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml deleted file mode 100644 index c2afa36a0f2752548507f3b5f6703a5d2ecc8d5d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain pqg attribute -Expect: not bozo and entries[0]['description'] == '<span pqg=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span pqg=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml deleted file mode 100644 index 0e26d0914deee5dd4e0bedce927993e453735d28..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain preload attribute -Expect: not bozo and entries[0]['description'] == '<video preload="auto"></video>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><video preload="auto"></video></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml deleted file mode 100644 index 86f0d0b6de391d398b68010e3967fbc0a1a16917..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain prompt attribute -Expect: not bozo and entries[0]['description'] == '<span prompt=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span prompt=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml deleted file mode 100644 index d575eace63a015de5e8c793eb7dda944c8cc84ca..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain radiogroup attribute -Expect: not bozo and entries[0]['description'] == '<span radiogroup=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span radiogroup=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml deleted file mode 100644 index f123f839e311aee63696b086ba094eebc21a0993..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain readonly attribute -Expect: not bozo and entries[0]['description'] == '<span readonly=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span readonly=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml deleted file mode 100644 index cd09d3085bb3b97ba6a5e392f0973dab3a8859f1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain rel attribute -Expect: not bozo and entries[0]['description'] == '<span rel=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span rel=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml deleted file mode 100644 index 15b86874252698b93ed9733fe80158cdb495000f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain repeat-max attribute -Expect: not bozo and entries[0]['description'] == '<span repeat-max=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span repeat-max=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml deleted file mode 100644 index 9549f0e42849f64081c5d78116a59bc47c1721a2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain repeat-min attribute -Expect: not bozo and entries[0]['description'] == '<span repeat-min=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span repeat-min=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml deleted file mode 100644 index 2fb1e8c45d2bf438d45347d20b0972e1ff2abb11..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain replace attribute -Expect: not bozo and entries[0]['description'] == '<span replace=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span replace=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml deleted file mode 100644 index 3252c8a492abd44ce1e8ff411c18b86b3870376f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain required attribute -Expect: not bozo and entries[0]['description'] == '<span required=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span required=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml deleted file mode 100644 index 8f56b0267680e656e86966104096ec175587e5b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain rev attribute -Expect: not bozo and entries[0]['description'] == '<span rev=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span rev=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml deleted file mode 100644 index 9a90e34acf3110588977fb4c04c83f0b7a677e1d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain rightspacing attribute -Expect: not bozo and entries[0]['description'] == '<span rightspacing=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span rightspacing=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml deleted file mode 100644 index 6817c543507bf4e7154db1ea3205eaa35d002231..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain rows attribute -Expect: not bozo and entries[0]['description'] == '<span rows=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span rows=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml deleted file mode 100644 index daca0671c037831c88b53a289413b7c25e9cd365..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain rowspan attribute -Expect: not bozo and entries[0]['description'] == '<span rowspan=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span rowspan=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml deleted file mode 100644 index 62a718cc8238e1ef00685bfe04009dcac8e4de7a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain rules attribute -Expect: not bozo and entries[0]['description'] == '<span rules=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span rules=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml deleted file mode 100644 index 7ae2c075aab0b7580e956e9e6c8381fec2543b28..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain scope attribute -Expect: not bozo and entries[0]['description'] == '<span scope=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span scope=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml deleted file mode 100644 index e1ff4b1f705e42167239b1860642c504292bf310..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain selected attribute -Expect: not bozo and entries[0]['description'] == '<span selected=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span selected=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml deleted file mode 100644 index 9bcb6923141f4b713597b9141bee84c4b7c42bf6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain shape attribute -Expect: not bozo and entries[0]['description'] == '<span shape=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span shape=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml deleted file mode 100644 index 5a7d7a98a46e5f4beb2e477935f9965326de1598..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain size attribute -Expect: not bozo and entries[0]['description'] == '<span size=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span size=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml deleted file mode 100644 index e6da56c4c0b45098364625c9333cda4c50de55fa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain span attribute -Expect: not bozo and entries[0]['description'] == '<span span=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span span=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml deleted file mode 100644 index fd6636bacda3257c060ca8d132cb59ffbe674d15..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain src attribute -Expect: not bozo and entries[0]['description'] == '<span src=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span src=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml deleted file mode 100644 index 81374748722ec027e973003942a8714e2bcf644f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain start attribute -Expect: not bozo and entries[0]['description'] == '<span start=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span start=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml deleted file mode 100644 index 3935b810584429275941ebb12f2856c0ac7e77cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain step attribute -Expect: not bozo and entries[0]['description'] == '<span step=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span step=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml deleted file mode 100644 index 903ccf68e14e7050b1ac03133710a2de5e74b80b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain summary attribute -Expect: not bozo and entries[0]['description'] == '<span summary=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span summary=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml deleted file mode 100644 index 9779ee12ebc3b68debadedcdd82cac71a0906d7c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain suppress attribute -Expect: not bozo and entries[0]['description'] == '<span suppress=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span suppress=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml deleted file mode 100644 index a6c0ec6e2ddfe9bc85fec5508b548be8e9418935..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain tabindex attribute -Expect: not bozo and entries[0]['description'] == '<span tabindex=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span tabindex=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml deleted file mode 100644 index 3716ecd3f5d94893f52e10bf9e7c53d4e18dcde2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain target attribute -Expect: not bozo and entries[0]['description'] == '<span target=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span target=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml deleted file mode 100644 index b624ee091570966e64cea59755f3664a8ad0af94..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain template attribute -Expect: not bozo and entries[0]['description'] == '<span template=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span template=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml deleted file mode 100644 index 0e8d520703856b370579a3e3059b77ea97cd8368..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain title attribute -Expect: not bozo and entries[0]['description'] == '<span title=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span title=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml deleted file mode 100644 index 248bfbfb3de9cfc80e20b5fd770a61fa40a5422a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain toppadding attribute -Expect: not bozo and entries[0]['description'] == '<span toppadding=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span toppadding=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml deleted file mode 100644 index 7f9479f400df4576545506cf959c75c95c9c7f86..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain type attribute -Expect: not bozo and entries[0]['description'] == '<span type=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span type=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml deleted file mode 100644 index 4ef7f63adcbdcc7846e8d4daf4a83afe79960e36..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain unselectable attribute -Expect: not bozo and entries[0]['description'] == '<span unselectable=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span unselectable=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml deleted file mode 100644 index ebbcfc5b04071a6884094ebb45229f1cc644b23a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain urn attribute -Expect: not bozo and entries[0]['description'] == '<span urn=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span urn=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml deleted file mode 100644 index d0a76387d5be8c1119e2c520852e3297238b6ace..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain usemap attribute -Expect: not bozo and entries[0]['description'] == '<span usemap=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span usemap=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml deleted file mode 100644 index 21efa6bf8c11b9ea9e84d37fbe104828cb4e87d0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain valign attribute -Expect: not bozo and entries[0]['description'] == '<span valign=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span valign=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml deleted file mode 100644 index 56ce060c1832d2073137a3fcad97e345f3aa8078..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain value attribute -Expect: not bozo and entries[0]['description'] == '<span value=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span value=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml deleted file mode 100644 index ada4076f1aa3ddf4bc5f601b3be4aefe1ee0439a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain variable attribute -Expect: not bozo and entries[0]['description'] == '<span variable=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span variable=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml deleted file mode 100644 index 058520922edcd7a6e11cbf1818e38cdf522d09a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain volume attribute -Expect: not bozo and entries[0]['description'] == '<span volume=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span volume=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml deleted file mode 100644 index 50b7a3f4e555f9a4fb23670230e902a5ca126f08..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain vrml attribute -Expect: not bozo and entries[0]['description'] == '<span vrml=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span vrml=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml deleted file mode 100644 index 7eca04f8b86c7b1429317ad8de56728232fdd671..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain vspace attribute -Expect: not bozo and entries[0]['description'] == '<span vspace=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span vspace=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml deleted file mode 100644 index c2b4cebe0a4ee9ab6d75903bf4c995db6b0bfedc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain width attribute -Expect: not bozo and entries[0]['description'] == '<span width=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span width=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml deleted file mode 100644 index 1b23e49fb5fabfe766f619586ad63537c924b7ba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain wrap attribute -Expect: not bozo and entries[0]['description'] == '<span wrap=""></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span wrap=""></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml deleted file mode 100644 index 3c50289128917d691b447e5b516f5eeb01926ea6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <a></a> -Expect: not bozo and entries[0]['description'] == '<a></a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><a></a></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml deleted file mode 100644 index 4aafa029ec78a850cfb35a54fccf2c0e13c51906..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <abbr></abbr> -Expect: not bozo and entries[0]['description'] == '<abbr></abbr>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><abbr></abbr></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml deleted file mode 100644 index 5762c39800c2642974623ee978af8122457d62fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <acronym></acronym> -Expect: not bozo and entries[0]['description'] == '<acronym></acronym>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><acronym></acronym></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml deleted file mode 100644 index e11de2fb2f40df9b1eb031ce854184ba880be2d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <address></address> -Expect: not bozo and entries[0]['description'] == '<address></address>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><address></address></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml deleted file mode 100644 index ce4a14fe698fb292f84c0efb13a201b405d2945c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <area></area> -Expect: not bozo and entries[0]['description'] == '<area />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><area></area></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml deleted file mode 100644 index 3c1c3285e91f3818a1653a9731c6ba3c763f7b82..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <article></article> -Expect: not bozo and entries[0]['description'] == '<article></article>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><article></article></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml deleted file mode 100644 index 035ab288b79845a991f47ca022ffbdaa232d6887..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <aside></aside> -Expect: not bozo and entries[0]['description'] == '<aside></aside>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><aside></aside></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml deleted file mode 100644 index 3923dfab10157ecd859e1365d4e1a39491628840..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <audio></audio> -Expect: not bozo and entries[0]['description'] == '<audio></audio>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><audio></audio></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml deleted file mode 100644 index 76cdf89c679767b64eaf1293f70dd8f2311b6def..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <b></b> -Expect: not bozo and entries[0]['description'] == '<b></b>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><b></b></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml deleted file mode 100644 index 8671e0962c88144421e5129b63cd62eec080f242..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <big></big> -Expect: not bozo and entries[0]['description'] == '<big></big>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><big></big></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml deleted file mode 100644 index 5eae04510ee1cb02d741c9e370d0e4bc7a4432c8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <blockquote></blockquote> -Expect: not bozo and entries[0]['description'] == '<blockquote></blockquote>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><blockquote></blockquote></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml deleted file mode 100644 index 192a27ced5488dc8044b47fd1999d2bb466fffa5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <br></br> -Expect: not bozo and entries[0]['description'] == '<br />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><br></br></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml deleted file mode 100644 index 9a07d9f0578cf0b2a94a34dc4ac515190f07341d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <button></button> -Expect: not bozo and entries[0]['description'] == '<button></button>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><button></button></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml deleted file mode 100644 index 99b97bd091297781b6356b612d3ec3cee430eaba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <canvas></canvas> -Expect: not bozo and entries[0]['description'] == '<canvas></canvas>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><canvas></canvas></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml deleted file mode 100644 index fc4c55af86bdd7ba7818a7463f8edb560b55317e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <caption></caption> -Expect: not bozo and entries[0]['description'] == '<caption></caption>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><caption></caption></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml deleted file mode 100644 index 8aecf8f35b564625874b25e6ed9e6ca0b296e5a3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <center></center> -Expect: not bozo and entries[0]['description'] == '<center></center>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><center></center></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml deleted file mode 100644 index 0af1302ebb81790a7386db6905fee4a4a4c9657e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <cite></cite> -Expect: not bozo and entries[0]['description'] == '<cite></cite>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><cite></cite></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml deleted file mode 100644 index c43bfe02656cec472d13808451ce4a7968174afd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <code></code> -Expect: not bozo and entries[0]['description'] == '<code></code>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><code></code></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml deleted file mode 100644 index 14b064fe892fdb4c96e455c031bbb50c6d220415..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <col></col> -Expect: not bozo and entries[0]['description'] == '<col />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><col></col></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml deleted file mode 100644 index 0b628463fb3132bb8bb7aeb02b3b41874c08dd1b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <colgroup></colgroup> -Expect: not bozo and entries[0]['description'] == '<colgroup></colgroup>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><colgroup></colgroup></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml deleted file mode 100644 index c09276c8822e3c96a9db49d9707cd9dd8af1adc9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <command /> -Expect: not bozo and entries[0]['description'] == '<command />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><command></command></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml deleted file mode 100644 index a9b1a681c4c346d74de0538d486cdddfbc31b2bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <datagrid></datagrid> -Expect: not bozo and entries[0]['description'] == '<datagrid></datagrid>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><datagrid></datagrid></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml deleted file mode 100644 index d4ab94bbcbf4afc4c33e79e44a558edbcabe7365..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <datalist></datalist> -Expect: not bozo and entries[0]['description'] == '<datalist></datalist>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><datalist></datalist></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml deleted file mode 100644 index 99b110ae19b05399e8136131f318a1cdfade8997..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <dd></dd> -Expect: not bozo and entries[0]['description'] == '<dd></dd>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><dd></dd></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml deleted file mode 100644 index 36444a5ec2e7200040b10703afb6d6140dbdcc14..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <del></del> -Expect: not bozo and entries[0]['description'] == '<del></del>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><del></del></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml deleted file mode 100644 index c66b6b07d38472e82f8388a8b02024eb3b661204..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <details></details> -Expect: not bozo and entries[0]['description'] == '<details></details>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><details></details></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml deleted file mode 100644 index d6d09546da5f3ff482894cfc1d77b0463b4d87e7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <dfn></dfn> -Expect: not bozo and entries[0]['description'] == '<dfn></dfn>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><dfn></dfn></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml deleted file mode 100644 index c0f9122099546499e42933b72ef7c02e936cf40a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <dialog></dialog> -Expect: not bozo and entries[0]['description'] == '<dialog></dialog>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><dialog></dialog></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml deleted file mode 100644 index 55e74651c53f62c85ec12183ba8691c4bab6b192..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <dir></dir> -Expect: not bozo and entries[0]['description'] == '<dir></dir>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><dir></dir></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml deleted file mode 100644 index aecbff335ec9986d845ae5446a00838f51107483..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <div></div> -Expect: not bozo and entries[0]['description'] == '<div></div>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><div></div></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml deleted file mode 100644 index bd14c61c8e18b46ef6cb233da64f4a36e2689403..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <dl></dl> -Expect: not bozo and entries[0]['description'] == '<dl></dl>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><dl></dl></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml deleted file mode 100644 index 9cb828c665adb5775d209d161d67ae769b4d5a00..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <dt></dt> -Expect: not bozo and entries[0]['description'] == '<dt></dt>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><dt></dt></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml deleted file mode 100644 index 1fad48eda3f91029791232101e43c2ec805d6fd2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <em></em> -Expect: not bozo and entries[0]['description'] == '<em></em>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><em></em></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml deleted file mode 100644 index 693381fc963d507b00a6d6575ec3db224a4f7b68..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <event-source></event-source> -Expect: not bozo and entries[0]['description'] == '<event-source></event-source>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><event-source></event-source></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml deleted file mode 100644 index 489fc29dbb9fb84936d06057647d2d669c2797d3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <fieldset></fieldset> -Expect: not bozo and entries[0]['description'] == '<fieldset></fieldset>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><fieldset></fieldset></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml deleted file mode 100644 index 0314699c16c7351eb7d3587e0a487bd2fbb23b0c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <figure></figure> -Expect: not bozo and entries[0]['description'] == '<figure></figure>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><figure></figure></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml deleted file mode 100644 index 4356a897cbf7ea4f671d1f7d9b87581c7e5eb4fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <font></font> -Expect: not bozo and entries[0]['description'] == '<font></font>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><font></font></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml deleted file mode 100644 index 05fddcfaf2a06a0dd5082ed17d55cc3974d27aee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <footer></footer> -Expect: not bozo and entries[0]['description'] == '<footer></footer>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><footer></footer></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml deleted file mode 100644 index b2795de9db3e9db0d70053d96a4e1be115594a54..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <form></form> -Expect: not bozo and entries[0]['description'] == '<form></form>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><form></form></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml deleted file mode 100644 index 792d84384814b1cf40082fe0e247f9308411c431..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <h1></h1> -Expect: not bozo and entries[0]['description'] == '<h1></h1>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><h1></h1></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml deleted file mode 100644 index 1e559c17b0da66d4247e88fe2d37d107e1564da1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <h2></h2> -Expect: not bozo and entries[0]['description'] == '<h2></h2>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><h2></h2></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml deleted file mode 100644 index d778b68ac2f1720adbfa0f2b3cae83acba2d7e3b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <h3></h3> -Expect: not bozo and entries[0]['description'] == '<h3></h3>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><h3></h3></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml deleted file mode 100644 index 736e40d0c324ee956e098e4b8a4fccdb9791de8c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <h4></h4> -Expect: not bozo and entries[0]['description'] == '<h4></h4>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><h4></h4></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml deleted file mode 100644 index 44d0cece3854af7bc74932c68dccf91cbe346848..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <h5></h5> -Expect: not bozo and entries[0]['description'] == '<h5></h5>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><h5></h5></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml deleted file mode 100644 index e50a6a17bcca2afe44f5b7210c95bff7839e3c0d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <h6></h6> -Expect: not bozo and entries[0]['description'] == '<h6></h6>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><h6></h6></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml deleted file mode 100644 index c6e124dc6f516483200d51c4cba901404e8e3312..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <header></header> -Expect: not bozo and entries[0]['description'] == '<header></header>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><header></header></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml deleted file mode 100644 index 9d960505a988dc7f480b7f22ddb72d512fbc2c55..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <hr></hr> -Expect: not bozo and entries[0]['description'] == '<hr />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><hr></hr></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml deleted file mode 100644 index 6d61b46132327646627c6199473f0ac41546ed84..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <i></i> -Expect: not bozo and entries[0]['description'] == '<i></i>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><i></i></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml deleted file mode 100644 index 87c3e14e35db8b8632bb998eddf4bc3d028e19cd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <img></img> -Expect: not bozo and entries[0]['description'] == '<img />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><img></img></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml deleted file mode 100644 index 955bcd8525973a801ade3cd36878f459f61a2f6f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <input></input> -Expect: not bozo and entries[0]['description'] == '<input />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><input></input></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml deleted file mode 100644 index 75ebb8c7584b511c18b36820c77de4410dcad1f6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <ins></ins> -Expect: not bozo and entries[0]['description'] == '<ins></ins>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><ins></ins></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml deleted file mode 100644 index a26b8771c305bb6d3980e1888c698b3ab51338ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <kbd></kbd> -Expect: not bozo and entries[0]['description'] == '<kbd></kbd>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><kbd></kbd></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml deleted file mode 100644 index e86b15f5e9abeea5d9476c358d9e5cdda014c2cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <keygen /> -Expect: not bozo and entries[0]['description'] == '<keygen />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><keygen></keygen></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml deleted file mode 100644 index 64379d86ff4250d9726077574335bc1632f26249..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <label></label> -Expect: not bozo and entries[0]['description'] == '<label></label>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><label></label></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml deleted file mode 100644 index c858b6fd2820681733cedd0758f6cc9c8a1161f0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <legend></legend> -Expect: not bozo and entries[0]['description'] == '<legend></legend>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><legend></legend></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml deleted file mode 100644 index 212ed94cd93e53229eb9d0410a70455532733d3a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <li></li> -Expect: not bozo and entries[0]['description'] == '<li></li>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><li></li></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml deleted file mode 100644 index 0b14b58f8fb80608930f3fc3ca528f681b7719e7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <m></m> -Expect: not bozo and entries[0]['description'] == '<m></m>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><m></m></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml deleted file mode 100644 index 3f8835a0f2a86114d62be2f2c9e725fcd4124563..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <map></map> -Expect: not bozo and entries[0]['description'] == '<map></map>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><map></map></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml deleted file mode 100644 index 3ecc3a214824dfd6a97cb95a4712c411808e5f4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <menu></menu> -Expect: not bozo and entries[0]['description'] == '<menu></menu>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><menu></menu></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml deleted file mode 100644 index d263e8aa0620d98451c825ae2ce2ddff60bf8099..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <meter></meter> -Expect: not bozo and entries[0]['description'] == '<meter></meter>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><meter></meter></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml deleted file mode 100644 index 96c65fbc8aa05d0f4c02f342b7c03eaf767f3469..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <multicol></multicol> -Expect: not bozo and entries[0]['description'] == '<multicol></multicol>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><multicol></multicol></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml deleted file mode 100644 index 0a4be553bc7535b9f2d9eafd898707cd62cbf4c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <nav></nav> -Expect: not bozo and entries[0]['description'] == '<nav></nav>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><nav></nav></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml deleted file mode 100644 index 83ac0b543a9b3aac26bc37c1e6d7da69deb7a0bc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <nextid></nextid> -Expect: not bozo and entries[0]['description'] == '<nextid></nextid>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><nextid></nextid></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml deleted file mode 100644 index 4d53a0804bf04fc06cddd46cf1848f45dc63e979..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <noscript></noscript> -Expect: not bozo and entries[0]['description'] == '<noscript></noscript>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><noscript></noscript></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml deleted file mode 100644 index d41750ea7893ae57719f4b78fc2ffe7a2bb91bb4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <ol></ol> -Expect: not bozo and entries[0]['description'] == '<ol></ol>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><ol></ol></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml deleted file mode 100644 index 2ed4a5b341f72a08fe39fef5629107436b3fe968..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <optgroup></optgroup> -Expect: not bozo and entries[0]['description'] == '<optgroup></optgroup>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><optgroup></optgroup></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml deleted file mode 100644 index 944a0897ca9e2326962dd6c9b4f9009921e132b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <option></option> -Expect: not bozo and entries[0]['description'] == '<option></option>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><option></option></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml deleted file mode 100644 index bd6d2399bc5b3acc91f951edc0c4873ca7642242..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <output></output> -Expect: not bozo and entries[0]['description'] == '<output></output>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><output></output></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml deleted file mode 100644 index ad67e0c72278a0ac78df96caa6f3cd56c52d0649..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <p></p> -Expect: not bozo and entries[0]['description'] == '<p></p>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><p></p></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml deleted file mode 100644 index c6da1b86a80c317901541a4cdfbc0db9fa805660..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <pre></pre> -Expect: not bozo and entries[0]['description'] == '<pre></pre>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><pre></pre></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml deleted file mode 100644 index 7b335e940173e2d4aa558ca87bab40493addb1bc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <progress></progress> -Expect: not bozo and entries[0]['description'] == '<progress></progress>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><progress></progress></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml deleted file mode 100644 index 95958d29df344accf72ab0a00430e16fa9afab92..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <q></q> -Expect: not bozo and entries[0]['description'] == '<q></q>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><q></q></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml deleted file mode 100644 index 6a5e911816a0c21233d05c0606d1ac6ce8d3b1a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <s></s> -Expect: not bozo and entries[0]['description'] == '<s></s>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><s></s></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml deleted file mode 100644 index ededff49a122f62e2aef83b8275b19f9d015f3cd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <samp></samp> -Expect: not bozo and entries[0]['description'] == '<samp></samp>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><samp></samp></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml deleted file mode 100644 index 97044eb3287294aa74a4fb7b70935605697ad4b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <section></section> -Expect: not bozo and entries[0]['description'] == '<section></section>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><section></section></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml deleted file mode 100644 index 2f8091cb8196374a86cf02c258a2334cdc938409..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <select></select> -Expect: not bozo and entries[0]['description'] == '<select></select>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><select></select></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml deleted file mode 100644 index 3ec2a3ac27274e0154f50e33f97591df2d498487..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <small></small> -Expect: not bozo and entries[0]['description'] == '<small></small>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><small></small></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml deleted file mode 100644 index d65966fb6a2b2d32fa88cbb8a5df2d95e7062ece..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <sound></sound> -Expect: not bozo and entries[0]['description'] == '<sound></sound>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><sound></sound></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml deleted file mode 100644 index 87e924859c29bbb6c26e543de5ad7b88132c8497..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <source /> -Expect: not bozo and entries[0]['description'] == '<source />' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><source></source></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml deleted file mode 100644 index 537b415fb770f068a621285d22738b2f68c06ba8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <spacer></spacer> -Expect: not bozo and entries[0]['description'] == '<spacer></spacer>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><spacer></spacer></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml deleted file mode 100644 index d1f19a145e257265b097b7f94dacadbfadffea3f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <span></span> -Expect: not bozo and entries[0]['description'] == '<span></span>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><span></span></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml deleted file mode 100644 index 0185a3d053d2d24f74afcb314e461ad43df1f07c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <strike></strike> -Expect: not bozo and entries[0]['description'] == '<strike></strike>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><strike></strike></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml deleted file mode 100644 index b931d27023640777609246ba1cc86a8223c942bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <strong></strong> -Expect: not bozo and entries[0]['description'] == '<strong></strong>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><strong></strong></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml deleted file mode 100644 index 578c437b4f7e13252deffc1d0bd881428c969cbd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <sub></sub> -Expect: not bozo and entries[0]['description'] == '<sub></sub>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><sub></sub></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml deleted file mode 100644 index 3e90091cfbe85727f28cdd70a75878d7e5f84f08..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <sup></sup> -Expect: not bozo and entries[0]['description'] == '<sup></sup>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><sup></sup></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml deleted file mode 100644 index d23afb57f08a89144c1f73e7dea022c1129bedea..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <table></table> -Expect: not bozo and entries[0]['description'] == '<table></table>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><table></table></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml deleted file mode 100644 index 09d43dae04863a03a270bbf899960fa1f62f7db4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <tbody></tbody> -Expect: not bozo and entries[0]['description'] == '<tbody></tbody>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><tbody></tbody></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml deleted file mode 100644 index 09d4ccdd416b82a30fc953d3899a9f0922da6138..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <td></td> -Expect: not bozo and entries[0]['description'] == '<td></td>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><td></td></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml deleted file mode 100644 index b2a6758c2bc6b8a74c859ea8a2609951e3f21d0c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <textarea></textarea> -Expect: not bozo and entries[0]['description'] == '<textarea></textarea>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><textarea></textarea></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml deleted file mode 100644 index 3ada9d6fbbe415f46f91f81de39247726beebbc3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <tfoot></tfoot> -Expect: not bozo and entries[0]['description'] == '<tfoot></tfoot>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><tfoot></tfoot></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml deleted file mode 100644 index 5441dac4799364ba7a87b198395007366ca126e2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <th></th> -Expect: not bozo and entries[0]['description'] == '<th></th>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><th></th></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml deleted file mode 100644 index 317100db1664f207097484fe2625de280b15fe1c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <thead></thead> -Expect: not bozo and entries[0]['description'] == '<thead></thead>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><thead></thead></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml deleted file mode 100644 index b692599250fcb48eab87f84d20a7c2f09461e51a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <time></time> -Expect: not bozo and entries[0]['description'] == '<time></time>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><time></time></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml deleted file mode 100644 index 2b83aace1ff14b431b158a30ee2dd2bf18ab5e1d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <tr></tr> -Expect: not bozo and entries[0]['description'] == '<tr></tr>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><tr></tr></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml deleted file mode 100644 index e23719e4e7bbf0d02989ce353d0e3582cf467145..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <tt></tt> -Expect: not bozo and entries[0]['description'] == '<tt></tt>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><tt></tt></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml deleted file mode 100644 index dd85877ca4a13b6811f60a1b903732c12661dff6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <u></u> -Expect: not bozo and entries[0]['description'] == '<u></u>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><u></u></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml deleted file mode 100644 index a6e825e2eede74547c503b3bbee30fd91d9b6e53..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <ul></ul> -Expect: not bozo and entries[0]['description'] == '<ul></ul>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><ul></ul></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml deleted file mode 100644 index e39e712352e47fc79c90f23ce1545679035e2982..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <var></var> -Expect: not bozo and entries[0]['description'] == '<var></var>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><var></var></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml deleted file mode 100644 index c88a91c81cd21c129f068abf77aa441e8a3501fa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: content may contain <video></video> -Expect: not bozo and entries[0]['description'] == '<video></video>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> -<entry> -<content type="html"><video></video></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml b/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml deleted file mode 100644 index c66295e4dfa2f663d844f4be7ed0c4e326cfb152..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: Blogger's stupid invalid img attribute (circa August 2011) -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img border="0" src="http://site.invalid/img.jpg" />' ---> -<feed xmlns='http://www.w3.org/2005/Atom'> - <entry> - <content type='html'> - <img border="0" i$="true" src="http://site.invalid/img.jpg" /> - </content> - </entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml deleted file mode 100644 index d2c314373d8074b2a3df4891999e528ea39ef8f9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains applet -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://example.com/"></applet> <b>description</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml deleted file mode 100644 index 64f9e574901d3a6edff7517e803c110e1509a0c0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains embed -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><blink>safe</blink> description</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml deleted file mode 100644 index 9260c1ca4feb6bfb58c0cfa4ce87d185e0a60c5d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml +++ /dev/null @@ -1,75 +0,0 @@ -<!-- -Description: entry content is crazy -Expect: not bozo and entries[0]['content'][0]['value'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml deleted file mode 100644 index d8ff3775fb8d28683b3f17b7f1e754d34621d91d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains embed -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<embed src="http://example.com/"> <b>description</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml deleted file mode 100644 index cfc75d170d0adef425b2022b4c11f66b653cf433..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains frameset -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> <b>description</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml deleted file mode 100644 index fc2a07be8830f7dc9eb5cf9e367d328da5172bff..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains iframe -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<iframe src="http://example.com/"> <b>description</b></iframe></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml deleted file mode 100644 index 2672577f26a1663c60f6825d846c0340ee544cdb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains link -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> <b>description</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml deleted file mode 100644 index d22be265fb3eba70debb5d5bf7c178fd81cedc9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains meta -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> <b>description</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml deleted file mode 100644 index 24542192b3cb127a52362efd0fa89cbe4e0b9732..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains object -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> <b>description</b></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml deleted file mode 100644 index 55ddeb5f3c9cb1aede3ef2fb9fd1c7323dfdb015..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onabort -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml deleted file mode 100644 index a45a40c8b7daa63bbf3ce0141c08c2d7fa92a7e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onblur -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml deleted file mode 100644 index 3d4c3edea27f6c312e6b2e0bfa05bc72422fe628..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onchange -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml deleted file mode 100644 index 10f544c385f4fd4b3d31e9eb128a91eea8bc1037..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onclick -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml deleted file mode 100644 index 4817e3f9fbea8c5d71da4e01f5ecd3fff1d7cb74..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains ondblclick -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml deleted file mode 100644 index 1d0bd042896596e1c005336e9fd145e40b1f1057..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onerror -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml deleted file mode 100644 index b547ab437f295b13c7dc4a1f8ff723de652eae9e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onfocus -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml deleted file mode 100644 index e3cc00642fafc9efa1a110024968ff82cc3aea08..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onkeydown -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml deleted file mode 100644 index 2e622b80b8adaecec1211cd62097b349f34d0f2b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onkeypress -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml deleted file mode 100644 index 668b8fb990deaa3e9276e7e1025ae7435c807b21..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onkeyup -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml deleted file mode 100644 index 11a25672e77821af8f7c75097e531fa9b21f233e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onload -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml deleted file mode 100644 index 546ae7cc939721a71e728036761853e1c5ca3e5b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onmousedown -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml deleted file mode 100644 index 3c34adbb93dcae82c2e07a1b6b4fd2c59f14d823..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onmouseout -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml deleted file mode 100644 index baccde4e9825e31bcc661fbd873381eab12920fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onmouseover -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml deleted file mode 100644 index 5c11c082a0743316430755ab38089d11647646b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onmouseup -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml deleted file mode 100644 index 5a69ab580f2dbc8d572973a198a8e39381a61092..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onreset -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml deleted file mode 100644 index ffa3bff69be0abc41555db3d0eff5e9ec1c6ed04..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onresize -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml deleted file mode 100644 index c394684968acac44ef73fa307e5a527cdf209a0a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onsubmit -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml deleted file mode 100644 index 3f42aa36f10caff8121c3adb930b611245796891..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains onunload -Expect: not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml deleted file mode 100644 index e975dad563910b80399ad1b556ed30922f427a49..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains script -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml deleted file mode 100644 index 210eb6ca969940cec5c82ca60526eb9445ce0bfc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: entry content contains script (base64) -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="base64"> -c2FmZTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5sb2NhdGlvbi5ocmVmPSdodHRwOi8n -KycvZXhhbXBsZS5jb20vJzs8L3NjcmlwdD4gZGVzY3JpcHRpb24= -</content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml deleted file mode 100644 index 0bb07b9f591f8a49521a18c503f1dec0fd63e19a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains script (cdata) -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml deleted file mode 100644 index 9c5c62394dcd4fe98550c9d8067f3e5e62d2cad1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains script (inline) -Expect: not bozo and entries[0]['content'][0]['value'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml deleted file mode 100644 index b243bf18fa9a822a40d15f949dca01c05e45df60..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains style -Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></content> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml deleted file mode 100644 index 6b38beb9d2736240ec8967c7a4fd3080754b71c4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry content contains applet -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<content type="text/html" mode="escaped">safe<style>b {color:red}</style> <b>description</b></content> -</entry> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml deleted file mode 100644 index 4404687f2f25f7db7d026d2f5f245835d3040a34..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains applet -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://example.com/"></applet> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml deleted file mode 100644 index 64e95bc686acbed720e6c7007c196a286a8605c9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains blink -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><blink>safe</blink> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml deleted file mode 100644 index cdc2ad176a822e3c19bc0c571ef7af3d2e673c87..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml +++ /dev/null @@ -1,75 +0,0 @@ -<!-- -Description: entry summary is crazy -Expect: not bozo and entries[0]['summary'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml deleted file mode 100644 index f7403ef9985d9d51e54de1a67dc786edea99f9e2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains embed -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<embed src="http://example.com/"> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml deleted file mode 100644 index a59a2d04315ed1452ebd33a9026b809422f796b4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains frame -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml deleted file mode 100644 index a93899aad37b36252cea39ff0c4de735690183c8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains iframe -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<iframe src="http://example.com/"> description</iframe></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml deleted file mode 100644 index 4db83dbe336d23a9bde4cd023b9ebd8cbbafcb39..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains link -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml deleted file mode 100644 index 42345e153d37d824b525e0246d3b11dc2a5bd3ef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains meta -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml deleted file mode 100644 index f38dcb5fd2e6163d3930570e034943abae08ffef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains object -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml deleted file mode 100644 index 97c867638e123c8b6c1594f260576b24c32c7b3e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onabort -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml deleted file mode 100644 index 1bc3f830212f5db010a59881998a45bcc9bc9c50..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onblur -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml deleted file mode 100644 index 553aa311031f5656b57ccae6832b17ad2f4d921f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onchange -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml deleted file mode 100644 index b5d1d4e1b95be0b733c8e49db93c9f36cbb47735..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onclick -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml deleted file mode 100644 index fc3a61a2f603a2c9d76d8b7f40c688e8ed9a184b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains ondblclick -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml deleted file mode 100644 index 60d46a18a25d65a670acd18425d35300c15bb516..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onerror -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml deleted file mode 100644 index 6f47ec69b3c9bd291d9af126465168ccd2ef0bdd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onfocus -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml deleted file mode 100644 index 7eaa42c84c65770d777f9faf3268321f3354990d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onkeydown -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml deleted file mode 100644 index 8085f65d4123dc65552d83a9df54aecf00be09d7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onkeypress -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml deleted file mode 100644 index 557422ee02a356ebb48fccd7f7133bb4c3348def..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onkeyup -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml deleted file mode 100644 index 04323bcefe285f69d4acdaba09616dd79aa89215..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onload -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml deleted file mode 100644 index bb74f81c168e42eb4a564daf76750198eca0f085..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onmousedown -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml deleted file mode 100644 index 3c60df9778f51fd59d114c888fc161efca254349..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onmouseout -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml deleted file mode 100644 index f0732d052408729a5a80a31c7a91b455ed3d3bf2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onmouseover -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml deleted file mode 100644 index 8b28f6dca6feaf84cb2cc430f3cbb6b08b70eff1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onmouseup -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml deleted file mode 100644 index 997cfc4b266f373853a7c5b645d0f51dfd870bdf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onreset -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml deleted file mode 100644 index 9a6a84e805aa0513582bcf5c7ed3d600796eb4fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onresize -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml deleted file mode 100644 index af6682fb17365de526ac1e9d87fb72e8c7d3c562..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onsubmit -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml deleted file mode 100644 index 6b1539dcd6afb7d5885925b91841a68adf68946e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains onunload -Expect: not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml deleted file mode 100644 index 3787017e0fb91d0b91531f2f27a618618c600cf8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains script -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml deleted file mode 100644 index 61c013cc2469459fe7e7cdbb70728eb2ee7482d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml +++ /dev/null @@ -1,12 +0,0 @@ -<!-- -Description: entry summary contains script (base64) -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="base64"> -c2FmZTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5sb2NhdGlvbi5ocmVmPSdodHRwOi8n -KycvZXhhbXBsZS5jb20vJzs8L3NjcmlwdD4gZGVzY3JpcHRpb24= -</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml deleted file mode 100644 index 055e366085784e892fdfe38c2bdc8c5e676cd01e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains script -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml deleted file mode 100644 index 06d8ff9cf341a3c9269bec1b27c86321faa4f011..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains script -Expect: not bozo and entries[0]['summary'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml deleted file mode 100644 index d3ffcc910a4689c60f8e2104024e3780566236fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains script (maps to description) -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml deleted file mode 100644 index 320de4e38c82ba14e79b0f9de6fce95889f71ae8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry summary contains style -Expect: not bozo and entries[0]['summary'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<summary type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></summary> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml deleted file mode 100644 index 4a84cf71e14755120390993530d4ddafec9615ec..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains applet -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://www.example.com/"></applet> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml deleted file mode 100644 index d7c7618afedb6541b3187a7c546101811a50ae80..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains blink -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><blink>safe</blink> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml deleted file mode 100644 index 4d6929a04f1fdab4e26b5e34c2b9939e36ea412b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml +++ /dev/null @@ -1,75 +0,0 @@ -<!-- -Description: entry title is crazy -Expect: not bozo and entries[0]['title'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml deleted file mode 100644 index cc56f982d6f2dd49eb580d933658bfc73d9f17c0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains embed -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<embed src="http://www.example.com/"> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml deleted file mode 100644 index eb5f80f9f9733eb6e05ad9247206db0257ce1a00..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains frame -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml deleted file mode 100644 index d3dd7b70c6950c7977f4426f0dab1cc82899a58a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains iframe -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<iframe src="http://www.example.com/"></iframe> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml deleted file mode 100644 index 28fa2fa9532ca121d7bbc06df555069c5038966c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains link -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml deleted file mode 100644 index c707fe2e4245b46859ccd701bfbe8fe38cf002fd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains meta -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml deleted file mode 100644 index 06ba3788ef7c749119bf03625144adb24819c8a3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains object -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml deleted file mode 100644 index 6669690ed6ffad36a70149ba2084bfc352c86a72..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onabort -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml deleted file mode 100644 index a5a09c9b4adfe108200d24d1b75dbe2585718a10..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onblur -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml deleted file mode 100644 index 9b5e22a4f2fe9805b0e7a54267ab2434775ceb5f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onchange -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml deleted file mode 100644 index 1e7c20c214a80926eb7eb43e184c8d01e82dc11d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onclick -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml deleted file mode 100644 index 800904bb76fcb73e0c2fdf79240c786c2da47df1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains ondblclick -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml deleted file mode 100644 index d60cc44b773894cc19406956a6e2a3ee2f60635e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onerror -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml deleted file mode 100644 index b1218955ceb2f44f0d4f2daf3579620c0bc8bb63..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onfocus -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml deleted file mode 100644 index dfd3c22793a1783def7a874004e301ee3f6f1003..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onkeydown -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml deleted file mode 100644 index 5343e94809b0f50fa6311d2dab97bc1643b65796..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onkeypress -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml deleted file mode 100644 index 587d616dd82e1b3dd65b738d0c34443d6a8ed98a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onkeyup -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml deleted file mode 100644 index 7b71552d4b9551ef8956849690bda14745782854..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onload -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml deleted file mode 100644 index 69681fd9004481e4b9c44c56c4199882ca9c9636..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onmousedown -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml deleted file mode 100644 index fc25b8a880d0fd0554ad37739b3134d9512f0928..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onmouseout -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml deleted file mode 100644 index 4dde5f37ceb2213a5c72808a158eee690d61bb28..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onmouseover -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml deleted file mode 100644 index 81cfdfce499f1b37487fc49f32a833dd1287f08a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onmouseup -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml deleted file mode 100644 index e2bc481b8928f7c9511aec9b521103ece8327e72..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onreset -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml deleted file mode 100644 index f96a76b287652fcbe374b6c180c90b32aa406d1b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onresize -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml deleted file mode 100644 index b07628ac108d02de3d1a719c959993948aee34fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onsubmit -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml deleted file mode 100644 index 0a6f998b69a78c079bface21ce53141891b36a7b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains onunload -Expect: not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml deleted file mode 100644 index 8685588674b9a902010fe96321b03f9f4d988f45..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains script -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml deleted file mode 100644 index e315d623bbe2b558dd61da1f39070db3b66c43e4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains script -Expect: not bozo and entries[0]['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml deleted file mode 100644 index 790cfd5cbe807f11c0dbc2e47a2a50687a361069..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains script -Expect: not bozo and entries[0]['title'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml deleted file mode 100644 index f1fb8d660a89d0aa8b04ec0a0e218c7c1061f246..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: entry title contains style -Expect: not bozo and entries[0]['title'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<entry> -<title type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></title> -</entry> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml deleted file mode 100644 index bc1aacb373e9851fac31b946ccdb47300a262836..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains applet -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://www.example.com/"></applet> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml deleted file mode 100644 index 4018115f75094350cf02ebeb2a87debb69cb9c62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains blink -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><blink>safe</blink> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml deleted file mode 100644 index 70ef93fc48ff36926e5f78d1b670177eb67bfd86..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml +++ /dev/null @@ -1,73 +0,0 @@ -<!-- -Description: feed copyright is crazy -Expect: not bozo and feed['copyright'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml deleted file mode 100644 index 1e73ef5fb1fb89c06e6378742968836e56ff538a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains embed -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<embed src="http://www.example.com/"> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml deleted file mode 100644 index 4c6f8105eb782e07ca07b104da5d2c7978b94a9c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains frame -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml deleted file mode 100644 index 3cefdfc5f9ce392cf5a92b8343d0da4065553eb3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains iframe -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<iframe src="http://www.example.com/"></iframe> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml deleted file mode 100644 index 3cdec2e500a0bcacc6d478e80d5d8fdd03300e97..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains link -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml deleted file mode 100644 index 6974afb3bb4d6af24342b324fc30ce98616efba8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains meta -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml deleted file mode 100644 index 9beabb6b5950b31dae25943da4d9f890c9656db7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains object -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml deleted file mode 100644 index 264e99a5c391f9444ebb497e586021541716bdc3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onabort -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml deleted file mode 100644 index 0f39eba049155c069195a22a7e587ab32728ce4c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onblur -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml deleted file mode 100644 index 8e33cb906ab088964a8180efa66f1482eaf4330e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onchange -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml deleted file mode 100644 index 37eeb8a108ff3dc7beb7d6aadfc7b6a695865119..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onclick -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml deleted file mode 100644 index c2636fed0b7cdbbd76a583f342d47339a7d18736..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains ondblclick -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml deleted file mode 100644 index 7f79e671a549ec53e1f145356ced65ed135f3cce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onerror -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml deleted file mode 100644 index 73c97e0eb9e7cc49974c135e15078b4f473d7ea3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onfocus -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml deleted file mode 100644 index f0a6fd24f6255e82f7053860e25b731de3949465..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onkeydown -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml deleted file mode 100644 index 762819cdb053cd10d29892cebdf6f620bba3aa12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onkeypress -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml deleted file mode 100644 index 3bb08dc0d31b159f64135783e3fc0ba543b4bb7a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onkeyup -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml deleted file mode 100644 index 41078416ef4e9e9fbe3c78f8fce031246b8d947e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onload -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml deleted file mode 100644 index 9d4f709ad363d1292cfaffce4fd22515f25f89b3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onmousedown -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml deleted file mode 100644 index 008e907469c9238a5ee6e3d34754087de4e3dcdf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onmouseout -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml deleted file mode 100644 index b77c39124c302791ced6ab07b6714755960b8d33..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onmouseover -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml deleted file mode 100644 index 5a5d42bf0fe2819ddf20aae85a2fc02b72dcf24d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onmouseup -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml deleted file mode 100644 index 99062f47737c969a3f116775701beb90a44c4af5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onreset -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml deleted file mode 100644 index b7b5e1a8d580e53e4e4ea33e35fefeb51397fabc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onresize -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml deleted file mode 100644 index b09b8e8b59e913978eca392b6a4e46a798ab3c5c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onsubmit -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml deleted file mode 100644 index 17aa1f344631e622c53c611ae3e317d61f497a7c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains onunload -Expect: not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml deleted file mode 100644 index 842e93f26c016c823accd69367e8ff7faafae6ed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains script -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml deleted file mode 100644 index 0113b7efad515676601665637dec96c967ca7566..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains script -Expect: not bozo and feed['copyright'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml deleted file mode 100644 index fcae4f060af254bcae53cdba18407f62721467e9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains script -Expect: not bozo and feed['copyright'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml deleted file mode 100644 index a9dc4e5b0e08a5ddc2ec849ad95a45d82e9ce810..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed copyright contains style -Expect: not bozo and feed['copyright'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<copyright type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></copyright> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml deleted file mode 100644 index ed783f53e8bbad9d122220f05cf9fbb668f564ab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains applet -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://example.com/"></applet> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml deleted file mode 100644 index 0a94622bac6913aa960b6d39861c55172cac2e4b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains blink -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><blink>safe</blink> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml deleted file mode 100644 index b8bc995d05f1937c8333cd9ddbee346398ab4309..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml +++ /dev/null @@ -1,73 +0,0 @@ -<!-- -Description: feed info is crazy -Expect: not bozo and feed['info'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml deleted file mode 100644 index 82b0e3d4491e658c70b22a46d7cc696bd615025e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains embed -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<embed src="http://example.com/"> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml deleted file mode 100644 index de61c2fce6132f6e343a5e3867835cd717e9bd73..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains frame -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml deleted file mode 100644 index 49f1edc68adb1096e6b810c44cc98cc084e591dc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains iframe -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<iframe src="http://example.com/"> description</iframe></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml deleted file mode 100644 index 4ef66897d739e48e7e9dc7f98f5214f93cb50aa4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains link -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml deleted file mode 100644 index 85ca47806daf7d0b03442991755904fff9846e12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains meta -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml deleted file mode 100644 index a32f5124bc2aec3d005f787b56fdd380be10b857..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains object -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml deleted file mode 100644 index c6f2a96aa6ce734ee6bf8dc72d01de0146f21603..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onabort -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml deleted file mode 100644 index b10c4e8f0002418363337cfbecf61069332aa745..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onblur -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml deleted file mode 100644 index 653af579de362ab1b16b47d5fa6758b5deb49f6b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onchange -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml deleted file mode 100644 index 93644d6d7e5172eccc3dc7b81300a638dfa2854e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onclick -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml deleted file mode 100644 index 1776c913dfec3615cb1560dc401284ee03652947..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains ondblclick -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml deleted file mode 100644 index 9b8dd9cf05ce38bcbde694e19079f55379488f43..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onerror -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml deleted file mode 100644 index 51a390bb5c863c176c38f774c185cd961abed54f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onfocus -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml deleted file mode 100644 index 4674d0e3c8b47fda0b31a3eba438f95c24fbec1c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onkeydown -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml deleted file mode 100644 index cc2af96a46a9a338bd0d118683fe0d4b8ba6df9d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onkeypress -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml deleted file mode 100644 index cde7c4232388d2c18d4ab1bc98881a38a2454465..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onkeyup -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml deleted file mode 100644 index 7763fbf3b0be43a2067a1c6534110567acad7223..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onload -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml deleted file mode 100644 index 45651554dcec3d916def67b929ab666e364c45d1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onmousedown -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml deleted file mode 100644 index e2de0c6c5c9c588760b97e296699539dc80db164..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onmouseout -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml deleted file mode 100644 index 9e5200795fee7dea2fdcd769566031e3c62177b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onmouseover -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml deleted file mode 100644 index 15b0aac6dc1adf3e50225f0f5c4916ad73c6c128..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onmouseup -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml deleted file mode 100644 index be8bdc4cb03280e3ebcfe16dc52acf1ddbbb55b6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onreset -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml deleted file mode 100644 index f2429be6f9ac038edfe053e4984b2ed6212dbb5b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onresize -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml deleted file mode 100644 index c230a400936d4ddbbafe751ea3d6e9ee8c62e519..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onsubmit -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml deleted file mode 100644 index 9c66418c5f70564829e1bce2ab591fd28dda3b97..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains onunload -Expect: not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml deleted file mode 100644 index 34d20bd598ed6b63718096a06a42ef18a1217a27..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains script -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml deleted file mode 100644 index ae3fb8e5972f96f8df5858131dd943feb35df9a1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains script -Expect: not bozo and feed['info'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml deleted file mode 100644 index dafc46a7ea9258d97bd5308a6ee7e18a2cc504bb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains script -Expect: not bozo and feed['info'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml deleted file mode 100644 index d1aac49abc0cdec260032bf82cea6a61ef2b124c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed info contains style -Expect: not bozo and feed['info'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<info type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></info> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml deleted file mode 100644 index 30d75af167d2ecd84d3f61e355e161f068432635..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains applet -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://example.com/"></applet> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml deleted file mode 100644 index 89e14e3644cf087b2770c2e613ab1700b8620e46..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains blink -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><blink>safe</blink> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml deleted file mode 100644 index 2c286dd8db07cde6d5b995bd35e1ba2ba11fdb64..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml +++ /dev/null @@ -1,73 +0,0 @@ -<!-- -Description: feed subtitle is crazy -Expect: not bozo and feed['tagline'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml deleted file mode 100644 index c83d6dabd25e9e735435a830ad9200f3e2bb5783..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains embed -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<embed src="http://example.com/"> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml deleted file mode 100644 index 0f165f0ec46d4e19b629f0980b9835aba1fc6837..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains frame -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml deleted file mode 100644 index f3c14bfc3e6537dbc51f1321cdfa4552d9be8d54..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains iframe -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<iframe src="http://example.com/"> description</iframe></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml deleted file mode 100644 index 2daccf307f6c0ea290faf30419b28f4975d0d509..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains link -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml deleted file mode 100644 index bb530e35a0b96dee4a7e7c446d9a5ba16db2d393..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains meta -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml deleted file mode 100644 index 4116bff8eb4ffa81e0bc79577622c9962a5f703e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains object -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml deleted file mode 100644 index 597c482e095942bd9adc68b290170c129a47f4be..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onabort -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml deleted file mode 100644 index 5a1301f8ecca3a17972b7a31bb2ba338c8c54650..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onblur -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml deleted file mode 100644 index cec13dc744e3cf5baaf13020aafd1dff896affb2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onchange -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml deleted file mode 100644 index 18bd7a76e58a415d37489a8b9fd303df0603196c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onclick -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml deleted file mode 100644 index b3e0fea55702524803d3fdb73d7828c2bc904dc7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains ondblclick -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml deleted file mode 100644 index 9693ee51a3b0d65db550a5b5b5ba3a93ad79af09..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onerror -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml deleted file mode 100644 index 315c8649836ec2f3721ba0b6e2f53f123a443818..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onfocus -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml deleted file mode 100644 index 8290367fa04c3a9e8d1188aa580077241e84be43..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onkeydown -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml deleted file mode 100644 index 6def555e5f07cd06c1ff686954e25995b632c78a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onkeypress -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml deleted file mode 100644 index 618a0c2ffa22370a65e51fe593120c57e94ef768..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onkeyup -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml deleted file mode 100644 index 78a45b9e8958d368e1e9dbb47fc0af01da509fa5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onload -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml deleted file mode 100644 index 77010aaea7834f5dc06801df6d5c5a9a5d0b2099..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onmousedown -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml deleted file mode 100644 index 5e353ee07cfd07fcca9b50351f376d3d796d081c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onmouseout -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml deleted file mode 100644 index 8d20666c82004ff792ebf51ace83b9479f8e8e49..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onmouseover -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml deleted file mode 100644 index 4c6893155211618fd3f1095b7217926a7d446b48..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onmouseup -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml deleted file mode 100644 index f7f2abaece1b47c962957dcefe52136af214c231..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onreset -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml deleted file mode 100644 index eb7ebda05312d0bbb04dd0eb7f6310ca6b9145e2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onresize -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml deleted file mode 100644 index 5bb7dd6bf20f7018d94943d3bb909ab16c06b4bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onsubmit -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml deleted file mode 100644 index 57824a3a8087bac3d90a50a76aba073e388ff073..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains onunload -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml deleted file mode 100644 index 59e76db1882449a9022a071459ccdbeac01c6131..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains script -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml deleted file mode 100644 index b7ee3f4f581fca3a8eeeb54326075705393d4698..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains script -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml deleted file mode 100644 index 61c7c7b1afff2146adad2450f62fde354136ca02..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains script -Expect: not bozo and feed['tagline'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml deleted file mode 100644 index 332a65b90ace9b3fbac95eb353d1da8bc6300854..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed subtitle contains style -Expect: not bozo and feed['tagline'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<subtitle type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></subtitle> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml deleted file mode 100644 index 6bcca5d92988ecac72d7469c80502868fb709fae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains applet -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://example.com/"></applet> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml deleted file mode 100644 index cd758dd61f3b6a88bd7b05b75d0d5910761ab1ab..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains blink -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><blink>safe</blink> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml deleted file mode 100644 index 63617d33507c5f5ae8824cb3bb622cf8bcb41c77..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml +++ /dev/null @@ -1,73 +0,0 @@ -<!-- -Description: feed tagline is crazy -Expect: not bozo and feed['tagline'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml deleted file mode 100644 index 68fca0f01dcfa89499769db161812aa7e799f037..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains embed -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<embed src="http://example.com/"> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml deleted file mode 100644 index 9a3a14fb03831e166ac770bd1df4082cfecb8422..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains frame -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml deleted file mode 100644 index 6863469c647ae1c275c779933af3e9df54295666..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains iframe -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<iframe src="http://example.com/"></iframe> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml deleted file mode 100644 index f46ac8e7f01ac90d146d13777b7bf4644170207d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains link -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml deleted file mode 100644 index 21efed777b9aab035afa5bc94c25ee3db0d9b0bd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains meta -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml deleted file mode 100644 index 114c62560c39b7f95fff548390ea9a1cbabb5b4a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains object -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml deleted file mode 100644 index a4ce80010fbe4d43b00a6e36b637817d2457e61f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onabort -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml deleted file mode 100644 index 2f2958e90e3d8b3584891c0de22670978384e743..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onblur -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml deleted file mode 100644 index 2afe2267e69c7c3e8466e6799ec9088b4b80a5d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onchange -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml deleted file mode 100644 index fa104ca6c4356e5e56d0167009c68ec24b0e87d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onclick -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml deleted file mode 100644 index 6b72d9fa258b059639f96e82aa7874d4c1a973eb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains ondblclick -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml deleted file mode 100644 index 3744e11d65a2ff6d04231eb547e73f5e274992ef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onerror -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml deleted file mode 100644 index a11a3030e75292cc6b558082271a2ca784940cf3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onfocus -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml deleted file mode 100644 index 46ddf0cac8ce462b3798e6f4d816150bc50902d0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onkeydown -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml deleted file mode 100644 index 5703a1fc1bf9abcf61b9576ded060e1d35380de4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onkeypress -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml deleted file mode 100644 index dc78e672589047517ba51e29613ca1d53a8ed080..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onkeyup -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml deleted file mode 100644 index 972655376d1681f5864a80a34351842e9dfc98a5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onload -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml deleted file mode 100644 index a25f3f21439205a202f7759e928c4952c40aad49..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onmousedown -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml deleted file mode 100644 index ef7c5063a5b0512c31764bf652aba22013b1f531..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onmouseout -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml deleted file mode 100644 index aac3d54e8d95ee85e30ae3a13dc5c932e5daca98..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onmouseover -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml deleted file mode 100644 index 41ab39e720e6c2efaf565ec0524b08aa600b1f24..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onmouseup -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml deleted file mode 100644 index 17932f368ff4022b0b1e2a5028cc90f86483a4a6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onreset -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml deleted file mode 100644 index bf712f872f515df609521346d6c489ab7fd97de2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onresize -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml deleted file mode 100644 index a33ebf45123ff52c587610bbfce6b7f27201ba00..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onsubmit -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml deleted file mode 100644 index 2d1550557e973e6c07e738e9bea86a49754999aa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains onunload -Expect: not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml deleted file mode 100644 index b818be55f74703b63b3fa36051e86ddd7ffe5bf3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains script -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml deleted file mode 100644 index 943c8d61697a0530b3b1e96827027e7471300917..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains script -Expect: not bozo and feed['tagline'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml deleted file mode 100644 index 902946517e8e5373592d1d5a18b2bd218322345b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains script -Expect: not bozo and feed['tagline'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml deleted file mode 100644 index fb9d0ef64f80fb4a77fbfabe1235d3514589e113..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains script (maps to description) -Expect: not bozo and feed['description'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml deleted file mode 100644 index abc68f35a9555d4edf4ced9180ee26bfbabad14a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed tagline contains style -Expect: not bozo and feed['tagline'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<tagline type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></tagline> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml deleted file mode 100644 index 7d6156bc1aa9771561ef58d658985bd288f9ee81..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains applet -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<applet code="foo.class" codebase="http://example.com/"></applet> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml deleted file mode 100644 index e9fb536c9954114cb64b4b108d54acd3b309bd8e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains blink -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><blink>safe</blink> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml deleted file mode 100644 index dfca8a2cf4e441812198553a17a3ac97970631a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml +++ /dev/null @@ -1,73 +0,0 @@ -<!-- -Description: feed title is crazy -Expect: not bozo and feed['title'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml deleted file mode 100644 index 0ae3167d81e2b7e6aa9e281b7037a90f6612609e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains embed -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<embed src="http://example.com/"> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml deleted file mode 100644 index c6df6c008bdf840c3958290014c6fda75d2b3376..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains frame -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml deleted file mode 100644 index 9422d36845bcc1963f105d3ed4e0ec2262293f5a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains iframe -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<iframe src="http://example.com/"></iframe> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml deleted file mode 100644 index d540cc411205610df74dbac406cedc77533aa7b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains link -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml deleted file mode 100644 index 801c4df35b72b09b7d6b4255794321e1b05a6ae6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains meta -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml deleted file mode 100644 index 312cc841b33db0f346b610d36229f70a95470aef..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains object -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml deleted file mode 100644 index 36f5e9134dd9dfa57a8f895239584fa70cf02639..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onabort -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml deleted file mode 100644 index dbf5f3af8fcc8ebac37fd10eca703291c95790b3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onblur -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml deleted file mode 100644 index 26ba2385cac2ee02932ce872cc0823a496d48cc3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onchange -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml deleted file mode 100644 index 76be05c881dc12a1f0512997c345a874f8be07da..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onclick -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml deleted file mode 100644 index 69df1cd2447070cedde0c9bc5f5b78d802410adb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains ondblclick -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml deleted file mode 100644 index 254a630a35f60a9369e8844ec2d195bd11282afc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onerror -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml deleted file mode 100644 index 0f2cfa7e16617bc8d0809a6b752441eb18dc56fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onfocus -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml deleted file mode 100644 index 665771306fc573c44128bf01e16aa06dd215ea93..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onkeydown -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml deleted file mode 100644 index dc3e3bd44ac2d2e1f642602ab065b4f24722ed5c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onkeypress -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml deleted file mode 100644 index 5f2e98a489fe596f703a89c4ede97dd6ac6ece38..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onkeyup -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml deleted file mode 100644 index 066a375ec89ee6be7af082782e0a3d0bba131970..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onload -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml deleted file mode 100644 index a4a9281d78f8273ca1c6168fad9cdbc1dde16474..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onmousedown -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml deleted file mode 100644 index 6edc7e3eaf05796e64f1b65b41ffce61ec6f8127..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onmouseout -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml deleted file mode 100644 index 6da205b8c67c9e63d230b559f9fbb65361f58185..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onmouseover -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml deleted file mode 100644 index b7693102527e01fd9a0b7b71fe37cb0097d2b45c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onmouseup -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml deleted file mode 100644 index cd3422e27d6af530a4e16d124f2a794e3022d4cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onreset -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml deleted file mode 100644 index 9d6bcee721993451b7a8017131ec2263f842fa9f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onresize -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml deleted file mode 100644 index 153d6f2f3cc74d1c1c15b6a94dab84e526d29040..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onsubmit -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml deleted file mode 100644 index 77866f89a1cf315a559070fc1f254ef3f6dd0f24..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains onunload -Expect: not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml deleted file mode 100644 index 6328416338551782f3e80bc17b33173e3605d742..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains script -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml deleted file mode 100644 index a37085f3bf19b215c24f10dff5dcef43e3ea1388..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains script -Expect: not bozo and feed['title'] == u'safe description' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml deleted file mode 100644 index 889667e630c684a3f5460eb819efdd0d1ab2bf79..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains script -Expect: not bozo and feed['title'] == u'<div>safe description</div>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml deleted file mode 100644 index c1aeaec829c89000c14b613c7360acf07f7ebcb9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: feed title contains style -Expect: not bozo and feed['title'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<feed version="0.3" xmlns="http://purl.org/atom/ns#"> -<title type="text/html" mode="escaped"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></title> -</feed> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml deleted file mode 100644 index 7d66c5a854cd2d713f09a6e8f0978638be0dcf07..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: anchor href contains unacceptable uri scheme -Expect: not bozo and feed['title'] == u'<a href="">safe</a>' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html"><a href="javascript:alert(1)">safe</a></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml deleted file mode 100644 index 10dea8b0d4d9311753d879e5ea9f7159d54d1a1e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains applet -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<applet code="foo.class" codebase="http://example.com/"></applet> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml deleted file mode 100644 index b570ff208c378d87cf37acb1a9942189258fb157..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains blink -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body><blink>safe</blink> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml deleted file mode 100644 index 2f2a2db17ee89d6238448d428968e965eecd3da7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains embed -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<embed src="http://example.com/" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml deleted file mode 100644 index 7228ecfb95b88ad78c9537b60f7e0245c0056a76..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains frame -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<frameset rows="*"><frame src="http://example.com/" /></frameset> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml deleted file mode 100644 index 561fe3129d8a1076abea92095fde5b26df7a614c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains iframe -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<iframe src="http://example.com/" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml deleted file mode 100644 index aa88814703e786fd67eff3d6ec9932b8d2cfd218..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains link -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml deleted file mode 100644 index 7bfbddf1cb188e87ccff99426268f91aa4689902..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains meta -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<meta http-equiv="Refresh" content="0; URL=http://example.com/" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml deleted file mode 100644 index 11b8bbfb0d3b5af0636d181897d4e6e5f688b1b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains object -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml deleted file mode 100644 index 4570265a214d50e3509aca44da01bf0bba9d1ebe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onabort -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml deleted file mode 100644 index db9fdd63f434dd16f5df06741bad94ce19635ec7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onblur -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml deleted file mode 100644 index 34283c222eef2191ea480e2097edf16ae8d37d59..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onchange -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml deleted file mode 100644 index 0d5aa97cf55610fd63c91d57aa9f15722a12f572..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml deleted file mode 100644 index da15eb7e604ffac541b59f065717e32a0ee835d4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains ondblclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml deleted file mode 100644 index fa03c8804bc958f04541647ebf44e236c677931c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onerror -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml deleted file mode 100644 index 527daffa7175d6fb511914e63634a5d93287d542..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onfocus -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml deleted file mode 100644 index 3dd446f6fccd0d6ae01bec68caad48931eb8e1fe..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onkeydown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml deleted file mode 100644 index b11ca52988d6d6dde12a9467f80ea1509eca9f61..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onkeypress -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml deleted file mode 100644 index 2a023e8f552629265b3dc96aff1532f9332ae587..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onkeyup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml deleted file mode 100644 index b50f61b6b643d5d4e5b47d43903aef4ab5bb3705..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml deleted file mode 100644 index 29ed18866b5dab74bf681871bcb444412177423a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmousedown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml deleted file mode 100644 index 17c1e9da7ce5a106906ae96b33538d4e7fea4301..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmouseout -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml deleted file mode 100644 index 6d0c28d51bf0b437ff56bbd2878ca991546b2bb4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmouseover -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml deleted file mode 100644 index b0c71b5706e744515fbe248322667174026be5ed..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmouseup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml deleted file mode 100644 index e38ed3a668c3d4a512e5757d5abd88b3dd5b7af3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onreset -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml deleted file mode 100644 index f567550e0ec60586ddab895c2f30432d229aaa8b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onresize -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml deleted file mode 100644 index d51966e5dc412376c6681b84958fc9e04b34c49f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onsubmit -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml deleted file mode 100644 index 3f6ed3bf2818370624e38f577e3879af4cfe746c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onunload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml deleted file mode 100644 index c51e8882f87c82055d5f118eb5b3d0035a28db47..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml deleted file mode 100644 index 699e24de2edaf00cb6132f1eb2a2ba6ce99f36fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains script (maps to content) -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml deleted file mode 100644 index cf4a9bdf411b2154c0e63a4eda6ef4861488a6c4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains style -Expect: not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<rss version="2.0"> -<channel> -<item> -<body><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml deleted file mode 100644 index 415e98757d88fa14486f23abbe332420cd9d7233..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains applet -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<applet code="foo.class" codebase="http://example.com"></applet> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml deleted file mode 100644 index e9d6d4c5030a253bddb7a9974012cd891dd91856..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains blink -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><blink>safe</blink> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml deleted file mode 100644 index 1f05f8a43f8b8314a8e51a9eb36b84482b972575..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml +++ /dev/null @@ -1,77 +0,0 @@ -<!-- -Description: item content:encoded is crazy -Expect: not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml deleted file mode 100644 index 1f93f0597d06ead7e9fa7317d9e05ed2e8681ee8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains embed -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<embed src="http://example.com"> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml deleted file mode 100644 index a4afb4045ec6b6ddaa43004dc0baddbbdbf8042c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains frame -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml deleted file mode 100644 index 38ce41e805876af1bd79caee5ea7127a413a541f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains iframe -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<iframe src="http://example.com" /> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml deleted file mode 100644 index d1b71f8980b34a08f9073ecdc75e7ad6b7844979..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains link -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml deleted file mode 100644 index eeedc6b624eb6db386e93b3503935484dda13aa5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains script -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml deleted file mode 100644 index c10b683f09144d864e6a1982134b48d027db46e6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains meta -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml deleted file mode 100644 index f78f9470d09781ac3af307d9c28b4892885bc593..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains object -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml deleted file mode 100644 index ef3aa24e4a65bdba230798dcf2c792b7d196a5e5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onabort -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml deleted file mode 100644 index 2ce07872800e3c2da5206ff56cb4a5bba6911b4a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onblur -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml deleted file mode 100644 index b486c17db445657ba9249aa39c6972f2c2f07a6b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onchange -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml deleted file mode 100644 index d09e92c81491458631c26164aa8a0e087de7d203..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml deleted file mode 100644 index 6471081a63c92a6c1aa873e2e95278a912cc61e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains ondblclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml deleted file mode 100644 index 8d4b4ff3e4d30e88280841faf7e5017ccfeeb0c6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onerror -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml deleted file mode 100644 index f8265b65076317ef0dc4b2fc8bf109cb7ab8c09c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onfocus -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml deleted file mode 100644 index f7b12784e400da694b0ad20f0a46a3c306472ddd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onkeydown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml deleted file mode 100644 index ee3fa7fe9cc3f90e7af49db9dc3f8b72972da1f4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onkeypress -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml deleted file mode 100644 index 1acea49f4ddee7feae2fdd28b8410dd3b9db33b9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onkeyup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml deleted file mode 100644 index 49fed6def59282b67026d6dd52d29514d6e68421..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml deleted file mode 100644 index 9628e7c7f47b97872329776d270e2c487f03ce87..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onmousedown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml deleted file mode 100644 index 4e5b3c1ad55b1076cc5df79e2f612ad3e69625b5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onmouseout -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml deleted file mode 100644 index 3c1e02165175f9b403e20c265cb91bc1f8710ab4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onmouseover -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml deleted file mode 100644 index d1df98f530707abafb7e78ff1599263eac429a92..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onmouseup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml deleted file mode 100644 index 469b429fec64cc905e9ddb902bd314a5d690b08d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onreset -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml deleted file mode 100644 index 67bd116eca0f53733426e8b00d3de204deb035d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onresize -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml deleted file mode 100644 index 5acd05e84376454c019e0a860b648651c9cf8600..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onsubmit -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml deleted file mode 100644 index 458a056771a038019dfd43a444ee0a71ae27c479..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains onunload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml deleted file mode 100644 index f7ed178dc646557bb83ebe64ec2e07d96ba1b087..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml deleted file mode 100644 index 89adffb803f7954e5f85769c510d696700b7f08f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml deleted file mode 100644 index ee8d3afa622b72dcb2414f936a1db7f33caca607..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains script (maps to content) -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml deleted file mode 100644 index 5663c57f9a556a8a0058c28957c8172b2356a2b7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: ensure nested CDATA sections are sanitized properly -Expect: not bozo and entries[0]['content'][0]['value'] == u'<![CDATA[]]>' ---> -<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"> -<channel> - <item> - <content:encoded><![CDATA[<![CDATA[<script></script>]]>]]></content:encoded> - </item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml deleted file mode 100644 index 1b9f957cba7aa4f5926b104b7909a0399d2d6fac..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item content:encoded contains style -Expect: not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> -<channel> -<item> -<content:encoded><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></content:encoded> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml deleted file mode 100644 index 8e694c9349298ec49500b1a7b8ef6a2e3f92bd62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains applet -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<applet code="foo.class" codebase="http://example.com/"></applet> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml deleted file mode 100644 index c84dedefbf11448f00784864508dfdd56abb44f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains blink -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description><blink>safe</blink> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml deleted file mode 100644 index 13e161abb03734dc711d32e72e77e23ed540509c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml +++ /dev/null @@ -1,81 +0,0 @@ -<!-- -Description: item description is crazy -Expect: not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<rss version="2.0"> -<channel> -<title>Crazy RSS</title> -<description>Contains unsafe script</description> -<link>http://crazy.example.com/</link> -<language>en</language> -<item> -<description> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml deleted file mode 100644 index 82524aad59cdf1aac8818fde79b39d81f5665b6f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains embed -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<embed src="http://example.com/"> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml deleted file mode 100644 index 3ca0fa55e5d8d48e4ea9cd372d2973536cbbabb3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains frame -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml deleted file mode 100644 index 93866748f058ededcae6114b2a134f9dc2b728c4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains iframe -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<iframe src="http://example.com/"/> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml deleted file mode 100644 index 0d8956db499c7699cd5c3258143e616885b1b62e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains link -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml deleted file mode 100644 index d9bfb014d26a97334d6261fe5a7e40fd8d9a0748..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains meta -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml deleted file mode 100644 index 9b197da1cef0c652e82f03e1b82ab398f10b75f3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains object -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml deleted file mode 100644 index 418885b19bf30b62333b58cb6a63e4850cde1150..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onabort -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml deleted file mode 100644 index 121c72346e310b24b4a6b0062559c8870d217888..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onblur -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml deleted file mode 100644 index e37c8c8a86b08b9a3fb914c20c14399c1916d6cb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onchange -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml deleted file mode 100644 index 58c2d565642edf396dbc2311f4b35bc229a275c2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml deleted file mode 100644 index 9acaa1137a3d5048fc845c9d8d8fe53983de33de..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains ondblclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml deleted file mode 100644 index 32c0cfb2bd30fa387ec3d52af090d8eb4e3f15c5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onerror -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml deleted file mode 100644 index 7c07c7e69706fd232178b70f7d2917f598887ef7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onfocus -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml deleted file mode 100644 index 39f67db350c66482eb41f05c41f9d8c7136d12ae..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onkeydown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml deleted file mode 100644 index d1e4943baf38fba067cca96b5e4a124f0b737d58..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onkeypress -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml deleted file mode 100644 index 31b5117cee6ca640211a39b60488f09db7e9c2c3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onkeyup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml deleted file mode 100644 index ebd8bd371b3cec75254b2f079b70329c76e2c471..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml deleted file mode 100644 index 7433d4e5193762dc47befbacf30f8027b0940992..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onmousedown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml deleted file mode 100644 index 6090a130dcdbf76595cbf46a8c0bcab939b216f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onmouseout -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml deleted file mode 100644 index 479c311bf212f11c6c54f7bc5dc3a5fa37696e04..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onmouseover -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml deleted file mode 100644 index d8daa019909b15d295f773cd09f1d88c842f632a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onmouseup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml deleted file mode 100644 index b2f3f1831d13106dcb78f8f4f7033a0c53888120..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onreset -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml deleted file mode 100644 index 4295a4ba0345dc2efc9d21cfa490191847bb88ba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onresize -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml deleted file mode 100644 index 125fe5c14350de9a46c9160c9b4f9e9fafd46c18..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onsubmit -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml deleted file mode 100644 index b4dc59191bed810c42629b6444df9ab3d094fd3d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains onunload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<description><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml deleted file mode 100644 index b158ce7fa1bdf8e2b4d6a6e8d17d8e548750953d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml deleted file mode 100644 index 1a40c2fc4a7e42efff5c72e09a18b6e98cf8e627..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml deleted file mode 100644 index d90a7aede6255c9c1eddf5f2a05e85fdacb1f157..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains script (maps to content) -Expect: not bozo and entries[0]['summary'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<description>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml deleted file mode 100644 index 68a05eb49c7240489ded36b96b357bbb3b620685..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item description contains style -Expect: not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<rss version="2.0"> -<channel> -<item> -<description><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></description> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml deleted file mode 100644 index 25a1c1ba17c4ad2b33ed2f4609b37d563d8234e1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains applet -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<applet code="foo.class" codebase="http://example.com/"></applet> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml deleted file mode 100644 index edda4f489cda8b3a6e409d43de16a3e531a44f6a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains blink -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><blink>safe</blink> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml deleted file mode 100644 index d92918385cc7caad8b71a05d166ccd0022a8407e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml +++ /dev/null @@ -1,77 +0,0 @@ -<!-- -Description: item fullitem is crazy -Expect: not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Crazy HTML -- Can Your Regex Parse This?</title> - -</head> -<body notRealAttribute="value"onload="executeMe();"foo="bar" - -> -<!-- <script> --> - -<!-- - <script> ---> - -</script> - - -<script - - -> - -function executeMe() -{ - - - - -/* <script> -function am_i_javascript() -{ - var str = "Some innocuously commented out stuff"; -} -< /script> -*/ - - - - - - - - - - alert("Executed"); -} - - </script - - - -> -<h1>Did The Javascript Execute?</h1> -<div notRealAttribute="value -"onmouseover=" -executeMe(); -"foo="bar"> -I will execute here, too, if you mouse over me -</div> - -</body> - -</html> -</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml deleted file mode 100644 index dfa85cb780d688dac12b366bdd17142ebc308bf3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains embed -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<embed src="http://example.com/"> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml deleted file mode 100644 index aa10c3aa32f3ab43a2774fc1bbc0ce0251d96218..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains frame -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<frameset rows="*"><frame src="http://example.com/"></frameset> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml deleted file mode 100644 index 7b23d2693cb78c0fb1de763e2870309b8dda4cc2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains iframe -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<iframe src="http://example.com/"/> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml deleted file mode 100644 index 9cd909bd3b61fabab16dc9caa4fc940d6141ff68..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains link -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml deleted file mode 100644 index 520185628e14ae1a0ecd50e085d5b534af55f9f7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains meta -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml deleted file mode 100644 index f5df5c1bcd601a7868c4265ec083d65668014d4e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains object -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml deleted file mode 100644 index 528aa42c56933782a254cc7a15da82e2ff2e97c2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onabort -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml deleted file mode 100644 index c302e997ca106614c3c4534805bd942b91a2089d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onblur -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml deleted file mode 100644 index 28282e2e263aae70cb3e36277a77a7958e3afd4e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onchange -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml deleted file mode 100644 index 59a379b1126c3855422e56870b3b3cc231839ca5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml deleted file mode 100644 index f493d93af28fee8f50f30a451eec4d0abf57c9e2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains ondblclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml deleted file mode 100644 index 5b5bcecbf0499fb34ce81dcf63b046370ba30373..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onerror -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml deleted file mode 100644 index bb221a5c5827c9bc07d58eee096fa915425f86cc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onfocus -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml deleted file mode 100644 index fae1baa94f70297ad61a84f76bb8e1841dac605e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onkeydown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml deleted file mode 100644 index 5165a6bc55f2df71f8cf182a7f22b79ae8c5b79b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onkeypress -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml deleted file mode 100644 index 253849f6b21c75b9281dbf8468201fd0a850c886..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onkeyup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml deleted file mode 100644 index 8d12e39f0af3863086286e364979b3dc6d7837df..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml deleted file mode 100644 index 458060b59f7249dc0a39260e6efd8f2baa878cce..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onmousedown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml deleted file mode 100644 index 6c29bbd9ba2f0c172a4d7a06460f8d9c7c1f6711..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onmouseout -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml deleted file mode 100644 index f6fb17b8846c1bd07a5ead46a43161301d20adf9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onmouseover -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml deleted file mode 100644 index aa259b0a1cec73e57e7931ab4d65929c99c7a241..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onmouseup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml deleted file mode 100644 index 8fb27e17bcc7fc12574d469f9017d29d2544e895..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onreset -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml deleted file mode 100644 index b50a302085033d44ed8ae3939cba6b96bb285a13..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onresize -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml deleted file mode 100644 index d9e93efa04cd6224c353e799843f703abf160135..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onsubmit -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml deleted file mode 100644 index 8fc6faecaf821b163cda0c6e05a9dc9916223a57..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains onunload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml deleted file mode 100644 index 79f8348321eb1f5d1bcebe14b518797fd0d3e35d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml deleted file mode 100644 index 288abc29a7186f868f7cfe97d3273a351e529907..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml deleted file mode 100644 index 8009588a8bf41578032fe4420adbe44bba223b9b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains script (maps to content) -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml deleted file mode 100644 index 7a1a9dcce87934695a429cdc95db59bbcac1585c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item fullitem contains style -Expect: not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<rss version="2.0"> -<channel> -<item> -<fullitem><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></fullitem> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml deleted file mode 100644 index 851e8e7946266656f82b904a21337559f1a7f706..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains applet -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<applet code="foo.class" codebase="http://example.com/" ></applet> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml deleted file mode 100644 index c83b046c9e75f3c888f63efe5e4f656cde5be7a7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains blink -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><blink>safe</blink> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml deleted file mode 100644 index a87d908e4ece261b28a6d68c1737b8dc528a46fd..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains embed -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<embed src="http://example.com/" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml deleted file mode 100644 index 2535b58e772f84ba5e85ddb1c14ebcf3fd775e62..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains frame -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<frameset rows="*"><frame src="http://example.com/" /></frameset> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml deleted file mode 100644 index 5929e87429195946a339cc2393210261c4cb40b1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains iframe -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<iframe src="http://example.com/"/> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml deleted file mode 100644 index a9f10e6d4257eaaae6e0492c498fa76ad3ba161c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains link -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml deleted file mode 100644 index 60f379d3d7fa94fea962cd705efc49c58e1c93b8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains meta -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml deleted file mode 100644 index d826490460bc8ecf92a843756b7afd5f7b76eba3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains object -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC" /> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml deleted file mode 100644 index bc20e518461617202b8449a447ce326fb7787d24..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onabort -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml deleted file mode 100644 index c09939e8c925816e9b1bd81ed08a487408f75344..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onblur -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml deleted file mode 100644 index 26538b7f20e835e7a4fab8f60350bee936ecb677..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onchange -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml deleted file mode 100644 index 3110dfe05b620e3e7c1c873b77f5af401b47d7ee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml deleted file mode 100644 index 73e93831e4f04e49c59ab619674aba0211d2b2a7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains ondblclick -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml deleted file mode 100644 index 3d2f27fa03e826ccd23f4e1a68b4c7ab4cdb0461..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onerror -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml deleted file mode 100644 index 712c2fef918a78f49a45443b34bc1ebcb530326f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onfocus -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml deleted file mode 100644 index 51beae7f91240e64a8fff225779fd74900bb6175..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onkeydown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml deleted file mode 100644 index 4e0e4c765ccd35e2b435b473397b1485ed141c75..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onkeypress -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml deleted file mode 100644 index 1fd9da2e680bbed2f17e7e8d3cc2a9e276afcfb1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onkeyup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml deleted file mode 100644 index 72d2b5b287f253eee1443f0b0ff28cce9e6c60fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml deleted file mode 100644 index e07c10acff49185fe0c77753c1a19462e3258e12..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmousedown -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml deleted file mode 100644 index 00ba1c50519971f4655200cf5aef50428375883e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmouseout -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml deleted file mode 100644 index a7101675490bdabaa6ba565f4911d54f3f8e0ac8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmouseover -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml deleted file mode 100644 index 40a26c7ee08feb7936fa812de443b37b3e2125fc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onmouseup -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml deleted file mode 100644 index edd1b8d0b54676f742c800d8089dbf41f3bf9088..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onreset -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml deleted file mode 100644 index b6d2bb34b61ccd38b1e788ca6907be6a7e88b920..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onresize -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml deleted file mode 100644 index 540c3e87ea639678d06c4d715db7ba9600c4fcd7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onsubmit -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml deleted file mode 100644 index f3c7753f0284bbd337a5faf1aff4c6c080fce83b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains onunload -Expect: not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml deleted file mode 100644 index 407c910e237b9abde47418835defcb5694006273..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains script -Expect: not bozo and entries[0]['description'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml deleted file mode 100644 index 870d0374c8f8e3a2b04fa03f0d3ecc0a49618258..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains script (maps to content) -Expect: not bozo and entries[0]['content'][0]['value'] == u'safe description' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml deleted file mode 100644 index bcfc3038e80ebcddb4d49dd2fb0eab2fec7eb393..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: item xhtml:body contains style -Expect: not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>' ---> -<rss version="2.0"> -<channel> -<item> -<body xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></body> -</item> -</channel> -</rss> \ No newline at end of file diff --git a/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml b/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml deleted file mode 100644 index 1692e5d1a870cb1eb85ab556ce583c03b022053d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml +++ /dev/null @@ -1,528 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Description: content can be sanitized without going into an infinite loop due to pathological regexp backtracking -Expect: not bozo ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title>Все для Nokia 5800 XM Nokia N97 Samsung i8910 Omnia HD : Программы, игры, темы, свежие новости и советы</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/" /> - <link rel="self" type="application/atom+xml" href="http://touchnokia.ru/atom.xml" /> - <id>tag:touchnokia.ru,2008-12-14://1</id> - <updated>2009-04-08T14:25:12Z</updated> - <subtitle>Все для Nokia 5800 XM Nokia N97 Samsung i8910 Omnia HD : Программы, игры, темы, свежие новости и советы</subtitle> - <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.25-ru</generator> - -<entry> - <title>Невидимая броня для Вашего Nokia 5800</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/09/nevidimaja-bronja-dlja-vashego-nokia-5800.html" /> - <id>tag:touchnokia.ru,2009://1.666</id> - - <published>2009-09-09T14:19:45Z</published> - <updated>2009-04-08T14:25:12Z</updated> - - <summary></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Новости" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="броня" label="броня" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Вашего" label="Вашего" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Невидимая" label="Невидимая" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<div style="text-align: center;"><a href="http://savecase.ru/TN" target="_blank"><img alt="SaveCase - невидимая броня для вашего девайса." src="http://savecase.ru/downloads/468-60.gif" width="468" height="60" /></a><br /><br /></div>]]> - <![CDATA[ <h2>Невидимая броня для Вашего девайса.</h2> -<p><img alt="SaveCase" src="http://savecase.ru/downloads/news/savecase-logo.gif" width="139" height="150" /></p> -<p>Вы из тех, кто хотел бы защитить корпус и дисплей своего девайса от царапин и грязи, но при этом не хотели бы нарушать эстетику дизайна девайса, например, чехлом? Великолепная новость для вас - в России появился способ надежной защиты девайсов от царапин и грязи - защитный комплект SaveCase. Пленка, вошедшая в основу данного защитного комплекта, совместно с лабораторией SavePatterns, изначально нашла свое применение в автомобильной промышленности для защиты дорогостоящего лакокрасочного покрытия автомобилей. Теперь это технологическое новшество применяют и для защиты девайсов.</p> -<p><img alt="SaveCase" src="http://savecase.ru/downloads/news/protected.gif" width="450" height="188" /> </p> -<p>Описание с официального сайта <a href="http://savecase.ru/TN">www.savecase.ru</a>:</p> -<p><em>Установив защитный комплект SaveCase на свой телефон, плеер, ноутбук или игровую консоль, Вы получаете 100% невидимую защиту от износа, царапин и трещин на протяжении всего срока использования. SaveCase защищает ваше устройство со всех сторон, делая его практически неуязвимым. Не удивляйтесь, если ваше устройство с SaveCase, даже спустя месяцы использования остается таким же как и в первый день, ведь для этого применяется необычайно прочный материал, в народе получивший название - "легкая броня"! Мы настолько уверены в качестве защитного комплекта SaveCase, что даем на него пожизненную гарантию.</em></p> -<p><object width="470" height="353"><param name="movie" value="http://video.rutube.ru/00b4ba3668ba366844180570ae87fc7a" /><param name="wmode" value="window" /><param name="allowFullScreen" value="true" /><embed src="http://video.rutube.ru/00b4ba3668ba366844180570ae87fc7a" type="application/x-shockwave-flash" wmode="window" allowfullscreen="true" width="470" height="353"></object></p> - - - ]]> - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: ZXLightControl v.1.0.0</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-zxlightcontrol-v100.html" /> - <id>tag:touchnokia.ru,2009://1.814</id> - - <published>2009-05-31T10:22:58Z</published> - <updated>2009-05-31T10:23:41Z</updated> - - <summary><![CDATA[ZXLightControl v.1.0.0 Уменьшено до 50%360 x 640 (38,06 килобайт) Уменьшено до 50%360 x 640 (37,13 килобайт) Разработчик: ZXStylesЯзык: EnglishСостояние: FreeОписание: Программа для управления подсветкой экрана и клавиш на смартфонах Symbian 9.2, 9.3, 9.4Программа является выделенным в отдельное приложение блоком управления расширенной подсветкой из программы ZXReader.Возможности:* настройка яркости...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Утилиты" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="zxlightcontrol" label="ZXLightControl" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v100" label="v.1.0.0" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>ZXLightControl v.1.0.0</b></span><br /><br /><table id="ipb-attach-table-1634-0-00930600-1243765331" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1634-0-00930600-1243765331" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1634-0-00930600-1243765331" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1634-0-00930600-1243765331" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1634" title="Scr000404.jpg - Размер: 38,06 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243765219_thumb.jpg" id="ipb-attach-img-1634-0-00930600-1243765331" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1634-0-00930600-1243765331" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (38,06 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1633-0-00946000-1243765331" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1633-0-00946000-1243765331" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1633-0-00946000-1243765331" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1633-0-00946000-1243765331" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1633" title="Scr000403.jpg - Размер: 37,13 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243765213_thumb.jpg" id="ipb-attach-img-1633-0-00946000-1243765331" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1633-0-00946000-1243765331" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (37,13 килобайт)</div></div></td></tr></tbody></table> <br /><b>Разработчик:</b> ZXStyles<br /><b>Язык:</b> English<br /><b>Состояние:</b> Free<br /><b>Описание:</b> Программа для управления подсветкой экрана и клавиш на смартфонах Symbian 9.2, 9.3, 9.4<br />Программа является выделенным в отдельное приложение блоком управления расширенной подсветкой из программы ZXReader.<br /><b>Возможности:</b><br />* настройка яркости подсветки экрана<br />* Отключение подсветки клавиш<br />* Удерживание подсветки экрана включенной бесконечно <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1635" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1635" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">ZXLightControl_v1.0.0_S60_5th_signed.zip</a> ( 12,71 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=958">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: Voice Inbox v.1.09.112</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-voice-inbox-v109112.html" /> - <id>tag:touchnokia.ru,2009://1.813</id> - - <published>2009-05-31T09:57:06Z</published> - <updated>2009-05-31T09:59:46Z</updated> - - <summary><![CDATA[Voice Inbox v.1.09.112 Уменьшено до 50%360 x 640 (53,6 килобайт) Уменьшено до 50%360 x 640 (50,23 килобайт) Разработчик: WebGateЯзык: Русский ( В архиве лежит русификатор) Состояние: FreeОписание: Программа автоответчик[*] Если у вас разблокирован смартфон то качаем и ставим, если нет то файл необходимо подписать Voice_Inbox_v.1.09.112.zip ( 152,48 килобайт )Обсуждение ведем здесь...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="inbox" label="Inbox" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v109112" label="v.1.09.112" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="voice" label="Voice" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Voice Inbox v.1.09.112</b></span><br /><br /><table id="ipb-attach-table-1339-0-82301900-1243763904" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1339-0-82301900-1243763904" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1339-0-82301900-1243763904" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1339-0-82301900-1243763904" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1339" title="Scr000276.jpg - Размер: 53,6 килобайт, Скачано: 9" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242031946_thumb.jpg" id="ipb-attach-img-1339-0-82301900-1243763904" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1339-0-82301900-1243763904" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (53,6 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1340-0-82335200-1243763904" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1340-0-82335200-1243763904" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1340-0-82335200-1243763904" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1340-0-82335200-1243763904" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1340" title="Scr000277.jpg - Размер: 50,23 килобайт, Скачано: 10" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242031954_thumb.jpg" id="ipb-attach-img-1340-0-82335200-1243763904" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1340-0-82335200-1243763904" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (50,23 килобайт)</div></div></td></tr></tbody></table> <br /><b>Разработчик:</b> WebGate<br /><b>Язык:</b> Русский ( В архиве лежит русификатор) <br /><b>Состояние:</b> Free<br /><b>Описание:</b> Программа автоответчик<br /><b><span style="color: rgb(255, 0, 0); ">[*]</span> </b>Если у вас <a href="http://touchnokia.ru/forums/index.php?showtopic=252" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(255, 0, 0); ">разблокирован смартфон</span></a> то качаем и ставим, если нет то файл необходимо <a href="http://touchnokia.ru/forums/index.php?showtopic=8" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(0, 128, 0); ">подписать</span></a><br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1632" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1632" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Voice_Inbox_v.1.09.112.zip</a> ( 152,48 килобайт )<br /></span></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=770">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: Smart Movie v.4.15</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-smart-movie-v415.html" /> - <id>tag:touchnokia.ru,2009://1.812</id> - - <published>2009-05-31T09:24:12Z</published> - <updated>2009-05-31T09:26:29Z</updated> - - <summary><![CDATA[Smart Movie v.4.15 Уменьшено до 50%360 x 640 (61,1 килобайт) Уменьшено до 50%360 x 640 (63,72 килобайт) Разработчик: Lonely Cat GamesЯзык: EnglishСостояние: TrialОписание: Наонецто взломаная версияВозможности SmartMovie:- Стандартный формат AVI- Использует подгружаемые кодеки- Портретный и пейзажный режимы просмотра видео- Первый мобильный плеер с поддержкой субтитров, можно смотреть...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="movie" label="Movie" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="smart" label="Smart" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v415" label="v.4.15" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Smart Movie v.4.15</b></span><br /><br /><table id="ipb-attach-table-1090-0-82600900-1243761824" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1090-0-82600900-1243761824" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1090-0-82600900-1243761824" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1090-0-82600900-1243761824" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1090" title="Scr000194.jpg - Размер: 61,1 килобайт, Скачано: 37" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_04_2009/post-1-1240072182_thumb.jpg" id="ipb-attach-img-1090-0-82600900-1243761824" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1090-0-82600900-1243761824" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (61,1 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1091-0-82636200-1243761824" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1091-0-82636200-1243761824" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1091-0-82636200-1243761824" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1091-0-82636200-1243761824" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1091" title="Scr000195.jpg - Размер: 63,72 килобайт, Скачано: 46" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_04_2009/post-1-1240072186_thumb.jpg" id="ipb-attach-img-1091-0-82636200-1243761824" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1091-0-82636200-1243761824" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (63,72 килобайт)</div></div></td></tr></tbody></table> <br /><br /><b>Разработчик:</b> Lonely Cat Games<br /><b>Язык:</b> English<br /><b>Состояние:</b> Trial<br /><b>Описание:</b> Наонецто взломаная версия<br />Возможности SmartMovie:<br />- Стандартный формат AVI<br />- Использует подгружаемые кодеки<br />- Портретный и пейзажный режимы просмотра видео<br />- Первый мобильный плеер с поддержкой субтитров, можно смотреть видео на многих языках<br />- Поддержка кодеков DirectShow<br />- Очень быстрое конвертирование<br />- Бикубическая интерполяция - максимальное качество ужатого видео<br />- Настраиваемые параметры качества/объема в Smart Movie<br />- Богатые настройки плеера <br /><br /><b>Новое в SmartMovie v.4.15:</b><br />- Возможность выбора папки воспроизведения<br />- Японская и китайская кодировки для субтитров</span><div><span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1631" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">SmartMovie_4.15_not_cracked.zip</a> ( 605,24 килобайт )</span> </div><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=626">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: PowerMP3 v.1.15 Beta</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-powermp3-v115-beta.html" /> - <id>tag:touchnokia.ru,2009://1.811</id> - - <published>2009-05-31T09:13:04Z</published> - <updated>2009-05-31T09:21:41Z</updated> - - <summary><![CDATA[PowerMP3 v.1.15 Beta Уменьшено до 50%360 x 640 (52,76 килобайт) Уменьшено до 50%360 x 640 (48,81 килобайт) Разработчик: MobiFactorЯзык: РусскийСостояние: FreeОписание: Музыкальный плеер. Теперь со специальными скинами полноценно работает и на 5800.Особенности:- поддержка большинства популярных аудио форматов (MP3/OGG/AAC/MP4)- отображение обложки альбома с поиском в интернете- эффекты визуализации-...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="beta" label="Beta" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="powermp3" label="PowerMP3" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v115" label="v.1.15" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>PowerMP3 v.1.15 Beta</b></span></span><div><span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="line-height: 19px; "></span><font class="Apple-style-span" size="6"><span class="Apple-style-span" style="font-size: 19px;"><b><br /></b></span></font><table id="ipb-attach-table-1479-0-50851300-1243761298" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1479-0-50851300-1243761298" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1479-0-50851300-1243761298" style="font-size: 9px; "> Уменьшено до 50%</div><a id="ipb-attach-url-1479-0-50851300-1243761298" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1479" title="Scr000326.jpg - Размер: 52,76 килобайт, Скачано: 34" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242843276_thumb.jpg" id="ipb-attach-img-1479-0-50851300-1243761298" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1479-0-50851300-1243761298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (52,76 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1480-0-50890900-1243761298" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1480-0-50890900-1243761298" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1480-0-50890900-1243761298" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1480-0-50890900-1243761298" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1480" title="Scr000327.jpg - Размер: 48,81 килобайт, Скачано: 22" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242843286_thumb.jpg" id="ipb-attach-img-1480-0-50890900-1243761298" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1480-0-50890900-1243761298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (48,81 килобайт)</div></div></td></tr></tbody></table> <br /><b>Разработчик:</b> MobiFactor<br /><b>Язык:</b> Русский<br /><b>Состояние:</b> Free<br /><b>Описание:</b> Музыкальный плеер. Теперь со специальными скинами полноценно работает и на 5800.<br /><b>Особенности:</b><br />- поддержка большинства популярных аудио форматов (MP3/OGG/AAC/MP4)<br />- отображение обложки альбома с поиском в интернете<br />- эффекты визуализации<br />- поддержка скинов<br />- поддержка пультов AD-4х<br />- слип-таймер<br />- воспроизведение по выбранным папкам<br />- создание плей-листов<br />- эквалайзер<br />- расширенное стерео<br /><b>Новое в PowerMP3 v1.15:</b><br />-Исправлена ошибка с переключением дорожек минигарнитурой<br />-Исправлена куча небольших ошибок<br />-Сделали собственный эквалайзер для всех телефонов<br />-Добавлена поддержка папок. Теперь, когда вы удаляете композиции из списка воспроизведения, появится диалоговое окно, где вы можете выбрать для удаления песни с диска<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1630" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1630" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">PowerMP3_v.1.15b.zip</a> ( 1,04 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=862">здесь</a></span></font></div></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: XpressCut v.0.1</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-xpresscut-v01.html" /> - <id>tag:touchnokia.ru,2009://1.810</id> - - <published>2009-05-31T08:57:55Z</published> - <updated>2009-05-31T09:00:27Z</updated> - - <summary><![CDATA[XpressCut v.0.1Разработчик: kAISTЯзык: РусскийСостояние: FreeОписание: программа для Nokia 5800 и N97, предназначенная для простой и быстрой нарезки mp3 файлов на звонок. Теперь нарезать любимую мелодию себе или друзьям можно "на ходу" без помощи компьютера, всего за несколько секунд. Достаточно открыть mp3 файл, установить...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v01" label="v.0.1" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="xpresscut" label="XpressCut" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><font class="Apple-style-span" size="6"><span class="Apple-style-span" style="font-size: 24px; line-height: 24px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; line-height: 19px; "><span style="font-size: 18pt; line-height: 24px; "><b>XpressCut v.0.1</b></span><br /><br /><b>Разработчик</b>: <a href="http://soft.mobile-master.org/" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">kAIST</a><br /><b>Язык</b>: Русский<br /><b>Состояние</b>: Free<br /><b>Описание</b>: программа для Nokia 5800 и N97, предназначенная для простой и быстрой нарезки mp3 файлов на звонок. <br />Теперь нарезать любимую мелодию себе или друзьям можно "на ходу" без помощи компьютера, всего за несколько секунд. <br />Достаточно открыть mp3 файл, установить точку начала, точку окончания, нажать "save" и рингтон готов! <br /><b>Инструкция по применению</b>: сверху "трека" распологается полоса покрутки, переместив которую, выбирите нужную позицию. Установите курсор в нужную позицию, ткнув стилусом на "треке". С места, где установлен курсор, трек можно проиграть, нажав на "play" (остановить можно, нажав на ту же кнопку). Установите метки начала и конца нарезки, воспользовавшись соответствующими кнопками. После этого, можно нажать на "save". После сохранения трека, его можно прослушать. <br />ВНИМАНИЕ!! Программа работает только с mp3 файлами,созданными с постоянным битрейтом! <br /><b>Для работоспособности нужен python не ниже версии 1.9.4. Python и программу ставить на один и тот же диск! </b><br /><table id="ipb-attach-table-1627-0-99970000-1243760335" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1627-0-99970000-1243760335" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1627-0-99970000-1243760335" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 63%</div><a id="ipb-attach-url-1627-0-99970000-1243760335" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1627" title="Scr000400.jpg - Размер: 38,46 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243760017_thumb.jpg" id="ipb-attach-img-1627-0-99970000-1243760335" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1627-0-99970000-1243760335" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (38,46 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1626-0-99981600-1243760335" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1626-0-99981600-1243760335" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1626-0-99981600-1243760335" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 63%</div><a id="ipb-attach-url-1626-0-99981600-1243760335" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1626" title="Scr000399.jpg - Размер: 59,26 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243760011_thumb.jpg" id="ipb-attach-img-1626-0-99981600-1243760335" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1626-0-99981600-1243760335" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (59,26 килобайт)</div></div></td></tr></tbody></table> </span><br /></b></span></font><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1628" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1628" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Python_1.9.5.zip</a> ( 2,75 мегабайт )<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1629" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1629" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">XpressCut_0.1_ru.zip</a> ( 142,57 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=951">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Игры для Nokia 5800 и Nokia N97: Asphalt 4 Elite Racing 3D v.1.0.1</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/igri-dlja-nokia-5800-i-nokia-n97-asphalt-4-elite-racing-3d-v101.html" /> - <id>tag:touchnokia.ru,2009://1.808</id> - - <published>2009-05-31T08:37:27Z</published> - <updated>2009-05-31T08:44:42Z</updated> - - <summary><![CDATA[Asphalt 4 Elite Racing 3D v1.0.1Разработчик: GameloftЯзык: Английский (В sis версии Русский)Состояние: FreeОписание: Долгожданная, великолепная, бриллиантовая 3D версия самых лучших гонок для мобильного Asphalt 4: Elite Racing 3D! Ты до сих пор это читаешь? Быстро качать, ты не должен пропустить эту игру!-10 удивительных автомобилей...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Игры для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="4" label="4" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="asphalt" label="Asphalt" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="elite" label="Elite" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="racing" label="Racing" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v101" label="v.1.0.1" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Игры" label="Игры" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Asphalt 4 Elite Racing 3D v1.0.1</b></span><br /><br /><b>Разработчик:</b> Gameloft<br /><b>Язык:</b> Английский (В sis версии Русский)<br /><b>Состояние:</b> Free<br /><b>Описание:</b> Долгожданная, великолепная, бриллиантовая 3D версия самых лучших гонок для мобильного Asphalt 4: Elite Racing 3D! Ты до сих пор это читаешь? Быстро качать, ты не должен пропустить эту игру!<br />-10 удивительных автомобилей и мотоциклов, включая такие, как Bugatti Veyron, Ferrari F430 Spider, Nissan GT-R, Ducati 1098.<br />-Гоняй по шести самых горячих городам мира: Монте Карло, Беверли Хиллз, Шангай, Нью-Йорк, Дюбай, Париж.<br />-Удивительная 3D графика просто захватывает дыхание!<br />-Тюнингуй свой автомобиль в собственном гараже!<br />-Наслаждайся пятью различными режимами игры, такими как преследование, дрифт, и сбей всех.<br />-Адаптируйся в различных погодных условиях: сможешь ли управлять своим автомобилем в ливень?<br /><table id="ipb-attach-table-1607-0-92318400-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1607-0-92318400-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1607-0-92318400-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 63%</div><a id="ipb-attach-url-1607-0-92318400-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1607" title="Scr000391.jpg - Размер: 61,07 килобайт, Скачано: 17" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243712008_thumb.jpg" id="ipb-attach-img-1607-0-92318400-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1607-0-92318400-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (61,07 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1608-0-92356700-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1608-0-92356700-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1608-0-92356700-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 63%</div><a id="ipb-attach-url-1608-0-92356700-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1608" title="Scr000393.jpg - Размер: 63,54 килобайт, Скачано: 62" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243712016_thumb.jpg" id="ipb-attach-img-1608-0-92356700-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1608-0-92356700-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (63,54 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1609" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1609" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Asphalt4.zip</a> ( 684,82 килобайт )<br /><br /><b>И версия Asphalt 4 HD в sis</b><br /><table id="ipb-attach-table-1622-0-92421200-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1622-0-92421200-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1622-0-92421200-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 63%</div><a id="ipb-attach-url-1622-0-92421200-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1622" title="screen1.jpg - Размер: 72,42 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243758764_thumb.jpg" id="ipb-attach-img-1622-0-92421200-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1622-0-92421200-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">639 x 359 (72,42 килобайт)</div></div></td></tr></tbody></table> <br /><table id="ipb-attach-table-1623-0-92441100-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1623-0-92441100-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1623-0-92441100-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 63%</div><a id="ipb-attach-url-1623-0-92441100-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1623" title="screen2.jpg - Размер: 60,41 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243758819_thumb.jpg" id="ipb-attach-img-1623-0-92441100-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1623-0-92441100-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">639 x 359 (60,41 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1624" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1624" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Asphalt4.N5800.Unsigned.zip</a> ( 5,35 мегабайт )</span><br /></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=949">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Игры для Nokia 5800 и Nokia N97: 3D Fast and Furious</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/igri-dlja-nokia-5800-i-nokia-n97-3d-fast-and-furious.html" /> - <id>tag:touchnokia.ru,2009://1.809</id> - - <published>2009-05-30T19:47:24Z</published> - <updated>2009-05-31T08:24:20Z</updated> - - <summary><![CDATA[3D Fast and FuriousРазработчик: i-playЯзык: АнглийскийСостояние:Описание: Хорошая игра с 3D графикой Уменьшено до 50%360 x 640 (34,56 килобайт) Уменьшено до 50%360 x 640 (44,54 килобайт) 3D_Fast_and_Furious_n5800.zip ( 675,77 килобайт ) Обсуждение ведем здесь...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Игры для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="and" label="and" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="fast" label="Fast" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="furious" label="Furious" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Игры" label="Игры" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>3D Fast and Furious</b></span><br /><br /><b>Разработчик:</b> i-play<br /><b>Язык:</b> Английский<br /><b>Состояние:</b><br /><b>Описание:</b> Хорошая игра с 3D графикой<br /><table id="ipb-attach-table-1616-0-66426500-1243758190" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1616-0-66426500-1243758190" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1616-0-66426500-1243758190" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1616-0-66426500-1243758190" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1616" title="Scr000396.jpg - Размер: 34,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243757911_thumb.jpg" id="ipb-attach-img-1616-0-66426500-1243758190" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1616-0-66426500-1243758190" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (34,56 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1617-0-66441400-1243758190" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1617-0-66441400-1243758190" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1617-0-66441400-1243758190" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1617-0-66441400-1243758190" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1617" title="Scr000397.jpg - Размер: 44,54 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243757917_thumb.jpg" id="ipb-attach-img-1617-0-66441400-1243758190" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1617-0-66441400-1243758190" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (44,54 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1621" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1621" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">3D_Fast_and_Furious_n5800.zip</a> ( 675,77 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=956">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: Kaspersky Mobile Security 8.0 release v.8.0.51 - Обновление</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-kaspersky-mobile-security-80-release-v8051---obnovlenie.html" /> - <id>tag:touchnokia.ru,2009://1.807</id> - - <published>2009-05-30T19:16:24Z</published> - <updated>2009-05-30T19:46:19Z</updated> - - <summary><![CDATA[Kaspersky Mobile Security 8.0 release v.8.0.51Разработчик: ЗАО "Лаборатория Касперского"Язык: РусскийСостояние: Free (действительна до 1.02.2048 года)Описание: Антивирус Касперского® Mobile это удобное и надежное решение для защиты смартфонов под управлением Symbian OS и Windows Mobile от вредоносных программ для мобильных платформ.ПреимуществаЗащита от мобильных вирусов в режиме реального...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Безопасность" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="80" label="8.0" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="kaspersky" label="Kaspersky" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="mobile" label="Mobile" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="security" label="Security" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v8051" label="v.8.0.51" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Kaspersky Mobile Security 8.0 release v.8.0.51</b></span><br /><br /><b>Разработчик:</b> ЗАО "Лаборатория Касперского"<br /><b>Язык:</b> Русский<br /><b>Состояние:</b> Free <u><i>(действительна до 1.02.2048 года)</i></u><br /><b>Описание:</b> Антивирус Касперского® Mobile это удобное и надежное решение для защиты смартфонов под управлением Symbian OS и Windows Mobile от вредоносных программ для мобильных платформ.<br />Преимущества<br />Защита от мобильных вирусов в режиме реального времени<br />Защита от спама в SMS/EMS/MMS с помощью черных и белых списков<br />Незаметная работа в фоновом режиме<br />Автоматическое обновление антивирусных баз<br />Основные функции<br />Антивирусная проверка встроенной памяти телефона, а также карт памяти по требованию<br />Проверка всех входящих или модифицируемых объектов без участия пользователя<br />Полная антивирусная проверка по расписанию в удобное для пользователя время<br />Бесплатная техническая поддержка по вопросам установки, активации, настройки и эксплуатации продукта<br /><br /><table id="ipb-attach-table-1605-0-65086900-1243712699" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1605-0-65086900-1243712699" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1605-0-65086900-1243712699" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1605-0-65086900-1243712699" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1605" title="Scr000390.jpg - Размер: 42,68 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243710731_thumb.jpg" id="ipb-attach-img-1605-0-65086900-1243712699" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1605-0-65086900-1243712699" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (42,68 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1604-0-65116400-1243712699" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1604-0-65116400-1243712699" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1604-0-65116400-1243712699" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1604-0-65116400-1243712699" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1604" title="Scr000389.jpg - Размер: 69,83 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243710725_thumb.jpg" id="ipb-attach-img-1604-0-65116400-1243712699" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1604-0-65116400-1243712699" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (69,83 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1610" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1610" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">kaspersky_mobil.zip</a> ( 885,88 килобайт ) <font class="Apple-style-span" style="font-size: 0.8em; ">- <i>в архиве находится инструкция на английском по регистрации программы</i></font></span><br /></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=478">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: Dudu Recorder v.3.20</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-dudu-recorder-v320.html" /> - <id>tag:touchnokia.ru,2009://1.806</id> - - <published>2009-05-30T18:37:40Z</published> - <updated>2009-05-30T18:39:45Z</updated> - - <summary><![CDATA[Dudu Recorder v.3.20Разработчик: HongDi TechnologyЯзык: English Состояние: Free (для регистрации вводим 12090704Описание: Маленький диктофон, имеющий функции: записывает в формате АМR, умеет сортировать записи, есть авто-старт, неограниченная длительность записи (зависит от количества свободного места на диске), скрывает записи, выбор памяти для записи. Если при установке выдает ошибка...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="dudu" label="Dudu" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="recorder" label="Recorder" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v320" label="v.3.20" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Dudu Recorder v.3.20</b></span><br /><br /><b>Разработчик:</b> HongDi Technology<br /><b>Язык:</b> English <br /><b>Состояние:</b> Free (для регистрации вводим <span style="color: rgb(0, 255, 0); ">12090704</span><br /><b>Описание:</b> Маленький диктофон, имеющий функции: записывает в формате АМR, умеет сортировать записи, есть авто-старт, неограниченная длительность записи (зависит от количества свободного места на диске), скрывает записи, выбор памяти для записи. Если при установке выдает ошибка обновления удалите предыдущие версии!<br /><b>Изменения в v.3.20:</b><br />-Добавлена защита паролем<br />-горячии клавиши<br />-скрытый режим (приложения не видно в списке запущенных) <br /><table id="ipb-attach-table-1233-0-61670800-1243708652" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1233-0-61670800-1243708652" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1233-0-61670800-1243708652" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1233-0-61670800-1243708652" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1233" title="Scr000232.jpg - Размер: 49,76 килобайт, Скачано: 4" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241347699_thumb.jpg" id="ipb-attach-img-1233-0-61670800-1243708652" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1233-0-61670800-1243708652" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (49,76 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1234-0-61699800-1243708652" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1234-0-61699800-1243708652" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1234-0-61699800-1243708652" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1234-0-61699800-1243708652" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1234" title="Scr000233.jpg - Размер: 50,93 килобайт, Скачано: 2" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241347705_thumb.jpg" id="ipb-attach-img-1234-0-61699800-1243708652" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1234-0-61699800-1243708652" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (50,93 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1602" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1602" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">dudu320.zip</a> ( 114,99 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=710">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: MyPhone v.2.11 - Обновление</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-myphone-v211---obnovlenie.html" /> - <id>tag:touchnokia.ru,2009://1.805</id> - - <published>2009-05-30T17:58:41Z</published> - <updated>2009-05-30T17:59:38Z</updated> - - <summary><![CDATA[MyPhone v.2.11Разработчик: immmoooЯзык: АнглийскийСостояние: TrialОписание: Эмулятор интерфейса iPhone на 5800 Уменьшено до 50%360 x 640 (32,26 килобайт) Уменьшено до 50%360 x 640 (63,16 килобайт) myphone.zip ( 410,09 килобайт )Обсуждение ведем здесь...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="myphone" label="MyPhone" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v211" label="v.2.11" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>MyPhone v.2.11</b></span><br /><br /><b>Разработчик:</b> immmooo<br /><b>Язык:</b> Английский<br /><b>Состояние:</b> Trial<br /><b>Описание:</b> Эмулятор интерфейса iPhone на 5800<br /><table id="ipb-attach-table-1313-0-50472400-1243706274" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1313-0-50472400-1243706274" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1313-0-50472400-1243706274" style="font-size: 9px; "> Уменьшено до 50%</div><a id="ipb-attach-url-1313-0-50472400-1243706274" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1313" title="Scr000270.jpg - Размер: 32,26 килобайт, Скачано: 36" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241950940_thumb.jpg" id="ipb-attach-img-1313-0-50472400-1243706274" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1313-0-50472400-1243706274" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (32,26 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1314-0-50507200-1243706274" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1314-0-50507200-1243706274" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1314-0-50507200-1243706274" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1314-0-50507200-1243706274" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1314" title="Scr000272.jpg - Размер: 63,16 килобайт, Скачано: 28" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241950944_thumb.jpg" id="ipb-attach-img-1314-0-50507200-1243706274" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1314-0-50507200-1243706274" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (63,16 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1601" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1601" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">myphone.zip</a> ( 410,09 килобайт )<br />Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=762">здесь</a></span>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: Eye Call v.1.04</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-eye-call-v104.html" /> - <id>tag:touchnokia.ru,2009://1.804</id> - - <published>2009-05-30T17:47:01Z</published> - <updated>2009-05-30T17:58:12Z</updated> - - <summary><![CDATA[Eye Call v.1.04Разработчик: EyeSight.Язык: АнглийскийСостояние: FreeОписание: Бывает так что кто-то звонит, а звук так неуместен, а с помощью вот этой программы достаточно махнуть рукой и телефон заглушит его. Также можно настроить что-бы на 2-ой взмах отсылалось SMS звонящему.[*] Если у вас разблокирован смартфон то качаем и ставим,...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="call" label="Call" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="eye" label="Eye" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v104" label="v.1.04" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Eye Call v.1.04</b></span><br /><br /><b>Разработчик:</b> EyeSight.<br /><b>Язык:</b> Английский<br /><b>Состояние:</b> Free<br /><b>Описание:</b> Бывает так что кто-то звонит, а звук так неуместен, а с помощью вот этой программы достаточно махнуть рукой и телефон заглушит его. Также можно настроить что-бы на 2-ой взмах отсылалось SMS звонящему.<br /><b><span style="color: rgb(255, 0, 0); ">[*]</span> </b>Если у вас <a href="http://touchnokia.ru/forums/index.php?showtopic=252" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(255, 0, 0); ">разблокирован смартфон</span></a> то качаем и ставим, если нет то файл необходимо <a href="http://touchnokia.ru/forums/index.php?showtopic=8" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(0, 128, 0); ">подписать</span></a><br /><table id="ipb-attach-table-1598-0-56466900-1243705624" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1598-0-56466900-1243705624" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1598-0-56466900-1243705624" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1598-0-56466900-1243705624" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1598" title="Scr000385.jpg - Размер: 30,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243705383_thumb.jpg" id="ipb-attach-img-1598-0-56466900-1243705624" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1598-0-56466900-1243705624" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (30,56 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1599-0-56483600-1243705624" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1599-0-56483600-1243705624" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1599-0-56483600-1243705624" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1599-0-56483600-1243705624" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1599" title="Scr000388.jpg - Размер: 47,39 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243705390_thumb.jpg" id="ipb-attach-img-1599-0-56483600-1243705624" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1599-0-56483600-1243705624" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (47,39 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1600" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1600" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">eyesight.zip</a> ( 1,34 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=947">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: OVI Store</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-ovi-store.html" /> - <id>tag:touchnokia.ru,2009://1.803</id> - - <published>2009-05-28T19:57:54Z</published> - <updated>2009-05-28T19:59:03Z</updated> - - <summary><![CDATA[OVI StoreРазработчик: Язык: РусскийСостояние: FreeОписание: Программа для скачивания контента из Nokia OVI Store (программы, игры, картинки и т.д) прямо на телефоне.Присутствует возможность фильтрации представленного - только бесплатные. Уменьшено до 50%360 x 640 (61,05 килобайт) Уменьшено до 50%360 x 640 (25,44 килобайт) OVIStore.zip ( 616,74 килобайт ) Обсуждение ведем...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="ovi" label="OVI" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="store" label="Store" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>OVI Store</b></span><br /><br /><b>Разработчик:</b> <br /><b>Язык:</b> Русский<br /><b>Состояние:</b> Free<br /><b>Описание:</b> Программа для скачивания контента из Nokia OVI Store (программы, игры, картинки и т.д) прямо на телефоне.<br />Присутствует возможность фильтрации представленного - только бесплатные.<br /><table id="ipb-attach-table-1594-0-86762900-1243540593" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1594-0-86762900-1243540593" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1594-0-86762900-1243540593" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1594-0-86762900-1243540593" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1594" title="Scr000379.jpg - Размер: 61,05 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243540199_thumb.jpg" id="ipb-attach-img-1594-0-86762900-1243540593" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1594-0-86762900-1243540593" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (61,05 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1595-0-86774400-1243540593" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1595-0-86774400-1243540593" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1595-0-86774400-1243540593" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1595-0-86774400-1243540593" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1595" title="Scr000380.jpg - Размер: 25,44 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243540204_thumb.jpg" id="ipb-attach-img-1595-0-86774400-1243540593" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1595-0-86774400-1243540593" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (25,44 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1596" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1596" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">OVIStore.zip</a> ( 616,74 килобайт )</span> <br /><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=934">здесь </a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: Talkonaut v.5.51.68</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-talkonaut-v55168.html" /> - <id>tag:touchnokia.ru,2009://1.802</id> - - <published>2009-05-28T19:16:28Z</published> - <updated>2009-05-28T19:18:50Z</updated> - - <summary>Talkonaut v.5.51.68Разработчик: talkonaut.comЯзык: РусскийСостояние: FreeОписание: Talkonaut - это бесплатный GoogleTalk/Jabber IM клиент с голосовыми функциями.Функции:бесплатные звонки на GTalk, MSN Messenger, Yahoo, SIP;отправка и получение сообщений из: GTalk, Jabber, ICQ, MSN, AIM и Yahoo;дешевые звонки через GTalk;бесплатные звонки с вашего существующего...</summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="talkonaut" label="Talkonaut" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v55168" label="v.5.51.68" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Talkonaut v.5.51.68</b></span><br /><br /><b>Разработчик</b>: talkonaut.com<br /><b>Язык</b>: Русский<br /><b>Состояние</b>: Free<br /><b>Описание</b>: Talkonaut - это бесплатный GoogleTalk/Jabber IM клиент с голосовыми функциями.<br /><b>Функции:</b><ul><li>бесплатные звонки на GTalk, MSN Messenger, Yahoo, SIP;</li><li>отправка и получение сообщений из: GTalk, Jabber, ICQ, MSN, AIM и Yahoo;</li><li>дешевые звонки через GTalk;</li><li>бесплатные звонки с вашего существующего SIP-счета;</li><li>наличие смайликов, сигналов, передачи файлов через Jabber;</li><li>поддержка Jabber Service Discovery для работы с другими IM клиентами, поиск контактов ICQ и отправка SMS с помощью Mail.RU Agent;</li><li>поддержка сжатия трафика в 5-10 раз.</li></ul><b>Что нового:</b><br /><ul><li>Добавлено расширение (PNG, JPG или GIF) к имени файла при сохранении аватара.</li></ul><table id="ipb-attach-table-1592-0-63012200-1243538186" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1592-0-63012200-1243538186" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1592-0-63012200-1243538186" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1592-0-63012200-1243538186" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1592" title="Scr000002.jpg - Размер: 74,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243538165_thumb.jpg" id="ipb-attach-img-1592-0-63012200-1243538186" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1592-0-63012200-1243538186" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (74,56 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1591-0-63028800-1243538186" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1591-0-63028800-1243538186" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1591-0-63028800-1243538186" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1591-0-63028800-1243538186" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1591" title="Scr000001.jpg - Размер: 34,58 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243538155_thumb.jpg" id="ipb-attach-img-1591-0-63028800-1243538186" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1591-0-63028800-1243538186" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (34,58 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1590" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a> <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1590" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">talkonaut.zip</a> ( 1,29 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=928">здесь</a></span></font></div>]]> - - </content> -</entry> - -<entry> - <title>Программы для Nokia 5800 и Nokia N97: MobileAgent v.1.51</title> - <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-mobileagent-v151.html" /> - <id>tag:touchnokia.ru,2009://1.801</id> - - <published>2009-05-27T20:38:05Z</published> - <updated>2009-05-28T19:27:55Z</updated> - - <summary><![CDATA[MobileAgent v.1.51Разработчик: mail.ruЯзык: РусскийСостояние: FreeОписание: - Одновременная работа в агенте, аське и Jabber/GTalk- передача файлов- анимированные смайлы- доступ к почтеи многое другое...Изменения:- анимация интерфейса;- поддержка системных скинов;- поддержка графических скинов;- поддержка Jabber/GTalk/Я.Онлайн/Live Journal и т.п.- расширенный поиск по Агенту;- автостатусы и автоответчик;- работа с...]]></summary> - <author> - <name>iPod</name> - <uri>http://TouchNokia.ru</uri> - </author> - - <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" /> - - <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="mobileagent" label="MobileAgent" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="v151" label="v.1.51" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" /> - <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" /> - - <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/"> - <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b><div>MobileAgent v.1.51</div></b></span><br /><b>Разработчик:</b> mail.ru<br /><b>Язык:</b> Русский<br /><b>Состояние:</b> Free<br /><b>Описание:</b> - Одновременная работа в агенте, аське и Jabber/GTalk<br />- передача файлов<br />- анимированные смайлы<br />- доступ к почте<br />и многое другое...<br /><b>Изменения:</b><br />- анимация интерфейса;<br />- поддержка системных скинов;<br />- поддержка графических скинов;<br />- поддержка Jabber/GTalk/Я.Онлайн/Live Journal и т.п.<br />- расширенный поиск по Агенту;<br />- автостатусы и автоответчик;<br />- работа с картами (пока Москва Питер детально, вся Россия в небольшом зуме);<br />- возможность заранее загрузить файлы кэша Москвы и Питера;<br />- показ пробок;<br />- поиск по карте;<br />- позиционирование по GPS или сотовым вышкам;<br />- отправка своего местоположения собеседникам;<br />- просмотр чужих локаций;<br />- виджет на рабочий стол для быстрого доступа к данным о погоде, пробках и валюте. <br /><table id="ipb-attach-table-1570-0-85779200-1243456696" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1570-0-85779200-1243456696" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1570-0-85779200-1243456696" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1570-0-85779200-1243456696" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1570" title="Scr000377.jpg - Размер: 45,85 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243456529_thumb.jpg" id="ipb-attach-img-1570-0-85779200-1243456696" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1570-0-85779200-1243456696" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (45,85 килобайт)</div></div></td></tr></tbody></table> <table id="ipb-attach-table-1571-0-85795300-1243456696" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1571-0-85795300-1243456696" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1571-0-85795300-1243456696" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /> Уменьшено до 50%</div><a id="ipb-attach-url-1571-0-85795300-1243456696" href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1571" title="Scr000378.jpg - Размер: 48,64 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243456538_thumb.jpg" id="ipb-attach-img-1571-0-85795300-1243456696" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1571-0-85795300-1243456696" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (48,64 килобайт)</div></div></td></tr></tbody></table> <br /><a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1593" title="Скачать файл" target="_blank"><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" /></a> - <a href="http://touchnokia.ru/forums/index.php?act=attach&type=post&id=1593" title="Скачать файл" target="_blank">mobileagent.zip</a> ( 1,36 мегабайт )</span><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=926">здесь</a></span></font></div>]]> - - </content> -</entry> - -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml deleted file mode 100644 index a18a4ed2ec19215e13aeb84fc3600c27fddd8f42..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="background-repeat: repeat-x;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="background-repeat: repeat-x;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml deleted file mode 100644 index 6a11b45bf0485d2918c767ce38d6852d8bf73d68..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style contains url -Expect: not bozo and entries[0]['description'] == '<span style="background-color: #000;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="background-color: #000; background-image: url(/category/images/cafeneon_small.jpg); background-repeat: no-repeat;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml deleted file mode 100644 index a96c7fe3b9a855e1a9127593d17e33eac253f8e8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="background: yellow;" -Expect: not bozo and entries[0]['description'] == '<span style="background: yellow;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="background: yellow;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml deleted file mode 100644 index 082aeb471caf89b1cc3d09acd8f8d871f800efc2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border: 0;" -Expect: not bozo and entries[0]['description'] == '<span style="border: 0;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border: 0;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml deleted file mode 100644 index ead5a4df2b130e9b8222074bc4c2d87e3f947979..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border: 1px solid rgb(0, 0, 0);" -Expect: not bozo and entries[0]['description'] == '<span style="border: 1px solid rgb(0, 0, 0);">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border: 1px solid rgb(0, 0, 0);">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml deleted file mode 100644 index 211b47f1dce8dbf9d75863a57fe8d287afb83978..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border: 3px solid #ccc;" -Expect: not bozo and entries[0]['description'] == '<span style="border: 3px solid #ccc;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border: 3px solid #ccc;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml deleted file mode 100644 index 0a61570465f04cb3e5a1c5859c9e635368b88c41..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-bottom: 0pt;" -Expect: not bozo and entries[0]['description'] == '<span style="border-bottom: 0pt;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-bottom: 0pt;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml deleted file mode 100644 index 3938ecca4c9463c61ff3da9aad849f5bd5e2afdc..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-bottom: dashed;" -Expect: not bozo and entries[0]['description'] == '<span style="border-bottom: dashed;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-bottom: dashed;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml deleted file mode 100644 index 6f22f48f317f6e0f493246794c15275df6dea623..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-bottom: dotted;" -Expect: not bozo and entries[0]['description'] == '<span style="border-bottom: dotted;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-bottom: dotted;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml deleted file mode 100644 index 6e6d62e944fdeac9c74a9a76dba9072d51e5fb56..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-collapse: collapse;" -Expect: not bozo and entries[0]['description'] == '<span style="border-collapse: collapse;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-collapse: collapse;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml deleted file mode 100644 index 3f00fe0013427a6ba00d6c2fd4841961a5ac3a35..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-left: 0pt;" -Expect: not bozo and entries[0]['description'] == '<span style="border-left: 0pt;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-left: 0pt;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml deleted file mode 100644 index bea1e643af987cef59b788a3f9c0d14581318080..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border: medium none ;" -Expect: not bozo and entries[0]['description'] == '<span style="border: medium none ;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border: medium none ;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml deleted file mode 100644 index 1b9dfa94fe082a4f4b04f0366b8d3203a0df7a82..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border: none !important;" -Expect: not bozo and entries[0]['description'] == '<span style="border: none !important;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border: none !important;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml deleted file mode 100644 index d9066f5234eab15127df438c82ab24e9044454ec..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-right: 0pt;" -Expect: not bozo and entries[0]['description'] == '<span style="border-right: 0pt;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-right: 0pt;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml deleted file mode 100644 index 2fc5f4b69324197c7168b1c8d3de2fc5678a8620..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border: solid 2px #000000;" -Expect: not bozo and entries[0]['description'] == '<span style="border: solid 2px #000000;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border: solid 2px #000000;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml deleted file mode 100644 index d12947118625ccdb53183823bc918671989378d2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="border-top: 0pt;" -Expect: not bozo and entries[0]['description'] == '<span style="border-top: 0pt;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="border-top: 0pt;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml b/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml deleted file mode 100644 index 2efb73de08ac100facb457308acf08fc23230897..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="clear: both;" -Expect: not bozo and entries[0]['description'] == '<span style="clear: both;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="clear: both;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml deleted file mode 100644 index a03fde1e2a3529c87875e201f4c6521dc1e591a6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: #000080;" -Expect: not bozo and entries[0]['description'] == '<span style="color: #000080;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: #000080;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml deleted file mode 100644 index 4f412b304a3232340038ffc2f607d5810a832c71..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: #008;" -Expect: not bozo and entries[0]['description'] == '<span style="color: #008;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: #008;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml deleted file mode 100644 index e741bfa7be4f9aa8cdc006a0673ec34e5783ff38..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: #999999;" -Expect: not bozo and entries[0]['description'] == '<span style="color: #999999;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: #999999;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml deleted file mode 100644 index 06eb8fe72d4a53c7275f2a40d109a598a03fd6b2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: blue;" -Expect: not bozo and entries[0]['description'] == '<span style="color: blue;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: blue;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml deleted file mode 100644 index 42649ebc2c0b00b6c6cd445ff7a25d8571766a1e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: maroon;" -Expect: not bozo and entries[0]['description'] == '<span style="color: maroon;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: maroon;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml deleted file mode 100644 index 6cacbbec02e42a0a34e32c642ee12215fcac8d2f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: red;" -Expect: not bozo and entries[0]['description'] == '<span style="color: red;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: red;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml deleted file mode 100644 index b269a17f92c600e8a5d3a0ea722bf27c3ed6a730..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: rgb(0, 128, 0);" -Expect: not bozo and entries[0]['description'] == '<span style="color: rgb(0, 128, 0);">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: rgb(0, 128, 0);">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml deleted file mode 100644 index b5afc8f1ac476f5fb6164a41a8d1ff7c1129df51..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="color: teal;" -Expect: not bozo and entries[0]['description'] == '<span style="color: teal;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="color: teal;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml b/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml deleted file mode 100644 index ee69ca178b7d72344ad163e299ea34df3eadcbcf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="cursor: pointer;" -Expect: not bozo and entries[0]['description'] == '<span style="cursor: pointer;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="cursor: pointer;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml b/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml deleted file mode 100644 index 95642617f29014f60127ad69252a8f76f40d2e44..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="display: block;" -Expect: not bozo and entries[0]['description'] == '<span style="display: block;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="display: block;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml b/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml deleted file mode 100644 index b9e11fa7819129095f6512972de7ad66fee8825e..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="float: left;" -Expect: not bozo and entries[0]['description'] == '<span style="float: left;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="float: left;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml b/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml deleted file mode 100644 index eb4009cf751053bdddb83c19c4a411a28f98cf70..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="float: right;" -Expect: not bozo and entries[0]['description'] == '<span style="float: right;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="float: right;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml deleted file mode 100644 index 3ae327dc1f067375af618288bc887b5c9bec9202..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-family : Comic Sans MS;" -Expect: not bozo and entries[0]['description'] == '<span style="font-family: Comic Sans MS;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-family : Comic Sans MS;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml deleted file mode 100644 index 5b21c424551a0ad54d1d38ffbc76c9d00c34c879..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-family: arial,sans-serif;" -Expect: not bozo and entries[0]['description'] == '<span style="font-family: arial,sans-serif;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-family: arial,sans-serif;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml deleted file mode 100644 index a8a6fe5fb94bf309d35fbdc8e810ca9ebf8b70c3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-family: 'Lucida Console';" -Expect: not bozo and entries[0]['description'] == '''<span style="font-family: 'Lucida Console';">Some text</span>''' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-family: 'Lucida Console';">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml deleted file mode 100644 index 0221e7a8eab0343a6ad6a01429ea37feb200deee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-family: Symbol;" -Expect: not bozo and entries[0]['description'] == '<span style="font-family: Symbol;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-family: Symbol;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml deleted file mode 100644 index 4b658fcfc37b96729eb1c577342f475309ea5ea2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-size: 0.9em;" -Expect: not bozo and entries[0]['description'] == '<span style="font-size: 0.9em;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-size: 0.9em;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml deleted file mode 100644 index 27a79943df62a579995dd56a9623d49859b039e3..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-size: 10pt;" -Expect: not bozo and entries[0]['description'] == '<span style="font-size: 10pt;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-size: 10pt;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml deleted file mode 100644 index ba00024a2e42d10485315e3ba9283182a1e0c45c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-size: 10px;" -Expect: not bozo and entries[0]['description'] == '<span style="font-size: 10px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-size: 10px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml deleted file mode 100644 index 04bf3641aa21c9f1e98fb33cefbb63339ef6d01f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-size: smaller;" -Expect: not bozo and entries[0]['description'] == '<span style="font-size: smaller;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-size: smaller;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml deleted file mode 100644 index 31aa7539b16fa253bcc291f2f14f892af77d8b27..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-style: italic;" -Expect: not bozo and entries[0]['description'] == '<span style="font-style: italic;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-style: italic;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml deleted file mode 100644 index f63a008f8fd4db3e33a91b6ad443d4cd62acd086..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="font-weight: bold;" -Expect: not bozo and entries[0]['description'] == '<span style="font-weight: bold;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="font-weight: bold;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml b/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml deleted file mode 100644 index bba108a59f88725981bd3f403d19f488ebebdeaa..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="height: 100px;" -Expect: not bozo and entries[0]['description'] == '<span style="height: 100px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="height: 100px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml b/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml deleted file mode 100644 index 4b2291617af77fe02287f86a57f39b9a2457cafb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="height: 2px;" -Expect: not bozo and entries[0]['description'] == '<span style="height: 2px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="height: 2px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml b/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml deleted file mode 100644 index 23e7b90c897db63ebd8c93645e0f097615989564..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="letter-spacing:1px;" -Expect: not bozo and entries[0]['description'] == '<span style="letter-spacing: 1px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="letter-spacing:1px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml b/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml deleted file mode 100644 index 1637198b873ea4a014ff29c158e45022f634bb4f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="line-height: normal;" -Expect: not bozo and entries[0]['description'] == '<span style="line-height: normal;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="line-height: normal;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml deleted file mode 100644 index 572664ff56993cdcdfe960a65e63fcb602978b13..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin: 0;" -Expect: not bozo and entries[0]['description'] == '<span style="margin: 0;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin: 0;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml deleted file mode 100644 index 0ff41b46a28f04e187fa1309789cca27a609cc29..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin: 0 15px 0 0;" -Expect: not bozo and entries[0]['description'] == '<span style="margin: 0 15px 0 0;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin: 0 15px 0 0;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml deleted file mode 100644 index 2c9fb9cd7eea6a2cc1a3302f78c9e35bb8a598d8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin: 0px !important;" -Expect: not bozo and entries[0]['description'] == '<span style="margin: 0px !important;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin: 0px !important;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml deleted file mode 100644 index e64fcffff83d3809c2cab51f590577a544268377..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin: 5px;" -Expect: not bozo and entries[0]['description'] == '<span style="margin: 5px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin: 5px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml deleted file mode 100644 index 09e9b2b78d898a593e88cf1619fc8807fe41ccf0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin: 99999em;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin: 99999em;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml deleted file mode 100644 index 2b7f4a71f0bdb9a500bce31da94475a9f07ba08f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin-bottom: 0pt;" -Expect: not bozo and entries[0]['description'] == '<span style="margin-bottom: 0pt;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin-bottom: 0pt;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml deleted file mode 100644 index ab6801a84716d57ddf7a6c0b7ba0c543016c5567..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin-bottom: 10px;" -Expect: not bozo and entries[0]['description'] == '<span style="margin-bottom: 10px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin-bottom: 10px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml deleted file mode 100644 index be252c76decd5d96dfda2a432bbf0f5fdc90df18..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin-left: 5px;" -Expect: not bozo and entries[0]['description'] == '<span style="margin-left: 5px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin-left: 5px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml deleted file mode 100644 index 14fc788c754f304a06d248a1bad2002e1c11677b..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin-right: 0px;" -Expect: not bozo and entries[0]['description'] == '<span style="margin-right: 0px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin-right: 0px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml deleted file mode 100644 index 906cbb5566a13e520a1800070a6e5554bed57cd5..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin-top: 0in;" -Expect: not bozo and entries[0]['description'] == '<span style="margin-top: 0in;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin-top: 0in;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml deleted file mode 100644 index 78fb3c85a8a665aba709e730445a1cadffccdcc6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="margin-top: 10px;" -Expect: not bozo and entries[0]['description'] == '<span style="margin-top: 10px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="margin-top: 10px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml b/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml deleted file mode 100644 index f4ab506827d6c2d34c10aa591bde986c46b78f5d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="-moz-background-clip: initial;" -Expect: not bozo and entries[0]['description'] == '<tr>Some text</tr>' ---> -<rss version="2.0"> -<channel> -<item> -<description><tr style="background: yellow none repeat scroll 0%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;">Some text</tr></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml deleted file mode 100644 index 3fea651e4168c064d60312eb755f10c3b8df78d7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-ansi-language: NL;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-ansi-language: NL;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml deleted file mode 100644 index d075aa0d8d44906ca8df4d9241b7488bb255daba..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-bidi-font-weight: normal;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-bidi-font-weight: normal;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml deleted file mode 100644 index b44c6dc40c2d70c7c715713f4eeef498270c40ec..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-highlight: yellow;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-highlight: yellow;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml deleted file mode 100644 index 275bfcae954216b82296829b9880f29d1121a7e8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-layout-grid-align: none;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-layout-grid-align: none;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml deleted file mode 100644 index d743dd10838a6f8329c5fbcdcc9957a086193bee..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-list: l0 level1 lfo1;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-list: l0 level1 lfo1;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml deleted file mode 100644 index 8a9f5b1c2c6c0c635202939bc68a24e808b864d9..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-no-proof: yes;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-no-proof: yes;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml deleted file mode 100644 index a7ed12c67e919dde7cad4c0c43cb07995e549207..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-spacerun: yes;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-spacerun: yes;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml deleted file mode 100644 index 665118d129eb41e8f8d02c6e2c656c9abf5406c1..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="mso-tab-count: 3;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="mso-tab-count: 3;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml b/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml deleted file mode 100644 index bc347ec5dc376fa5ed119a2a6ac348a54dbdc503..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="overflow: auto;" -Expect: not bozo and entries[0]['description'] == '<span style="overflow: auto;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="overflow: auto;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml deleted file mode 100644 index 7f3ee3fcf1511612a9910c2f0faaecfad1350f13..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="padding: 0;" -Expect: not bozo and entries[0]['description'] == '<span style="padding: 0;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="padding: 0;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml deleted file mode 100644 index 4a4310cd797f5a7c56ea2ef619ad820fdbd7a381..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="padding: 0 0 12px 12px;" -Expect: not bozo and entries[0]['description'] == '<span style="padding: 0 0 12px 12px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="padding: 0 0 12px 12px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml deleted file mode 100644 index 6dc1b5b3d6b9b9c5c589e963ea197efc82b5d599..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="padding: 2ex;" -Expect: not bozo and entries[0]['description'] == '<span style="padding: 2ex;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="padding: 2ex;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml deleted file mode 100644 index eca4144ca549f23160b06193dc8f5d815c6d6b69..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="padding: 99999em;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="padding: 99999em;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml deleted file mode 100644 index 7cbe16efc18cb48fb3056ca03a6a1c7be859d783..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="padding-left: 4px;" -Expect: not bozo and entries[0]['description'] == '<span style="padding-left: 4px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="padding-left: 4px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml deleted file mode 100644 index 1077f170fcbe07d51ca3e7fb2efb65910437478f..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="padding-right: 0in;" -Expect: not bozo and entries[0]['description'] == '<span style="padding-right: 0in;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="padding-right: 0in;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml b/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml deleted file mode 100644 index 4b436e00d616566c49f56e9f17b018d59eefbd44..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="position: absolute;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="position: absolute;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml b/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml deleted file mode 100644 index 6bd2c9abb0dbaee570f4381211ec834db1594ed7..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="tab-stops: list .5in;" -Expect: not bozo and entries[0]['description'] == '<span>Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="tab-stops: list .5in;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml deleted file mode 100644 index f3055eae571fda19a2ca1c4bc7e4f559295a165d..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="text-align: center;" -Expect: not bozo and entries[0]['description'] == '<span style="text-align: center;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="text-align: center;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml deleted file mode 100644 index cc9b3e5255e041794d83fa859c723c8f2c14ffc8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="text-align: left;" -Expect: not bozo and entries[0]['description'] == '<span style="text-align: left;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="text-align: left;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml deleted file mode 100644 index aaa3c7579bb50f556e8258dc5863401ad714f6f2..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="text-align: right;" -Expect: not bozo and entries[0]['description'] == '<span style="text-align: right;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="text-align: right;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml deleted file mode 100644 index b2461ecdf45228c3a170e046c37b3505a717f7d6..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="text-decoration: underline;" -Expect: not bozo and entries[0]['description'] == '<span style="text-decoration: underline;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="text-decoration: underline;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml deleted file mode 100644 index 87d1cacd25d51f3de289cd758a7f0ad7d4bbaf2c..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="TEXT-INDENT: 0.5in;" -Expect: not bozo and entries[0]['description'] == '<span style="TEXT-INDENT: 0.5in;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="TEXT-INDENT: 0.5in;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml b/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml deleted file mode 100644 index 9c3da9f05ad3cd658591203bd8537a5f360866bf..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="vertical-align: bottom;" -Expect: not bozo and entries[0]['description'] == '<span style="vertical-align: bottom;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="vertical-align: bottom;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml b/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml deleted file mode 100644 index 55b45cc1a738e24d770d4eb73dd678f6d396281a..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="vertical-align: top;" -Expect: not bozo and entries[0]['description'] == '<span style="vertical-align: top;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="vertical-align: top;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml b/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml deleted file mode 100644 index 61e0c04dd99c3f6621d06c5b1f904c89ecbf1015..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="white-space: nowrap;" -Expect: not bozo and entries[0]['description'] == '<span style="white-space: nowrap;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="white-space: nowrap;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml b/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml deleted file mode 100644 index c48d32a8ee0c9f9e1a2ede864ebaf6848c5e7ea0..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="white-space: top;" -Expect: not bozo and entries[0]['description'] == '<span style="white-space: top;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="white-space: top;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml b/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml deleted file mode 100644 index f7ae6d70690d73441c38bb732e8c63520e048bc8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml +++ /dev/null @@ -1,11 +0,0 @@ -<!-- -Description: style="width: 300px;" -Expect: not bozo and entries[0]['description'] == '<span style="width: 300px;">Some text</span>' ---> -<rss version="2.0"> -<channel> -<item> -<description><span style="width: 300px;">Some text</span></description> -</item> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml b/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml deleted file mode 100644 index 089dceae5345475d035d8bfdb17e6926d095af75..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: xml declaration unexpected character -Expect: not bozo and feed['title'] == u'<!DOCTYPE ~' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html"><!DOCTYPE ~</title> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml b/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml deleted file mode 100644 index db79e86c5df6592ec975aa0cabe2fffff50f0450..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: malicious comment -Expect: not bozo and feed['title'] == u'safe' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html">sa<!-- -- nonwhitespace >fe<script>alert(1);</script></title> -</feed> diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml b/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml deleted file mode 100644 index 75a642796ddacbbb9b31486a9389b30c556874e8..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -Description: unclosed comment -Expect: not bozo and feed['title'] == u'safe' ---> -<feed xmlns="http://www.w3.org/2005/Atom"> - <title type="html">safe<!--</title> -</feed> diff --git a/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml b/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml deleted file mode 100644 index 51a13b737c31ce4ef198fff1948f0d1d0cecf201..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: ensure an uppercase X in a hex charref doesn't crash feedparser -Expect: not bozo and entries[0]['summary'] == u'a' ---> -<rss version="2.0"> - <channel> - <item><description>&#X61;</description></item> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml b/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml deleted file mode 100644 index da68ece27517b61cdf168ca32649ffa8e67c40fb..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml +++ /dev/null @@ -1,9 +0,0 @@ -<!-- -Description: empty xmlns uri -Expect: not bozo and feed['title'] == u'empty' ---> -<rss xmlns=""> - <channel> - <title>empty</title> - </channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/xml/escaped_apos.xml b/lib/feedparser/tests/wellformed/xml/escaped_apos.xml deleted file mode 100644 index 6340ca9bdca72349502c32fc6f4e5721550de216..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/xml/escaped_apos.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -XXX - THIS TEST SHOULD BE UPDATED WHEN SGML AND XML OUTPUT IS IDENTICAL -Description: ensure apos is translated correctly -Expect: not bozo and feed['title'] == u'it's correct' or feed['title'] == u"it's correct" ---> -<rss> -<channel> - <title type="html">it&apos;s correct</title> -</channel> -</rss> diff --git a/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml b/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml deleted file mode 100644 index a0c376cd323b0b1f581546040429e76b2d4a94a4..0000000000000000000000000000000000000000 --- a/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml +++ /dev/null @@ -1,10 +0,0 @@ -<!-- -Description: xmlns without prefix with xlink uri causes crash -Expect: not bozo and feed['title'] == u'xlink' ---> -<rss> - <bogus xmlns="http://www.w3.org/1999/xlink"/> - <channel> - <title>xlink</title> - </channel> -</rss> diff --git a/lib/feedparser/urls.py b/lib/feedparser/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..85b8fd1c49d067bfea8eded73cb16bdb2c53154c --- /dev/null +++ b/lib/feedparser/urls.py @@ -0,0 +1,131 @@ +from __future__ import absolute_import, unicode_literals + +import re + +try: + import urllib.parse as urlparse +except ImportError: + import urlparse as urlparse + +from .html import _BaseHTMLProcessor + +# If you want feedparser to allow all URL schemes, set this to () +# List culled from Python's urlparse documentation at: +# http://docs.python.org/library/urlparse.html +# as well as from "URI scheme" at Wikipedia: +# https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme +# Many more will likely need to be added! +ACCEPTABLE_URI_SCHEMES = ( + 'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'magnet', + 'mailto', 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu', + 'sftp', 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet', + 'wais', + # Additional common-but-unofficial schemes + 'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs', + 'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg', +) +#ACCEPTABLE_URI_SCHEMES = () + +_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)') +def _urljoin(base, uri): + uri = _urifixer.sub(r'\1\3', uri) + try: + uri = urlparse.urljoin(base, uri) + except ValueError: + uri = '' + return uri + +def _convert_to_idn(url): + """Convert a URL to IDN notation""" + # this function should only be called with a unicode string + # strategy: if the host cannot be encoded in ascii, then + # it'll be necessary to encode it in idn form + parts = list(urlparse.urlsplit(url)) + try: + parts[1].encode('ascii') + except UnicodeEncodeError: + # the url needs to be converted to idn notation + host = parts[1].rsplit(':', 1) + newhost = [] + port = '' + if len(host) == 2: + port = host.pop() + for h in host[0].split('.'): + newhost.append(h.encode('idna').decode('utf-8')) + parts[1] = '.'.join(newhost) + if port: + parts[1] += ':' + port + return urlparse.urlunsplit(parts) + else: + return url + +def _makeSafeAbsoluteURI(base, rel=None): + # bail if ACCEPTABLE_URI_SCHEMES is empty + if not ACCEPTABLE_URI_SCHEMES: + return _urljoin(base, rel or '') + if not base: + return rel or '' + if not rel: + try: + scheme = urlparse.urlparse(base)[0] + except ValueError: + return '' + if not scheme or scheme in ACCEPTABLE_URI_SCHEMES: + return base + return '' + uri = _urljoin(base, rel) + if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES: + return '' + return uri + +class _RelativeURIResolver(_BaseHTMLProcessor): + relative_uris = set([('a', 'href'), + ('applet', 'codebase'), + ('area', 'href'), + ('audio', 'src'), + ('blockquote', 'cite'), + ('body', 'background'), + ('del', 'cite'), + ('form', 'action'), + ('frame', 'longdesc'), + ('frame', 'src'), + ('iframe', 'longdesc'), + ('iframe', 'src'), + ('head', 'profile'), + ('img', 'longdesc'), + ('img', 'src'), + ('img', 'usemap'), + ('input', 'src'), + ('input', 'usemap'), + ('ins', 'cite'), + ('link', 'href'), + ('object', 'classid'), + ('object', 'codebase'), + ('object', 'data'), + ('object', 'usemap'), + ('q', 'cite'), + ('script', 'src'), + ('source', 'src'), + ('video', 'poster'), + ('video', 'src')]) + + def __init__(self, baseuri, encoding, _type): + _BaseHTMLProcessor.__init__(self, encoding, _type) + self.baseuri = baseuri + + def resolveURI(self, uri): + return _makeSafeAbsoluteURI(self.baseuri, uri.strip()) + + def unknown_starttag(self, tag, attrs): + attrs = self.normalize_attrs(attrs) + attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + +def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type): + # if not _SGML_AVAILABLE: + # return htmlSource + + p = _RelativeURIResolver(baseURI, encoding, _type) + p.feed(htmlSource) + return p.output() + diff --git a/lib/feedparser/util.py b/lib/feedparser/util.py new file mode 100644 index 0000000000000000000000000000000000000000..f7c02c01eb27c397ef30a63e7049bc692f3fd833 --- /dev/null +++ b/lib/feedparser/util.py @@ -0,0 +1,144 @@ +# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org> +# Copyright 2002-2008 Mark Pilgrim +# All rights reserved. +# +# This file is a part of feedparser. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import, unicode_literals + +import warnings + +class FeedParserDict(dict): + keymap = {'channel': 'feed', + 'items': 'entries', + 'guid': 'id', + 'date': 'updated', + 'date_parsed': 'updated_parsed', + 'description': ['summary', 'subtitle'], + 'description_detail': ['summary_detail', 'subtitle_detail'], + 'url': ['href'], + 'modified': 'updated', + 'modified_parsed': 'updated_parsed', + 'issued': 'published', + 'issued_parsed': 'published_parsed', + 'copyright': 'rights', + 'copyright_detail': 'rights_detail', + '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'] + except IndexError: + raise KeyError("object doesn't have key 'category'") + elif key == 'enclosures': + norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel']) + return [norel(link) for link in dict.__getitem__(self, 'links') if link['rel']=='enclosure'] + elif key == 'license': + for link in dict.__getitem__(self, 'links'): + if link['rel']=='license' and 'href' in link: + return link['href'] + elif key == 'updated': + # Temporarily help developers out by keeping the old + # broken behavior that was reported in issue 310. + # This fix was proposed in issue 328. + if not dict.__contains__(self, 'updated') and \ + dict.__contains__(self, 'published'): + warnings.warn("To avoid breaking existing software while " + "fixing issue 310, a temporary mapping has been created " + "from `updated` to `published` if `updated` doesn't " + "exist. This fallback will be removed in a future version " + "of feedparser.", DeprecationWarning) + return dict.__getitem__(self, 'published') + return dict.__getitem__(self, 'updated') + elif key == 'updated_parsed': + if not dict.__contains__(self, 'updated_parsed') and \ + dict.__contains__(self, 'published_parsed'): + warnings.warn("To avoid breaking existing software while " + "fixing issue 310, a temporary mapping has been created " + "from `updated_parsed` to `published_parsed` if " + "`updated_parsed` doesn't exist. This fallback will be " + "removed in a future version of feedparser.", + DeprecationWarning) + return dict.__getitem__(self, 'published_parsed') + return dict.__getitem__(self, 'updated_parsed') + else: + realkey = self.keymap.get(key, key) + if isinstance(realkey, list): + for k in realkey: + if dict.__contains__(self, k): + return dict.__getitem__(self, k) + elif dict.__contains__(self, realkey): + return dict.__getitem__(self, realkey) + return dict.__getitem__(self, key) + + def __contains__(self, key): + if key in ('updated', 'updated_parsed'): + # Temporarily help developers out by keeping the old + # broken behavior that was reported in issue 310. + # This fix was proposed in issue 328. + return dict.__contains__(self, key) + try: + self.__getitem__(key) + except KeyError: + return False + else: + return True + + has_key = __contains__ + + def get(self, key, default=None): + ''' + :return: A :class:`FeedParserDict`. + ''' + try: + return self.__getitem__(key) + except KeyError: + return default + + def __setitem__(self, key, value): + key = self.keymap.get(key, key) + if isinstance(key, list): + key = key[0] + return dict.__setitem__(self, key, value) + + def setdefault(self, key, value): + if key not in self: + self[key] = value + return value + return self[key] + + def __getattr__(self, key): + # __getattribute__() is called first; this will be called + # only if an attribute was not already found + try: + return self.__getitem__(key) + except KeyError: + raise AttributeError("object has no attribute '%s'" % key) + + def __hash__(self): + return id(self) diff --git a/lib/futures/__init__.py b/lib/futures/__init__.py deleted file mode 100644 index 8f8b23481f5185cef0f4296817cb78b86e0d3544..0000000000000000000000000000000000000000 --- a/lib/futures/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2009 Brian Quinlan. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Execute computations asynchronously using threads or processes.""" - -import warnings - -from concurrent.futures import (FIRST_COMPLETED, - FIRST_EXCEPTION, - ALL_COMPLETED, - CancelledError, - TimeoutError, - Future, - Executor, - wait, - as_completed, - ProcessPoolExecutor, - ThreadPoolExecutor) - -__author__ = 'Brian Quinlan (brian@sweetapp.com)' - -warnings.warn('The futures package has been deprecated. ' - 'Use the concurrent.futures package instead.', - DeprecationWarning) diff --git a/lib/futures/process.py b/lib/futures/process.py deleted file mode 100644 index e9d37b16ce5b00c97e8179174108d641557a6ac5..0000000000000000000000000000000000000000 --- a/lib/futures/process.py +++ /dev/null @@ -1 +0,0 @@ -from concurrent.futures import ProcessPoolExecutor diff --git a/lib/futures/thread.py b/lib/futures/thread.py deleted file mode 100644 index f6bd05de66220c53f594987eec35cf47e69dfd2a..0000000000000000000000000000000000000000 --- a/lib/futures/thread.py +++ /dev/null @@ -1 +0,0 @@ -from concurrent.futures import ThreadPoolExecutor diff --git a/lib/rtorrent/lib/bencode.py b/lib/rtorrent/lib/bencode.py index 97bd2f0ebd6ffe7824e33e94d2c62a71b3de5c38..705d9cd652cca703c17b84742978fc64e581d582 100644 --- a/lib/rtorrent/lib/bencode.py +++ b/lib/rtorrent/lib/bencode.py @@ -42,8 +42,10 @@ _py3 = sys.version_info[0] == 3 if _py3: _VALID_STRING_TYPES = (str,) + _VALID_INT_TYPES = (int,) else: _VALID_STRING_TYPES = (str, unicode) # @UndefinedVariable + _VALID_INT_TYPES = (int, long) # @UndefinedVariable _TYPE_INT = 1 _TYPE_STRING = 2 @@ -267,7 +269,7 @@ def _encode_dict(data): def encode(data): if isinstance(data, bool): return False - elif isinstance(data, int): + elif isinstance(data, _VALID_INT_TYPES): return _encode_int(data) elif isinstance(data, bytes): return _encode_string(data) diff --git a/lib/subliminal/api.py b/lib/subliminal/api.py index 906b897c9596a9ac872a29f7afd4b13a41d5b713..ee51940a91bdc79bfec04dcfe8b6d8989be6443d 100644 --- a/lib/subliminal/api.py +++ b/lib/subliminal/api.py @@ -363,7 +363,7 @@ def download_best_subtitles(videos, languages, min_score=0, hearing_impaired=Fal checked_videos = [] for video in videos: if not check_video(video, languages=languages, undefined=only_one): - logger.info('Skipping video %r') + logger.info('Skipping video %r', video) continue checked_videos.append(video) diff --git a/lib/subliminal/cli.py b/lib/subliminal/cli.py index c419ef46a6d288fe444f0e8b02a65f545b9a8d3a..2c4f4c14f84b7b6713b4ecd8fbc70feaaa5067c0 100644 --- a/lib/subliminal/cli.py +++ b/lib/subliminal/cli.py @@ -307,7 +307,8 @@ def download(obj, provider, language, age, directory, encoding, single, force, h # directories if os.path.isdir(p): try: - scanned_videos = scan_videos(p, subtitles=not force, embedded_subtitles=not force) + scanned_videos = scan_videos(p, subtitles=not force, embedded_subtitles=not force, + subtitles_dir=directory) except: logger.exception('Unexpected error while collecting directory path %s', p) errored_paths.append(p) @@ -321,7 +322,7 @@ def download(obj, provider, language, age, directory, encoding, single, force, h # other inputs try: - video = scan_video(p, subtitles=not force, embedded_subtitles=not force) + video = scan_video(p, subtitles=not force, embedded_subtitles=not force, subtitles_dir=directory) except: logger.exception('Unexpected error while collecting path %s', p) errored_paths.append(p) diff --git a/lib/subliminal/exceptions.py b/lib/subliminal/exceptions.py index de2fabc0e1f10e37f80ec299b32cf0fc63849dfd..5f5c7a7730d60982f8bf271572e2d27598efddcf 100644 --- a/lib/subliminal/exceptions.py +++ b/lib/subliminal/exceptions.py @@ -19,6 +19,11 @@ class AuthenticationError(ProviderError): pass +class TooManyRequests(ProviderError): + """Exception raised by providers when too many requests are made.""" + pass + + class DownloadLimitExceeded(ProviderError): """Exception raised by providers when download limit is exceeded.""" pass diff --git a/lib/subliminal/providers/addic7ed.py b/lib/subliminal/providers/addic7ed.py index 3edfe357a00db97c81f4658e31fa39339264cad3..c8b9ed2bc351e29980380fb4aeda167ab4bdb63c 100644 --- a/lib/subliminal/providers/addic7ed.py +++ b/lib/subliminal/providers/addic7ed.py @@ -8,14 +8,15 @@ from requests import Session from . import ParserBeautifulSoup, Provider, get_version from .. import __version__ from ..cache import SHOW_EXPIRATION_TIME, region -from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded -from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties +from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded, TooManyRequests +from ..subtitle import (Subtitle, fix_line_ending, guess_matches, guess_properties, sanitize_string, + sanitized_string_equal) from ..video import Episode logger = logging.getLogger(__name__) language_converters.register('addic7ed = subliminal.converters.addic7ed:Addic7edConverter') -series_year_re = re.compile('^(?P<series>[ \w]+)(?: \((?P<year>\d{4})\))?$') +series_year_re = re.compile('^(?P<series>[ \w\'.:]+)(?: \((?P<year>\d{4})\))?$') class Addic7edSubtitle(Subtitle): @@ -40,7 +41,7 @@ class Addic7edSubtitle(Subtitle): matches = super(Addic7edSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired) # series - if video.series and self.series.lower() == video.series.lower(): + if video.series and sanitized_string_equal(self.series, video.series): matches.add('series') # season if video.season and self.season == video.season: @@ -49,7 +50,7 @@ class Addic7edSubtitle(Subtitle): if video.episode and self.episode == video.episode: matches.add('episode') # title - if video.title and self.title.lower() == video.title.lower(): + if video.title and sanitized_string_equal(self.title, video.title): matches.add('title') # year if video.year == self.year: @@ -130,7 +131,7 @@ class Addic7edProvider(Provider): # populate the show ids show_ids = {} for show in soup.select('td.version > h3 > a[href^="/show/"]'): - show_ids[show.text.lower().replace('\'', '')] = int(show['href'][6:]) + show_ids[sanitize_string(show.text).lower()] = int(show['href'][6:]) logger.debug('Found %d show ids', len(show_ids)) return show_ids @@ -147,8 +148,8 @@ class Addic7edProvider(Provider): """ # build the params - series_year = '%s (%d)' % (series, year) if year is not None else series - params = {'search': series_year, 'Submit': 'Search'} + series_year = '%s %d' % (series, year) if year is not None else series + params = {'search': sanitize_string(series_year, replacement=' '), 'Submit': 'Search'} # make the search logger.info('Searching show ids with %r', params) @@ -161,7 +162,7 @@ class Addic7edProvider(Provider): if not suggestion: logger.warning('Show id not found: no suggestion') return None - if not suggestion[0].i.text.lower() == series_year.lower(): + if not sanitized_string_equal(suggestion[0].i.text, series_year): logger.warning('Show id not found: suggestion does not match') return None show_id = int(suggestion[0]['href'][6:]) @@ -183,24 +184,24 @@ class Addic7edProvider(Provider): :rtype: int or None """ - series_clean = series.lower().replace('\'', '') + series_sanitized = sanitize_string(series).lower() show_ids = self._get_show_ids() show_id = None # attempt with country if not show_id and country_code: logger.debug('Getting show id with country') - show_id = show_ids.get('%s (%s)' % (series_clean, country_code.lower())) + show_id = show_ids.get('%s %s' % (series_sanitized, country_code.lower())) # attempt with year if not show_id and year: logger.debug('Getting show id with year') - show_id = show_ids.get('%s (%d)' % (series_clean, year)) + show_id = show_ids.get('%s %d' % (series_sanitized, year)) # attempt clean if not show_id: logger.debug('Getting show id') - show_id = show_ids.get(series_clean) + show_id = show_ids.get(series_sanitized) # search as last resort if not show_id: @@ -220,6 +221,8 @@ class Addic7edProvider(Provider): logger.info('Getting the page of show id %d, season %d', show_id, season) r = self.session.get(self.server_url + 'show/%d' % show_id, params={'season': season}, timeout=10) r.raise_for_status() + if r.status_code == 304: + raise TooManyRequests() soup = ParserBeautifulSoup(r.content, ['lxml', 'html.parser']) # loop over subtitle rows diff --git a/lib/subliminal/providers/napiprojekt.py b/lib/subliminal/providers/napiprojekt.py index c89db7fb6c75e333b609d14b6251b5d06561ec39..ef64a7171ef803ad18414953c04ce64df6f06a30 100644 --- a/lib/subliminal/providers/napiprojekt.py +++ b/lib/subliminal/providers/napiprojekt.py @@ -4,7 +4,8 @@ import logging from babelfish import Language from requests import Session -from . import Provider +from . import Provider, get_version +from .. import __version__ from ..subtitle import Subtitle logger = logging.getLogger(__name__) @@ -61,7 +62,7 @@ class NapiProjektProvider(Provider): server_url = 'http://napiprojekt.pl/unit_napisy/dl.php' def initialize(self): - self.session = Session() + self.session.headers = {'User-Agent': 'Subliminal/%s' % get_version(__version__)} def terminate(self): self.session.close() diff --git a/lib/subliminal/providers/opensubtitles.py b/lib/subliminal/providers/opensubtitles.py index 9698c11de12aa9ccd276fcbb807f510a29069190..5a06a23b84cdc0f59a175f9e2789b1a1ee06aa28 100644 --- a/lib/subliminal/providers/opensubtitles.py +++ b/lib/subliminal/providers/opensubtitles.py @@ -12,7 +12,7 @@ from six.moves.xmlrpc_client import ServerProxy from . import Provider, TimeoutSafeTransport, get_version from .. import __version__ from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded, ProviderError -from ..subtitle import Subtitle, fix_line_ending, guess_matches +from ..subtitle import Subtitle, fix_line_ending, guess_matches, sanitized_string_equal from ..video import Episode, Movie logger = logging.getLogger(__name__) @@ -23,8 +23,8 @@ class OpenSubtitlesSubtitle(Subtitle): series_re = re.compile('^"(?P<series_name>.*)" (?P<series_title>.*)$') def __init__(self, language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind, hash, movie_name, - movie_release_name, movie_year, movie_imdb_id, series_season, series_episode): - super(OpenSubtitlesSubtitle, self).__init__(language, hearing_impaired, page_link) + movie_release_name, movie_year, movie_imdb_id, series_season, series_episode, encoding): + super(OpenSubtitlesSubtitle, self).__init__(language, hearing_impaired, page_link, encoding) self.subtitle_id = subtitle_id self.matched_by = matched_by self.movie_kind = movie_kind @@ -54,7 +54,7 @@ class OpenSubtitlesSubtitle(Subtitle): # episode if isinstance(video, Episode) and self.movie_kind == 'episode': # series - if video.series and self.series_name.lower() == video.series.lower(): + if video.series and sanitized_string_equal(self.series_name, video.series): matches.add('series') # season if video.season and self.series_season == video.season: @@ -63,14 +63,14 @@ class OpenSubtitlesSubtitle(Subtitle): if video.episode and self.series_episode == video.episode: matches.add('episode') # title - if video.title and self.series_title.lower() == video.title.lower(): + if video.title and sanitized_string_equal(self.series_title, video.title): matches.add('title') # guess matches |= guess_matches(video, guess_episode_info(self.movie_release_name + '.mkv')) # movie elif isinstance(video, Movie) and self.movie_kind == 'movie': # title - if video.title and self.movie_name.lower() == video.title.lower(): + if video.title and sanitized_string_equal(self.movie_name, video.title): matches.add('title') # year if video.year and self.movie_year == video.year: @@ -129,9 +129,9 @@ class OpenSubtitlesProvider(Provider): if imdb_id: criteria.append({'imdbid': imdb_id}) if query and season and episode: - criteria.append({'query': query, 'season': season, 'episode': episode}) + criteria.append({'query': query.replace('\'', ''), 'season': season, 'episode': episode}) elif query: - criteria.append({'query': query}) + criteria.append({'query': query.replace('\'', '')}) if not criteria: raise ValueError('Not enough information') @@ -165,10 +165,11 @@ class OpenSubtitlesProvider(Provider): movie_imdb_id = int(subtitle_item['IDMovieImdb']) series_season = int(subtitle_item['SeriesSeason']) if subtitle_item['SeriesSeason'] else None series_episode = int(subtitle_item['SeriesEpisode']) if subtitle_item['SeriesEpisode'] else None + encoding = subtitle_item.get('SubEncoding') or None subtitle = OpenSubtitlesSubtitle(language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind, hash, movie_name, movie_release_name, movie_year, movie_imdb_id, - series_season, series_episode) + series_season, series_episode, encoding) logger.debug('Found subtitle %r', subtitle) subtitles.append(subtitle) diff --git a/lib/subliminal/providers/podnapisi.py b/lib/subliminal/providers/podnapisi.py index 2790c6fa0ea60fb7043bbc1dd80626098aecec88..3a1455714550a729cdeb5f73c04712e390851c4b 100644 --- a/lib/subliminal/providers/podnapisi.py +++ b/lib/subliminal/providers/podnapisi.py @@ -18,7 +18,7 @@ from zipfile import ZipFile from . import Provider, get_version from .. import __version__ from ..exceptions import ProviderError -from ..subtitle import Subtitle, fix_line_ending, guess_matches +from ..subtitle import Subtitle, fix_line_ending, guess_matches, sanitized_string_equal from ..video import Episode, Movie logger = logging.getLogger(__name__) @@ -47,7 +47,7 @@ class PodnapisiSubtitle(Subtitle): # episode if isinstance(video, Episode): # series - if video.series and self.title.lower() == video.series.lower(): + if video.series and sanitized_string_equal(self.title, video.series): matches.add('series') # season if video.season and self.season == video.season: @@ -61,7 +61,7 @@ class PodnapisiSubtitle(Subtitle): # movie elif isinstance(video, Movie): # title - if video.title and self.title.lower() == video.title.lower(): + if video.title and sanitized_string_equal(self.title, video.title): matches.add('title') # guess for release in self.releases: @@ -162,7 +162,7 @@ class PodnapisiProvider(Provider): def download_subtitle(self, subtitle): # download as a zip - logger.info('Downloading subtitle %r') + logger.info('Downloading subtitle %r', subtitle) r = self.session.get(self.server_url + subtitle.pid + '/download', params={'container': 'zip'}, timeout=10) r.raise_for_status() diff --git a/lib/subliminal/providers/thesubdb.py b/lib/subliminal/providers/thesubdb.py index 67d71a504e9dc36ecef15566021f2b9727110822..f7f1f2451bc5400e4b4b0335c8584ddee1eee4ac 100644 --- a/lib/subliminal/providers/thesubdb.py +++ b/lib/subliminal/providers/thesubdb.py @@ -21,7 +21,7 @@ class TheSubDBSubtitle(Subtitle): @property def id(self): - return self.hash + return self.hash + '-' + str(self.language) def get_matches(self, video, hearing_impaired=False): matches = super(TheSubDBSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired) @@ -73,7 +73,7 @@ class TheSubDBProvider(Provider): return [s for s in self.query(video.hashes['thesubdb']) if s.language in languages] def download_subtitle(self, subtitle): - logger.info('Downloading subtitle %r') + logger.info('Downloading subtitle %r', subtitle) params = {'action': 'download', 'hash': subtitle.hash, 'language': subtitle.language.alpha2} r = self.session.get(self.server_url, params=params, timeout=10) r.raise_for_status() diff --git a/lib/subliminal/providers/tvsubtitles.py b/lib/subliminal/providers/tvsubtitles.py index 06fd878a933dc83650aa4e04e423cbac6b03a582..6df1ad22705e9812a7406153b9b90a7eae7b61aa 100644 --- a/lib/subliminal/providers/tvsubtitles.py +++ b/lib/subliminal/providers/tvsubtitles.py @@ -11,7 +11,7 @@ from . import ParserBeautifulSoup, Provider, get_version from .. import __version__ from ..cache import EPISODE_EXPIRATION_TIME, SHOW_EXPIRATION_TIME, region from ..exceptions import ProviderError -from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties +from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties, sanitized_string_equal from ..video import Episode logger = logging.getLogger(__name__) @@ -42,7 +42,7 @@ class TVsubtitlesSubtitle(Subtitle): matches = super(TVsubtitlesSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired) # series - if video.series and self.series.lower() == video.series.lower(): + if video.series and sanitized_string_equal(self.series, video.series): matches.add('series') # season if video.season and self.season == video.season: diff --git a/lib/subliminal/subtitle.py b/lib/subliminal/subtitle.py index eeb840a8023fe713a9d29a27d1b5dcb87edc6bf1..5694af7419ae98461df3e46c237430d1b472b8cb 100644 --- a/lib/subliminal/subtitle.py +++ b/lib/subliminal/subtitle.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- import logging import os +import re import chardet from guessit.matchtree import MatchTree from guessit.plugins.transformers import get_transformer +from codecs import lookup import pysrt from .video import Episode, Movie @@ -25,7 +27,7 @@ class Subtitle(object): #: Name of the provider that returns that class of subtitle provider_name = '' - def __init__(self, language, hearing_impaired=False, page_link=None): + def __init__(self, language, hearing_impaired=False, page_link=None, encoding=None): #: Language of the subtitle self.language = language @@ -39,7 +41,15 @@ class Subtitle(object): self.content = None #: Encoding to decode with when accessing :attr:`text` - self.encoding = None + if encoding: + try: + # set encoding to canonical codec name + self.encoding = lookup(encoding).name + except (TypeError, LookupError): + logger.debug('Unsupported encoding "%s", setting to None', encoding) + self.encoding = None + else: + self.encoding = None @property def id(self): @@ -56,7 +66,11 @@ class Subtitle(object): if not self.content: return - return self.content.decode(self.encoding or self.guess_encoding(), errors='replace') + try: + return self.content.decode(self.encoding, errors='replace') + except (TypeError, LookupError): + # Failback to guess_encoding if empty or unknown encoding provided + return self.content.decode(self.guess_encoding(), errors='replace') def is_valid(self): """Check if a :attr:`text` is a valid SubRip format. @@ -219,6 +233,32 @@ def get_subtitle_path(video_path, language=None, extension='.srt'): return subtitle_root + extension +def sanitize_string(string, replacement=''): + """Replace any special characters from a string. + + :param str string: the string to sanitize. + :param str replacement: the replacement for special characters. + :return: the sanitized string. + :rtype: str + + """ + return re.sub('[^ a-zA-Z0-9]', replacement, string) + + +def sanitized_string_equal(string1, string2): + """Test two strings for equality case insensitively and ignoring special characters. + + :param str string1: the first string to compare. + :param str string2: the second string to compare. + :return: `True` if the two strings are equal, `False` otherwise. + :rtype: bool + + """ + valid_pattern = '[^a-zA-Z0-9]' + + return sanitize_string(string1).lower() == sanitize_string(string2).lower() + + def guess_matches(video, guess, partial=False): """Get matches between a `video` and a `guess`. @@ -236,7 +276,7 @@ def guess_matches(video, guess, partial=False): matches = set() if isinstance(video, Episode): # series - if video.series and 'series' in guess and guess['series'].lower() == video.series.lower(): + if video.series and 'series' in guess and sanitized_string_equal(guess['series'], video.series): matches.add('series') # season if video.season and 'season' in guess and guess['season'] == video.season: @@ -255,7 +295,7 @@ def guess_matches(video, guess, partial=False): if video.year and 'year' in guess and guess['year'] == video.year: matches.add('year') # title - if video.title and 'title' in guess and guess['title'].lower() == video.title.lower(): + if video.title and 'title' in guess and sanitized_string_equal(guess['title'], video.title): matches.add('title') # release_group if video.release_group and 'releaseGroup' in guess and guess['releaseGroup'].lower() == video.release_group.lower(): diff --git a/lib/subliminal/video.py b/lib/subliminal/video.py index cc916ed1b086a12d4c13d65c4d05478a752f274c..11fbfcd90d7816d6c5861a0507033ccf8ec5cf12 100644 --- a/lib/subliminal/video.py +++ b/lib/subliminal/video.py @@ -235,10 +235,13 @@ class Movie(Video): return '<%s [%r, %d]>' % (self.__class__.__name__, self.title, self.year) -def search_external_subtitles(path): +def search_external_subtitles(path, directory=None): """Search for external subtitles from a video `path` and their associated language. + Unless `directory` is provided, search will be made in the same directory as the video file. + :param str path: path to the video. + :param str directory: directory to search for subtitles. :return: found subtitles with their languages. :rtype: dict @@ -247,7 +250,7 @@ def search_external_subtitles(path): dirpath = dirpath or '.' fileroot, fileext = os.path.splitext(filename) subtitles = {} - for p in os.listdir(dirpath): + for p in os.listdir(directory or dirpath): # keep only valid subtitle filenames if not p.startswith(fileroot) or not p.endswith(SUBTITLE_EXTENSIONS): continue @@ -272,12 +275,13 @@ def search_external_subtitles(path): return subtitles -def scan_video(path, subtitles=True, embedded_subtitles=True): +def scan_video(path, subtitles=True, embedded_subtitles=True, subtitles_dir=None): """Scan a video and its subtitle languages from a video `path`. :param str path: existing path to the video. :param bool subtitles: scan for subtitles with the same name. :param bool embedded_subtitles: scan for embedded subtitles. + :param str subtitles_dir: directory to search for subtitles. :return: the scanned video. :rtype: :class:`Video` @@ -309,7 +313,7 @@ def scan_video(path, subtitles=True, embedded_subtitles=True): # external subtitles if subtitles: - video.subtitle_languages |= set(search_external_subtitles(path).values()) + video.subtitle_languages |= set(search_external_subtitles(path, directory=subtitles_dir).values()) # video metadata with enzyme try: @@ -388,12 +392,13 @@ def scan_video(path, subtitles=True, embedded_subtitles=True): return video -def scan_videos(path, subtitles=True, embedded_subtitles=True): +def scan_videos(path, subtitles=True, embedded_subtitles=True, subtitles_dir=None): """Scan `path` for videos and their subtitles. :param str path: existing directory path to scan. :param bool subtitles: scan for subtitles with the same name. :param bool embedded_subtitles: scan for embedded subtitles. + :param str subtitles_dir: directory to search for subtitles. :return: the scanned videos. :rtype: list of :class:`Video` @@ -438,7 +443,8 @@ def scan_videos(path, subtitles=True, embedded_subtitles=True): # scan video try: - video = scan_video(filepath, subtitles=subtitles, embedded_subtitles=embedded_subtitles) + video = scan_video(filepath, subtitles=subtitles, embedded_subtitles=embedded_subtitles, + subtitles_dir=subtitles_dir) except ValueError: # pragma: no cover logger.exception('Error scanning video') continue diff --git a/readme.md b/readme.md index 2d3c33816d8e5db8e161a052174d16263a7b5617..561276003a677399a679095883eba68be91334d8 100644 --- a/readme.md +++ b/readme.md @@ -41,7 +41,7 @@ Automatic Video Library Manager for TV Shows. It watches for new episodes of you ##### [Wiki](https://github.com/SickRage/SickRage/wiki) #### Important -Before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present<br/> +Before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present<br> We HIGHLY recommend starting out with no database files at all to make this a fresh start but the choice is at your own risk #### Supported providers diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 6635806f2f3e503ec74e4efa8f4150de7676719f..54d8d0b8c638a068783126b245b6a80244f009a2 100644 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -39,7 +39,7 @@ from sickbeard.providers.generic import GenericProvider from sickbeard.config import CheckSection, check_setting_int, check_setting_str, check_setting_float, ConfigMigrator, \ naming_ep_type from sickbeard import searchBacklog, showUpdater, versionChecker, properFinder, autoPostProcesser, \ - subtitles, traktChecker + subtitles, traktChecker, numdict from sickbeard import db from sickbeard import helpers from sickbeard import scheduler @@ -48,7 +48,7 @@ from sickbeard import show_queue from sickbeard import logger from sickbeard import naming from sickbeard import dailysearcher -from sickbeard.indexers.indexer_api import indexerApi +from sickbeard.indexers import indexer_api from sickbeard.indexers.indexer_exceptions import indexer_shownotfound, indexer_showincomplete, indexer_exception, indexer_error, \ indexer_episodenotfound, indexer_attributenotfound, indexer_seasonnotfound, indexer_userabort, indexerExcepts from sickbeard.common import SD @@ -63,6 +63,8 @@ from configobj import ConfigObj import requests requests.packages.urllib3.disable_warnings() +indexerApi = indexer_api.indexerApi + PID = None CFG = None @@ -550,7 +552,7 @@ CALENDAR_ICONS = False NO_RESTART = False TMDB_API_KEY = 'edc5f123313769de83a71e157758030b' -#TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868' +# TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868' TRAKT_API_KEY = '5c65f55e11d48c35385d9e8670615763a605fad28374c8ae553a7b7a50651ddd' TRAKT_API_SECRET = 'b53e32045ac122a445ef163e6d859403301ffe9b17fb8321d428531b69022a82' @@ -668,8 +670,8 @@ def initialize(consoleLogging=True): ACTUAL_LOG_DIR = check_setting_str(CFG, 'General', 'log_dir', 'Logs') LOG_DIR = os.path.normpath(os.path.join(DATA_DIR, ACTUAL_LOG_DIR)) - LOG_NR = check_setting_int(CFG, 'General', 'log_nr', 5) #Default to 5 backup file (sickrage.log.x) - LOG_SIZE = check_setting_int(CFG, 'General', 'log_size', 1048576) #Default to max 1MB per logfile + LOG_NR = check_setting_int(CFG, 'General', 'log_nr', 5) # Default to 5 backup file (sickrage.log.x) + LOG_SIZE = check_setting_int(CFG, 'General', 'log_size', 1048576) # Default to max 1MB per logfile fileLogging = True if not helpers.makeDir(LOG_DIR): sys.stderr.write("!!! No log folder, logging to screen only!\n") @@ -680,10 +682,13 @@ def initialize(consoleLogging=True): # github api try: - gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO) + if not (GIT_USERNAME and GIT_PASSWORD): + gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO) + else: + gh = Github(login_or_token=GIT_USERNAME, password=GIT_PASSWORD, user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO) except Exception as e: gh = None - logger.log('Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING) + logger.log(u'Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING) # git reset on update GIT_RESET = bool(check_setting_int(CFG, 'General', 'git_reset', 1)) @@ -857,7 +862,7 @@ def initialize(consoleLogging=True): NZB_METHOD = 'blackhole' TORRENT_METHOD = check_setting_str(CFG, 'General', 'torrent_method', 'blackhole') - if TORRENT_METHOD not in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent'): + if TORRENT_METHOD not in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'): TORRENT_METHOD = 'blackhole' DOWNLOAD_PROPERS = bool(check_setting_int(CFG, 'General', 'download_propers', 1)) @@ -1248,11 +1253,6 @@ def initialize(consoleLogging=True): if hasattr(curTorrentProvider, 'pin'): curTorrentProvider.pin = check_setting_str(CFG, curTorrentProvider.getID().upper(), curTorrentProvider.getID() + '_pin', '', censor_log=True) - if hasattr(curTorrentProvider, 'proxy'): - curTorrentProvider.proxy.enabled = bool(check_setting_int(CFG, curTorrentProvider.getID().upper(), curTorrentProvider.getID() + '_proxy', 0)) - if hasattr(curTorrentProvider.proxy, 'url'): - curTorrentProvider.proxy.url = check_setting_str(CFG, curTorrentProvider.getID().upper(), - curTorrentProvider.getID() + '_proxy_url', '') if hasattr(curTorrentProvider, 'confirmed'): curTorrentProvider.confirmed = bool(check_setting_int(CFG, curTorrentProvider.getID().upper(), curTorrentProvider.getID() + '_confirmed', 1)) @@ -1837,12 +1837,6 @@ def save_config(): if hasattr(curTorrentProvider, 'options'): new_config[curTorrentProvider.getID().upper()][ curTorrentProvider.getID() + '_options'] = curTorrentProvider.options - if hasattr(curTorrentProvider, 'proxy'): - new_config[curTorrentProvider.getID().upper()][curTorrentProvider.getID() + '_proxy'] = int( - curTorrentProvider.proxy.enabled) - if hasattr(curTorrentProvider.proxy, 'url'): - new_config[curTorrentProvider.getID().upper()][ - curTorrentProvider.getID() + '_proxy_url'] = curTorrentProvider.proxy.url if hasattr(curTorrentProvider, 'freeleech'): new_config[curTorrentProvider.getID().upper()][curTorrentProvider.getID() + '_freeleech'] = int( curTorrentProvider.freeleech) diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py index 0754d97bdbd889053c6ff0191e340b717a1ed245..796f82aab7409f29be0845ac618d56753bf388fb 100644 --- a/sickbeard/blackandwhitelist.py +++ b/sickbeard/blackandwhitelist.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Dennis Lutter <lad1337@gmail.com> # URL: https://sickrage.tv/ # Git: https://github.com/SickRage/SickRage.git @@ -21,6 +22,7 @@ import sickbeard from sickbeard import db, logger, helpers from adba.aniDBerrors import AniDBCommandTimeoutError + class BlackAndWhiteList(object): blacklist = [] whitelist = [] @@ -38,7 +40,7 @@ class BlackAndWhiteList(object): logger.log(u'Building black and white list for ' + str(self.show_id), logger.DEBUG) self.blacklist = self._load_list('blacklist') self.whitelist = self._load_list('whitelist') - + def _add_keywords(self, table, values): """ DB: Adds keywords into database for current show @@ -48,7 +50,7 @@ class BlackAndWhiteList(object): """ myDB = db.DBConnection() for value in values: - myDB.action('INSERT INTO [' + table + '] (show_id, keyword) VALUES (?,?)', [self.show_id, value]) + myDB.action('INSERT INTO [' + table + '] (show_id, keyword) VALUES (?,?)', [self.show_id, value]) def set_black_keywords(self, values): """ @@ -59,7 +61,7 @@ class BlackAndWhiteList(object): self._del_all_keywords('blacklist') self._add_keywords('blacklist', values) self.blacklist = values - logger.log('Blacklist set to: %s' % self.blacklist, logger.DEBUG) + logger.log(u'Blacklist set to: %s' % self.blacklist, logger.DEBUG) def set_white_keywords(self, values): """ @@ -70,7 +72,7 @@ class BlackAndWhiteList(object): self._del_all_keywords('whitelist') self._add_keywords('whitelist', values) self.whitelist = values - logger.log('Whitelist set to: %s' % self.whitelist, logger.DEBUG) + logger.log(u'Whitelist set to: %s' % self.whitelist, logger.DEBUG) def _del_all_keywords(self, table): """ @@ -79,8 +81,8 @@ class BlackAndWhiteList(object): :param table: SQL table remove keywords from """ myDB = db.DBConnection() - myDB.action('DELETE FROM [' + table + '] WHERE show_id = ?', [self.show_id]) - + myDB.action('DELETE FROM [' + table + '] WHERE show_id = ?', [self.show_id]) + def _load_list(self, table): """ DB: Fetch keywords for current show @@ -96,8 +98,9 @@ class BlackAndWhiteList(object): groups = [] for result in sqlResults: groups.append(result["keyword"]) - - logger.log('BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG) + + logger.log(u'BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG) + return groups def is_valid(self, result): @@ -107,10 +110,12 @@ class BlackAndWhiteList(object): :param result: Result to analyse :return: False if result is not allowed in white/blacklist, True if it is """ - if not result.release_group: - logger.log('Failed to detect release group, invalid result', logger.DEBUG) - return False + if self.whitelist or self.blacklist: + if not result.release_group: + logger.log('Failed to detect release group, invalid result', logger.DEBUG) + return False + if result.release_group.lower() in [x.lower() for x in self.whitelist]: white_result = True elif not self.whitelist: @@ -122,18 +127,20 @@ class BlackAndWhiteList(object): else: black_result = True - logger.log('Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG) + logger.log(u'Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG) if white_result and black_result: - return True + return True else: - return False + return False else: - logger.log('No Whitelist and Blacklist defined, check passed.', logger.DEBUG) - return True - + logger.log(u'No Whitelist and Blacklist defined, check passed.', logger.DEBUG) + return True + + class BlackWhitelistNoShowIDException(Exception): - 'No show_id was given' + """No show_id was given""" + def short_group_names(groups): """ @@ -150,14 +157,14 @@ def short_group_names(groups): group = sickbeard.ADBA_CONNECTION.group(gname=groupName) except AniDBCommandTimeoutError: logger.log(u"Timeout while loading group from AniDB. Trying next group", logger.DEBUG) - except: + except Exception: logger.log(u"Failed while loading group from AniDB. Trying next group", logger.DEBUG) else: for line in group.datalines: if line["shortname"]: shortGroupList.append(line["shortname"]) else: - if not groupName in shortGroupList: + if groupName not in shortGroupList: shortGroupList.append(groupName) else: shortGroupList = groups diff --git a/sickbeard/browser.py b/sickbeard/browser.py index c5d9ab1700c8fcb2d93427c8b7fa9453caf32c38..7f10ff350afadc1c009ae7da29b0b072dc367360 100644 --- a/sickbeard/browser.py +++ b/sickbeard/browser.py @@ -31,7 +31,7 @@ def getWinDrives(): from ctypes import windll drives = [] - bitmask = windll.kernel32.GetLogicalDrives() #@UndefinedVariable + bitmask = windll.kernel32.GetLogicalDrives() # @UndefinedVariable for letter in string.uppercase: if bitmask & 1: drives.append(letter) @@ -83,13 +83,14 @@ def foldersAtPath(path, includeParent=False, includeFiles=False): fileList = [{'name': filename, 'path': ek(os.path.join, parentPath, filename)} for filename in ek(os.listdir, parentPath)] if not includeFiles: - fileList = filter(lambda entry: ek(os.path.isdir, entry['path']), fileList) + fileList = [x for x in fileList if ek(os.path.isdir, x['path'])] # prune out directories to protect the user from doing stupid things (already lower case the dir to reduce calls) hideList = ["boot", "bootmgr", "cache", "msocache", "recovery", "$recycle.bin", "recycler", "system volume information", "temporary internet files"] # windows specific hideList += [".fseventd", ".spotlight", ".trashes", ".vol", "cachedmessages", "caches", "trash"] # osx specific - fileList = filter(lambda entry: entry['name'].lower() not in hideList, fileList) + + fileList = [x for x in fileList if x['name'].lower() not in hideList] fileList = sorted(fileList, lambda x, y: cmp(os.path.basename(x['name']).lower(), os.path.basename(y['path']).lower())) diff --git a/sickbeard/classes.py b/sickbeard/classes.py index 7c79dbeae0f5bf5fd54332aa863b99a10ebe8a58..a64f8db3f663f346228fbadc9d76b90258f1404b 100644 --- a/sickbeard/classes.py +++ b/sickbeard/classes.py @@ -25,7 +25,7 @@ import urllib import datetime from dateutil import parser -from common import USER_AGENT, Quality +from sickbeard.common import USER_AGENT, Quality from sickrage.helper.common import dateFormat, dateTimeFormat @@ -73,13 +73,13 @@ class AuthURLOpener(SickBeardURLopener): return SickBeardURLopener.open(self, url) -class SearchResult: +class SearchResult(object): """ Represents a search result from an indexer. """ def __init__(self, episodes): - self.provider = -1 + self.provider = None # release show object self.show = None @@ -114,6 +114,8 @@ class SearchResult: # content self.content = None + self.resultType = '' + def __str__(self): if self.provider is None: @@ -124,7 +126,10 @@ class SearchResult: for extra in self.extraInfo: myString += " " + extra + "\n" - myString += "Episode: " + str(self.episodes) + "\n" + myString += "Episodes:\n" + for ep in self.episodes: + myString += " " + str(ep) + "\n" + myString += "Quality: " + Quality.qualityStrings[self.quality] + "\n" myString += "Name: " + self.name + "\n" myString += "Size: " + str(self.size) + "\n" @@ -140,24 +145,30 @@ class NZBSearchResult(SearchResult): """ Regular NZB result with an URL to the NZB """ - resultType = "nzb" + def __init__(self, episodes): + super(NZBSearchResult, self).__init__(episodes) + self.resultType = "nzb" class NZBDataSearchResult(SearchResult): """ NZB result where the actual NZB XML data is stored in the extraInfo """ - resultType = "nzbdata" + def __init__(self, episodes): + super(NZBDataSearchResult, self).__init__(episodes) + self.resultType = "nzbdata" class TorrentSearchResult(SearchResult): """ Torrent result with an URL to the torrent """ - resultType = "torrent" + def __init__(self, episodes): + super(TorrentSearchResult, self).__init__(episodes) + self.resultType = "torrent" -class AllShowsListUI: +class AllShowsListUI(object): """ This class is for indexer api. Instead of prompting with a UI to pick the desired result out of a list of shows it tries to be smart about it @@ -200,7 +211,7 @@ class AllShowsListUI: return searchResults -class ShowListUI: +class ShowListUI(object): """ This class is for tvdb-api. Instead of prompting with a UI to pick the desired result out of a list of shows it tries to be smart about it @@ -214,17 +225,18 @@ class ShowListUI: def selectSeries(self, allSeries): try: # try to pick a show that's in my show list + showIDList = [int(x.indexerid) for x in sickbeard.showList] for curShow in allSeries: - if filter(lambda x: int(x.indexerid) == int(curShow['id']), sickbeard.showList): + if int(curShow['id']) in showIDList: return curShow - except: + except Exception: pass # if nothing matches then return first result return allSeries[0] -class Proper: +class Proper(object): def __init__(self, name, url, date, show): self.name = name self.url = url @@ -247,7 +259,7 @@ class Proper: self.indexerid) + " from " + str(sickbeard.indexerApi(self.indexer).name) -class ErrorViewer: +class ErrorViewer(object): """ Keeps a static list of UIErrors to be displayed on the UI and allows the list to be cleared. @@ -271,7 +283,7 @@ class ErrorViewer: return ErrorViewer.errors -class WarningViewer: +class WarningViewer(object): """ Keeps a static list of (warning) UIErrors to be displayed on the UI and allows the list to be cleared. @@ -295,7 +307,7 @@ class WarningViewer: return WarningViewer.errors -class UIError: +class UIError(object): """ Represents an error to be displayed in the web UI. """ diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py index 7fe1f62f333d7a8e9f7a7136772bddc63d2c44d6..ddc11114af7adfac01cef01991ef12ae81616aa5 100644 --- a/sickbeard/clients/__init__.py +++ b/sickbeard/clients/__init__.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -16,19 +17,20 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -__all__ = ['utorrent', - 'transmission', - 'deluge', - 'deluged', - 'download_station', - 'rtorrent', - 'qbittorrent' +__all__ = [ + 'utorrent', + 'transmission', + 'deluge', + 'deluged', + 'download_station', + 'rtorrent', + 'qbittorrent', + 'mlnet' ] - - # Mapping error status codes to official W3C names http_error_code = { + # todo: Handle error codes with duplicates (e.g. 451, 499) 300: 'Multiple Choices', 301: 'Moved Permanently', 302: 'Found', @@ -91,19 +93,26 @@ http_error_code = { 509: 'Bandwidth Limit Exceeded', 510: 'Not Extended', 511: 'Network Authentication Required', - 522: 'Cloudfare Connection timed out', - 524: 'Request to host timedout waiting for reply back', + 520: 'Cloudfare - Web server is returning an unknown error', + 521: 'Cloudfare - Web server is down', + 522: 'Cloudfare - Connection timed out', + 523: 'Cloudfare - Origin is unreachable', + 524: 'Cloudfare - A timeout occurred', + 525: 'Cloudfare - SSL handshake failed', + 526: 'Cloudfare - Invalid SSL certificate', 598: 'Network read timeout error', 599: 'Network connect timeout error ' } -default_host = {'utorrent': 'http://localhost:8000', - 'transmission': 'http://localhost:9091', - 'deluge': 'http://localhost:8112', - 'deluged': 'scgi://localhost:58846', - 'download_station': 'http://localhost:5000', - 'rtorrent': 'scgi://localhost:5000', - 'qbittorrent': 'http://localhost:8080' +default_host = { + 'utorrent': 'http://localhost:8000', + 'transmission': 'http://localhost:9091', + 'deluge': 'http://localhost:8112', + 'deluged': 'scgi://localhost:58846', + 'download_station': 'http://localhost:5000', + 'rtorrent': 'scgi://localhost:5000', + 'qbittorrent': 'http://localhost:8080', + 'mlnet': 'http://localhost:4080' } diff --git a/sickbeard/clients/deluge_client.py b/sickbeard/clients/deluge_client.py index 3303ce896fd5cfe5ef4b08da2806e60a98bc0e3d..6e6a92a141c3990fa9b5ea42f32d4d246db10434 100644 --- a/sickbeard/clients/deluge_client.py +++ b/sickbeard/clients/deluge_client.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Mr_Orange <mr_orange@hotmail.it> # URL: http://code.google.com/p/sickbeard/ # @@ -21,7 +22,7 @@ from base64 import b64encode import sickbeard from sickbeard import logger -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient class DelugeAPI(GenericClient): @@ -35,22 +36,22 @@ class DelugeAPI(GenericClient): post_data = json.dumps({"method": "auth.login", "params": [self.password], - "id": 1 - }) + "id": 1}) + try: self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT) - except: + except Exception: return None self.auth = self.response.json()["result"] post_data = json.dumps({"method": "web.connected", "params": [], - "id": 10 - }) + "id": 10}) + try: self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT) - except: + except Exception: return None connected = self.response.json()['result'] @@ -58,12 +59,12 @@ class DelugeAPI(GenericClient): if not connected: post_data = json.dumps({"method": "web.get_hosts", "params": [], - "id": 11 - }) + "id": 11}) try: self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT) - except: + except Exception: return None + hosts = self.response.json()['result'] if len(hosts) == 0: logger.log(self.name + u': WebUI does not contain daemons', logger.ERROR) @@ -71,20 +72,20 @@ class DelugeAPI(GenericClient): post_data = json.dumps({"method": "web.connect", "params": [hosts[0][0]], - "id": 11 - }) + "id": 11}) + try: self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT) - except: + except Exception: return None post_data = json.dumps({"method": "web.connected", "params": [], - "id": 10 - }) + "id": 10}) + try: self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT) - except: + except Exception: return None connected = self.response.json()['result'] @@ -98,8 +99,8 @@ class DelugeAPI(GenericClient): post_data = json.dumps({"method": "core.add_torrent_magnet", "params": [result.url, {}], - "id": 2 - }) + "id": 2}) + self._request(method='post', data=post_data) result.hash = self.response.json()['result'] @@ -110,8 +111,8 @@ class DelugeAPI(GenericClient): post_data = json.dumps({"method": "core.add_torrent_file", "params": [result.name + '.torrent', b64encode(result.content), {}], - "id": 2 - }) + "id": 2}) + self._request(method='post', data=post_data) result.hash = self.response.json()['result'] @@ -131,27 +132,27 @@ class DelugeAPI(GenericClient): # check if label already exists and create it if not post_data = json.dumps({"method": 'label.get_labels', "params": [], - "id": 3 - }) + "id": 3}) + self._request(method='post', data=post_data) labels = self.response.json()['result'] - if labels != None: + if labels is not None: if label not in labels: logger.log(self.name + ': ' + label + u" label does not exist in Deluge we must add it", logger.DEBUG) post_data = json.dumps({"method": 'label.add', "params": [label], - "id": 4 - }) + "id": 4}) + self._request(method='post', data=post_data) logger.log(self.name + ': ' + label + u" label added to Deluge", logger.DEBUG) - # add label to torrent + # add label to torrent post_data = json.dumps({"method": 'label.set_torrent', "params": [result.hash, label], - "id": 5 - }) + "id": 5}) + self._request(method='post', data=post_data) logger.log(self.name + ': ' + label + u" label added to torrent", logger.DEBUG) else: @@ -160,7 +161,6 @@ class DelugeAPI(GenericClient): return not self.response.json()['error'] - def _set_torrent_ratio(self, result): ratio = None @@ -170,14 +170,14 @@ class DelugeAPI(GenericClient): if ratio: post_data = json.dumps({"method": "core.set_torrent_stop_at_ratio", "params": [result.hash, True], - "id": 5 - }) + "id": 5}) + self._request(method='post', data=post_data) post_data = json.dumps({"method": "core.set_torrent_stop_ratio", "params": [result.hash, float(ratio)], - "id": 6 - }) + "id": 6}) + self._request(method='post', data=post_data) return not self.response.json()['error'] @@ -189,14 +189,14 @@ class DelugeAPI(GenericClient): if sickbeard.TORRENT_PATH: post_data = json.dumps({"method": "core.set_torrent_move_completed", "params": [result.hash, True], - "id": 7 - }) + "id": 7}) + self._request(method='post', data=post_data) post_data = json.dumps({"method": "core.set_torrent_move_completed_path", "params": [result.hash, sickbeard.TORRENT_PATH], - "id": 8 - }) + "id": 8}) + self._request(method='post', data=post_data) return not self.response.json()['error'] @@ -208,8 +208,8 @@ class DelugeAPI(GenericClient): if sickbeard.TORRENT_PAUSED: post_data = json.dumps({"method": "core.pause_torrent", "params": [[result.hash]], - "id": 9 - }) + "id": 9}) + self._request(method='post', data=post_data) return not self.response.json()['error'] diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py index 39b9a07dd2110f3bf043526baf499887155d4917..1c956e86734f1bd7a4e758b7b4ddcb9bfc52bc0c 100644 --- a/sickbeard/clients/deluged_client.py +++ b/sickbeard/clients/deluged_client.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Paul Wollaston # Contributions: Luke Mullan # @@ -8,9 +9,10 @@ from base64 import b64encode import sickbeard from sickbeard import logger -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient from synchronousdeluge import DelugeClient + class DelugeDAPI(GenericClient): drpc = None @@ -24,18 +26,18 @@ class DelugeDAPI(GenericClient): return True - def connect(self, reconnect = False): + def connect(self, reconnect=False): hostname = self.host.replace("/", "").split(':') if not self.drpc or reconnect: - self.drpc = DelugeRPC(hostname[1], port = hostname[2], username = self.username, password = self.password) + self.drpc = DelugeRPC(hostname[1], port=hostname[2], username=self.username, password=self.password) return self.drpc def _add_torrent_uri(self, result): - label = sickbeard.TORRENT_LABEL - if result.show.is_anime: - label = sickbeard.TORRENT_LABEL_ANIME + # label = sickbeard.TORRENT_LABEL + # if result.show.is_anime: + # label = sickbeard.TORRENT_LABEL_ANIME options = { 'add_paused': sickbeard.TORRENT_PAUSED @@ -51,13 +53,12 @@ class DelugeDAPI(GenericClient): return remote_torrent def _add_torrent_file(self, result): - label = sickbeard.TORRENT_LABEL - if result.show.is_anime: - label = sickbeard.TORRENT_LABEL_ANIME - - if not result.content: result.content = {} + # label = sickbeard.TORRENT_LABEL + # if result.show.is_anime: + # label = sickbeard.TORRENT_LABEL_ANIME if not result.content: + result.content = {} return None options = { @@ -86,7 +87,6 @@ class DelugeDAPI(GenericClient): return self.drpc.set_torrent_label(result.hash, label) return True - def _set_torrent_ratio(self, result): if result.ratio: ratio = float(result.ratio) @@ -117,6 +117,7 @@ class DelugeDAPI(GenericClient): else: return False, 'Error: Unable to Authenticate! Please check your config!' + class DelugeRPC(object): host = 'localhost' @@ -125,7 +126,7 @@ class DelugeRPC(object): password = None client = None - def __init__(self, host = 'localhost', port = 58846, username = None, password = None): + def __init__(self, host='localhost', port=58846, username=None, password=None): super(DelugeRPC, self).__init__() self.host = host @@ -140,7 +141,7 @@ class DelugeRPC(object): def test(self): try: self.connect() - except: + except Exception: return False return True @@ -151,7 +152,7 @@ class DelugeRPC(object): torrent_id = self.client.core.add_torrent_magnet(torrent, options).get() if not torrent_id: torrent_id = self._check_torrent(torrent_hash) - except Exception as err: + except Exception: return False finally: if self.client: @@ -166,7 +167,7 @@ class DelugeRPC(object): torrent_id = self.client.core.add_torrent_file(filename, b64encode(torrent), options).get() if not torrent_id: torrent_id = self._check_torrent(torrent_hash) - except Exception as err: + except Exception: return False finally: if self.client: @@ -178,7 +179,7 @@ class DelugeRPC(object): try: self.connect() self.client.label.set_torrent(torrent_id, label).get() - except Exception as err: + except Exception: return False finally: if self.client: @@ -190,7 +191,7 @@ class DelugeRPC(object): self.connect() self.client.core.set_torrent_move_completed_path(torrent_id, path).get() self.client.core.set_torrent_move_completed(torrent_id, 1).get() - except Exception as err: + except Exception: return False finally: if self.client: @@ -225,7 +226,7 @@ class DelugeRPC(object): try: self.connect() self.client.core.pause_torrent(torrent_ids).get() - except Exception as err: + except Exception: return False finally: if self.client: @@ -238,7 +239,7 @@ class DelugeRPC(object): def _check_torrent(self, torrent_hash): torrent_id = self.client.core.get_torrent_status(torrent_hash, {}).get() if torrent_id['hash']: - logger.log('DelugeD: Torrent already exists in Deluge', logger.DEBUG) + logger.log(u'DelugeD: Torrent already exists in Deluge', logger.DEBUG) return torrent_hash return False diff --git a/sickbeard/clients/download_station_client.py b/sickbeard/clients/download_station_client.py index bbbd4e86f508443372ca1fed5b9cdabb18a42f77..621e517d87c5432f7543a6033677fda2257025e1 100644 --- a/sickbeard/clients/download_station_client.py +++ b/sickbeard/clients/download_station_client.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Authors: # Pedro Jose Pereira Vieito <pvieito@gmail.com> (Twitter: @pvieito) # @@ -21,7 +22,8 @@ # Uses the Synology Download Station API: http://download.synology.com/download/Document/DeveloperGuide/Synology_Download_Station_Web_API.pdf import sickbeard -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient + class DownloadStationAPI(GenericClient): @@ -38,19 +40,22 @@ class DownloadStationAPI(GenericClient): try: self.response = self.session.get(auth_url, verify=False) self.auth = self.response.json()['data']['sid'] - except: + except Exception: return None return self.auth def _add_torrent_uri(self, result): - data = {'api':'SYNO.DownloadStation.Task', - 'version':'1', 'method':'create', - 'session':'DownloadStation', - '_sid':self.auth, - 'uri':result.url - } + data = { + 'api': 'SYNO.DownloadStation.Task', + 'version': '1', + 'method': 'create', + 'session': 'DownloadStation', + '_sid': self.auth, + 'uri': result.url + } + if sickbeard.TORRENT_PATH: data['destination'] = sickbeard.TORRENT_PATH self._request(method='post', data=data) @@ -59,15 +64,17 @@ class DownloadStationAPI(GenericClient): def _add_torrent_file(self, result): - data = {'api':'SYNO.DownloadStation.Task', - 'version':'1', - 'method':'create', - 'session':'DownloadStation', - '_sid':self.auth - } + data = { + 'api': 'SYNO.DownloadStation.Task', + 'version': '1', + 'method': 'create', + 'session': 'DownloadStation', + '_sid': self.auth + } + if sickbeard.TORRENT_PATH: data['destination'] = sickbeard.TORRENT_PATH - files = {'file':(result.name + '.torrent', result.content)} + files = {'file': (result.name + '.torrent', result.content)} self._request(method='post', data=data, files=files) return self.response.json()['success'] diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py index 18c0669006eb26399c1d17d75ce2b88b72b9bb19..945554403af1025bdf6606f78c9b2f0a8946c00d 100644 --- a/sickbeard/clients/generic.py +++ b/sickbeard/clients/generic.py @@ -1,3 +1,5 @@ +# coding=utf-8 + import re import time from hashlib import sha1 @@ -5,11 +7,12 @@ from base64 import b16encode, b32decode import sickbeard from sickbeard import logger -from . import http_error_code +from sickbeard.clients import http_error_code from bencode import bencode, bdecode import requests from bencode.BTL import BTFailure + class GenericClient(object): def __init__(self, name, host=None, username=None, password=None): @@ -26,22 +29,15 @@ class GenericClient(object): self.session = requests.Session() self.session.auth = (self.username, self.password) - def _request(self, method='get', params={}, data=None, files=None): + def _request(self, method='get', params=None, data=None, files=None): if time.time() > self.last_time + 1800 or not self.auth: self.last_time = time.time() self._get_auth() logger.log( - self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + ' with Params= ' + str( - params) + ' Data=' + str(data if data else 'None')[0:99] + ( - '...' if len(data if data else 'None') > 200 else ''), logger.DEBUG) - - logger.log( - self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + ' with Params= ' + str( - params) + ( - (' Data=' + str(data)[0:100] + ('...' if len(data) > 100 else '')) if data is not None else ""), - logger.DEBUG) + self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + + ' with Params: ' + str(params) + ' Data: ' + str(data)[0:99] + ('...' if len(str(data)) > 200 else ''), logger.DEBUG) if not self.auth: logger.log(self.name + u': Authentication Failed', logger.WARNING) @@ -143,24 +139,24 @@ class GenericClient(object): def _get_torrent_hash(self, result): if result.url.startswith('magnet'): - result.hash = re.findall('urn:btih:([\w]{32,40})', result.url)[0] + result.hash = re.findall(r'urn:btih:([\w]{32,40})', result.url)[0] if len(result.hash) == 32: result.hash = b16encode(b32decode(result.hash)).lower() else: if not result.content: - logger.log('Torrent without content', logger.ERROR) + logger.log(u'Torrent without content', logger.ERROR) raise Exception('Torrent without content') try: torrent_bdecode = bdecode(result.content) - except BTFailure as e: - logger.log('Unable to bdecode torrent', logger.ERROR) - logger.log('Torrent bencoded data: {0}'.format(str(result.content)), logger.DEBUG) + except BTFailure: + logger.log(u'Unable to bdecode torrent', logger.ERROR) + logger.log(u'Torrent bencoded data: %r' % result.content, logger.DEBUG) raise try: info = torrent_bdecode["info"] - except Exception as e: - logger.log('Unable to find info field in torrent', logger.ERROR) + except Exception: + logger.log(u'Unable to find info field in torrent', logger.ERROR) raise result.hash = sha1(bencode(info)).hexdigest() @@ -221,7 +217,7 @@ class GenericClient(object): try: self.response = self.session.get(self.url, timeout=120, verify=False) - except requests.exceptions.ConnectionError, e: + except requests.exceptions.ConnectionError: return False, 'Error: ' + self.name + ' Connection Error' except (requests.exceptions.MissingSchema, requests.exceptions.InvalidURL): return False, 'Error: Invalid ' + self.name + ' host' diff --git a/sickbeard/clients/mlnet_client.py b/sickbeard/clients/mlnet_client.py new file mode 100644 index 0000000000000000000000000000000000000000..abd4634a0bd71d1b51269c37cb5182c7665b51a2 --- /dev/null +++ b/sickbeard/clients/mlnet_client.py @@ -0,0 +1,54 @@ +# coding=utf-8 + +# Author: kounch +# URL: http://code.google.com/p/sickbeard/ +# +# This file is part of SickRage. +# +# SickRage is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# SickRage is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with SickRage. If not, see <http://www.gnu.org/licenses/>. + +from sickbeard.clients.generic import GenericClient + + +class mlnetAPI(GenericClient): + def __init__(self, host=None, username=None, password=None): + + super(mlnetAPI, self).__init__('mlnet', host, username, password) + + self.url = self.host + # self.session.auth = HTTPDigestAuth(self.username, self.password); + + def _get_auth(self): + + try: + self.response = self.session.get(self.host, verify=False) + self.auth = self.response.content + except Exception: + return None + + return self.auth if not self.response.status_code == 404 else None + + def _add_torrent_uri(self, result): + + self.url = self.host + 'submit' + params = {'q': 'dllink ' + result.url} + return self._request(method='get', params=params) + + def _add_torrent_file(self, result): + + self.url = self.host + 'submit' + params = {'q': 'dllink ' + result.url} + return self._request(method='get', params=params) + +api = mlnetAPI() diff --git a/sickbeard/clients/qbittorrent_client.py b/sickbeard/clients/qbittorrent_client.py index 7b39a3f09a6210882b3ede7a3b1bd441587d4b6b..962fd22ac7747597c34a9f33de2fd188e97457e6 100644 --- a/sickbeard/clients/qbittorrent_client.py +++ b/sickbeard/clients/qbittorrent_client.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Mr_Orange <mr_orange@hotmail.it> # URL: http://code.google.com/p/sickbeard/ # @@ -17,23 +19,24 @@ # along with SickRage. If not, see <http://www.gnu.org/licenses/>. import sickbeard -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient from requests.auth import HTTPDigestAuth + class qbittorrentAPI(GenericClient): def __init__(self, host=None, username=None, password=None): super(qbittorrentAPI, self).__init__('qbittorrent', host, username, password) self.url = self.host - self.session.auth = HTTPDigestAuth(self.username, self.password); + self.session.auth = HTTPDigestAuth(self.username, self.password) def _get_auth(self): try: self.response = self.session.get(self.host, verify=False) self.auth = self.response.content - except: + except Exception: return None return self.auth if not self.response.status_code == 404 else None @@ -60,7 +63,7 @@ class qbittorrentAPI(GenericClient): return self._request(method='post', data=data) def _set_torrent_pause(self, result): - + self.url = self.host+'command/resume' if sickbeard.TORRENT_PAUSED: self.url = self.host+'command/pause' diff --git a/sickbeard/clients/rtorrent_client.py b/sickbeard/clients/rtorrent_client.py index 867599cee2bb49b745b477ed193c5fdbc35a04f0..5e21e79b55fd0ed13fa5c5ef0e57056ab0d7200f 100644 --- a/sickbeard/clients/rtorrent_client.py +++ b/sickbeard/clients/rtorrent_client.py @@ -20,7 +20,7 @@ import traceback import sickbeard from sickbeard import logger -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient from rtorrent import RTorrent @@ -52,7 +52,6 @@ class rTorrentAPI(GenericClient): return self.auth def _add_torrent_uri(self, result): - filedata = None if not self.auth: return False @@ -82,12 +81,11 @@ class rTorrentAPI(GenericClient): return True - except Exception as e: + except Exception: logger.log(traceback.format_exc(), logger.DEBUG) return False def _add_torrent_file(self, result): - filedata = None if not self.auth: return False @@ -125,7 +123,7 @@ class rTorrentAPI(GenericClient): return True - except Exception as e: + except Exception: logger.log(traceback.format_exc(), logger.DEBUG) return False diff --git a/sickbeard/clients/transmission_client.py b/sickbeard/clients/transmission_client.py index 06fc75a546f50e1bda72b85acd522e00472558c1..c26a8391271e5bb51138e10eed47932fff194648 100644 --- a/sickbeard/clients/transmission_client.py +++ b/sickbeard/clients/transmission_client.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Mr_Orange <mr_orange@hotmail.it> # URL: http://code.google.com/p/sickbeard/ # @@ -21,7 +23,7 @@ import json from base64 import b64encode import sickbeard -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient class TransmissionAPI(GenericClient): @@ -30,7 +32,7 @@ class TransmissionAPI(GenericClient): super(TransmissionAPI, self).__init__('Transmission', host, username, password) if not self.host.endswith('/'): - self.host = self.host + '/' + self.host += '/' if self.rpcurl.startswith('/'): self.rpcurl = self.rpcurl[1:] @@ -47,16 +49,16 @@ class TransmissionAPI(GenericClient): try: self.response = self.session.post(self.url, data=post_data.encode('utf-8'), timeout=120, verify=sickbeard.TORRENT_VERIFY_CERT) - self.auth = re.search('X-Transmission-Session-Id:\s*(\w+)', self.response.text).group(1) - except: + self.auth = re.search(r'X-Transmission-Session-Id:\s*(\w+)', self.response.text).group(1) + except Exception: return None self.session.headers.update({'x-transmission-session-id': self.auth}) - #Validating Transmission authorization + # Validating Transmission authorization post_data = json.dumps({'arguments': {}, - 'method': 'session-get', - }) + 'method': 'session-get'}) + self._request(method='post', data=post_data) return self.auth @@ -65,11 +67,11 @@ class TransmissionAPI(GenericClient): arguments = {'filename': result.url, 'paused': 1 if sickbeard.TORRENT_PAUSED else 0, - 'download-dir': sickbeard.TORRENT_PATH - } + 'download-dir': sickbeard.TORRENT_PATH} + post_data = json.dumps({'arguments': arguments, - 'method': 'torrent-add', - }) + 'method': 'torrent-add'}) + self._request(method='post', data=post_data) return self.response.json()['result'] == "success" @@ -78,11 +80,11 @@ class TransmissionAPI(GenericClient): arguments = {'metainfo': b64encode(result.content), 'paused': 1 if sickbeard.TORRENT_PAUSED else 0, - 'download-dir': sickbeard.TORRENT_PATH - } + 'download-dir': sickbeard.TORRENT_PATH} + post_data = json.dumps({'arguments': arguments, - 'method': 'torrent-add', - }) + 'method': 'torrent-add'}) + self._request(method='post', data=post_data) return self.response.json()['result'] == "success" @@ -104,11 +106,11 @@ class TransmissionAPI(GenericClient): arguments = {'ids': [result.hash], 'seedRatioLimit': ratio, - 'seedRatioMode': mode - } + 'seedRatioMode': mode} + post_data = json.dumps({'arguments': arguments, - 'method': 'torrent-set', - }) + 'method': 'torrent-set'}) + self._request(method='post', data=post_data) return self.response.json()['result'] == "success" @@ -119,12 +121,11 @@ class TransmissionAPI(GenericClient): time = int(60 * float(sickbeard.TORRENT_SEED_TIME)) arguments = {'ids': [result.hash], 'seedIdleLimit': time, - 'seedIdleMode': 1 - } + 'seedIdleMode': 1} post_data = json.dumps({'arguments': arguments, - 'method': 'torrent-set', - }) + 'method': 'torrent-set'}) + self._request(method='post', data=post_data) return self.response.json()['result'] == "success" @@ -148,8 +149,8 @@ class TransmissionAPI(GenericClient): arguments['priority-normal'] = [] post_data = json.dumps({'arguments': arguments, - 'method': 'torrent-set', - }) + 'method': 'torrent-set'}) + self._request(method='post', data=post_data) return self.response.json()['result'] == "success" diff --git a/sickbeard/clients/utorrent_client.py b/sickbeard/clients/utorrent_client.py index c0462f8df1f9ba57996ed18d36a5c6fda8957a31..68a8a7ec63263f3ddf97c685128249481dee4298 100644 --- a/sickbeard/clients/utorrent_client.py +++ b/sickbeard/clients/utorrent_client.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Authors: Mr_Orange <mr_orange@hotmail.it>, EchelonFour # URL: http://code.google.com/p/sickbeard/ # @@ -19,7 +21,7 @@ import re import sickbeard -from .generic import GenericClient +from sickbeard.clients.generic import GenericClient class uTorrentAPI(GenericClient): @@ -29,23 +31,23 @@ class uTorrentAPI(GenericClient): self.url = self.host + 'gui/' - def _request(self, method='get', params={}, files=None): + def _request(self, method='get', params=None, data=None, files=None): - #Workaround for uTorrent 2.2.1 - #Need a odict but only supported in 2.7+ and sickrage is 2.6+ + # Workaround for uTorrent 2.2.1 + # Need a odict but only supported in 2.7+ and sickrage is 2.6+ ordered_params = {'token': self.auth} - for k,v in params.iteritems(): + for k, v in params.iteritems() or {}: ordered_params.update({k: v}) - return super(uTorrentAPI, self)._request(method=method, params=ordered_params, files=files) + return super(uTorrentAPI, self)._request(method=method, params=ordered_params, data=data, files=files) def _get_auth(self): try: self.response = self.session.get(self.url + 'token.html', verify=False) self.auth = re.findall("<div.*?>(.*?)</", self.response.text)[0] - except: + except Exception: return None return self.auth if not self.response.status_code == 404 else None @@ -70,8 +72,8 @@ class uTorrentAPI(GenericClient): params = {'action': 'setprops', 'hash': result.hash, 's': 'label', - 'v': label - } + 'v': label} + return self._request(params=params) def _set_torrent_ratio(self, result): @@ -84,14 +86,14 @@ class uTorrentAPI(GenericClient): params = {'action': 'setprops', 'hash': result.hash, 's': 'seed_override', - 'v': '1' - } + 'v': '1'} + if self._request(params=params): params = {'action': 'setprops', 'hash': result.hash, 's': 'seed_ratio', - 'v': float(ratio) * 10 - } + 'v': float(ratio) * 10} + return self._request(params=params) else: return False @@ -105,27 +107,27 @@ class uTorrentAPI(GenericClient): params = {'action': 'setprops', 'hash': result.hash, 's': 'seed_override', - 'v': '1' - } + 'v': '1'} + if self._request(params=params): params = {'action': 'setprops', 'hash': result.hash, 's': 'seed_time', - 'v': time - } + 'v': time} + return self._request(params=params) else: return False else: - return True - + return True + def _set_torrent_priority(self, result): if result.priority == 1: params = {'action': 'queuetop', 'hash': result.hash} return self._request(params=params) else: - return True + return True def _set_torrent_pause(self, result): @@ -137,4 +139,4 @@ class uTorrentAPI(GenericClient): return self._request(params=params) -api = uTorrentAPI() +api = uTorrentAPI() diff --git a/sickbeard/common.py b/sickbeard/common.py index a0a63361e96f5ae601dc11f0435a9c9f09bee5e9..a20d543eacc6211fb5c9702d16d5e857824e9a88 100644 --- a/sickbeard/common.py +++ b/sickbeard/common.py @@ -22,6 +22,13 @@ import operator import platform import re import uuid +from numdict import NumDict + +import sys +import os.path + +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from random import shuffle @@ -89,7 +96,7 @@ ARCHIVED = 6 # episodes that you don't have locally (counts toward download com IGNORED = 7 # episodes that you don't want included in your download stats SNATCHED_PROPER = 9 # qualified with quality SUBTITLED = 10 # qualified with quality -FAILED = 11 #episode downloaded or snatched we don't want +FAILED = 11 # episode downloaded or snatched we don't want SNATCHED_BEST = 12 # episode redownloaded using best quality NAMING_REPEAT = 1 @@ -107,8 +114,8 @@ multiEpStrings[NAMING_EXTEND] = "Extend" multiEpStrings[NAMING_LIMITED_EXTEND] = "Extend (Limited)" multiEpStrings[NAMING_LIMITED_EXTEND_E_PREFIXED] = "Extend (Limited, E-prefixed)" -# pylint: disable=W0232,C1001 -class Quality: +# pylint: disable=W0232 +class Quality(object): NONE = 0 # 0 SDTV = 1 # 1 SDDVD = 1 << 1 # 2 @@ -221,7 +228,7 @@ class Quality: :return: Quality prefix """ - #Try Scene names first + # Try Scene names first quality = Quality.sceneQuality(name, anime) if quality != Quality.UNKNOWN: return quality @@ -435,9 +442,9 @@ class Quality: # 2 corresponds to SDDVD quality if quality == 2: - if re.search(r"b[rd](|.|-| )(rip|mux)", name.lower()): + if re.search(r"b(r|d|rd)?(-| |\.)?(rip|mux)", name.lower()): rip_type = " BDRip" - elif re.search(r"dvd(|.|-| )(rip|mux)", name.lower()): + elif re.search(r"(dvd)(-| |\.)?(rip|mux)?", name.lower()): rip_type = " DVDRip" else: rip_type = "" @@ -512,46 +519,61 @@ qualityPresetStrings = {SD: "SD", ANY: "Any"} -# pylint: disable=R0903,C1001 -class StatusStrings: - def __init__(self): - self.statusStrings = {UNKNOWN: "Unknown", - UNAIRED: "Unaired", - SNATCHED: "Snatched", - DOWNLOADED: "Downloaded", - SKIPPED: "Skipped", - SNATCHED_PROPER: "Snatched (Proper)", - WANTED: "Wanted", - ARCHIVED: "Archived", - IGNORED: "Ignored", - SUBTITLED: "Subtitled", - FAILED: "Failed", - SNATCHED_BEST: "Snatched (Best)"} - - def __getitem__(self, key): - key = int(key) - if key in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED: - status, quality = Quality.splitCompositeStatus(key) - if quality == Quality.NONE: - return self.statusStrings[status] - else: - return self.statusStrings[status] + " (" + Quality.qualityStrings[quality] + ")" - else: - return self.statusStrings[key] if self.statusStrings.has_key(key) else '' - - def has_key(self, key): - key = int(key) - return key in self.statusStrings or key in Quality.DOWNLOADED + Quality.ARCHIVED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST +class StatusStrings(NumDict): + """ + Dictionary containing strings for status codes + """ + # todo: Deprecate StatusStrings().statusStrings and use StatusStrings() directly + # todo: Deprecate .has_key and switch to 'x in y' + # todo: Make views return Qualities too + # todo: - def __contains__(self, key): - return self.has_key(key) + qualities = Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED -statusStrings = StatusStrings() + @property + def statusStrings(self): # for backwards compatibility + return self.data + def __missing__(self, key): + """ + If the key is not found try to determine a status from Quality -# pylint: disable=R0903,C1001 -class Overview: + :param key: A numeric key or None + :raise KeyError: if the key is invalid and can't be determined from Quality + """ + key = self.numeric(key) # try to convert the key to a number which will raise KeyError if it can't + if key in self.qualities: # the key wasn't found locally so check in qualities + status, quality = Quality.splitCompositeStatus(key) + return self[status] if not quality else self[status] + " (" + Quality.qualityStrings[quality] + ")" + else: # the key wasn't found in qualities either + raise KeyError(key) # ... so the key is invalid + def __contains__(self, key): + try: + key = self.numeric(key) + return key in self.data or key in self.qualities + except KeyError: + return False + +# Assign strings to statuses +statusStrings = StatusStrings( + {UNKNOWN: "Unknown", + UNAIRED: "Unaired", + SNATCHED: "Snatched", + DOWNLOADED: "Downloaded", + SKIPPED: "Skipped", + SNATCHED_PROPER: "Snatched (Proper)", + WANTED: "Wanted", + ARCHIVED: "Archived", + IGNORED: "Ignored", + SUBTITLED: "Subtitled", + FAILED: "Failed", + SNATCHED_BEST: "Snatched (Best)" + } +) + +# pylint: disable=R0903 +class Overview(object): UNAIRED = UNAIRED # 1 QUAL = 2 WANTED = WANTED # 3 @@ -576,4 +598,4 @@ XML_NSMAP = {'xsi': 'http://www.w3.org/2001/XMLSchema-instance', countryList = {'Australia': 'AU', 'Canada': 'CA', 'USA': 'US' - } + } diff --git a/sickbeard/config.py b/sickbeard/config.py index 7ea8d44345e97968a4813b239da3afe974c615ef..9179213b8913190a174b70d311ef5adadf4942ba 100644 --- a/sickbeard/config.py +++ b/sickbeard/config.py @@ -265,7 +265,7 @@ def change_SUBTITLES_FINDER_FREQUENCY(subtitles_finder_frequency): :param subtitles_finder_frequency: New frequency """ if subtitles_finder_frequency == '' or subtitles_finder_frequency is None: - subtitles_finder_frequency = 1 + subtitles_finder_frequency = 1 sickbeard.SUBTITLES_FINDER_FREQUENCY = to_int(subtitles_finder_frequency, 1) @@ -388,12 +388,12 @@ def change_PROCESS_AUTOMATICALLY(process_automatically): def CheckSection(CFG, sec): """ Check if INI section exists, if not create it """ - try: - CFG[sec] + + if sec in CFG: return True - except: - CFG[sec] = {} - return False + + CFG[sec] = {} + return False def checkbox_to_value(option, value_on=1, value_off=0): @@ -402,7 +402,7 @@ def checkbox_to_value(option, value_on=1, value_off=0): any other value returns value_off (0) """ - if type(option) is list: + if isinstance(option, list): option = option[-1] if option == 'on' or option == 'true': @@ -499,7 +499,7 @@ def to_int(val, default=0): try: val = int(val) - except: + except Exception: val = default return val @@ -536,11 +536,11 @@ def check_setting_int(config, cfg_name, item_name, def_val, silent=True): if str(my_val) == str(None): raise - except: + except Exception: my_val = def_val try: config[cfg_name][item_name] = my_val - except: + except Exception: config[cfg_name] = {} config[cfg_name][item_name] = my_val @@ -558,11 +558,11 @@ def check_setting_float(config, cfg_name, item_name, def_val, silent=True): my_val = float(config[cfg_name][item_name]) if str(my_val) == str(None): raise - except: + except Exception: my_val = def_val try: config[cfg_name][item_name] = my_val - except: + except Exception: config[cfg_name] = {} config[cfg_name][item_name] = my_val @@ -578,7 +578,6 @@ def check_setting_float(config, cfg_name, item_name, def_val, silent=True): def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_log=False): # For passwords you must include the word `password` in the item_name and add `helpers.encrypt(ITEM_NAME, ENCRYPTION_VERSION)` in save_config() if bool(item_name.find('password') + 1): - log = False encryption_version = sickbeard.ENCRYPTION_VERSION else: encryption_version = 0 @@ -587,11 +586,11 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_ my_val = helpers.decrypt(config[cfg_name][item_name], encryption_version) if str(my_val) == str(None): raise - except: + except Exception: my_val = def_val try: config[cfg_name][item_name] = helpers.encrypt(my_val, encryption_version) - except: + except Exception: config[cfg_name] = {} config[cfg_name][item_name] = helpers.encrypt(my_val, encryption_version) @@ -599,7 +598,7 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_ logger.censoredItems[cfg_name, item_name] = my_val if not silent: - logger.log(item_name + " -> " + str(my_val), logger.DEBUG) + logger.log(item_name + " -> " + my_val, logger.DEBUG) return my_val @@ -615,13 +614,14 @@ class ConfigMigrator(): # check the version of the config self.config_version = check_setting_int(config_obj, 'General', 'config_version', sickbeard.CONFIG_VERSION) self.expected_config_version = sickbeard.CONFIG_VERSION - self.migration_names = {1: 'Custom naming', - 2: 'Sync backup number with version number', - 3: 'Rename omgwtfnzb variables', - 4: 'Add newznab catIDs', - 5: 'Metadata update', - 6: 'Convert from XBMC to new KODI variables', - 7: 'Use version 2 for password encryption' + self.migration_names = { + 1: 'Custom naming', + 2: 'Sync backup number with version number', + 3: 'Rename omgwtfnzb variables', + 4: 'Add newznab catIDs', + 5: 'Metadata update', + 6: 'Convert from XBMC to new KODI variables', + 7: 'Use version 2 for password encryption' } def migrate_config(self): @@ -630,10 +630,11 @@ class ConfigMigrator(): """ if self.config_version > self.expected_config_version: - logger.log_error_and_exit(u"Your config version (" + str( - self.config_version) + ") has been incremented past what this version of SickRage supports (" + str( - self.expected_config_version) + ").\n" + \ - "If you have used other forks or a newer version of SickRage, your config file may be unusable due to their modifications.") + logger.log_error_and_exit( + u"""Your config version (%i) has been incremented past what this version of SickRage supports (%i). + If you have used other forks or a newer version of SickRage, your config file may be unusable due to their modifications.""" % + (self.config_version, self.expected_config_version) + ) sickbeard.CONFIG_VERSION = self.config_version @@ -668,13 +669,13 @@ class ConfigMigrator(): """ sickbeard.NAMING_PATTERN = self._name_to_pattern() - logger.log("Based on your old settings I'm setting your new naming pattern to: " + sickbeard.NAMING_PATTERN) + logger.log(u"Based on your old settings I'm setting your new naming pattern to: " + sickbeard.NAMING_PATTERN) sickbeard.NAMING_CUSTOM_ABD = bool(check_setting_int(self.config_obj, 'General', 'naming_dates', 0)) if sickbeard.NAMING_CUSTOM_ABD: sickbeard.NAMING_ABD_PATTERN = self._name_to_pattern(True) - logger.log("Adding a custom air-by-date naming pattern to your config: " + sickbeard.NAMING_ABD_PATTERN) + logger.log(u"Adding a custom air-by-date naming pattern to your config: " + sickbeard.NAMING_ABD_PATTERN) else: sickbeard.NAMING_ABD_PATTERN = naming.name_abd_presets[0] @@ -765,7 +766,7 @@ class ConfigMigrator(): finalName += naming_sep_type[sep_type] + ep_quality if use_periods: - finalName = re.sub("\s+", ".", finalName) + finalName = re.sub(r"\s+", ".", finalName) return finalName diff --git a/sickbeard/dailysearcher.py b/sickbeard/dailysearcher.py index 8a358def33acfb8f7a044376995db12aa0ba3b30..f96f0c8053efc9ec5238caefb464211c2cee4fdc 100644 --- a/sickbeard/dailysearcher.py +++ b/sickbeard/dailysearcher.py @@ -26,7 +26,7 @@ from sickbeard import logger from sickbeard import db from sickbeard import common from sickbeard import helpers -from sickbeard import sbdatetime, network_timezones +from sickbeard import network_timezones from sickrage.helper.exceptions import MultipleShowObjectsException diff --git a/sickbeard/databases/__init__.py b/sickbeard/databases/__init__.py index 96925d1641e3e383833e831970e4033fed6aca24..2e67a9dd6a0c8ced186cafd0005d0066ebe250e3 100644 --- a/sickbeard/databases/__init__.py +++ b/sickbeard/databases/__init__.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -16,4 +18,4 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -__all__ = ["mainDB", "cache", "failed"] \ No newline at end of file +__all__ = ["mainDB", "cache", "failed"] diff --git a/sickbeard/databases/cache_db.py b/sickbeard/databases/cache_db.py index 9734be453c48afe4e03f25d0a6028bfb60a447b6..316955a574211bc3da1bfc9860a21e0e93f4a870 100644 --- a/sickbeard/databases/cache_db.py +++ b/sickbeard/databases/cache_db.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -18,6 +20,7 @@ from sickbeard import db + # Add new migrations at the bottom of the list; subclass the previous migration. class InitialSchema(db.SchemaUpgrade): def test(self): @@ -49,6 +52,7 @@ class AddSceneExceptions(InitialSchema): self.connection.action( "CREATE TABLE scene_exceptions (exception_id INTEGER PRIMARY KEY, indexer_id INTEGER KEY, show_name TEXT);") + class AddSceneNameCache(AddSceneExceptions): def test(self): return self.hasTable("scene_names") @@ -64,6 +68,7 @@ class AddNetworkTimezones(AddSceneNameCache): def execute(self): self.connection.action("CREATE TABLE network_timezones (network_name TEXT PRIMARY KEY, timezone TEXT);") + class AddLastSearch(AddNetworkTimezones): def test(self): return self.hasTable("lastSearch") @@ -71,6 +76,7 @@ class AddLastSearch(AddNetworkTimezones): def execute(self): self.connection.action("CREATE TABLE lastSearch (provider TEXT, time NUMERIC);") + class AddSceneExceptionsSeasons(AddLastSearch): def test(self): return self.hasColumn("scene_exceptions", "season") @@ -78,6 +84,7 @@ class AddSceneExceptionsSeasons(AddLastSearch): def execute(self): self.addColumn("scene_exceptions", "season", "NUMERIC", -1) + class AddSceneExceptionsCustom(AddSceneExceptionsSeasons): def test(self): return self.hasColumn("scene_exceptions", "custom") @@ -85,6 +92,7 @@ class AddSceneExceptionsCustom(AddSceneExceptionsSeasons): def execute(self): self.addColumn("scene_exceptions", "custom", "NUMERIC", 0) + class AddSceneExceptionsRefresh(AddSceneExceptionsCustom): def test(self): return self.hasTable("scene_exceptions_refresh") diff --git a/sickbeard/databases/failed_db.py b/sickbeard/databases/failed_db.py index 9d880bf3a3453d6bfe740c3ff9665a768c75977b..6a91a8af1c042300c5c5517b25742b1571f8745b 100644 --- a/sickbeard/databases/failed_db.py +++ b/sickbeard/databases/failed_db.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Tyler Fenby <tylerfenby@gmail.com> # URL: http://code.google.com/p/sickbeard/ # diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py index d405d30ce625d82498c5523b0e6eee0865d58656..131406cef8fbef13dc99d894d90ac7eb5e77797f 100644 --- a/sickbeard/databases/mainDB.py +++ b/sickbeard/databases/mainDB.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -48,12 +50,12 @@ class MainSanityCheck(db.DBSanityCheck): self.convert_tvrage_to_tvdb() self.convert_archived_to_compund() - + # todo: fix spelling to compound def convert_archived_to_compund(self): logger.log(u'Checking for archived episodes not qualified', logger.DEBUG) query = "SELECT episode_id, showid, status, location, season, episode " + \ - "FROM tv_episodes WHERE status = %s" % common.ARCHIVED + "FROM tv_episodes WHERE status = %s" % common.ARCHIVED sqlResults = self.connection.select(query) if sqlResults: @@ -67,9 +69,9 @@ class MainSanityCheck(db.DBSanityCheck): fixedStatus = common.Quality.compositeStatus(common.ARCHIVED, quality) logger.log(u'Changing status from %s to %s for %s: S%02dE%02d at %s (File %s)' % - (common.statusStrings[common.ARCHIVED], common.statusStrings[fixedStatus], - archivedEp['showid'], archivedEp['season'], archivedEp['episode'], - archivedEp['location'] if archivedEp['location'] else 'unknown location', ('NOT FOUND', 'EXISTS')[bool(existing)])) + (common.statusStrings[common.ARCHIVED], common.statusStrings[fixedStatus], + archivedEp['showid'], archivedEp['season'], archivedEp['episode'], + archivedEp['location'] if archivedEp['location'] else 'unknown location', ('NOT FOUND', 'EXISTS')[bool(existing)])) self.connection.action("UPDATE tv_episodes SET status = %i WHERE episode_id = %i" % (fixedStatus, archivedEp['episode_id'])) @@ -86,11 +88,11 @@ class MainSanityCheck(db.DBSanityCheck): for tvrage_show in sqlResults: logger.log(u"Processing %s at %s" % (tvrage_show['show_name'], tvrage_show['location'])) mapping = self.connection.select("SELECT mindexer_id FROM indexer_mapping WHERE indexer_id=%i AND indexer=%i AND mindexer=%i" % - (tvrage_show['indexer_id'], INDEXER_TVRAGE, INDEXER_TVDB)) + (tvrage_show['indexer_id'], INDEXER_TVRAGE, INDEXER_TVDB)) if len(mapping) != 1: logger.log(u"Error mapping show from tvrage to tvdb for %s (%s), found %i mapping results. Cannot convert automatically!" % - (tvrage_show['show_name'], tvrage_show['location'], len(mapping)), logger.WARNING) + (tvrage_show['show_name'], tvrage_show['location'], len(mapping)), logger.WARNING) logger.log(u"Removing the TVRage show and it's episodes from the DB, use 'addExistingShow'", logger.WARNING) self.connection.action("DELETE FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (tvrage_show['indexer_id'], INDEXER_TVRAGE)) self.connection.action("DELETE FROM tv_episodes WHERE showid = %i" % tvrage_show['indexer_id']) @@ -100,32 +102,31 @@ class MainSanityCheck(db.DBSanityCheck): duplicate = self.connection.select("SELECT * FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (mapping[0]['mindexer_id'], INDEXER_TVDB)) if duplicate: logger.log(u'Found %s which has the same id as %s, cannot convert automatically so I am pausing %s' % - (duplicate[0]['show_name'], tvrage_show['show_name'], duplicate[0]['show_name']), logger.WARNING) + (duplicate[0]['show_name'], tvrage_show['show_name'], duplicate[0]['show_name']), logger.WARNING) self.connection.action("UPDATE tv_shows SET paused=1 WHERE indexer=%i AND indexer_id=%i" % - (INDEXER_TVDB, duplicate[0]['indexer_id'])) + (INDEXER_TVDB, duplicate[0]['indexer_id'])) logger.log(u"Removing %s and it's episodes from the DB" % tvrage_show['show_name'], logger.WARNING) self.connection.action("DELETE FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (tvrage_show['indexer_id'], INDEXER_TVRAGE)) self.connection.action("DELETE FROM tv_episodes WHERE showid = %i" % tvrage_show['indexer_id']) logger.log(u'Manually move the season folders from %s into %s, and delete %s before rescanning %s and unpausing it' % - (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING) + (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING) continue - logger.log('Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id'])) + logger.log(u'Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id'])) self.connection.action( "UPDATE tv_shows SET indexer=%i, indexer_id=%i WHERE indexer_id=%i" % - (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id']) - ) + (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id']) + ) logger.log(u'Relinking episodes to show') self.connection.action( "UPDATE tv_episodes SET indexer=%i, showid=%i, indexerid=0 WHERE showid=%i" % - (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id']) - ) - - logger.log('Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING) + (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id']) + ) + logger.log(u'Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING) def fix_duplicate_shows(self, column='indexer_id'): @@ -148,7 +149,6 @@ class MainSanityCheck(db.DBSanityCheck): cur_dupe_id["show_id"])) self.connection.action("DELETE FROM tv_shows WHERE show_id = ?", [cur_dupe_id["show_id"]]) - def fix_duplicate_episodes(self): sqlResults = self.connection.select( @@ -265,7 +265,8 @@ class MainSanityCheck(db.DBSanityCheck): sqlResults = self.connection.select( "SELECT subtitles, episode_id FROM tv_episodes WHERE subtitles != '' AND subtitles_lastsearch < ?;", - [datetime.datetime(2015, 7, 15, 17, 20, 44, 326380).strftime(dateTimeFormat)]) + [datetime.datetime(2015, 7, 15, 17, 20, 44, 326380).strftime(dateTimeFormat)] + ) validLanguages = [Language.fromopensubtitles(language).opensubtitles for language in language_converters['opensubtitles'].codes if len(language) == 3] @@ -275,19 +276,19 @@ class MainSanityCheck(db.DBSanityCheck): for sqlResult in sqlResults: langs = [] - logger.log("Checking subtitle codes for episode_id: %s, codes: %s" % - (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG) + logger.log(u"Checking subtitle codes for episode_id: %s, codes: %s" % + (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG) for subcode in sqlResult['subtitles'].split(','): - if not len(subcode) is 3 or not subcode in validLanguages: - logger.log("Fixing subtitle codes for episode_id: %s, invalid code: %s" % - (sqlResult['episode_id'], subcode), logger.DEBUG) + if not len(subcode) is 3 or subcode not in validLanguages: + logger.log(u"Fixing subtitle codes for episode_id: %s, invalid code: %s" % + (sqlResult['episode_id'], subcode), logger.DEBUG) continue langs.append(subcode) self.connection.action("UPDATE tv_episodes SET subtitles = ?, subtitles_lastsearch = ? WHERE episode_id = ?;", - [','.join(langs), datetime.datetime.now().strftime(dateTimeFormat), sqlResult['episode_id']]) + [','.join(langs), datetime.datetime.now().strftime(dateTimeFormat), sqlResult['episode_id']]) def fix_show_nfo_lang(self): self.connection.action("UPDATE tv_shows SET lang = '' WHERE lang = 0 or lang = '0'") @@ -300,6 +301,7 @@ def backupDatabase(version): else: logger.log(u"Proceeding with upgrade") + # ====================== # = Main DB Migrations = # ====================== @@ -338,18 +340,18 @@ class InitialSchema(db.SchemaUpgrade): cur_db_version = self.checkDBVersion() if cur_db_version < MIN_DB_VERSION: - logger.log_error_and_exit(u"Your database version (" + str( - cur_db_version) + ") is too old to migrate from what this version of SickRage supports (" + \ - str(MIN_DB_VERSION) + ").\n" + \ + logger.log_error_and_exit(u"Your database version (" + + str(cur_db_version) + ") is too old to migrate from what this version of SickRage supports (" + + str(MIN_DB_VERSION) + ").\n" + "Upgrade using a previous version (tag) build 496 to build 501 of SickRage first or remove database file to begin fresh." - ) + ) if cur_db_version > MAX_DB_VERSION: - logger.log_error_and_exit(u"Your database version (" + str( - cur_db_version) + ") has been incremented past what this version of SickRage supports (" + \ - str(MAX_DB_VERSION) + ").\n" + \ + logger.log_error_and_exit(u"Your database version (" + + str(cur_db_version) + ") has been incremented past what this version of SickRage supports (" + + str(MAX_DB_VERSION) + ").\n" + "If you have used other forks of SickRage, your database may be unusable due to their modifications." - ) + ) class AddSizeAndSceneNameFields(InitialSchema): @@ -427,7 +429,7 @@ class AddSizeAndSceneNameFields(InitialSchema): except (InvalidNameException, InvalidShowException): continue - if parse_result.series_name and parse_result.season_number != None and parse_result.episode_numbers and parse_result.release_group: + if parse_result.series_name and parse_result.season_number is not None and parse_result.episode_numbers and parse_result.release_group: # if all is well by this point we'll just put the release name into the database self.connection.action("UPDATE tv_episodes SET release_name = ? WHERE episode_id = ?", [cur_name, ep_results[0]["episode_id"]]) @@ -517,17 +519,17 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders): result = old_quality # move fullhdbluray from 1<<5 to 1<<8 if set - if (result & (1 << 5)): - result = result & ~(1 << 5) - result = result | (1 << 8) + if result & (1 << 5): + result &= ~(1 << 5) + result |= 1 << 8 # move hdbluray from 1<<4 to 1<<7 if set - if (result & (1 << 4)): - result = result & ~(1 << 4) - result = result | (1 << 7) + if result & (1 << 4): + result &= ~(1 << 4) + result |= 1 << 7 # move hdwebdl from 1<<3 to 1<<5 if set - if (result & (1 << 3)): - result = result & ~(1 << 3) - result = result | (1 << 5) + if result & (1 << 3): + result &= ~(1 << 3) + result |= 1 << 5 return result @@ -540,7 +542,7 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders): """ best = (status & (0xffff << 16)) >> 16 - initial = status & (0xffff) + initial = status & 0xffff best = self._update_quality(best) initial = self._update_quality(initial) @@ -559,7 +561,7 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders): old_hd = common.Quality.combineQualities( [common.Quality.HDTV, common.Quality.HDWEBDL >> 2, common.Quality.HDBLURAY >> 3], []) new_hd = common.Quality.combineQualities([common.Quality.HDTV, common.Quality.HDWEBDL, common.Quality.HDBLURAY], - []) + []) # update ANY -- shift existing qualities and add new 1080p qualities, note that rawHD was not added to the ANY template old_any = common.Quality.combineQualities( @@ -949,6 +951,7 @@ class AddSceneNumberingToTvEpisodes(AddSportsOption): self.incDBVersion() + class AddAnimeTVShow(AddSceneNumberingToTvEpisodes): def test(self): return self.checkDBVersion() >= 32 @@ -961,6 +964,7 @@ class AddAnimeTVShow(AddSceneNumberingToTvEpisodes): self.incDBVersion() + class AddAbsoluteNumbering(AddAnimeTVShow): def test(self): return self.checkDBVersion() >= 33 @@ -973,6 +977,7 @@ class AddAbsoluteNumbering(AddAnimeTVShow): self.incDBVersion() + class AddSceneAbsoluteNumbering(AddAbsoluteNumbering): def test(self): return self.checkDBVersion() >= 34 @@ -986,6 +991,7 @@ class AddSceneAbsoluteNumbering(AddAbsoluteNumbering): self.incDBVersion() + class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering): def test(self): @@ -994,13 +1000,16 @@ class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering): def execute(self): backupDatabase(35) - cl = [] - cl.append(["CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)"]) - cl.append(["CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)"]) + cl = [ + ["CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)"], + ["CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)"] + ] + self.connection.mass_action(cl) self.incDBVersion() + class AddSceneAbsoluteNumbering2(AddAnimeBlacklistWhitelist): def test(self): return self.checkDBVersion() >= 36 @@ -1013,6 +1022,7 @@ class AddSceneAbsoluteNumbering2(AddAnimeBlacklistWhitelist): self.incDBVersion() + class AddXemRefresh(AddSceneAbsoluteNumbering2): def test(self): return self.checkDBVersion() >= 37 @@ -1026,6 +1036,7 @@ class AddXemRefresh(AddSceneAbsoluteNumbering2): self.incDBVersion() + class AddSceneToTvShows(AddXemRefresh): def test(self): return self.checkDBVersion() >= 38 @@ -1038,6 +1049,7 @@ class AddSceneToTvShows(AddXemRefresh): self.incDBVersion() + class AddIndexerMapping(AddSceneToTvShows): def test(self): return self.checkDBVersion() >= 39 @@ -1054,6 +1066,7 @@ class AddIndexerMapping(AddSceneToTvShows): self.incDBVersion() + class AddVersionToTvEpisodes(AddIndexerMapping): def test(self): return self.checkDBVersion() >= 40 @@ -1068,6 +1081,7 @@ class AddVersionToTvEpisodes(AddIndexerMapping): self.incDBVersion() + class AddDefaultEpStatusToTvShows(AddVersionToTvEpisodes): def test(self): return self.checkDBVersion() >= 41 @@ -1080,6 +1094,7 @@ class AddDefaultEpStatusToTvShows(AddVersionToTvEpisodes): self.incDBVersion() + class AlterTVShowsFieldTypes(AddDefaultEpStatusToTvShows): def test(self): return self.checkDBVersion() >= 42 diff --git a/sickbeard/db.py b/sickbeard/db.py index e503e2eb3b66a0d299afcdad6ed8658133c0507f..42592f8ccfb1e2739be1598ea7d912c4925c5a98 100644 --- a/sickbeard/db.py +++ b/sickbeard/db.py @@ -77,7 +77,7 @@ class DBConnection(object): if not args: return self.connection.cursor().execute(query) return self.connection.cursor().execute(query, args) - except Exception as e: + except Exception: raise def execute(self, query, args=None, fetchall=False, fetchone=False): @@ -97,7 +97,7 @@ class DBConnection(object): return self._execute(query, args).fetchone() else: return self._execute(query, args) - except Exception as e: + except Exception: raise def checkDBVersion(self): @@ -169,7 +169,7 @@ class DBConnection(object): logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR) raise - #time.sleep(0.02) + # time.sleep(0.02) return sqlResult @@ -214,7 +214,7 @@ class DBConnection(object): logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR) raise - #time.sleep(0.02) + # time.sleep(0.02) return sqlResult diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 488d8f17cf3fba73db1f778f861ce7fefd28d78d..2f35739bb0c5ee689cb06cf3d0ba6290b7f3b04a 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Nic Wolfe <nic@wolfeden.ca> # URL: https://sickrage.tv # Git: https://github.com/SickRage/SickRage.git @@ -19,6 +20,7 @@ import os +import io import ctypes import random import re @@ -47,26 +49,12 @@ import certifi from contextlib import closing from socket import timeout as SocketTimeout - -try: - from io import BytesIO as _StringIO -except ImportError: - try: - from cStringIO import StringIO as _StringIO - except ImportError: - from StringIO import StringIO as _StringIO - -try: - import gzip -except ImportError: - gzip = None - from sickbeard import logger, classes from sickbeard.common import USER_AGENT from sickbeard.common import mediaExtensions from sickbeard.common import subtitleExtensions from sickbeard import db -from sickbeard import notifiers +from sickbeard.notifiers.synoindex import notifier as synoindex_notifier from sickbeard import clients from sickbeard.subtitles import isValidLanguage from sickrage.helper.encoding import ek @@ -80,6 +68,8 @@ import shutil_custom shutil.copyfile = shutil_custom.copyfile_custom +# pylint: disable=W0212 +# Access to a protected member of a client class urllib._urlopener = classes.SickBeardURLopener() @@ -87,18 +77,19 @@ def fixGlob(path): path = re.sub(r'\[', '[[]', path) return re.sub(r'(?<!\[)\]', '[]]', path) + def indentXML(elem, level=0): - ''' + """ Does our pretty printing, makes Matt very happy - ''' - i = "\n" + level*" " + """ + i = "\n" + level * " " if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + " " if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: - indentXML(elem, level+1) + indentXML(elem, level + 1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: @@ -124,7 +115,6 @@ def remove_non_release_groups(name): """ Remove non release groups from name """ - if not name: return name @@ -132,44 +122,44 @@ def remove_non_release_groups(name): # Check your database for funky release_names and add them here, to improve failed handling, archiving, and history. # select release_name from tv_episodes WHERE LENGTH(release_name); # [eSc], [SSG], [GWC] are valid release groups for non-anime - removeWordsList = {r'\[rartv\]$': 'searchre', - r'\[rarbg\]$': 'searchre', - r'\[eztv\]$': 'searchre', - r'\[ettv\]$': 'searchre', - r'\[cttv\]$': 'searchre', - r'\[vtv\]$': 'searchre', - r'\[EtHD\]$': 'searchre', - r'\[GloDLS\]$': 'searchre', - r'\[silv4\]$': 'searchre', - r'\[Seedbox\]$': 'searchre', - r'\[PublicHD\]$': 'searchre', - r'\[AndroidTwoU\]$': 'searchre', - r'\.\[BT\]$': 'searchre', - r' \[1044\]$': 'searchre', - r'\.RiPSaLoT$': 'searchre', - r'\.GiuseppeTnT$': 'searchre', - r'\.Renc$': 'searchre', - r'-NZBGEEK$': 'searchre', - r'-Siklopentan$': 'searchre', - r'-\SpastikusTV\]$': 'searchre', - r'-RP$': 'searchre', - r'-20-40$': 'searchre', - r'\.\[www\.usabit\.com\]$': 'searchre', - r'^\[www\.Cpasbien\.pe\] ': 'searchre', - r'^\[www\.Cpasbien\.com\] ': 'searchre', - r'^\[ www\.Cpasbien\.pw \] ': 'searchre', - r'^\.www\.Cpasbien\.pw': 'searchre', - r'^\[www\.newpct1\.com\]': 'searchre', - r'^\[ www\.Cpasbien\.com \] ': 'searchre', - r'- \{ www\.SceneTime\.com \}$': 'searchre', - r'^\{ www\.SceneTime\.com \} - ': 'searchre', - r'^\[www\.frenchtorrentdb\.com\] ': 'searchre', - r'^\]\.\[www\.tensiontorrent.com\] - ': 'searchre', - r'^\]\.\[ www\.tensiontorrent.com \] - ': 'searchre', - r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre', - r'- \[ www\.torrentday\.com \]$': 'searchre', - r'^\[ www\.TorrentDay\.com \] - ': 'searchre', - } + removeWordsList = { + r'\[rartv\]$': 'searchre', + r'\[rarbg\]$': 'searchre', + r'\[eztv\]$': 'searchre', + r'\[ettv\]$': 'searchre', + r'\[cttv\]$': 'searchre', + r'\[vtv\]$': 'searchre', + r'\[EtHD\]$': 'searchre', + r'\[GloDLS\]$': 'searchre', + r'\[silv4\]$': 'searchre', + r'\[Seedbox\]$': 'searchre', + r'\[PublicHD\]$': 'searchre', + r'\[AndroidTwoU\]$': 'searchre', + r'\.\[BT\]$': 'searchre', + r' \[1044\]$': 'searchre', + r'\.RiPSaLoT$': 'searchre', + r'\.GiuseppeTnT$': 'searchre', + r'\.Renc$': 'searchre', + r'-NZBGEEK$': 'searchre', + r'-Siklopentan$': 'searchre', + r'-\[SpastikusTV\]$': 'searchre', + r'-RP$': 'searchre', + r'-20-40$': 'searchre', + r'\.\[www\.usabit\.com\]$': 'searchre', + r'^\[www\.Cpasbien\.pe\] ': 'searchre', + r'^\[www\.Cpasbien\.com\] ': 'searchre', + r'^\[ www\.Cpasbien\.pw \] ': 'searchre', + r'^\.www\.Cpasbien\.pw': 'searchre', + r'^\[www\.newpct1\.com\]': 'searchre', + r'^\[ www\.Cpasbien\.com \] ': 'searchre', + r'- \{ www\.SceneTime\.com \}$': 'searchre', + r'^\{ www\.SceneTime\.com \} - ': 'searchre', + r'^\]\.\[www\.tensiontorrent.com\] - ': 'searchre', + r'^\]\.\[ www\.tensiontorrent.com \] - ': 'searchre', + r'- \[ www\.torrentday\.com \]$': 'searchre', + r'^\[ www\.TorrentDay\.com \] - ': 'searchre', + r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre', + } _name = name for remove_string, remove_type in removeWordsList.iteritems(): @@ -178,7 +168,7 @@ def remove_non_release_groups(name): elif remove_type == 'searchre': _name = re.sub(r'(?i)' + remove_string, '', _name) - return _name.strip('.- ') + return _name.strip('.- []{}') def replaceExtension(filename, newExt): @@ -211,6 +201,7 @@ def notTorNZBFile(filename): return not (filename.endswith(".torrent") or filename.endswith(".nzb")) + def isSyncFile(filename): """ Returns true if filename is a syncfile, indicating filesystem may be in flux @@ -220,7 +211,7 @@ def isSyncFile(filename): """ extension = filename.rpartition(".")[2].lower() - #if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts': + # if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts': syncfiles = sickbeard.SYNC_FILES if extension in syncfiles.split(",") or filename.startswith('.syncthing'): return True @@ -237,7 +228,7 @@ def isMediaFile(filename): """ # ignore samples - if re.search(r'(^|[\W_])(sample\d*)[\W_]', filename, re.I): + if re.search(r'(^|[\W_])(?<!shomin.)(sample\d*)[\W_]', filename, re.I): return False # ignore RARBG release intro @@ -306,7 +297,7 @@ def sanitizeFileName(name): # remove bad chars from the filename name = re.sub(r'[\\/\*]', '-', name) name = re.sub(r'[:"<>|?]', '', name) - name = re.sub(ur'\u2122', '', name) # Trade Mark Sign + name = re.sub(ur'\u2122', '', name) # Trade Mark Sign # remove leading/trailing periods and spaces name = name.strip(' .') @@ -314,7 +305,7 @@ def sanitizeFileName(name): return name -def _remove_file_failed(failed_file): +def remove_file_failed(failed_file): """ Remove file from filesystem @@ -352,6 +343,7 @@ def findCertainShow(showList, indexerid): elif len(results) > 1: raise MultipleShowObjectsException() + def makeDir(path): """ Make a directory on the filesystem @@ -364,7 +356,7 @@ def makeDir(path): try: ek(os.makedirs, path) # do the library update for synoindex - notifiers.synoindex_notifier.addFolder(path) + synoindex_notifier().addFolder(path) except OSError: return False return True @@ -457,16 +449,17 @@ def searchIndexerForShowID(regShowName, indexer=None, indexer_id=None, ui=None): if not (seriesname and series_id): continue ShowObj = findCertainShow(sickbeard.showList, int(series_id)) - #Check if we can find the show in our list (if not, it's not the right show) + # Check if we can find the show in our list (if not, it's not the right show) if (indexer_id is None) and (ShowObj is not None) and (ShowObj.indexerid == int(series_id)): - return (seriesname, i, int(series_id)) + return seriesname, i, int(series_id) elif (indexer_id is not None) and (int(indexer_id) == int(series_id)): - return (seriesname, i, int(indexer_id)) + return seriesname, i, int(indexer_id) if indexer: break - return (None, None, None) + return None, None, None + def listMediaFiles(path): """ @@ -628,7 +621,7 @@ def make_dirs(path): # use normpath to remove end separator, otherwise checks permissions against itself chmodAsParent(ek(os.path.normpath, sofar)) # do the library update for synoindex - notifiers.synoindex_notifier.addFolder(sofar) + synoindex_notifier().addFolder(sofar) except (OSError, IOError) as e: logger.log(u"Failed creating %s : %r" % (sofar, ex(e)), logger.ERROR) return False @@ -646,7 +639,7 @@ def rename_ep_file(cur_path, new_path, old_path_length=0): :param old_path_length: The length of media file path (old name) WITHOUT THE EXTENSION """ - #new_dest_dir, new_dest_name = os.path.split(new_path) # @UnusedVariable + # new_dest_dir, new_dest_name = os.path.split(new_path) # @UnusedVariable if old_path_length == 0 or old_path_length > len(cur_path): # approach from the right @@ -708,7 +701,7 @@ def delete_empty_folders(check_empty_dir, keep_dir=None): # need shutil.rmtree when ignore_items is really implemented ek(os.rmdir, check_empty_dir) # do the library update for synoindex - notifiers.synoindex_notifier.deleteFolder(check_empty_dir) + synoindex_notifier().deleteFolder(check_empty_dir) except OSError as e: logger.log(u"Unable to delete %s. Error: %r" % (check_empty_dir, repr(e)), logger.WARNING) break @@ -815,7 +808,7 @@ def fixSetGroupID(childPath): try: ek(os.chown, childPath, -1, parentGID) # @UndefinedVariable - only available on UNIX - logger.log(u"Respecting the set-group-ID bit on the parent directory for %s" % (childPath), logger.DEBUG) + logger.log(u"Respecting the set-group-ID bit on the parent directory for %s" % childPath, logger.DEBUG) except OSError: logger.log( u"Failed to respect the set-group-ID bit on the parent directory for %s (setting group ID %i)" % ( @@ -860,9 +853,9 @@ def get_absolute_number_from_season_and_episode(show, season, episode): if len(sqlResults) == 1: absolute_number = int(sqlResults[0]["absolute_number"]) - logger.log("Found absolute number %s for show %s S%02dE%02d" % (absolute_number, show.name, season, episode), logger.DEBUG) + logger.log(u"Found absolute number %s for show %s S%02dE%02d" % (absolute_number, show.name, season, episode), logger.DEBUG) else: - logger.log("No entries for absolute number for show %s S%02dE%02d" % (show.name, season, episode), logger.DEBUG) + logger.log(u"No entries for absolute number for show %s S%02dE%02d" % (show.name, season, episode), logger.DEBUG) return absolute_number @@ -881,7 +874,7 @@ def get_all_episodes_from_absolute_number(show, absolute_numbers, indexer_id=Non episodes.append(ep.episode) season = ep.season # this will always take the last found season so eps that cross the season border are not handeled well - return (season, episodes) + return season, episodes def sanitizeSceneName(name, anime=False): @@ -945,6 +938,7 @@ def arithmeticEval(s): return _eval(node.body) + def create_https_certificates(ssl_cert, ssl_key): """ Create self-signed HTTPS certificares and store in paths 'ssl_cert' and 'ssl_key' @@ -954,6 +948,9 @@ def create_https_certificates(ssl_cert, ssl_key): :return: True on success, False on failure """ + assert isinstance(ssl_key, unicode) + assert isinstance(ssl_cert, unicode) + try: from OpenSSL import crypto # @UnresolvedImport from certgen import createKeyPair, createCertRequest, createCertificate, TYPE_RSA, \ @@ -974,8 +971,10 @@ def create_https_certificates(ssl_cert, ssl_key): # Save the key and certificate to disk try: - open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)) - open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) + # pylint: disable=E1101 + # Module has no member + io.open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)) + io.open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) except Exception: logger.log(u"Error creating SSL key and certificate", logger.ERROR) return False @@ -1095,8 +1094,10 @@ def md5_for_file(filename, block_size=2 ** 16): :return MD5 hexdigest on success, or None on failure """ + assert isinstance(filename, unicode) + try: - with open(filename, 'rb') as f: + with io.open(filename, 'rb') as f: md5 = hashlib.md5() while True: data = f.read(block_size) @@ -1117,6 +1118,7 @@ def get_lan_ip(): except Exception: return socket.gethostname() + def check_url(url): """ Check if a URL exists without downloading the whole file. @@ -1159,6 +1161,7 @@ To add a new encryption_version: # Key Generators unique_key1 = hex(uuid.getnode() ** 2) # Used in encryption v1 + # Encryption Functions def encrypt(data, encryption_version=0, _decrypt=False): # Version 1: Simple XOR encryption (this is not very secure, but works) @@ -1220,12 +1223,12 @@ def get_show(name, tryIndexers=False): fromCache = True showObj = findCertainShow(sickbeard.showList, int(cache)) - #try indexers + # try indexers if not showObj and tryIndexers: showObj = findCertainShow(sickbeard.showList, searchIndexerForShowID(full_sanitizeSceneName(name), ui=classes.ShowListUI)[2]) - #try scene exceptions + # try scene exceptions if not showObj: ShowID = sickbeard.scene_exceptions.get_scene_exception_by_name(name)[0] if ShowID: @@ -1306,7 +1309,9 @@ def set_up_anidb_connection(): return False if not sickbeard.ADBA_CONNECTION: - anidb_logger = lambda x: logger.log("anidb: %s " % x, logger.DEBUG) + def anidb_logger(msg): + return logger.log(u"anidb: %s " % msg, logger.DEBUG) + try: sickbeard.ADBA_CONNECTION = adba.Connection(keepAlive=True, log=anidb_logger) except Exception as e: @@ -1413,7 +1418,7 @@ def restoreConfigZip(archive, targetDir): def path_leaf(path): head, tail = os.path.split(path) return tail or os.path.basename(head) - bakFilename = '{0}-{1}'.format(path_leaf(targetDir), datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S')) + bakFilename = '{0}-{1}'.format(path_leaf(targetDir), datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) shutil.move(targetDir, os.path.join(os.path.dirname(targetDir), bakFilename)) zip_file = zipfile.ZipFile(archive, 'r', allowZip64=True) @@ -1493,7 +1498,7 @@ def touchFile(fname, atime=None): :return: True on success, False on failure """ - if None != atime: + if atime is not None: try: with file(fname, 'a'): os.utime(fname, (atime, atime)) @@ -1526,7 +1531,8 @@ def _getTempDir(): except ImportError: return os.path.join(tempfile.gettempdir(), "sickrage") - return os.path.join(tempfile.gettempdir(), "sickrage-%s" % (uid)) + return os.path.join(tempfile.gettempdir(), "sickrage-%s" % uid) + def codeDescription(status_code): """ @@ -1535,7 +1541,7 @@ def codeDescription(status_code): if status_code in clients.http_error_code: return clients.http_error_code[status_code] else: - logger.log(u"Unknown error code. Please submit an issue", logger.WARNING) + logger.log(u"Unknown error code: %s. Please submit an issue" % status_code, logger.ERROR) return 'unknown' @@ -1553,19 +1559,20 @@ def _setUpSession(session, headers): session = CacheControl(sess=session, cache=caches.FileCache(os.path.join(cache_dir, 'sessions'), use_dir_lock=True), cache_etags=False) # request session clear residual referer - if 'Referer' in session.headers and not 'Referer' in headers: + if 'Referer' in session.headers and 'Referer' not in headers or {}: session.headers.pop('Referer') # request session headers session.headers.update({'User-Agent': USER_AGENT, 'Accept-Encoding': 'gzip,deflate'}) - session.headers.update(headers) + if headers: + session.headers.update(headers) # request session ssl verify session.verify = certifi.where() if sickbeard.SSL_VERIFY else False # request session proxies - if not 'Referer' in session.headers and sickbeard.PROXY_SETTING: - logger.log("Using proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG) + if 'Referer' not in session.headers and sickbeard.PROXY_SETTING: + logger.log(u"Using global proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG) scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING) address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING session.proxies = { @@ -1580,7 +1587,7 @@ def _setUpSession(session, headers): return session -def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None, json=False, proxyGlypeProxySSLwarning=None): +def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=None, json=False, needBytes=False): """ Returns a byte-string retrieved from the url provider. """ @@ -1612,15 +1619,6 @@ def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None, % (url, resp.status_code, codeDescription(resp.status_code)), logger.DEBUG) return None - if proxyGlypeProxySSLwarning is not None: - if re.search('The site you are attempting to browse is on a secure connection', resp.text): - resp = session.get(proxyGlypeProxySSLwarning, timeout=timeout, allow_redirects=True, verify=session.verify) - - if not resp.ok: - logger.log(u"GlypeProxySSLwarning: Requested getURL %s returned status code is %s: %s" - % (url, resp.status_code, codeDescription(resp.status_code)), logger.DEBUG) - return None - except (SocketTimeout, TypeError) as e: logger.log(u"Connection timed out (sockets) accessing getURL %s Error: %r" % (url, ex(e)), logger.WARNING) return None @@ -1642,15 +1640,10 @@ def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None, logger.log(traceback.format_exc(), logger.WARNING) return None - attempts = 0 - while gzip and len(resp.content) > 1 and resp.content[0] == '\x1f' and resp.content[1] == '\x8b' and attempts < 3: - attempts += 1 - resp._content = gzip.GzipFile(fileobj=_StringIO(resp.content)).read() + return (resp.text, resp.content)[needBytes] if not json else resp.json() - return resp.content if not json else resp.json() - -def download_file(url, filename, session=None, headers={}): +def download_file(url, filename, session=None, headers=None): """ Downloads a file specified @@ -1672,7 +1665,7 @@ def download_file(url, filename, session=None, headers={}): return False try: - with open(filename, 'wb') as fp: + with io.open(filename, 'wb') as fp: for chunk in resp.iter_content(chunk_size=1024): if chunk: fp.write(chunk) @@ -1683,27 +1676,27 @@ def download_file(url, filename, session=None, headers={}): logger.log(u"Problem setting permissions or writing file to: %s" % filename, logger.WARNING) except (SocketTimeout, TypeError) as e: - _remove_file_failed(filename) + remove_file_failed(filename) logger.log(u"Connection timed out (sockets) while loading download URL %s Error: %r" % (url, ex(e)), logger.WARNING) return None except requests.exceptions.HTTPError as e: - _remove_file_failed(filename) + remove_file_failed(filename) logger.log(u"HTTP error %r while loading download URL %s " % (ex(e), url), logger.WARNING) return False except requests.exceptions.ConnectionError as e: - _remove_file_failed(filename) + remove_file_failed(filename) logger.log(u"Connection error %r while loading download URL %s " % (ex(e), url), logger.WARNING) return False except requests.exceptions.Timeout as e: - _remove_file_failed(filename) + remove_file_failed(filename) logger.log(u"Connection timed out %r while loading download URL %s " % (ex(e), url), logger.WARNING) return False except EnvironmentError as e: - _remove_file_failed(filename) + remove_file_failed(filename) logger.log(u"Unable to save the file: %r " % ex(e), logger.WARNING) return False except Exception: - _remove_file_failed(filename) + remove_file_failed(filename) logger.log(u"Unknown exception while loading download URL %s : %r" % (url, traceback.format_exc()), logger.WARNING) return False @@ -1755,6 +1748,7 @@ def generateApiKey(): logger.log(u"New API generated") return m.hexdigest() + def pretty_filesize(file_bytes): """Return humanly formatted sizes from bytes""" for mod in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']: @@ -1766,16 +1760,19 @@ if __name__ == '__main__': import doctest doctest.testmod() + def remove_article(text=''): """Remove the english articles from a text string""" return re.sub(r'(?i)^(?:(?:A(?!\s+to)n?)|The)\s(\w)', r'\1', text) + def generateCookieSecret(): """Generate a new cookie secret""" return base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes) + def verify_freespace(src, dest, oldfile=None): """ Checks if the target system has enough free space to copy or move a file. @@ -1789,7 +1786,7 @@ def verify_freespace(src, dest, oldfile=None): if not isinstance(oldfile, list): oldfile = [oldfile] - logger.log("Trying to determine free space on destination drive", logger.DEBUG) + logger.log(u"Trying to determine free space on destination drive", logger.DEBUG) if hasattr(os, 'statvfs'): # POSIX def disk_usage(path): @@ -1801,29 +1798,28 @@ def verify_freespace(src, dest, oldfile=None): import sys def disk_usage(path): - _, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), \ - ctypes.c_ulonglong() + _, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), ctypes.c_ulonglong() if sys.version_info >= (3,) or isinstance(path, unicode): fun = ctypes.windll.kernel32.GetDiskFreeSpaceExW else: fun = ctypes.windll.kernel32.GetDiskFreeSpaceExA ret = fun(path, ctypes.byref(_), ctypes.byref(total), ctypes.byref(free)) if ret == 0: - logger.log("Unable to determine free space, something went wrong", logger.WARNING) + logger.log(u"Unable to determine free space, something went wrong", logger.WARNING) raise ctypes.WinError() return free.value else: - logger.log("Unable to determine free space on your OS") + logger.log(u"Unable to determine free space on your OS") return True if not ek(os.path.isfile, src): - logger.log("A path to a file is required for the source. " + src + " is not a file.", logger.WARNING) + logger.log(u"A path to a file is required for the source. " + src + " is not a file.", logger.WARNING) return True try: diskfree = disk_usage(dest) except Exception: - logger.log("Unable to determine free space, so I will assume there is enough.", logger.WARNING) + logger.log(u"Unable to determine free space, so I will assume there is enough.", logger.WARNING) return True neededspace = ek(os.path.getsize, src) @@ -1836,10 +1832,11 @@ def verify_freespace(src, dest, oldfile=None): if diskfree > neededspace: return True else: - logger.log("Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )" + logger.log(u"Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )" % (neededspace, pretty_filesize(neededspace), diskfree, pretty_filesize(diskfree)), logger.WARNING) return False + # https://gist.github.com/thatalextaylor/7408395 def pretty_time_delta(seconds): sign_string = '-' if seconds < 0 else '' @@ -1860,8 +1857,9 @@ def pretty_time_delta(seconds): return time_delta + def isFileLocked(checkfile, writeLockCheck=False): - ''' + """ Checks to see if a file is locked. Performs three checks 1. Checks if the file even exists 2. Attempts to open the file for reading. This will determine if the file has a write lock. @@ -1871,14 +1869,15 @@ def isFileLocked(checkfile, writeLockCheck=False): or deleted. :param file: the file being checked :param writeLockCheck: when true will check if the file is locked for writing (prevents move operations) - ''' + """ - checkfile = ek(os.path.abspath, checkfile) + checkfile = os.path.abspath(checkfile) + assert isinstance(checkfile, unicode) if not os.path.exists(checkfile): return True try: - f = open(checkfile, 'r') + f = io.open(checkfile, 'rb') f.close() except IOError: return True @@ -1896,11 +1895,12 @@ def isFileLocked(checkfile, writeLockCheck=False): return False + def getDiskSpaceUsage(diskPath=None): - ''' + """ returns the free space in human readable bytes for a given path or False if no path given :param diskPath: the filesystem path being checked - ''' + """ if diskPath and os.path.exists(diskPath): if platform.system() == 'Windows': free_bytes = ctypes.c_ulonglong(0) diff --git a/sickbeard/image_cache.py b/sickbeard/image_cache.py index 907d6d4fb4319d3ca9a69b1da5d3492ad1468044..88c431d02d89ee46ce3772f4c6a4cdd04fb1af16 100644 --- a/sickbeard/image_cache.py +++ b/sickbeard/image_cache.py @@ -250,7 +250,7 @@ class ImageCache: return False # retrieve the image from indexer using the generic metadata class - #TODO: refactor + # TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image(img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) diff --git a/sickbeard/imdbPopular.py b/sickbeard/imdbPopular.py index 3d09ec4b0b999080631489d3555dca4fc6819b7d..26af7f89548299e1b901d1f413e28885da5c44e0 100644 --- a/sickbeard/imdbPopular.py +++ b/sickbeard/imdbPopular.py @@ -8,8 +8,8 @@ import sickbeard from sickbeard import helpers from sickrage.helper.encoding import ek -# pylint: disable=C1001 -class imdbPopular: + +class imdbPopular(object): def __init__(self): """Gets a list of most popular TV series from imdb""" diff --git a/sickbeard/indexers/__init__.py b/sickbeard/indexers/__init__.py index b7e23c773751df46f399d1da9078435235764548..bdbdcca31206955d112052f32f86dbab0cec2093 100644 --- a/sickbeard/indexers/__init__.py +++ b/sickbeard/indexers/__init__.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -16,4 +18,4 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -from . import indexer_api, indexer_exceptions \ No newline at end of file +from . import indexer_api, indexer_exceptions diff --git a/sickbeard/indexers/indexer_api.py b/sickbeard/indexers/indexer_api.py index da79422daabdc1b0ed57deefc3629ce74c693bad..bf9f09ab6bb74a0081e42869c38edbdee630c934 100644 --- a/sickbeard/indexers/indexer_api.py +++ b/sickbeard/indexers/indexer_api.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # diff --git a/sickbeard/indexers/indexer_config.py b/sickbeard/indexers/indexer_config.py index 4494e8e26afaf9010fb222ac1ed2c1f0987b83b7..0cc742403802bc080e2b06c3cbe9733882d862d0 100644 --- a/sickbeard/indexers/indexer_config.py +++ b/sickbeard/indexers/indexer_config.py @@ -1,41 +1,39 @@ +# coding=utf-8 + from tvdb_api.tvdb_api import Tvdb import requests -INDEXER_TVDB = 1 - -#Must keep -INDEXER_TVRAGE = 2 - -initConfig = {} -indexerConfig = {} - -initConfig['valid_languages'] = [ - "da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr", - "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no" -] - -initConfig['langabbv_to_id'] = { - 'el': 20, 'en': 7, 'zh': 27, - 'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9, - 'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11, - 'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30 +initConfig = { + 'valid_languages': ["da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr", + "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no" + ], + 'langabbv_to_id': {'el': 20, 'en': 7, 'zh': 27, + 'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9, + 'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11, + 'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30 + } } -indexerConfig[INDEXER_TVDB] = { - 'id': INDEXER_TVDB, - 'name': 'theTVDB', - 'module': Tvdb, - 'api_params': {'apikey': 'F9C450E78D99172E', - 'language': 'en', - 'useZip': True, - }, - 'session': requests.Session() +INDEXER_TVDB = 1 +INDEXER_TVRAGE = 2 # Must keep + +indexerConfig = { + INDEXER_TVDB: { + 'id': INDEXER_TVDB, + 'name': 'theTVDB', + 'module': Tvdb, + 'api_params': {'apikey': 'F9C450E78D99172E', + 'language': 'en', + 'useZip': True, + }, + 'session': requests.Session(), + 'trakt_id': 'tvdb_id', + 'xem_origin': 'tvdb', + 'icon': 'thetvdb16.png', + 'scene_loc': 'http://sickrage.github.io/sb_tvdb_scene_exceptions/exceptions.txt', + 'show_url': 'http://thetvdb.com/?tab=series&id=', + 'base_url': 'http://thetvdb.com/api/%(apikey)s/series/' + } } -# TVDB Indexer Settings -indexerConfig[INDEXER_TVDB]['trakt_id'] = 'tvdb_id' -indexerConfig[INDEXER_TVDB]['xem_origin'] = 'tvdb' -indexerConfig[INDEXER_TVDB]['icon'] = 'thetvdb16.png' -indexerConfig[INDEXER_TVDB]['scene_loc'] = 'http://SickRage.github.io/sb_tvdb_scene_exceptions/exceptions.txt' -indexerConfig[INDEXER_TVDB]['show_url'] = 'http://thetvdb.com/?tab=series&id=' -indexerConfig[INDEXER_TVDB]['base_url'] = 'http://thetvdb.com/api/%(apikey)s/series/' % indexerConfig[INDEXER_TVDB]['api_params'] +indexerConfig[INDEXER_TVDB]['base_url'] %= indexerConfig[INDEXER_TVDB]['api_params'] # insert API key into base url diff --git a/sickbeard/indexers/indexer_exceptions.py b/sickbeard/indexers/indexer_exceptions.py index f8bd2221808289df3fd1eccae37c14081d6e947f..d2a67bd09a4b12d6ca84ebf5f64686bcebba7fd3 100644 --- a/sickbeard/indexers/indexer_exceptions.py +++ b/sickbeard/indexers/indexer_exceptions.py @@ -1,21 +1,20 @@ #!/usr/bin/env python2.7 # encoding:utf-8 -#author:echel0n -#project:indexer_api -#repository:http://github.com/echel0n/Sick-Beard -#license:unlicense (http://unlicense.org/) + +# author:echel0n +# project:indexer_api +# repository:http://github.com/echel0n/Sick-Beard +# license:unlicense (http://unlicense.org/) """Custom exceptions used or raised by indexer_api""" +from tvdb_api.tvdb_exceptions import (tvdb_exception, tvdb_error, tvdb_userabort, tvdb_shownotfound, tvdb_showincomplete, + tvdb_seasonnotfound, tvdb_episodenotfound, tvdb_attributenotfound) + __author__ = "echel0n" __version__ = "1.0" -from tvdb_api.tvdb_exceptions import \ - tvdb_exception, tvdb_attributenotfound, tvdb_episodenotfound, tvdb_error, \ - tvdb_seasonnotfound, tvdb_shownotfound, tvdb_showincomplete, tvdb_userabort - -indexerExcepts = ["indexer_exception", "indexer_error", "indexer_userabort", "indexer_shownotfound", - "indexer_showincomplete", +indexerExcepts = ["indexer_exception", "indexer_error", "indexer_userabort", "indexer_shownotfound", "indexer_showincomplete", "indexer_seasonnotfound", "indexer_episodenotfound", "indexer_attributenotfound"] tvdbExcepts = ["tvdb_exception", "tvdb_error", "tvdb_userabort", "tvdb_shownotfound", "tvdb_showincomplete", diff --git a/sickbeard/logger.py b/sickbeard/logger.py index d84683c170d5a42ed2b0736ea948afca1aecb81c..e65a6a5af8252bf7e8057f912f5959d35c9f450f 100644 --- a/sickbeard/logger.py +++ b/sickbeard/logger.py @@ -16,8 +16,9 @@ # # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -# pylint: disable=W0703 + +import io import os import re import sys @@ -28,13 +29,14 @@ import platform import locale import traceback +from github import Github, InputFileContent + import sickbeard from sickbeard import classes from sickrage.helper.common import dateTimeFormat -from sickrage.helper.encoding import ek, ss from sickrage.helper.exceptions import ex -from github import Github, InputFileContent -import codecs +from sickrage.helper.encoding import ss + # log levels ERROR = logging.ERROR @@ -60,18 +62,24 @@ class NullHandler(logging.Handler): class CensoredFormatter(logging.Formatter, object): - def __init__(self, *args, **kwargs): - super(CensoredFormatter, self).__init__(*args, **kwargs) + def __init__(self, fmt=None, datefmt=None, encoding='utf-8'): + super(CensoredFormatter, self).__init__(fmt, datefmt) + self.encoding = encoding def format(self, record): """Strips censored items from string""" msg = super(CensoredFormatter, self).format(record) - # pylint: disable=W0612 - for k, v in censoredItems.iteritems(): - if v and len(v) > 0 and v in msg: - msg = msg.replace(v, len(v) * '*') + + if not isinstance(msg, unicode): + msg = msg.decode(self.encoding, 'replace') # Convert to unicode + + for _, v in censoredItems.iteritems(): + if not isinstance(v, unicode): + v = v.decode(self.encoding, 'replace') # Convert to unicode + msg = msg.replace(v, len(v) * u'*') + # Needed because Newznab apikey isn't stored as key=value in a section. - msg = re.sub(r'([&?]r|[&?]apikey|[&?]api_key)=[^&]*([&\w]?)', r'\1=**********\2', msg) + msg = re.sub(ur'([&?]r|[&?]apikey|[&?]api_key)=[^&]*([&\w]?)', ur'\1=**********\2', msg) return msg @@ -118,7 +126,7 @@ class Logger(object): # console log handler if self.consoleLogging: console = logging.StreamHandler() - console.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)s::%(message)s', '%H:%M:%S')) + console.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)s::%(message)s', '%H:%M:%S', encoding='utf-8')) console.setLevel(INFO if not self.debugLogging else DEBUG) for logger in self.loggers: @@ -127,8 +135,8 @@ class Logger(object): # rotating log file handler if self.fileLogging: rfh = logging.handlers.RotatingFileHandler(self.logFile, maxBytes=sickbeard.LOG_SIZE, backupCount=sickbeard.LOG_NR, encoding='utf-8') - rfh.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)-8s %(message)s', dateTimeFormat)) - rfh.setLevel(DEBUG) + rfh.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)-8s %(message)s', dateTimeFormat, encoding='utf-8')) + rfh.setLevel(INFO if not self.debugLogging else DEBUG) for logger in self.loggers: logger.addHandler(rfh) @@ -142,28 +150,21 @@ class Logger(object): message = meThread + u" :: " + msg # Change the SSL error to a warning with a link to information about how to fix it. - check = re.sub(r'error \[Errno 1\] _ssl.c:\d{3}: error:\d{8}:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error', 'See: http://git.io/vJrkM', message) + check = re.sub(ur'error \[Errno 1\] _ssl.c:\d{3}: error:\d{8}:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error', 'See: http://git.io/vJrkM', message) if check is not message: message = check level = WARNING - - #Avoid open issues when user only need to clear cache to fix issue - if re.search(r"_mako\'$",message): - #'C__SickRage_gui_slick_views_schedule_mako' - #'_usr_local_sickrage_var_SickRage_gui_slick_views_schedule_mako' - #'_volume1___plugins_AppCentral_sickbeard_tvrage_SickBeard_TVRage_gui_slick_views_schedule_mako' - message = 'Please stop SickRage and delete \SickRage\cache\mako folder. You can see cache folder location in SickRage Help&Info menu' - level = WARNING if level == ERROR: - self.logger.exception(message, *args, **kwargs) classes.ErrorViewer.add(classes.UIError(message)) elif level == WARNING: - self.logger.exception(message, *args, **kwargs) classes.WarningViewer.add(classes.UIError(message)) # if sickbeard.GIT_AUTOISSUES: # self.submit_errors() + + if level == ERROR: + self.logger.exception(message, *args, **kwargs) else: self.logger.log(level, message, *args, **kwargs) @@ -175,11 +176,11 @@ class Logger(object): else: sys.exit(1) - def submit_errors(self): + def submit_errors(self): # Too many local variables, too many branches, pylint: disable=R0912,R0914 submitter_result = u'' issue_id = None - # pylint: disable=R0912,R0914,R0915 + if not (sickbeard.GIT_USERNAME and sickbeard.GIT_PASSWORD and sickbeard.DEBUG and len(classes.ErrorViewer.errors) > 0): submitter_result = u'Please set your GitHub username and password in the config and enable debug. Unable to submit issue ticket to GitHub!' return submitter_result, issue_id @@ -213,12 +214,12 @@ class Logger(object): log_data = None if os.path.isfile(self.logFile): - with ek(codecs.open, *[self.logFile, 'r', 'utf-8']) as f: + with io.open(self.logFile, 'r', encoding='utf-8') as f: log_data = f.readlines() for i in range(1, int(sickbeard.LOG_NR)): if os.path.isfile(self.logFile + ".%i" % i) and (len(log_data) <= 500): - with ek(codecs.open, *[self.logFile + ".%i" % i, 'r', 'utf-8']) as f: + with io.open(self.logFile + ".%i" % i, 'r', encoding='utf-8') as f: log_data += f.readlines() log_data = [line for line in reversed(log_data)] @@ -227,7 +228,7 @@ class Logger(object): for curError in sorted(classes.ErrorViewer.errors, key=lambda error: error.time, reverse=True)[:500]: try: - title_Error = ss(str(curError.title)) + title_Error = ss(curError.title) if not len(title_Error) or title_Error == 'None': title_Error = re.match(r"^[A-Z0-9\-\[\] :]+::\s*(.*)$", ss(curError.message)).group(1) @@ -237,14 +238,13 @@ class Logger(object): self.log("Unable to get error title : " + ex(e), ERROR) gist = None - regex = r"^(%s)\s+([A-Z]+)\s+([0-9A-Z\-]+)\s*(.*)$" % curError.time + regex = ur"^(%s)\s+([A-Z]+)\s+([0-9A-Z\-]+)\s*(.*)$" % curError.time for i, x in enumerate(log_data): - x = ss(x) match = re.match(regex, x) if match: level = match.group(2) if reverseNames[level] == ERROR: - paste_data = "".join(log_data[i:i+50]) + paste_data = u"".join(log_data[i:i+50]) if paste_data: gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)}) break @@ -254,11 +254,10 @@ class Logger(object): message = u"### INFO\n" message += u"Python Version: **" + sys.version[:120].replace('\n', '') + "**\n" message += u"Operating System: **" + platform.platform() + "**\n" - if not 'Windows' in platform.platform(): - try: - message += u"Locale: " + locale.getdefaultlocale()[1] + "\n" - except Exception: - message += u"Locale: unknown" + "\n" + try: + message += u"Locale: " + locale.getdefaultlocale()[1] + "\n" + except Exception: + message += u"Locale: unknown" + "\n" message += u"Branch: **" + sickbeard.BRANCH + "**\n" message += u"Commit: SickRage/SickRage@" + sickbeard.CUR_COMMIT_HASH + "\n" if gist and gist != 'No ERROR found': @@ -275,29 +274,21 @@ class Logger(object): title_Error = u"[APP SUBMITTED]: " + title_Error reports = gh.get_organization(gh_org).get_repo(gh_repo).get_issues(state="all") - def is_mako_error(title): - #[APP SUBMITTED]: Loaded module _home_pi_SickRage_gui_slick_views_home_mako not found in sys.modules - #[APP SUBMITTED]: Loaded module _opt_sickbeard_gui_slick_views_home_mako not found in sys.modules - #[APP SUBMITTED]: Loaded module D__TV_SickRage_gui_slick_views_home_mako not found in sys.modules - return re.search(r".* Loaded module .* not found in sys\.modules", title) is not None - def is_ascii_error(title): - #[APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128) - #[APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined> - return re.search(r".* codec can't .*code .* in position .*:", title) is not None + # [APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128) + # [APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined> + return re.search(ur".* codec can't .*code .* in position .*:", title) is not None def is_malformed_error(title): - #[APP SUBMITTED]: not well-formed (invalid token): line 0, column 0 - re.search(r".* not well-formed \(invalid token\): line .* column .*", title) is not None + # [APP SUBMITTED]: not well-formed (invalid token): line 0, column 0 + return re.search(ur".* not well-formed \(invalid token\): line .* column .*", title) is not None - mako_error = is_mako_error(title_Error) ascii_error = is_ascii_error(title_Error) malformed_error = is_malformed_error(title_Error) issue_found = False for report in reports: if title_Error.rsplit(' :: ')[-1] in report.title or \ - (mako_error and is_mako_error(report.title)) or \ (malformed_error and is_malformed_error(report.title)) or \ (ascii_error and is_ascii_error(report.title)): @@ -331,7 +322,8 @@ class Logger(object): issue_id = None finally: self.submitter_running = False - return submitter_result, issue_id + + return submitter_result, issue_id # pylint: disable=R0903 class Wrapper(object): diff --git a/sickbeard/metadata/__init__.py b/sickbeard/metadata/__init__.py index 2e8f09157dd32d43218324298e337f19887d32ba..aa6862f5e8bc3a20f7961fea9949e4f8bff5902a 100644 --- a/sickbeard/metadata/__init__.py +++ b/sickbeard/metadata/__init__.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -16,15 +18,16 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -__all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', 'wdtv', 'tivo', 'mede8er'] - import sys from sickbeard.metadata import kodi, kodi_12plus, mediabrowser, ps3, wdtv, tivo, mede8er, generic, helpers +__all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', 'wdtv', 'tivo', 'mede8er'] + def available_generators(): return [x for x in __all__ if x not in ['generic', 'helpers']] + def _getMetadataModule(name): name = name.lower() prefix = "sickbeard.metadata." diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py index 6af12b5eb2928f2d18020250db2b20eaaaa1184e..5e570fd8f4fe237b4f0185fd8fbe118a3b8d2eba 100644 --- a/sickbeard/metadata/generic.py +++ b/sickbeard/metadata/generic.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -17,7 +19,8 @@ # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -import os.path +import os +import io import re try: @@ -31,7 +34,6 @@ from sickbeard import helpers from sickbeard import logger from sickbeard.metadata import helpers as metadata_helpers from sickbeard.show_name_helpers import allPossibleShowNames -from sickrage.helper.encoding import ek, ss from sickrage.helper.exceptions import ex from tmdb_api.tmdb_api import TMDB @@ -61,17 +63,17 @@ class GenericMetadata(object): season_posters=False, season_banners=False, season_all_poster=False, season_all_banner=False): - self.name = "Generic" + self.name = u"Generic" - self._ep_nfo_extension = "nfo" - self._show_metadata_filename = "tvshow.nfo" + self._ep_nfo_extension = u"nfo" + self._show_metadata_filename = u"tvshow.nfo" - self.fanart_name = "fanart.jpg" - self.poster_name = "poster.jpg" - self.banner_name = "banner.jpg" + self.fanart_name = u"fanart.jpg" + self.poster_name = u"poster.jpg" + self.banner_name = u"banner.jpg" - self.season_all_poster_name = "season-all-poster.jpg" - self.season_all_banner_name = "season-all-banner.jpg" + self.season_all_poster_name = u"season-all-poster.jpg" + self.season_all_banner_name = u"season-all-banner.jpg" self.show_metadata = show_metadata self.episode_metadata = episode_metadata @@ -88,7 +90,7 @@ class GenericMetadata(object): config_list = [self.show_metadata, self.episode_metadata, self.fanart, self.poster, self.banner, self.episode_thumbnails, self.season_posters, self.season_banners, self.season_all_poster, self.season_all_banner] - return '|'.join([str(int(x)) for x in config_list]) + return u'|'.join([str(int(x)) for x in config_list]) def get_id(self): return GenericMetadata.makeID(self.name) @@ -112,78 +114,59 @@ class GenericMetadata(object): self.season_all_poster = config_list[8] self.season_all_banner = config_list[9] + @staticmethod + def _check_exists(location): + if location: + assert isinstance(location, unicode) + result = os.path.isfile(location) + logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG) + return result + return False + def _has_show_metadata(self, show_obj): - result = ek(os.path.isfile, self.get_show_file_path(show_obj)) - logger.log(u"Checking if " + self.get_show_file_path(show_obj) + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_show_file_path(show_obj)) def _has_episode_metadata(self, ep_obj): - result = ek(os.path.isfile, self.get_episode_file_path(ep_obj)) - logger.log(u"Checking if " + self.get_episode_file_path(ep_obj) + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_episode_file_path(ep_obj)) def _has_fanart(self, show_obj): - result = ek(os.path.isfile, self.get_fanart_path(show_obj)) - logger.log(u"Checking if " + self.get_fanart_path(show_obj) + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_fanart_path(show_obj)) def _has_poster(self, show_obj): - result = ek(os.path.isfile, self.get_poster_path(show_obj)) - logger.log(u"Checking if " + self.get_poster_path(show_obj) + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_poster_path(show_obj)) def _has_banner(self, show_obj): - result = ek(os.path.isfile, self.get_banner_path(show_obj)) - logger.log(u"Checking if " + self.get_banner_path(show_obj) + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_banner_path(show_obj)) def _has_episode_thumb(self, ep_obj): - location = self.get_episode_thumb_path(ep_obj) - result = location != None and ek(os.path.isfile, location) - if location: - logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_episode_thumb_path(ep_obj)) def _has_season_poster(self, show_obj, season): - location = self.get_season_poster_path(show_obj, season) - result = location != None and ek(os.path.isfile, location) - if location: - logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_season_poster_path(show_obj, season)) def _has_season_banner(self, show_obj, season): - location = self.get_season_banner_path(show_obj, season) - result = location != None and ek(os.path.isfile, location) - if location: - logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG) - return result + return self._check_exists(self.get_season_banner_path(show_obj, season)) def _has_season_all_poster(self, show_obj): - result = ek(os.path.isfile, self.get_season_all_poster_path(show_obj)) - logger.log(u"Checking if " + self.get_season_all_poster_path(show_obj) + " exists: " + str(result), - logger.DEBUG) - return result + return self._check_exists(self.get_season_all_poster_path(show_obj)) def _has_season_all_banner(self, show_obj): - result = ek(os.path.isfile, self.get_season_all_banner_path(show_obj)) - logger.log(u"Checking if " + self.get_season_all_banner_path(show_obj) + " exists: " + str(result), - logger.DEBUG) - return result + return self._check_exists(self.get_season_all_banner_path(show_obj)) def get_show_file_path(self, show_obj): - return ek(os.path.join, show_obj.location, self._show_metadata_filename) + return os.path.join(show_obj.location, self._show_metadata_filename) def get_episode_file_path(self, ep_obj): - return ek(helpers.replaceExtension, ep_obj.location, self._ep_nfo_extension) + return helpers.replaceExtension(ep_obj.location, self._ep_nfo_extension) def get_fanart_path(self, show_obj): - return ek(os.path.join, show_obj.location, self.fanart_name) + return os.path.join(show_obj.location, self.fanart_name) def get_poster_path(self, show_obj): - return ek(os.path.join, show_obj.location, self.poster_name) + return os.path.join(show_obj.location, self.poster_name) def get_banner_path(self, show_obj): - return ek(os.path.join, show_obj.location, self.banner_name) + return os.path.join(show_obj.location, self.banner_name) @staticmethod def get_episode_thumb_path(ep_obj): @@ -191,7 +174,8 @@ class GenericMetadata(object): Returns the path where the episode thumbnail should be stored. ep_obj: a TVEpisode instance for which to create the thumbnail """ - if ek(os.path.isfile, ep_obj.location): + assert isinstance(ep_obj.location, unicode) + if os.path.isfile(ep_obj.location): tbn_filename = ep_obj.location.rpartition(".") @@ -220,7 +204,7 @@ class GenericMetadata(object): else: season_poster_filename = 'season' + str(season).zfill(2) - return ek(os.path.join, show_obj.location, season_poster_filename + '-poster.jpg') + return os.path.join(show_obj.location, season_poster_filename + '-poster.jpg') @staticmethod def get_season_banner_path(show_obj, season): @@ -238,13 +222,13 @@ class GenericMetadata(object): else: season_banner_filename = 'season' + str(season).zfill(2) - return ek(os.path.join, show_obj.location, season_banner_filename + '-banner.jpg') + return os.path.join(show_obj.location, season_banner_filename + '-banner.jpg') def get_season_all_poster_path(self, show_obj): - return ek(os.path.join, show_obj.location, self.season_all_poster_name) + return os.path.join(show_obj.location, self.season_all_poster_name) def get_season_all_banner_path(self, show_obj): - return ek(os.path.join, show_obj.location, self.season_all_banner_name) + return os.path.join(show_obj.location, self.season_all_banner_name) # pylint: disable=W0613,R0201 def _show_data(self, show_obj): @@ -282,8 +266,10 @@ class GenericMetadata(object): logger.DEBUG) nfo_file_path = self.get_show_file_path(show_obj) + assert isinstance(nfo_file_path, unicode) + try: - with open(nfo_file_path, 'r') as xmlFileObj: + with io.open(nfo_file_path, 'rb') as xmlFileObj: showXML = etree.ElementTree(file=xmlFileObj) indexerid = showXML.find('id') @@ -297,7 +283,7 @@ class GenericMetadata(object): # Make it purdy helpers.indentXML(root) - showXML.write(nfo_file_path) + showXML.write(nfo_file_path, encoding='UTF-8') helpers.chmodAsParent(nfo_file_path) return True @@ -345,10 +331,9 @@ class GenericMetadata(object): def create_season_banners(self, show_obj): if self.season_banners and show_obj: result = [] + logger.log(u"Metadata provider " + self.name + " creating season banners for " + show_obj.name, logger.DEBUG) for season, _ in show_obj.episodes.iteritems(): # @UnusedVariable if not self._has_season_banner(show_obj, season): - logger.log(u"Metadata provider " + self.name + " creating season banners for " + show_obj.name, - logger.DEBUG) result = result + [self.save_season_banners(show_obj, season)] return all(result) return False @@ -413,19 +398,20 @@ class GenericMetadata(object): return False nfo_file_path = self.get_show_file_path(show_obj) - nfo_file_dir = ek(os.path.dirname, nfo_file_path) + assert isinstance(nfo_file_path, unicode) + + nfo_file_dir = os.path.dirname(nfo_file_path) try: - if not ek(os.path.isdir, nfo_file_dir): + if not os.path.isdir(nfo_file_dir): logger.log(u"Metadata dir didn't exist, creating it at " + nfo_file_dir, logger.DEBUG) - ek(os.makedirs, nfo_file_dir) + os.makedirs(nfo_file_dir) helpers.chmodAsParent(nfo_file_dir) logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG) - nfo_file = open(nfo_file_path, 'w') - - data.write(nfo_file, encoding="utf-8") + nfo_file = io.open(nfo_file_path, 'wb') + data.write(nfo_file, encoding='UTF-8') nfo_file.close() helpers.chmodAsParent(nfo_file_path) except IOError, e: @@ -458,19 +444,18 @@ class GenericMetadata(object): return False nfo_file_path = self.get_episode_file_path(ep_obj) - nfo_file_dir = ek(os.path.dirname, nfo_file_path) + assert isinstance(nfo_file_path, unicode) + nfo_file_dir = os.path.dirname(nfo_file_path) try: - if not ek(os.path.isdir, nfo_file_dir): + if not os.path.isdir(nfo_file_dir): logger.log(u"Metadata dir didn't exist, creating it at " + nfo_file_dir, logger.DEBUG) - ek(os.makedirs, nfo_file_dir) + os.makedirs(nfo_file_dir) helpers.chmodAsParent(nfo_file_dir) logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG) - - nfo_file = open(nfo_file_path, 'w') - - data.write(nfo_file, encoding="utf-8") + nfo_file = io.open(nfo_file_path, 'wb') + data.write(nfo_file, encoding='UTF-8') nfo_file.close() helpers.chmodAsParent(nfo_file_path) except IOError, e: @@ -618,8 +603,6 @@ class GenericMetadata(object): else: return False - return True - def save_season_banners(self, show_obj, season): """ Saves all season banners to disk for the given show. @@ -667,8 +650,6 @@ class GenericMetadata(object): else: return False - return True - def save_season_all_poster(self, show_obj, which=None): # use the default season all poster name poster_path = self.get_season_all_poster_path(show_obj) @@ -702,24 +683,26 @@ class GenericMetadata(object): image_path: file location to save the image to """ + assert isinstance(image_path, unicode) + # don't bother overwriting it - if ek(os.path.isfile, image_path): + if os.path.isfile(image_path): logger.log(u"Image already exists, not downloading", logger.DEBUG) return False - image_dir = ek(os.path.dirname, image_path) + image_dir = os.path.dirname(image_path) if not image_data: - logger.log(u"Unable to retrieve image to save in %s, skipping" % (ss(image_path)), logger.DEBUG) + logger.log(u"Unable to retrieve image to save in %s, skipping" % image_path, logger.DEBUG) return False try: - if not ek(os.path.isdir, image_dir): + if not os.path.isdir(image_dir): logger.log(u"Metadata dir didn't exist, creating it at " + image_dir, logger.DEBUG) - ek(os.makedirs, image_dir) + os.makedirs(image_dir) helpers.chmodAsParent(image_dir) - outFile = open(image_path, 'wb') + outFile = io.open(image_path, 'wb') outFile.write(image_data) outFile.close() helpers.chmodAsParent(image_path) @@ -920,27 +903,29 @@ class GenericMetadata(object): empty_return = (None, None, None) - metadata_path = ek(os.path.join, folder, self._show_metadata_filename) + assert isinstance(folder, unicode) - if not ek(os.path.isdir, folder) or not ek(os.path.isfile, metadata_path): - logger.log(u"Can't load the metadata file from " + repr(metadata_path) + ", it doesn't exist", logger.DEBUG) + metadata_path = os.path.join(folder, self._show_metadata_filename) + + if not os.path.isdir(folder) or not os.path.isfile(metadata_path): + logger.log(u"Can't load the metadata file from " + metadata_path + ", it doesn't exist", logger.DEBUG) return empty_return logger.log(u"Loading show info from metadata file in " + folder, logger.DEBUG) try: - with open(metadata_path, 'r') as xmlFileObj: + with io.open(metadata_path, 'rb') as xmlFileObj: showXML = etree.ElementTree(file=xmlFileObj) - if showXML.findtext('title') == None or (showXML.findtext('tvdbid') == None and showXML.findtext('id') == None): + if showXML.findtext('title') is None or (showXML.findtext('tvdbid') is None and showXML.findtext('id') is None): logger.log(u"Invalid info in tvshow.nfo (missing name or id): %s %s %s" % (showXML.findtext('title'), showXML.findtext('tvdbid'), showXML.findtext('id'))) return empty_return name = showXML.findtext('title') - if showXML.findtext('tvdbid') != None: + if showXML.findtext('tvdbid') is not None: indexer_id = int(showXML.findtext('tvdbid')) - elif showXML.findtext('id') != None: + elif showXML.findtext('id') is not None: indexer_id = int(showXML.findtext('id')) else: logger.log(u"Empty <id> or <tvdbid> field in NFO, unable to find a ID", logger.WARNING) @@ -951,7 +936,7 @@ class GenericMetadata(object): return empty_return indexer = None - if showXML.find('episodeguide/url') != None: + if showXML.find('episodeguide/url') is not None: epg_url = showXML.findtext('episodeguide/url').lower() if str(indexer_id) in epg_url: if 'thetvdb.com' in epg_url: @@ -960,16 +945,15 @@ class GenericMetadata(object): logger.log(u"Invalid Indexer ID (" + str(indexer_id) + "), not using metadata file because it has TVRage info", logger.WARNING) return empty_return - except Exception, e: logger.log( u"There was an error parsing your existing metadata file: '" + metadata_path + "' error: " + ex(e), logger.WARNING) return empty_return - return (indexer_id, name, indexer) + return indexer_id, name, indexer - def _retrieve_show_images_from_tmdb(self, show, type): + def _retrieve_show_images_from_tmdb(self, show, img_type): types = {'poster': 'poster_path', 'banner': None, 'fanart': 'backdrop_path', @@ -992,15 +976,15 @@ class GenericMetadata(object): search = tmdb.Search() for show_name in set(allPossibleShowNames(show)): for result in search.collection({'query': show_name})['results'] + search.tv({'query': show_name})['results']: - if types[type] and getattr(result, types[type]): - return "{0}{1}{2}".format(base_url, max_size, result[types[type]]) + if types[img_type] and getattr(result, types[img_type]): + return "{0}{1}{2}".format(base_url, max_size, result[types[img_type]]) except Exception: pass - logger.log(u"Could not find any " + type + " images on TMDB for " + show.name, logger.INFO) + logger.log(u"Could not find any " + img_type + " images on TMDB for " + show.name, logger.INFO) - def _retrieve_show_images_from_fanart(self, show, type, thumb=False): + def _retrieve_show_images_from_fanart(self, show, img_type, thumb=False): types = { 'poster': fanart.TYPE.TV.POSTER, 'banner': fanart.TYPE.TV.BANNER, @@ -1016,17 +1000,17 @@ class GenericMetadata(object): apikey=sickbeard.FANART_API_KEY, id=indexerid, ws=fanart.WS.TV, - type=types[type], + type=types[img_type], sort=fanart.SORT.POPULAR, limit=fanart.LIMIT.ONE, ) resp = request.response() - url = resp[types[type]][0]['url'] + url = resp[types[img_type]][0]['url'] if thumb: url = re.sub('/fanart/', '/preview/', url) return url except Exception: pass - logger.log(u"Could not find any " + type + " images on Fanart.tv for " + show.name, logger.INFO) + logger.log(u"Could not find any " + img_type + " images on Fanart.tv for " + show.name, logger.INFO) diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py index 6f3eb3ff48145bb9094aec88dbe9a64c69a7404f..c952c6644ef54580b37a88404223c274746ec2f1 100644 --- a/sickbeard/metadata/helpers.py +++ b/sickbeard/metadata/helpers.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -21,21 +23,21 @@ from sickbeard import logger import requests meta_session = requests.Session() -def getShowImage(url, imgNum=None): - image_data = None # @UnusedVariable - if url == None: + +def getShowImage(url, imgNum=None): + if url is None: return None # if they provided a fanart number try to use it instead - if imgNum != None: + if imgNum is not None: tempURL = url.split('-')[0] + "-" + str(imgNum) + ".jpg" else: tempURL = url logger.log(u"Fetching image from " + tempURL, logger.DEBUG) - image_data = helpers.getURL(tempURL, session=meta_session) + image_data = helpers.getURL(tempURL, session=meta_session, needBytes=True) if image_data is None: logger.log(u"There was an error trying to retrieve the image, aborting", logger.WARNING) return diff --git a/sickbeard/metadata/kodi.py b/sickbeard/metadata/kodi.py index ac9e243129304fe7e30e8fc896fdb6e1e7ace333..b093e82729b79f5a094b76caa7e1795157a1f0d4 100644 --- a/sickbeard/metadata/kodi.py +++ b/sickbeard/metadata/kodi.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py index cdd254333058079bb39d481c3903d62e808bdecd..4014b8144db2c3432538c278e686f0a318807635 100644 --- a/sickbeard/metadata/kodi_12plus.py +++ b/sickbeard/metadata/kodi_12plus.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # URL: http://code.google.com/p/sickbeard/ # # This file is part of SickRage. @@ -305,12 +307,12 @@ class KODI_12PlusMetadata(generic.GenericMetadata): thumb = etree.SubElement(episode, "thumb") thumb.text = myEp['filename'].strip() - #watched = etree.SubElement(episode, "watched") - #watched.text = 'false' + # watched = etree.SubElement(episode, "watched") + # watched.text = 'false' if getattr(myEp, 'writer', None): - credits = etree.SubElement(episode, "credits") - credits.text = myEp['writer'].strip() + ep_credits = etree.SubElement(episode, "credits") + ep_credits.text = myEp['writer'].strip() if getattr(myEp, 'director', None): director = etree.SubElement(episode, "director") @@ -321,7 +323,7 @@ class KODI_12PlusMetadata(generic.GenericMetadata): rating.text = myEp['rating'] if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring): - for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()): + for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()): cur_actor = etree.SubElement(episode, "actor") cur_actor_name = etree.SubElement(cur_actor, "name") cur_actor_name.text = actor diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py index c4bd685b73edc80e2eb779251647a2732c9d975e..654465e11d23753794f4f46abbd23e033ec6a904 100644 --- a/sickbeard/metadata/mede8er.py +++ b/sickbeard/metadata/mede8er.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -16,14 +18,14 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. +import io +import os import datetime -import os.path import sickbeard - +from sickbeard import logger, helpers from sickbeard.metadata import mediabrowser -from sickbeard import logger, helpers from sickrage.helper.common import dateFormat from sickrage.helper.encoding import ek from sickrage.helper.exceptions import ex, ShowNotFoundException @@ -316,7 +318,7 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata): if getattr(myShow, '_actors', None) or getattr(myEp, 'gueststars', None): cast = etree.SubElement(episode, "cast") if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring): - for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()): + for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()): cur_actor = etree.SubElement(cast, "actor") cur_actor.text = actor @@ -377,9 +379,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata): logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG) - nfo_file = open(nfo_file_path, 'w') + nfo_file = io.open(nfo_file_path, 'wb') - data.write(nfo_file, encoding="UTF-8") + data.write(nfo_file) nfo_file.close() helpers.chmodAsParent(nfo_file_path) except IOError, e: @@ -422,9 +424,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata): logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG) - nfo_file = open(nfo_file_path, 'w') + nfo_file = io.open(nfo_file_path, 'wb') - data.write(nfo_file, encoding="UTF-8") + data.write(nfo_file) nfo_file.close() helpers.chmodAsParent(nfo_file_path) except IOError, e: diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py index a9d608a20828ac8d62be6f6ccf995748308bd00b..e4319528190a4a2466dc19be684ea0cf6b5acc6c 100644 --- a/sickbeard/metadata/mediabrowser.py +++ b/sickbeard/metadata/mediabrowser.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -98,7 +100,7 @@ class MediaBrowserMetadata(generic.GenericMetadata): # Override with empty methods for unsupported features def retrieveShowMetadata(self, folder): # while show metadata is generated, it is not supported for our lookup - return (None, None, None) + return None, None, None def create_season_all_poster(self, show_obj): pass @@ -272,7 +274,6 @@ class MediaBrowserMetadata(generic.GenericMetadata): indexerid = etree.SubElement(tv_node, "id") indexerid.text = str(myShow['id']) - if getattr(myShow, 'seriesname', None): SeriesName = etree.SubElement(tv_node, "SeriesName") SeriesName.text = myShow['seriesname'] @@ -401,10 +402,11 @@ class MediaBrowserMetadata(generic.GenericMetadata): eps_to_write = [ep_obj] + ep_obj.relatedEps - persons_dict = {} - persons_dict['Director'] = [] - persons_dict['GuestStar'] = [] - persons_dict['Writer'] = [] + persons_dict = { + 'Director': [], + 'GuestStar': [], + 'Writer': [] + } indexer_lang = ep_obj.show.lang diff --git a/sickbeard/metadata/ps3.py b/sickbeard/metadata/ps3.py index 6dbeab00e73f0ae1752e62d0f7bd350c299eba7d..e11da1389730c8a43f62755c921ea48ab2f5ad36 100644 --- a/sickbeard/metadata/ps3.py +++ b/sickbeard/metadata/ps3.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -77,7 +79,7 @@ class PS3Metadata(generic.GenericMetadata): # Override with empty methods for unsupported features def retrieveShowMetadata(self, folder): # no show metadata generated, we abort this lookup function - return (None, None, None) + return None, None, None def create_show_metadata(self, show_obj): pass diff --git a/sickbeard/metadata/tivo.py b/sickbeard/metadata/tivo.py index 228254a3f3165448dcaf20686fedb5ed89d58fb0..6d9cd236ed8e4ec644b0e50c3585d035765f75b8 100644 --- a/sickbeard/metadata/tivo.py +++ b/sickbeard/metadata/tivo.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # Author: Gordon Turner <gordonturner@gordonturner.ca> # URL: http://code.google.com/p/sickbeard/ @@ -18,11 +20,11 @@ # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -import datetime +import io import os +import datetime import sickbeard - from sickbeard import logger, helpers from sickbeard.metadata import generic from sickrage.helper.encoding import ek @@ -84,7 +86,7 @@ class TIVOMetadata(generic.GenericMetadata): # Override with empty methods for unsupported features def retrieveShowMetadata(self, folder): # no show metadata generated, we abort this lookup function - return (None, None, None) + return None, None, None def create_show_metadata(self, show_obj): pass @@ -224,7 +226,7 @@ class TIVOMetadata(generic.GenericMetadata): # after the episode's title and before the description on the Program screen. # FIXME: Hardcode isEpisode to true for now, not sure how to handle movies - data += ("isEpisode : true\n") + data += "isEpisode : true\n" # Write the synopsis of the video here # Micrsoft Word's smartquotes can die in a fire. @@ -232,8 +234,7 @@ class TIVOMetadata(generic.GenericMetadata): # Replace double curly quotes sanitizedDescription = sanitizedDescription.replace(u"\u201c", "\"").replace(u"\u201d", "\"") # Replace single curly quotes - sanitizedDescription = sanitizedDescription.replace(u"\u2018", "'").replace(u"\u2019", "'").replace( - u"\u02BC", "'") + sanitizedDescription = sanitizedDescription.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(u"\u02BC", "'") data += ("description : " + sanitizedDescription + "\n") @@ -320,7 +321,7 @@ class TIVOMetadata(generic.GenericMetadata): logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG) - with open(nfo_file_path, 'w') as nfo_file: + with io.open(nfo_file_path, 'w') as nfo_file: # Calling encode directly, b/c often descriptions have wonky characters. nfo_file.write(data.encode("utf-8")) diff --git a/sickbeard/metadata/wdtv.py b/sickbeard/metadata/wdtv.py index 7dfa88f7dbad441a0cd53fab4a6435e89d8e833b..03310c80cecf56ca953ca43e0e6a75878cd3e32a 100644 --- a/sickbeard/metadata/wdtv.py +++ b/sickbeard/metadata/wdtv.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -93,7 +95,7 @@ class WDTVMetadata(generic.GenericMetadata): # Override with empty methods for unsupported features def retrieveShowMetadata(self, folder): # no show metadata generated, we abort this lookup function - return (None, None, None) + return None, None, None def create_show_metadata(self, show_obj): pass diff --git a/sickbeard/name_cache.py b/sickbeard/name_cache.py index d8b5bfed722790b59e49c064169cb2d8abcfee57..c577acd101b2618e89937fad7a4a2002b8f5fce7 100644 --- a/sickbeard/name_cache.py +++ b/sickbeard/name_cache.py @@ -31,9 +31,6 @@ def addNameToCache(name, indexer_id=0): :param name: The show name to cache :param indexer_id: the TVDB id that this show should be cached with (can be None/0 for unknown) """ - - global nameCache - cacheDB = db.DBConnection('cache.db') # standardize the name we're using to account for small differences in providers @@ -50,8 +47,6 @@ def retrieveNameFromCache(name): :param name: The show name to look up. :return: the TVDB id that resulted from the cache lookup or None if the show wasn't found in the cache """ - global nameCache - name = sickbeard.helpers.full_sanitizeSceneName(name) if name in nameCache: return int(nameCache[name]) @@ -60,12 +55,6 @@ def clearCache(indexerid=0): """ Deletes all "unknown" entries from the cache (names with indexer_id of 0). """ - global nameCache - - # init name cache - if not nameCache: - nameCache = {} - cacheDB = db.DBConnection('cache.db') cacheDB.action("DELETE FROM scene_names WHERE indexer_id = ? OR indexer_id = ?", (indexerid, 0)) @@ -87,7 +76,6 @@ def buildNameCache(show=None): :param show: Specify show to build name cache for, if None, just do all shows """ - global nameCache with nameCacheLock: sickbeard.scene_exceptions.retrieve_exceptions() @@ -105,4 +93,4 @@ def buildNameCache(show=None): continue nameCache[name] = int(show.indexerid) - logger.log(u"Internal name cache for " + show.name + " set to: [ " + u', '.join([key for key, value in nameCache.iteritems() if value == show.indexerid]) +" ]" , logger.DEBUG) + logger.log(u"Internal name cache for " + show.name + " set to: [ " + u', '.join([key for key, value in nameCache.iteritems() if value == show.indexerid]) +" ]", logger.DEBUG) diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py index 2e77fe3756ee3d4ef3dba43f4b41934f704dfaf9..9ea8bbe6119ed9aa778f3c84602152e3031b011e 100644 --- a/sickbeard/name_parser/parser.py +++ b/sickbeard/name_parser/parser.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -78,7 +80,7 @@ class NameParser(object): def _compile_regexes(self, regexMode): if regexMode == self.ANIME_REGEX: dbg_str = u"ANIME" - uncompiled_regex = [regexes.anime_regexes, regexes.normal_regexes] + uncompiled_regex = [regexes.anime_regexes] elif regexMode == self.NORMAL_REGEX: dbg_str = u"NORMAL" uncompiled_regex = [regexes.normal_regexes] @@ -346,7 +348,7 @@ class NameParser(object): b = getattr(second, attr) # if a is good use it - if a != None or (isinstance(a, list) and a): + if a is not None or (isinstance(a, list) and a): return a # if not use b (if b isn't set it'll just be default) else: @@ -459,7 +461,7 @@ class NameParser(object): "Unable to parse " + name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace')) # if there's no useful info in it then raise an exception - if final_result.season_number == None and not final_result.episode_numbers and final_result.air_date == None and not final_result.ab_episode_numbers and not final_result.series_name: + if final_result.season_number is None and not final_result.episode_numbers and final_result.air_date is None and not final_result.ab_episode_numbers and not final_result.series_name: raise InvalidNameException("Unable to parse " + name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace')) if cache_result: @@ -483,7 +485,7 @@ class ParseResult(object): score=None, quality=None, version=None - ): + ): self.original_name = original_name @@ -545,11 +547,11 @@ class ParseResult(object): return True def __str__(self): - if self.series_name != None: + if self.series_name is not None: to_return = self.series_name + u' - ' else: to_return = u'' - if self.season_number != None: + if self.season_number is not None: to_return += 'S' + str(self.season_number).zfill(2) if self.episode_numbers and len(self.episode_numbers): for e in self.episode_numbers: @@ -595,7 +597,7 @@ class NameParserCache(object): def get(self, name): if name in self._previous_parsed: - logger.log("Using cached parse result for: " + name, logger.DEBUG) + logger.log(u"Using cached parse result for: " + name, logger.DEBUG) return self._previous_parsed[name] diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py index 432da8ed1250b800cd940f96debe32e74ed68125..b2beb6882e3eb7d75a7db5548994d307ffc70d96 100644 --- a/sickbeard/name_parser/regexes.py +++ b/sickbeard/name_parser/regexes.py @@ -1,3 +1,5 @@ +# coding=utf-8 + # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -116,7 +118,7 @@ normal_regexes = [ '''), ('newpct', - # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano] + # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano] r''' (?P<series_name>.+?) # Showw_Name: "Sobrenatural" (?:.-.+\d{1,2}.\[) # Separator and junk: " - Temporada 10 [" @@ -147,7 +149,7 @@ normal_regexes = [ ((?<![. _-])(?<!WEB) # Make sure this is really the release group -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$ # Group ''' - ), + ), ('no_season_multi_ep', # Show.Name.E02-03 @@ -162,7 +164,7 @@ normal_regexes = [ ((?<![. _-])(?<!WEB) # Make sure this is really the release group -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$ # Group ''' - ), + ), ('no_season_general', # Show.Name.E23.Test @@ -180,7 +182,7 @@ normal_regexes = [ ((?<![. _-])(?<!WEB) # Make sure this is really the release group -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$ # Group ''' - ), + ), ('no_season', # Show Name - 01 - Ep Name @@ -195,7 +197,7 @@ normal_regexes = [ ((?<![. _-])(?<!WEB) # Make sure this is really the release group -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$ # Group ''' - ), + ), ('bare', # Show.Name.102.Source.Quality.Etc-Group @@ -239,14 +241,14 @@ anime_regexes = [ # [ISLAND]One_Piece_679_[VOSTFR]_[8bit]_[720p]_[EB7838FC].mp4 r''' ^\[(?P<release_group>ISLAND?)\] # Release Group - (?P<series_name>.+?)[ ._-]+ # Show_Name and separator - (?P<ep_ab_num>\d{1,3})[ ._-]+ # Episode number - (\[VOSTFR\]) - ([ ._-]+\[[vV](?P<version>[0-9])\])*[ ._-]+ # Version - (\[(8bit|10bit)\])?[ ._-]+ - \[(?P<extra_info>(\d{3,4}[xp]?\d{0,4})?[\.\w\s-]*)\][ ._-]+ # Extra info - (\[(?P<crc>\w{8})\])? # CRC - .*? + (?P<series_name>.+?)[ ._-]+ # Show_Name and separator + (?P<ep_ab_num>\d{1,3})[ ._-]+ # Episode number + (\[VOSTFR\]) + ([ ._-]+\[[vV](?P<version>[0-9])\])*[ ._-]+ # Version + (\[(8bit|10bit)\])?[ ._-]+ + \[(?P<extra_info>(\d{3,4}[xp]?\d{0,4})?[\.\w\s-]*)\][ ._-]+ # Extra info + (\[(?P<crc>\w{8})\])? # CRC + .*? '''), ('anime_Kaerizaki-Fansub', @@ -354,7 +356,7 @@ anime_regexes = [ .*? ''' - ), + ), ('anime_and_normal_x', # Bleach - s16e03-04 - 313-314 @@ -373,7 +375,7 @@ anime_regexes = [ .*? ''' - ), + ), ('anime_and_normal_reverse', # Bleach - 313-314 - s16e03-04 @@ -389,7 +391,7 @@ anime_regexes = [ (?P<extra_ep_num>\d+))* # additional E03/etc .*? ''' - ), + ), ('anime_and_normal_front', # 165.Naruto Shippuuden.s08e014 @@ -404,7 +406,7 @@ anime_regexes = [ (?P<extra_ep_num>\d+))* # additional E03/etc .*? ''' - ), + ), ('anime_ep_name', r''' @@ -418,7 +420,7 @@ anime_regexes = [ (?:\[(?P<crc>\w{8})\])? .*? ''' - ), + ), ('anime_WarB3asT', # 003. Show Name - Ep Name.ext diff --git a/sickbeard/naming.py b/sickbeard/naming.py index 87cf89f6423d490136473ae8a2f20375381f03ab..752ef9817147a864582ea6611f709687eb642ec3 100644 --- a/sickbeard/naming.py +++ b/sickbeard/naming.py @@ -25,9 +25,9 @@ from sickbeard import tv from sickbeard import common from sickbeard import logger from sickbeard.name_parser.parser import NameParser -from sickrage.helper.encoding import ek +from sickbeard.common import Quality, DOWNLOADED -from common import Quality, DOWNLOADED +from sickrage.helper.encoding import ek name_presets = ( '%SN - %Sx%0E - %EN', @@ -222,7 +222,7 @@ def validate_name(pattern, multi=None, anime_type=None, file_only=False, abd=Fal logger.log(u"Unable to parse " + new_name + ", not valid", logger.DEBUG) return False - logger.log("The name " + new_name + " parsed into " + str(result), logger.DEBUG) + logger.log(u"The name " + new_name + " parsed into " + str(result), logger.DEBUG) if abd or sports: if result.air_date != ep.airdate: diff --git a/sickbeard/network_timezones.py b/sickbeard/network_timezones.py index f6cc0030081d6f0856027d05bac9d3136ed40a2e..78a9278693abe0abe64a6b0ec82fb37f4e0a1a4d 100644 --- a/sickbeard/network_timezones.py +++ b/sickbeard/network_timezones.py @@ -21,7 +21,6 @@ import re import datetime import requests from dateutil import tz -from os import name as osname from sickbeard import db from sickbeard import helpers @@ -33,11 +32,7 @@ am_regex = re.compile(r'(A[. ]? ?M)', flags=re.IGNORECASE) pm_regex = re.compile(r'(P[. ]? ?M)', flags=re.IGNORECASE) network_dict = None - -if osname == 'nt' and tz.tzwinlocal is not None: - sb_timezone = tz.tzwinlocal() -else: - sb_timezone = tz.tzlocal() +sb_timezone = tz.tzwinlocal() if tz.tzwinlocal else tz.tzlocal() # update the network timezone table def update_network_dict(): @@ -53,7 +48,7 @@ def update_network_dict(): d = {} try: for line in url_data.splitlines(): - (key, val) = line.decode('utf-8').strip().rsplit(u':', 1) + (key, val) = line.strip().rsplit(u':', 1) if key is None or val is None: continue d[key] = val @@ -76,7 +71,7 @@ def update_network_dict(): del network_list[network] if network_list: - purged = list(x for x in network_list) + purged = [x for x in network_list] queries.append(['DELETE FROM network_timezones WHERE network_name IN (%s);' % ','.join(['?'] * len(purged)), purged]) if queries: @@ -170,8 +165,7 @@ def parse_date_time(d, t, network): te = datetime.datetime.fromordinal(helpers.tryInt(d) or 1) try: foreign_timezone = get_network_timezone(network, network_dict) - foreign_naive = datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=foreign_timezone) - return foreign_naive + return datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=foreign_timezone) except Exception: return datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=sb_timezone) diff --git a/sickbeard/notifiers/boxcar.py b/sickbeard/notifiers/boxcar.py index 40be70aa9110f096fe9ba28b0adf409587243690..90252e00ac52ec87032b47c9255859a6251f55fb 100644 --- a/sickbeard/notifiers/boxcar.py +++ b/sickbeard/notifiers/boxcar.py @@ -73,14 +73,14 @@ class BoxcarNotifier: except urllib2.HTTPError, e: # if we get an error back that doesn't have an error code then who knows what's really happening if not hasattr(e, 'code'): - logger.log("Boxcar notification failed. Error code: " + ex(e), logger.ERROR) + logger.log(u"Boxcar notification failed. Error code: " + ex(e), logger.ERROR) return False else: - logger.log("Boxcar notification failed. Error code: " + str(e.code), logger.WARNING) + logger.log(u"Boxcar notification failed. Error code: " + str(e.code), logger.WARNING) # HTTP status 404 if the provided email address isn't a Boxcar user. if e.code == 404: - logger.log("Username is wrong/not a boxcar email. Boxcar will send an email to it", logger.WARNING) + logger.log(u"Username is wrong/not a boxcar email. Boxcar will send an email to it", logger.WARNING) return False # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service. @@ -88,26 +88,26 @@ class BoxcarNotifier: # If the user has already added your service, we'll return an HTTP status code of 401. if subscribe: - logger.log("Already subscribed to service", logger.ERROR) + logger.log(u"Already subscribed to service", logger.ERROR) # i dont know if this is true or false ... its neither but i also dont know how we got here in the first place return False - #HTTP status 401 if the user doesn't have the service added + # HTTP status 401 if the user doesn't have the service added else: subscribeNote = self._sendBoxcar(msg, title, email, True) if subscribeNote: - logger.log("Subscription send", logger.DEBUG) + logger.log(u"Subscription send", logger.DEBUG) return True else: - logger.log("Subscription could not be send", logger.ERROR) + logger.log(u"Subscription could not be send", logger.ERROR) return False # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters elif e.code == 400: - logger.log("Wrong data sent to boxcar", logger.ERROR) + logger.log(u"Wrong data sent to boxcar", logger.ERROR) return False - logger.log("Boxcar notification successful.", logger.INFO) + logger.log(u"Boxcar notification successful.", logger.INFO) return True def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]): @@ -140,14 +140,14 @@ class BoxcarNotifier: """ if not sickbeard.USE_BOXCAR and not force: - logger.log("Notification for Boxcar not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for Boxcar not enabled, skipping this notification", logger.DEBUG) return False # if no username was given then use the one from the config if not username: username = sickbeard.BOXCAR_USERNAME - logger.log("Sending notification for " + message, logger.DEBUG) + logger.log(u"Sending notification for " + message, logger.DEBUG) return self._sendBoxcar(message, title, username) diff --git a/sickbeard/notifiers/boxcar2.py b/sickbeard/notifiers/boxcar2.py index b6e9f468071b045e18e892ba8b8b0219dd36f960..3dd4a9a5a31662b0de443c9d970a2e46897e00ef 100644 --- a/sickbeard/notifiers/boxcar2.py +++ b/sickbeard/notifiers/boxcar2.py @@ -45,7 +45,7 @@ class Boxcar2Notifier: """ # build up the URL and parameters - #more info goes here - https://boxcar.uservoice.com/knowledgebase/articles/306788-how-to-send-your-boxcar-account-a-notification + # more info goes here - https://boxcar.uservoice.com/knowledgebase/articles/306788-how-to-send-your-boxcar-account-a-notification msg = msg.strip() curUrl = API_URL @@ -65,22 +65,22 @@ class Boxcar2Notifier: except Exception as e: # if we get an error back that doesn't have an error code then who knows what's really happening if not hasattr(e, 'code'): - logger.log("Boxcar2 notification failed." + ex(e), logger.ERROR) + logger.log(u"Boxcar2 notification failed." + ex(e), logger.ERROR) return False else: - logger.log("Boxcar2 notification failed. Error code: " + str(e.code), logger.WARNING) + logger.log(u"Boxcar2 notification failed. Error code: " + str(e.code), logger.WARNING) # HTTP status 404 if e.code == 404: - logger.log("Access token is invalid. Check it.", logger.WARNING) + logger.log(u"Access token is invalid. Check it.", logger.WARNING) return False # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters elif e.code == 400: - logger.log("Wrong data send to boxcar2", logger.ERROR) + logger.log(u"Wrong data send to boxcar2", logger.ERROR) return False - logger.log("Boxcar2 notification successful.", logger.DEBUG) + logger.log(u"Boxcar2 notification successful.", logger.DEBUG) return True def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]): @@ -112,14 +112,14 @@ class Boxcar2Notifier: """ if not sickbeard.USE_BOXCAR2: - logger.log("Notification for Boxcar2 not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for Boxcar2 not enabled, skipping this notification", logger.DEBUG) return False # if no username was given then use the one from the config if not accesstoken: accesstoken = sickbeard.BOXCAR2_ACCESSTOKEN - logger.log("Sending notification for " + message, logger.DEBUG) + logger.log(u"Sending notification for " + message, logger.DEBUG) self._sendBoxcar2(message, title, accesstoken) return True diff --git a/sickbeard/notifiers/emailnotify.py b/sickbeard/notifiers/emailnotify.py index f6c9633597249207975a451f54159328d2bdc974..c63b036708ea94a152ffb45721030be2e3362630 100644 --- a/sickbeard/notifiers/emailnotify.py +++ b/sickbeard/notifiers/emailnotify.py @@ -59,7 +59,7 @@ class EmailNotifier: show = self._parseEp(ep_name) to = self._generate_recipients(show) if len(to) == 0: - logger.log('Skipping email notify because there are no configured recipients', logger.WARNING) + logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING) else: try: msg = MIMEMultipart('alternative') @@ -81,9 +81,9 @@ class EmailNotifier: msg['Date'] = formatdate(localtime=True) if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS, sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg): - logger.log("Snatch notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG) + logger.log(u"Snatch notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG) else: - logger.log("Snatch notification ERROR: %s" % self.last_err, logger.ERROR) + logger.log(u"Snatch notification ERROR: %s" % self.last_err, logger.ERROR) def notify_download(self, ep_name, title="Completed:"): """ @@ -98,7 +98,7 @@ class EmailNotifier: show = self._parseEp(ep_name) to = self._generate_recipients(show) if len(to) == 0: - logger.log('Skipping email notify because there are no configured recipients', logger.WARNING) + logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING) else: try: msg = MIMEMultipart('alternative') @@ -120,9 +120,9 @@ class EmailNotifier: msg['Date'] = formatdate(localtime=True) if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS, sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg): - logger.log("Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG) + logger.log(u"Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG) else: - logger.log("Download notification ERROR: %s" % self.last_err, logger.ERROR) + logger.log(u"Download notification ERROR: %s" % self.last_err, logger.ERROR) def notify_subtitle_download(self, ep_name, lang, title="Downloaded subtitle:"): """ @@ -137,7 +137,7 @@ class EmailNotifier: show = self._parseEp(ep_name) to = self._generate_recipients(show) if len(to) == 0: - logger.log('Skipping email notify because there are no configured recipients', logger.WARNING) + logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING) else: try: msg = MIMEMultipart('alternative') @@ -158,9 +158,9 @@ class EmailNotifier: msg['To'] = ','.join(to) if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS, sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg): - logger.log("Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG) + logger.log(u"Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG) else: - logger.log("Download notification ERROR: %s" % self.last_err, logger.ERROR) + logger.log(u"Download notification ERROR: %s" % self.last_err, logger.ERROR) def notify_git_update(self, new_version="??"): @@ -184,11 +184,11 @@ class EmailNotifier: addrs.append(addr) addrs = set(addrs) - logger.log('Notification recipients: %s' % addrs, logger.DEBUG) + logger.log(u'Notification recipients: %s' % addrs, logger.DEBUG) return addrs def _sendmail(self, host, port, smtp_from, use_tls, user, pwd, to, msg, smtpDebug=False): - logger.log('HOST: %s; PORT: %s; FROM: %s, TLS: %s, USER: %s, PWD: %s, TO: %s' % ( + logger.log(u'HOST: %s; PORT: %s; FROM: %s, TLS: %s, USER: %s, PWD: %s, TO: %s' % ( host, port, smtp_from, use_tls, user, pwd, to), logger.DEBUG) try: srv = smtplib.SMTP(host, int(port)) @@ -202,13 +202,13 @@ class EmailNotifier: try: if (use_tls == '1' or use_tls == True) or (len(user) > 0 and len(pwd) > 0): srv.ehlo() - logger.log('Sent initial EHLO command!', logger.DEBUG) + logger.log(u'Sent initial EHLO command!', logger.DEBUG) if use_tls == '1' or use_tls == True: srv.starttls() - logger.log('Sent STARTTLS command!', logger.DEBUG) + logger.log(u'Sent STARTTLS command!', logger.DEBUG) if len(user) > 0 and len(pwd) > 0: srv.login(user, pwd) - logger.log('Sent LOGIN command!', logger.DEBUG) + logger.log(u'Sent LOGIN command!', logger.DEBUG) srv.sendmail(smtp_from, to, msg.as_string()) srv.quit() return True @@ -222,7 +222,7 @@ class EmailNotifier: sep = " - " titles = ep_name.split(sep) titles.sort(key=len, reverse=True) - logger.log("TITLES: %s" % titles, logger.DEBUG) + logger.log(u"TITLES: %s" % titles, logger.DEBUG) return titles diff --git a/sickbeard/notifiers/freemobile.py b/sickbeard/notifiers/freemobile.py index e4dba3732626c064c83d95f7001bef519e6539b9..ab203bcba5c0c6020abd662ede3d5acf04658217 100644 --- a/sickbeard/notifiers/freemobile.py +++ b/sickbeard/notifiers/freemobile.py @@ -43,7 +43,7 @@ class FreeMobileNotifier: if apiKey == None: apiKey = sickbeard.FREEMOBILE_APIKEY - logger.log("Free Mobile in use with API KEY: " + apiKey, logger.DEBUG) + logger.log(u"Free Mobile in use with API KEY: " + apiKey, logger.DEBUG) # build up the URL and parameters msg = msg.strip() @@ -53,7 +53,7 @@ class FreeMobileNotifier: req = urllib2.Request(URL) # send the request to Free Mobile try: - reponse = urllib2.urlopen(req) + urllib2.urlopen(req) except IOError, e: if hasattr(e,'code'): if e.code == 400: @@ -115,10 +115,10 @@ class FreeMobileNotifier: """ if not sickbeard.USE_FREEMOBILE and not force: - logger.log("Notification for Free Mobile not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for Free Mobile not enabled, skipping this notification", logger.DEBUG) return False, "Disabled" - logger.log("Sending a SMS for " + message, logger.DEBUG) + logger.log(u"Sending a SMS for " + message, logger.DEBUG) return self._sendFreeMobileSMS(title, message, id, apiKey) diff --git a/sickbeard/notifiers/growl.py b/sickbeard/notifiers/growl.py index b71510b4eb2b3289c3b850d136ca896e19dd43d6..10e32204b20681b379081780f3dd1c4139c7ab65 100644 --- a/sickbeard/notifiers/growl.py +++ b/sickbeard/notifiers/growl.py @@ -52,10 +52,10 @@ class GrowlNotifier: def _send_growl(self, options, message=None): - #Send Notification + # Send Notification notice = gntp.GNTPNotice() - #Required + # Required notice.add_header('Application-Name', options['app']) notice.add_header('Notification-Name', options['name']) notice.add_header('Notification-Title', options['title']) @@ -63,7 +63,7 @@ class GrowlNotifier: if options['password']: notice.set_password(options['password']) - #Optional + # Optional if options['sticky']: notice.add_header('Notification-Sticky', options['sticky']) if options['priority']: @@ -169,7 +169,7 @@ class GrowlNotifier: opts['app'] = 'SickRage' opts['debug'] = False - #Send Registration + # Send Registration register = gntp.GNTPRegister() register.add_header('Application-Name', opts['app']) register.add_header('Application-Icon', self.sr_logo_url) diff --git a/sickbeard/notifiers/kodi.py b/sickbeard/notifiers/kodi.py index ceaa80345a8b9a216fb70883d07c49f00ea427ec..e2303b4e8e6750ce375d891f513771f12a30304c 100644 --- a/sickbeard/notifiers/kodi.py +++ b/sickbeard/notifiers/kodi.py @@ -121,7 +121,7 @@ class KODINotifier: # suppress notifications if the notifier is disabled but the notify options are checked if not sickbeard.USE_KODI and not force: - logger.log("Notification for KODI not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for KODI not enabled, skipping this notification", logger.DEBUG) return False result = '' diff --git a/sickbeard/notifiers/libnotify.py b/sickbeard/notifiers/libnotify.py index dc86055c72e4fd45f3930676ecba1f6793cdf967..402b99a1e53dfaf16264e069df4ab8efa65d8105 100644 --- a/sickbeard/notifiers/libnotify.py +++ b/sickbeard/notifiers/libnotify.py @@ -29,7 +29,7 @@ def diagnose(): user-readable message indicating possible issues. ''' try: - from gi.repository import Notify #@UnusedImport + from gi.repository import Notify # @UnusedImport except ImportError: return (u"<p>Error: gir-notify isn't installed. On Ubuntu/Debian, install the " u"<a href=\"apt:gir1.2-notify-0.7\">gir1.2-notify-0.7</a> or " diff --git a/sickbeard/notifiers/nma.py b/sickbeard/notifiers/nma.py index f1dffcbe7fa56192793a90b59a7bcbed2229d0d8..c0cb173f2d7e3f2e7ea090b969b14f80cda1acd8 100644 --- a/sickbeard/notifiers/nma.py +++ b/sickbeard/notifiers/nma.py @@ -51,7 +51,7 @@ class NMA_Notifier: if len(keys) > 1: batch = True - logger.log("NMA: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, batch=%s" % (event, message, nma_priority, batch), logger.DEBUG) + logger.log(u"NMA: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, batch=%s" % (event, message, nma_priority, batch), logger.DEBUG) response = p.push(application=title, event=event, description=message, priority=nma_priority, batch_mode=batch) if not response[nma_api][u'code'] == u'200': diff --git a/sickbeard/notifiers/nmj.py b/sickbeard/notifiers/nmj.py index e86b81be0724119803ef681ec165ea9266157707..313998de30ffa91d9b7222bca774facdd0b781b0 100644 --- a/sickbeard/notifiers/nmj.py +++ b/sickbeard/notifiers/nmj.py @@ -87,7 +87,7 @@ class NMJNotifier: def notify_snatch(self, ep_name): return False - #Not implemented: Start the scanner when snatched does not make any sense + # Not implemented: Start the scanner when snatched does not make any sense def notify_download(self, ep_name): if sickbeard.USE_NMJ: @@ -184,7 +184,7 @@ class NMJNotifier: force: If True then the notification will be sent even if NMJ is disabled in the config """ if not sickbeard.USE_NMJ and not force: - logger.log("Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG) return False # fill in omitted parameters diff --git a/sickbeard/notifiers/nmjv2.py b/sickbeard/notifiers/nmjv2.py index 7c02bca1151e14407a3545cea2f9847eb7e04788..24464b039e68ce6780f2e2eeeee7ab54c49d4fe7 100644 --- a/sickbeard/notifiers/nmjv2.py +++ b/sickbeard/notifiers/nmjv2.py @@ -33,7 +33,7 @@ except ImportError: class NMJv2Notifier: def notify_snatch(self, ep_name): return False - #Not implemented: Start the scanner when snatched does not make any sense + # Not implemented: Start the scanner when snatched does not make any sense def notify_download(self, ep_name): self._notifyNMJ() @@ -104,7 +104,7 @@ class NMJv2Notifier: Returns: True if the request succeeded, False otherwise """ - #if a host is provided then attempt to open a handle to that URL + # if a host is provided then attempt to open a handle to that URL try: url_scandir = "http://" + host + ":8008/metadata_database?arg0=update_scandir&arg1=" + sickbeard.NMJv2_DATABASE + "&arg2=&arg3=update_all" logger.log(u"NMJ scan update command sent to host: %s" % (host), logger.DEBUG) @@ -165,7 +165,7 @@ class NMJv2Notifier: force: If True then the notification will be sent even if NMJ is disabled in the config """ if not sickbeard.USE_NMJv2 and not force: - logger.log("Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG) return False # fill in omitted parameters diff --git a/sickbeard/notifiers/prowl.py b/sickbeard/notifiers/prowl.py index 93400e5322b3f479e4a9b6d3b5e15894040c3c88..195631498b4ea19fc6e2472456836c6572c00f3a 100644 --- a/sickbeard/notifiers/prowl.py +++ b/sickbeard/notifiers/prowl.py @@ -73,7 +73,7 @@ class ProwlNotifier: title = "SickRage" - logger.log("PROWL: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, api=%s" % (event, message, prowl_priority, prowl_api), logger.DEBUG) + logger.log(u"PROWL: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, api=%s" % (event, message, prowl_priority, prowl_api), logger.DEBUG) http_handler = HTTPSConnection("api.prowlapp.com") diff --git a/sickbeard/notifiers/pushbullet.py b/sickbeard/notifiers/pushbullet.py index 275578d47179b613ef8af0345b779ecb589a3fa0..5f8bc65d932bfadc4a277bdd778d4497c9c5b094 100644 --- a/sickbeard/notifiers/pushbullet.py +++ b/sickbeard/notifiers/pushbullet.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -* # Author: Pedro Correia (http://github.com/pedrocorreia/) # Based on pushalot.py by Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ @@ -17,107 +18,99 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -import socket -from httplib import HTTPSConnection, HTTPException import json -from ssl import SSLError +import requests +import traceback + import sickbeard -from sickbeard import logger, common +from sickbeard import logger +from sickbeard.common import notifyStrings +from sickbeard.common import NOTIFY_SNATCH +from sickbeard.common import NOTIFY_DOWNLOAD +from sickbeard.common import NOTIFY_GIT_UPDATE +from sickbeard.common import NOTIFY_GIT_UPDATE_TEXT +from sickbeard.common import NOTIFY_SUBTITLE_DOWNLOAD + + +class PushbulletNotifier(object): + session = requests.Session() + TEST_EVENT = 'Test' + def __init__(self): + pass -class PushbulletNotifier: def test_notify(self, pushbullet_api): - return self._sendPushbullet(pushbullet_api, event="Test", message="Testing Pushbullet settings from SickRage", - method="POST", notificationType="note", force=True) + logger.log(u"Sending a test Pushbullet notification.", logger.DEBUG) + return self._sendPushbullet(pushbullet_api, event=self.TEST_EVENT, message="Testing Pushbullet settings from SickRage") def get_devices(self, pushbullet_api): - return self._sendPushbullet(pushbullet_api, method="GET", force=True) + logger.log(u"Testing Pushbullet authentication and retrieving the device list.", logger.DEBUG) + return self._sendPushbullet(pushbullet_api) def notify_snatch(self, ep_name): if sickbeard.PUSHBULLET_NOTIFY_ONSNATCH: - self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_SNATCH] + " : " + ep_name, message=ep_name, - notificationType="note", method="POST") + self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_SNATCH] + " : " + ep_name, message=ep_name) def notify_download(self, ep_name): if sickbeard.PUSHBULLET_NOTIFY_ONDOWNLOAD: - self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_DOWNLOAD] + " : " + ep_name, - message=ep_name, notificationType="note", method="POST") + self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_DOWNLOAD] + " : " + ep_name, message=ep_name) def notify_subtitle_download(self, ep_name, lang): if sickbeard.PUSHBULLET_NOTIFY_ONSUBTITLEDOWNLOAD: - self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_SUBTITLE_DOWNLOAD] + " : " + ep_name + " : " + lang, - message=ep_name + ": " + lang, notificationType="note", method="POST") - - def notify_git_update(self, new_version = "??"): + self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_SUBTITLE_DOWNLOAD] + " : " + ep_name + " : " + lang, message=ep_name + ": " + lang) + + def notify_git_update(self, new_version="??"): if sickbeard.USE_PUSHBULLET: - update_text=common.notifyStrings[common.NOTIFY_GIT_UPDATE_TEXT] - title=common.notifyStrings[common.NOTIFY_GIT_UPDATE] - self._sendPushbullet(pushbullet_api=None, event=title, message=update_text + new_version, notificationType="note", method="POST") + self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_GIT_UPDATE], message=notifyStrings[NOTIFY_GIT_UPDATE_TEXT] + new_version) - def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None, - notificationType=None, method=None, force=False): + def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None): - if not sickbeard.USE_PUSHBULLET and not force: + if not (sickbeard.USE_PUSHBULLET or event is 'Test' or event is None): return False - if pushbullet_api == None: - pushbullet_api = sickbeard.PUSHBULLET_API - if pushbullet_device == None: - pushbullet_device = sickbeard.PUSHBULLET_DEVICE - - if method == 'POST': - uri = '/v2/pushes' - else: - uri = '/v2/devices' - - logger.log(u"Pushbullet event: " + str(event), logger.DEBUG) - logger.log(u"Pushbullet message: " + str(message), logger.DEBUG) - logger.log(u"Pushbullet api: " + str(pushbullet_api), logger.DEBUG) - logger.log(u"Pushbullet devices: " + str(pushbullet_device), logger.DEBUG) - logger.log(u"Pushbullet notification type: " + str(notificationType), logger.DEBUG) - - http_handler = HTTPSConnection("api.pushbullet.com") - - if notificationType == None: - testMessage = True - try: - logger.log(u"Testing Pushbullet authentication and retrieving the device list.", logger.DEBUG) - http_handler.request(method, uri, None, headers={'Authorization': 'Bearer %s' % pushbullet_api}) - except (SSLError, HTTPException, socket.error): - logger.log(u"Pushbullet notification failed.", logger.ERROR) - return False - else: - testMessage = False - try: - data = { - 'title': event.encode('utf-8'), - 'body': message.encode('utf-8'), - 'device_iden': pushbullet_device, - 'type': notificationType} - data = json.dumps(data) - http_handler.request(method, uri, body=data, - headers={'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % pushbullet_api}) - except (SSLError, HTTPException, socket.error): - return False - - response = http_handler.getresponse() - request_body = response.read() - request_status = response.status - logger.log(u"Pushbullet response: %s" % request_body, logger.DEBUG) - - if request_status == 200: - if testMessage: - return request_body - else: - logger.log(u"Pushbullet notifications sent.", logger.DEBUG) - return True - elif request_status == 410: - logger.log(u"Pushbullet auth failed: %s" % response.reason, logger.ERROR) + pushbullet_api = pushbullet_api or sickbeard.PUSHBULLET_API + pushbullet_device = pushbullet_device or sickbeard.PUSHBULLET_DEVICE + + logger.log(u"Pushbullet event: %r" % event, logger.DEBUG) + logger.log(u"Pushbullet message: %r" % message, logger.DEBUG) + logger.log(u"Pushbullet api: %r" % pushbullet_api, logger.DEBUG) + logger.log(u"Pushbullet devices: %r" % pushbullet_device, logger.DEBUG) + logger.log(u"Pushbullet notification type: %r" % 'note' if event else 'None', logger.DEBUG) + + url = 'https://api.pushbullet.com/v2/%s' % ('devices', 'pushes')[event is not None] + + data = json.dumps({ + 'title': event.encode('utf-8'), + 'body': message.encode('utf-8'), + 'device_iden': pushbullet_device.encode('utf-8'), + 'type': 'note' + }) if event else None + + method = 'GET' if data is None else 'POST' + headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % pushbullet_api} + + try: + response = self.session.request(method, url, data=data, headers=headers) + except Exception: + logger.log(u'Pushbullet authorization failed with exception: %r' % traceback.format_exc(), logger.DEBUG) return False - else: + + if response.status_code == 410: + logger.log(u'Pushbullet authorization failed', logger.DEBUG) + return False + + if response.status_code != 200: + logger.log(u'Pushbullet call failed with error code %r' % response.status_code, logger.DEBUG) + return False + + logger.log(u"Pushbullet response: %r" % response.text, logger.DEBUG) + + if not response.text: logger.log(u"Pushbullet notification failed.", logger.ERROR) return False + logger.log(u"Pushbullet notifications sent.", logger.DEBUG) + return (True, response.text)[event is self.TEST_EVENT or event is None] -notifier = PushbulletNotifier +notifier = PushbulletNotifier diff --git a/sickbeard/notifiers/pushover.py b/sickbeard/notifiers/pushover.py index d21ba204325c449164c1ab102568ed976d13265a..e605f3c31dee51da7f5b37a3d0ef4909bb56243a 100644 --- a/sickbeard/notifiers/pushover.py +++ b/sickbeard/notifiers/pushover.py @@ -29,8 +29,8 @@ from sickrage.helper.exceptions import ex API_URL = "https://api.pushover.net/1/messages.json" -# pylint: disable=W0232,C1001 -class PushoverNotifier: +# pylint: disable=W0232 +class PushoverNotifier(object): def test_notify(self, userKey=None, apiKey=None): return self._notifyPushover("This is a test notification from SickRage", 'Test', userKey=userKey, apiKey=apiKey, force=True) @@ -55,7 +55,7 @@ class PushoverNotifier: if sound == None: sound = sickbeard.PUSHOVER_SOUND - logger.log("Pushover API KEY in use: " + apiKey, logger.DEBUG) + logger.log(u"Pushover API KEY in use: " + apiKey, logger.DEBUG) # build up the URL and parameters msg = msg.strip() @@ -93,39 +93,39 @@ class PushoverNotifier: except urllib2.HTTPError, e: # if we get an error back that doesn't have an error code then who knows what's really happening if not hasattr(e, 'code'): - logger.log("Pushover notification failed." + ex(e), logger.ERROR) + logger.log(u"Pushover notification failed." + ex(e), logger.ERROR) return False else: - logger.log("Pushover notification failed. Error code: " + str(e.code), logger.ERROR) + logger.log(u"Pushover notification failed. Error code: " + str(e.code), logger.ERROR) # HTTP status 404 if the provided email address isn't a Pushover user. if e.code == 404: - logger.log("Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING) + logger.log(u"Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING) return False # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service. elif e.code == 401: - #HTTP status 401 if the user doesn't have the service added + # HTTP status 401 if the user doesn't have the service added subscribeNote = self._sendPushover(msg, title, sound=sound, userKey=userKey, apiKey=apiKey) if subscribeNote: - logger.log("Subscription sent", logger.DEBUG) + logger.log(u"Subscription sent", logger.DEBUG) return True else: - logger.log("Subscription could not be sent", logger.ERROR) + logger.log(u"Subscription could not be sent", logger.ERROR) return False # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters elif e.code == 400: - logger.log("Wrong data sent to pushover", logger.ERROR) + logger.log(u"Wrong data sent to pushover", logger.ERROR) return False # If you receive a HTTP status code of 429, it is because the message limit has been reached (free limit is 7,500) elif e.code == 429: - logger.log("Pushover API message limit reached - try a different API key", logger.ERROR) + logger.log(u"Pushover API message limit reached - try a different API key", logger.ERROR) return False - logger.log("Pushover notification successful.", logger.INFO) + logger.log(u"Pushover notification successful.", logger.INFO) return True def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]): @@ -160,10 +160,10 @@ class PushoverNotifier: """ if not sickbeard.USE_PUSHOVER and not force: - logger.log("Notification for Pushover not enabled, skipping this notification", logger.DEBUG) + logger.log(u"Notification for Pushover not enabled, skipping this notification", logger.DEBUG) return False - logger.log("Sending notification for " + message, logger.DEBUG) + logger.log(u"Sending notification for " + message, logger.DEBUG) return self._sendPushover(message, title, sound=sound, userKey=userKey, apiKey=apiKey) diff --git a/sickbeard/notifiers/pytivo.py b/sickbeard/notifiers/pytivo.py index 1fb2f631b91f86fa2c859e8df1bbe6bb828219f5..e7e9434df78a8e7372c383b6092394b687747225 100644 --- a/sickbeard/notifiers/pytivo.py +++ b/sickbeard/notifiers/pytivo.py @@ -90,7 +90,7 @@ class pyTivoNotifier: request = Request(requestUrl) try: - response = urlopen(request) #@UnusedVariable + response = urlopen(request) # @UnusedVariable except HTTPError , e: if hasattr(e, 'reason'): logger.log(u"pyTivo notification: Error, failed to reach a server - " + e.reason, logger.ERROR) diff --git a/sickbeard/notifiers/synoindex.py b/sickbeard/notifiers/synoindex.py index 95d3a14ed286b51bc68d95d50acda414ad3e5889..854eb1e43742fa8b31a62f63a8088d7e54e573b1 100644 --- a/sickbeard/notifiers/synoindex.py +++ b/sickbeard/notifiers/synoindex.py @@ -54,7 +54,7 @@ class synoIndexNotifier: try: p = subprocess.Popen(synoindex_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR) - out, err = p.communicate() #@UnusedVariable + out, err = p.communicate() # @UnusedVariable logger.log(u"Script result: " + str(out), logger.DEBUG) except OSError, e: logger.log(u"Unable to run synoindex: " + ex(e), logger.ERROR) @@ -79,7 +79,7 @@ class synoIndexNotifier: try: p = subprocess.Popen(synoindex_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR) - out, err = p.communicate() #@UnusedVariable + out, err = p.communicate() # @UnusedVariable logger.log(u"Script result: " + str(out), logger.DEBUG) except OSError, e: logger.log(u"Unable to run synoindex: " + ex(e), logger.ERROR) diff --git a/sickbeard/notifiers/synologynotifier.py b/sickbeard/notifiers/synologynotifier.py index 240c69fb266e9d8f47268df0d5876cc2a3bec2f6..ee0591f0111710f70df22bcd6369d6ef0a9365e9 100644 --- a/sickbeard/notifiers/synologynotifier.py +++ b/sickbeard/notifiers/synologynotifier.py @@ -52,7 +52,7 @@ class synologyNotifier: try: p = subprocess.Popen(synodsmnotify_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR) - out, err = p.communicate() #@UnusedVariable + out, err = p.communicate() # @UnusedVariable logger.log(u"Script result: " + str(out), logger.DEBUG) except OSError, e: logger.log(u"Unable to run synodsmnotify: " + ex(e)) diff --git a/sickbeard/notifiers/trakt.py b/sickbeard/notifiers/trakt.py index a7f7f2c1c57943897489a29e6bb47b2245e29c8c..ab587637eddff96fcaf2815aa2b4453d7da76600 100644 --- a/sickbeard/notifiers/trakt.py +++ b/sickbeard/notifiers/trakt.py @@ -194,7 +194,7 @@ class TraktNotifier: if season not in uniqueSeasons: uniqueSeasons.append(season) - #build the query + # build the query seasonsList = [] for searchedSeason in uniqueSeasons: episodesList = [] diff --git a/sickbeard/notifiers/tweet.py b/sickbeard/notifiers/tweet.py index f905b31c3652021caa0bdfe65eee94d08a38391b..de7aabbdc2d99c7eed5e9659b881540a3a85d37c 100644 --- a/sickbeard/notifiers/tweet.py +++ b/sickbeard/notifiers/tweet.py @@ -23,9 +23,9 @@ from sickrage.helper.exceptions import ex # parse_qsl moved to urlparse module in v2.6 try: - from urlparse import parse_qsl #@UnusedImport + from urlparse import parse_qsl # @UnusedImport except ImportError: - from cgi import parse_qsl #@Reimport + from cgi import parse_qsl # @Reimport import oauth2 as oauth import pythontwitter as twitter @@ -63,16 +63,16 @@ class TwitterNotifier: def _get_authorization(self): - signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1() #@UnusedVariable + signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1() # @UnusedVariable oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret) oauth_client = oauth.Client(oauth_consumer) - logger.log('Requesting temp token from Twitter', logger.DEBUG) + logger.log(u'Requesting temp token from Twitter', logger.DEBUG) resp, content = oauth_client.request(self.REQUEST_TOKEN_URL, 'GET') if resp['status'] != '200': - logger.log('Invalid response from Twitter requesting temp token: %s' % resp['status'], logger.ERROR) + logger.log(u'Invalid response from Twitter requesting temp token: %s' % resp['status'], logger.ERROR) else: request_token = dict(parse_qsl(content)) @@ -91,26 +91,26 @@ class TwitterNotifier: token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret']) token.set_verifier(key) - logger.log('Generating and signing request for an access token using key ' + key, logger.DEBUG) + logger.log(u'Generating and signing request for an access token using key ' + key, logger.DEBUG) - signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1() #@UnusedVariable + signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1() # @UnusedVariable oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret) - logger.log('oauth_consumer: ' + str(oauth_consumer), logger.DEBUG) + logger.log(u'oauth_consumer: ' + str(oauth_consumer), logger.DEBUG) oauth_client = oauth.Client(oauth_consumer, token) - logger.log('oauth_client: ' + str(oauth_client), logger.DEBUG) + logger.log(u'oauth_client: ' + str(oauth_client), logger.DEBUG) resp, content = oauth_client.request(self.ACCESS_TOKEN_URL, method='POST', body='oauth_verifier=%s' % key) - logger.log('resp, content: ' + str(resp) + ',' + str(content), logger.DEBUG) + logger.log(u'resp, content: ' + str(resp) + ',' + str(content), logger.DEBUG) access_token = dict(parse_qsl(content)) - logger.log('access_token: ' + str(access_token), logger.DEBUG) + logger.log(u'access_token: ' + str(access_token), logger.DEBUG) - logger.log('resp[status] = ' + str(resp['status']), logger.DEBUG) + logger.log(u'resp[status] = ' + str(resp['status']), logger.DEBUG) if resp['status'] != '200': - logger.log('The request for a token with did not succeed: ' + str(resp['status']), logger.ERROR) + logger.log(u'The request for a token with did not succeed: ' + str(resp['status']), logger.ERROR) return False else: - logger.log('Your Twitter Access Token key: %s' % access_token['oauth_token'], logger.DEBUG) - logger.log('Access Token secret: %s' % access_token['oauth_token_secret'], logger.DEBUG) + logger.log(u'Your Twitter Access Token key: %s' % access_token['oauth_token'], logger.DEBUG) + logger.log(u'Access Token secret: %s' % access_token['oauth_token_secret'], logger.DEBUG) sickbeard.TWITTER_USERNAME = access_token['oauth_token'] sickbeard.TWITTER_PASSWORD = access_token['oauth_token_secret'] return True diff --git a/sickbeard/numdict.py b/sickbeard/numdict.py new file mode 100644 index 0000000000000000000000000000000000000000..8549ba6d20e3c387ed38563d578e7ae499e66170 --- /dev/null +++ b/sickbeard/numdict.py @@ -0,0 +1,126 @@ +# coding=utf-8 + +""" +class NumDict - A dict with numeric keys +""" + +from collections import MutableMapping + + +class NumDict(MutableMapping): + """ + NumDict() -> new empty dictionary + + NumDict(mapping) -> new dictionary initialized from a mapping object's + (key, value) pairs + + NumDict(iterable) -> new dictionary initialized as if via: + d = {} + for k, v in iterable: + d[k] = v + + NumDict(**kwargs) -> TypeError - key words cannot be numeric + + All keys must be numeric or None + """ + + def __init__(self, iterable=None, **kwargs): + self.data = {} + iterable = kwargs.pop('dict', None) if iterable is None else iterable + if iterable is not None: + self.update(iterable) + if len(kwargs): + self.update(kwargs) + + def __len__(self): + return len(self.data) + + def __getitem__(self, key): + key = self.numeric(key) + if key in self.data: + return self.data[key] + if hasattr(self.__class__, "__missing__"): + # noinspection PyUnresolvedReferences + return self.__class__.__missing__(self, key) + raise KeyError(key) + + def __setitem__(self, key, item): + try: + key = self.numeric(key) + except KeyError: + raise TypeError(key) + self.data[key] = item + + def __delitem__(self, key): + key = self.numeric(key) + del self.data[key] + + def __iter__(self): + return iter(self.data) + + def __contains__(self, key): + try: + key = self.numeric(key) + return key in self.data + except KeyError: + return False + + def __repr__(self): + return repr(self.data) + + def has_key(self, key): + """ + DEPRECATED: Check for existence of key + + :param key: A numeric key + :return: True if key is found, else False + """ + return key in self + + def copy(self): + """ + Create a copy of a NumDict + :return: A copy + """ + if self.__class__ is NumDict: + return NumDict(self.data.copy()) + import copy + data = self.data + try: + self.data = {} + c = copy.copy(self) + finally: + self.data = data + c.update(self) + return c + + @classmethod + def fromkeys(cls, iterable, value=None): + """ + Build a NumDict from a dictionary + + :param iterable: + :param value: + :return: + """ + d = cls() + for key in iterable: + key = cls.numeric(key) + d[key] = value + return d + + @staticmethod + def numeric(key): + """ + Converts a key to its numeric representation + + :param key: numeric dict key + :raise KeyError: if key can't be converted to an integer + :return: a numeric key + :rtype: int + """ + try: + return int(key) + except (TypeError, ValueError): + if key is not None: + raise KeyError(key) diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py index 717d6b7e6d52ba6b37a29d0afd6d36b8c98d75d9..5f76e0c413f06354d03657d6d083336c073629a8 100644 --- a/sickbeard/nzbSplitter.py +++ b/sickbeard/nzbSplitter.py @@ -76,7 +76,7 @@ def getSeasonNZBs(name, urlData, season): xmlns = xmlnsMatch.group(1) match = re.search(regex, curFile.get("subject"), re.I) if not match: - #print curFile.get("subject"), "doesn't match", regex + # print curFile.get("subject"), "doesn't match", regex continue curEp = match.group(1) if curEp not in epFiles: @@ -128,7 +128,7 @@ def splitResult(result): :param result: search result object :return: False upon failure, a list of episode objects otherwise """ - urlData = helpers.getURL(result.url, session=requests.Session()) + urlData = helpers.getURL(result.url, session=requests.Session(), needBytes=True) if urlData is None: logger.log(u"Unable to load url " + result.url + ", can't download season NZB", logger.ERROR) return False diff --git a/sickbeard/nzbget.py b/sickbeard/nzbget.py index ebc6419c560c0e05b9af0d4ae625be24fcea2463..40f6ddf95e7899731562e592afab72f0db4c7c26 100644 --- a/sickbeard/nzbget.py +++ b/sickbeard/nzbget.py @@ -18,20 +18,15 @@ # along with SickRage. If not, see <http://www.gnu.org/licenses/>. - import httplib import datetime - -import sickbeard - from base64 import standard_b64encode import xmlrpclib +import sickbeard from sickbeard.providers.generic import GenericProvider - from sickbeard import logger, helpers - -from common import Quality +from sickbeard.common import Quality def sendNZB(nzb, proper=False): @@ -46,7 +41,7 @@ def sendNZB(nzb, proper=False): category = sickbeard.NZBGET_CATEGORY if nzb.show.is_anime: category = sickbeard.NZBGET_CATEGORY_ANIME - + if sickbeard.NZBGET_USE_HTTPS: nzbgetXMLrpc = "https://%(username)s:%(password)s@%(host)s/xmlrpc" else: @@ -73,7 +68,7 @@ def sendNZB(nzb, proper=False): return False except xmlrpclib.ProtocolError, e: - if (e.errmsg == "Unauthorized"): + if e.errmsg == "Unauthorized": logger.log(u"NZBget username or password is incorrect.", logger.ERROR) else: logger.log(u"Protocol Error: " + e.errmsg, logger.ERROR) @@ -121,7 +116,7 @@ def sendNZB(nzb, proper=False): if nzb.resultType == "nzb": genProvider = GenericProvider("") data = genProvider.getURL(nzb.url) - if (data == None): + if data == None: return False nzbcontent64 = standard_b64encode(data) nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", category, addToTop, nzbcontent64) @@ -133,7 +128,7 @@ def sendNZB(nzb, proper=False): nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", category, nzbgetprio, False, nzb.url, False, dupekey, dupescore, "score") # v13+ has a new combined append method that accepts both (url and content) - # also the return value has changed from boolean to integer + # also the return value has changed from boolean to integer # (Positive number representing NZBID of the queue item. 0 and negative numbers represent error codes.) elif nzbget_version >= 13: nzbget_result = True if nzbGetRPC.append(nzb.name + ".nzb", nzbcontent64 if nzbcontent64 is not None else nzb.url, @@ -153,6 +148,6 @@ def sendNZB(nzb, proper=False): else: logger.log(u"NZBget could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR) return False - except: + except Exception: logger.log(u"Connect Error to NZBget: could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR) return False diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py index 48089573cad7435fa74c8ecb8ec4e8337f3004ce..e66f7c4ec6e248f3451263001b886d4a31f40492 100644 --- a/sickbeard/postProcessor.py +++ b/sickbeard/postProcessor.py @@ -366,7 +366,7 @@ class PostProcessor(object): helpers.copyFile(cur_file_path, new_file_path) helpers.chmodAsParent(new_file_path) except (IOError, OSError), e: - logger.log("Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR) + logger.log(u"Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR) raise self._combined_file_operation(file_path, new_path, new_base_name, associated_files, action=_int_copy, @@ -514,7 +514,7 @@ class PostProcessor(object): if not name: return to_return - logger.log(u"Analyzing name " + repr(name), logger.DEBUG) + logger.log(u"Analyzing name " + name, logger.DEBUG) name = helpers.remove_non_release_groups(helpers.remove_extension(name)) @@ -1108,7 +1108,7 @@ class PostProcessor(object): # log it to history history.logDownload(ep_obj, self.file_path, new_ep_quality, self.release_group, new_ep_version) - #If any notification fails, don't stop postProcessor + # If any notification fails, don't stop postProcessor try: # send notifications notifiers.notify_download(ep_obj._format_pattern('%SN - %Sx%0E - %EN - %QN')) diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py index 2b5b7f954ff3d42aa01307d84689b90d80bfb3f4..6e74a64a09d05a8c0160aa5c798279f8e1dd70eb 100644 --- a/sickbeard/processTV.py +++ b/sickbeard/processTV.py @@ -28,7 +28,7 @@ from sickbeard import logger from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException from sickbeard import common from sickbeard import failedProcessor -from sickrage.helper.encoding import ek +from sickrage.helper.encoding import ek, ss from sickrage.helper.exceptions import EpisodePostProcessingFailedException, ex, FailedPostProcessingFailedException from unrar2 import RarFile @@ -44,7 +44,7 @@ import shutil_custom shutil.copyfile = shutil_custom.copyfile_custom -class ProcessResult: +class ProcessResult(object): def __init__(self): self.result = True self.output = '' @@ -127,8 +127,7 @@ def delete_files(processPath, notwantedFiles, result, force=False): try: ek(os.chmod, cur_file_path, stat.S_IWRITE) except OSError, e: - result.output += logHelper(u"Cannot change permissions of " + cur_file_path + ': ' + str(e.strerror), - logger.DEBUG) + result.output += logHelper(u"Cannot change permissions of " + cur_file_path + ': ' + ex(e), logger.DEBUG) try: ek(os.remove, cur_file_path) except OSError, e: @@ -140,7 +139,7 @@ def logHelper(logMessage, logLevel=logger.INFO): return logMessage + u"\n" -def processDir(dirName, nzbName=None, process_method=None, force=False, is_priority=None, delete_on=False, failed=False, type="auto"): +def processDir(dirName, nzbName=None, process_method=None, force=False, is_priority=None, delete_on=False, failed=False, proc_type="auto"): """ Scans through the files in dirName and processes whatever media files it finds @@ -148,7 +147,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior :param nzbName: The NZB name which resulted in this folder being downloaded :param force: True to postprocess already postprocessed files :param failed: Boolean for whether or not the download failed - :param type: Type of postprocessing auto or manual + :param proc_type: Type of postprocessing auto or manual """ result = ProcessResult() @@ -174,10 +173,10 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior logger.DEBUG) return result.output - path, dirs, files = get_path_dir_files(dirName, nzbName, type) + path, dirs, files = get_path_dir_files(dirName, nzbName, proc_type) - files = filter(helpers.notTorNZBFile, files) - SyncFiles = filter(helpers.isSyncFile, files) + files = [x for x in files if helpers.notTorNZBFile(x)] + SyncFiles = [x for x in files if helpers.isSyncFile(x)] # Don't post process if files are still being synced and option is activated if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES: @@ -189,11 +188,11 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior result.output += logHelper(u"PostProcessing Path: " + path, logger.INFO) result.output += logHelper(u"PostProcessing Dirs: " + str(dirs), logger.DEBUG) - rarFiles = filter(helpers.isRarFile, files) + rarFiles = [x for x in files if helpers.isRarFile(x)] rarContent = unRAR(path, rarFiles, force, result) files += rarContent - videoFiles = filter(helpers.isMediaFile, files) - videoInRar = filter(helpers.isMediaFile, rarContent) + videoFiles = [x for x in files if helpers.isMediaFile(x)] + videoInRar = [x for x in rarContent if helpers.isMediaFile(x)] result.output += logHelper(u"PostProcessing Files: " + str(files), logger.DEBUG) result.output += logHelper(u"PostProcessing VideoFiles: " + str(videoFiles), logger.DEBUG) @@ -209,7 +208,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior result.result = True - #Don't Link media when the media is extracted from a rar in the same path + # Don't Link media when the media is extracted from a rar in the same path if process_method in ('hardlink', 'symlink') and videoInRar: process_media(path, videoInRar, nzbName, 'move', force, is_priority, result) delete_files(path, rarContent, result) @@ -229,35 +228,35 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior result.output += logHelper(u"Sync Files: " + str(SyncFiles) + " in path: " + path) result.missedfiles.append(path + " : Syncfiles found") - #Process Video File in all TV Subdir - for dir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]: + # Process Video File in all TV Subdir + for curDir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]: result.result = True - for processPath, processDir, fileList in ek(os.walk, ek(os.path.join, path, dir), topdown=False): + for processPath, _, fileList in ek(os.walk, ek(os.path.join, path, curDir), topdown=False): - if (not validateDir(path, processPath, nzbNameOriginal, failed, result)): + if not validateDir(path, processPath, nzbNameOriginal, failed, result): continue postpone = False - SyncFiles = filter(helpers.isSyncFile, fileList) + SyncFiles = [x for x in fileList if helpers.isSyncFile(x)] # Don't post process if files are still being synced and option is activated if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES: postpone = True if not postpone: - rarFiles = filter(helpers.isRarFile, fileList) + rarFiles = [x for x in fileList if helpers.isRarFile(x)] rarContent = unRAR(processPath, rarFiles, force, result) fileList = set(fileList + rarContent) - videoFiles = filter(helpers.isMediaFile, fileList) - videoInRar = filter(helpers.isMediaFile, rarContent) + videoFiles = [x for x in fileList if helpers.isMediaFile(x)] + videoInRar = [x for x in rarContent if helpers.isMediaFile(x)] notwantedFiles = [x for x in fileList if x not in videoFiles] if notwantedFiles: result.output += logHelper(u"Found unwanted files: " + str(notwantedFiles), logger.DEBUG) - #Don't Link media when the media is extracted from a rar in the same path + # Don't Link media when the media is extracted from a rar in the same path if process_method in ('hardlink', 'symlink') and videoInRar: process_media(processPath, videoInRar, nzbName, 'move', force, is_priority, result) process_media(processPath, set(videoFiles) - set(videoInRar), nzbName, process_method, force, @@ -271,16 +270,15 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior else: process_media(processPath, videoFiles, nzbName, process_method, force, is_priority, result) - #Delete all file not needed + # Delete all file not needed if process_method != "move" or not result.result \ - or (type == "manual" and not delete_on): #Avoid to delete files if is Manual PostProcessing + or (proc_type == "manual" and not delete_on): # Avoid to delete files if is Manual PostProcessing continue delete_files(processPath, notwantedFiles, result) - if (not sickbeard.NO_DELETE or type == "manual") and process_method == "move" and \ - ek(os.path.normpath, processPath) != ek(os.path.normpath, - sickbeard.TV_DOWNLOAD_DIR): + if (not sickbeard.NO_DELETE or proc_type == "manual") and process_method == "move" and \ + ek(os.path.normpath, processPath) != ek(os.path.normpath, sickbeard.TV_DOWNLOAD_DIR): if delete_folder(processPath, check_empty=True): result.output += logHelper(u"Deleted folder: " + processPath, logger.DEBUG) else: @@ -325,12 +323,10 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result): result.output += logHelper(u"The directory name indicates it failed to extract.", logger.DEBUG) failed = True elif folder_name.startswith('_UNDERSIZED_'): - result.output += logHelper(u"The directory name indicates that it was previously rejected for being undersized.", - logger.DEBUG) + result.output += logHelper(u"The directory name indicates that it was previously rejected for being undersized.", logger.DEBUG) failed = True elif folder_name.upper().startswith('_UNPACK'): - result.output += logHelper(u"The directory name indicates that this release is in the process of being unpacked.", - logger.DEBUG) + result.output += logHelper(u"The directory name indicates that this release is in the process of being unpacked.", logger.DEBUG) result.missedfiles.append(dirName + " : Being unpacked") return False @@ -349,9 +345,9 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result): sqlResults = myDB.select("SELECT * FROM tv_shows") for sqlShow in sqlResults: - if dirName.lower().startswith( - ek(os.path.realpath, sqlShow["location"]).lower() + os.sep) or dirName.lower() == ek( - os.path.realpath, sqlShow["location"]).lower(): + if dirName.lower().startswith(ek(os.path.realpath, sqlShow["location"]).lower() + os.sep) or \ + dirName.lower() == ek(os.path.realpath, sqlShow["location"]).lower(): + result.output += logHelper( u"Cannot process an episode that's already been moved to its show dir, skipping " + dirName, logger.WARNING) @@ -360,14 +356,14 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result): # Get the videofile list for the next checks allFiles = [] allDirs = [] - for processPath, processDir, fileList in ek(os.walk, ek(os.path.join, path, dirName), topdown=False): - allDirs += processDir + for _, processdir, fileList in ek(os.walk, ek(os.path.join, path, dirName), topdown=False): + allDirs += processdir allFiles += fileList - videoFiles = filter(helpers.isMediaFile, allFiles) + videoFiles = [x for x in allFiles if helpers.isMediaFile(x)] allDirs.append(dirName) - #check if the dir have at least one tv video file + # check if the dir have at least one tv video file for video in videoFiles: try: NameParser().parse(video, cache_result=False) @@ -375,16 +371,16 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result): except (InvalidNameException, InvalidShowException): pass - for dir in allDirs: + for proc_dir in allDirs: try: - NameParser().parse(dir, cache_result=False) + NameParser().parse(proc_dir, cache_result=False) return True except (InvalidNameException, InvalidShowException): pass if sickbeard.UNPACK: - #Search for packed release - packedFiles = filter(helpers.isRarFile, allFiles) + # Search for packed release + packedFiles = [x for x in allFiles if helpers.isRarFile(x)] for packed in packedFiles: try: @@ -494,35 +490,35 @@ def already_postprocessed(dirName, videofile, force, result): myDB = db.DBConnection() sqlResult = myDB.select("SELECT * FROM tv_episodes WHERE release_name = ?", [dirName]) if sqlResult: - #result.output += logHelper(u"You're trying to post process a dir that's already been processed, skipping", logger.DEBUG) + # result.output += logHelper(u"You're trying to post process a dir that's already been processed, skipping", logger.DEBUG) return True else: sqlResult = myDB.select("SELECT * FROM tv_episodes WHERE release_name = ?", [videofile.rpartition('.')[0]]) if sqlResult: - #result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG) + # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG) return True - #Needed if we have downloaded the same episode @ different quality - #But we need to make sure we check the history of the episode we're going to PP, and not others + # Needed if we have downloaded the same episode @ different quality + # But we need to make sure we check the history of the episode we're going to PP, and not others np = NameParser(dirName, tryIndexers=True) - try: #if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore + try: # if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore parse_result = np.parse(dirName) - except: #ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it. + except Exception: # ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it. parse_result = False - search_sql = "SELECT tv_episodes.indexerid, history.resource FROM tv_episodes INNER JOIN history ON history.showid=tv_episodes.showid" #This part is always the same + search_sql = "SELECT tv_episodes.indexerid, history.resource FROM tv_episodes INNER JOIN history ON history.showid=tv_episodes.showid" # This part is always the same search_sql += " WHERE history.season=tv_episodes.season and history.episode=tv_episodes.episode" - #If we find a showid, a season number, and one or more episode numbers then we need to use those in the query + # If we find a showid, a season number, and one or more episode numbers then we need to use those in the query if parse_result and (parse_result.show.indexerid and parse_result.episode_numbers and parse_result.season_number): search_sql += " and tv_episodes.showid = '" + str(parse_result.show.indexerid) + "' and tv_episodes.season = '" + str(parse_result.season_number) + "' and tv_episodes.episode = '" + str(parse_result.episode_numbers[0]) + "'" search_sql += " and tv_episodes.status IN (" + ",".join([str(x) for x in common.Quality.DOWNLOADED]) + ")" search_sql += " and history.resource LIKE ?" - sqlResult = myDB.select(search_sql, [u'%' + videofile]) + sqlResult = myDB.select(search_sql, ['%' + videofile]) if sqlResult: - #result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG) + # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG) return True return False @@ -563,26 +559,25 @@ def process_media(processPath, videoFiles, nzbName, process_method, force, is_pr if result.result: result.output += logHelper(u"Processing succeeded for " + cur_video_file_path) else: - result.output += logHelper(u"Processing failed for " + cur_video_file_path + ": " + process_fail_message, - logger.WARNING) + result.output += logHelper(u"Processing failed for " + cur_video_file_path + ": " + process_fail_message, logger.WARNING) result.missedfiles.append(cur_video_file_path + " : Processing failed: " + process_fail_message) result.aggresult = False -def get_path_dir_files(dirName, nzbName, type): +def get_path_dir_files(dirName, nzbName, proc_type): """ Get files in a path :param dirName: Directory to start in :param nzbName: NZB file, if present - :param type: auto/manual + :param proc_type: auto/manual :return: a tuple of (path,dirs,files) """ path = "" dirs = [] files = [] - if dirName == sickbeard.TV_DOWNLOAD_DIR and not nzbName or type == "manual": # Scheduled Post Processing Active + if dirName == sickbeard.TV_DOWNLOAD_DIR and not nzbName or proc_type == "manual": # Scheduled Post Processing Active # Get at first all the subdir in the dirName for path, dirs, files in ek(os.walk, dirName): break diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py index 4c7e8e2c779938abb733ca0a747701d05d9b4ee4..f792b77b0860dc8e7cad5c3f484716816ab7d12c 100644 --- a/sickbeard/properFinder.py +++ b/sickbeard/properFinder.py @@ -189,12 +189,12 @@ class ProperFinder: oldRelease_group = (sqlResults[0]["release_group"]) if oldVersion > -1 and oldVersion < bestResult.version: - logger.log("Found new anime v" + str(bestResult.version) + " to replace existing v" + str(oldVersion)) + logger.log(u"Found new anime v" + str(bestResult.version) + " to replace existing v" + str(oldVersion)) else: continue if oldRelease_group != bestResult.release_group: - logger.log("Skipping proper from release group: " + bestResult.release_group + ", does not match existing release group: " + oldRelease_group) + logger.log(u"Skipping proper from release group: " + bestResult.release_group + ", does not match existing release group: " + oldRelease_group) continue # if the show is in our list and there hasn't been a proper already added for that particular episode then add it to our list of propers diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py index 781f76169ad50c6f293a05807607556434b592e4..4c1ef35f20de77103780ed12b28f30181129b652 100644 --- a/sickbeard/providers/__init__.py +++ b/sickbeard/providers/__init__.py @@ -18,7 +18,7 @@ from sickbeard.providers import btn, newznab, womble, thepiratebay, torrentleech, kat, iptorrents, torrentz, \ omgwtfnzbs, scc, hdtorrents, torrentday, hdbits, hounddawgs, nextgen, speedcd, nyaatorrents, animenzb, bluetigers, cpasbien, fnt, xthor, torrentbytes, \ - frenchtorrentdb, freshontv, titansoftv, libertalia, morethantv, bitsoup, t411, tokyotoshokan, shazbat, rarbg, alpharatio, tntvillage, binsearch, torrentproject, extratorrent, \ + freshontv, titansoftv, libertalia, morethantv, bitsoup, t411, tokyotoshokan, shazbat, rarbg, alpharatio, tntvillage, binsearch, torrentproject, extratorrent, \ scenetime, btdigg, strike, transmitthenet, tvchaosuk, bitcannon, pretome, gftracker, hdspace, newpct __all__ = ['womble', @@ -38,7 +38,6 @@ __all__ = ['womble', 'nyaatorrents', 'animenzb', 'torrentbytes', - 'frenchtorrentdb', 'freshontv', 'titansoftv', 'libertalia', @@ -217,7 +216,7 @@ def makeTorrentRssProvider(configString): try: torrentRss = sys.modules['sickbeard.providers.rsstorrent'] - except: + except Exception: return newProvider = torrentRss.TorrentRssProvider(name, url, cookies, titleTAG, search_mode, search_fallback, enable_daily, @@ -228,7 +227,7 @@ def makeTorrentRssProvider(configString): def getDefaultNewznabProviders(): - #name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog + # name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog return 'NZB.Cat|https://nzb.cat/||5030,5040,5010|0|eponly|1|1|1!!!' + \ 'NZBGeek|https://api.nzbgeek.info/||5030,5040|0|eponly|0|0|0!!!' + \ 'NZBs.org|https://nzbs.org/||5030,5040|0|eponly|0|0|0!!!' + \ @@ -243,10 +242,10 @@ def getProviderModule(name): raise Exception("Can't find " + prefix + name + " in " + "Providers") -def getProviderClass(id): +def getProviderClass(provider_id): providerMatch = [x for x in sickbeard.providerList + sickbeard.newznabProviderList + sickbeard.torrentRssProviderList if - x.getID() == id] + x.getID() == provider_id] if len(providerMatch) != 1: return None diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py index 6ae9a842aef480583bae9bc4cabd5c397cb392c0..300dccdb984ec39438464a121c53a70487b0fa03 100644 --- a/sickbeard/providers/alpharatio.py +++ b/sickbeard/providers/alpharatio.py @@ -53,9 +53,6 @@ class AlphaRatioProvider(generic.TorrentProvider): self.cache = AlphaRatioCache(self) - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, 'password': self.password, @@ -86,7 +83,7 @@ class AlphaRatioProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (search_string, self.catagories) @@ -101,7 +98,7 @@ class AlphaRatioProvider(generic.TorrentProvider): torrent_table = html.find('table', attrs={'id': 'torrent_table'}) torrent_rows = torrent_table.find_all('tr') if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrent_rows) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -116,7 +113,7 @@ class AlphaRatioProvider(generic.TorrentProvider): download_url = self.urls['download'] % (url['href']) seeders = cells[len(cells)-2].contents[0] leechers = cells[len(cells)-1].contents[0] - #FIXME + # FIXME size = -1 except (AttributeError, TypeError): continue @@ -124,22 +121,22 @@ class AlphaRatioProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - except Exception, e: + except Exception: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py index 5a384a6221dc28a50b377906db6eb97decc03692..ae122eeb9844d530e8c1565ebb797abd4fb9a8ce 100644 --- a/sickbeard/providers/animenzb.py +++ b/sickbeard/providers/animenzb.py @@ -46,9 +46,6 @@ class animenzb(generic.NZBProvider): self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled - def _get_season_search_strings(self, ep_obj): return [x for x in show_name_helpers.makeSceneSeasonSearchString(self.show, ep_obj)] @@ -71,14 +68,14 @@ class animenzb(generic.NZBProvider): searchURL = self.url + "rss?" + urllib.urlencode(params) logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) results = [] - for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []: + for curItem in self.cache.getRSSFeed(searchURL)['entries'] or []: (title, url) = self._get_title_and_url(curItem) if title and url: results.append(curItem) logger.log(u"Found result: %s " % title, logger.DEBUG) - #For each search mode sort all the items by seeders if available if available + # For each search mode sort all the items by seeders if available if available results.sort(key=lambda tup: tup[0], reverse=True) return results diff --git a/sickbeard/providers/binsearch.py b/sickbeard/providers/binsearch.py index f320fc6b654f5e2d3e3f516201d30852c3eb8461..c71d6e3123cb63f09dff32b5806b8b660eb326e7 100644 --- a/sickbeard/providers/binsearch.py +++ b/sickbeard/providers/binsearch.py @@ -18,7 +18,7 @@ import urllib import re -import generic +from sickbeard.providers import generic from sickbeard import logger from sickbeard import tvcache @@ -32,8 +32,6 @@ class BinSearchProvider(generic.NZBProvider): self.urls = {'base_url': 'https://www.binsearch.info/'} self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled class BinSearchCache(tvcache.TVCache): def __init__(self, provider_obj): @@ -44,13 +42,13 @@ class BinSearchCache(tvcache.TVCache): # compile and save our regular expressions # this pulls the title from the URL in the description - self.descTitleStart = re.compile('^.*https?://www\.binsearch\.info/.b=') + self.descTitleStart = re.compile(r'^.*https?://www\.binsearch\.info/.b=') self.descTitleEnd = re.compile('&.*$') # these clean up the horrible mess of a title if the above fail self.titleCleaners = [ - re.compile('.?yEnc.?\(\d+/\d+\)$'), - re.compile(' \[\d+/\d+\] '), + re.compile(r'.?yEnc.?\(\d+/\d+\)$'), + re.compile(r' \[\d+/\d+\] '), ] def _get_title_and_url(self, item): @@ -94,9 +92,9 @@ class BinSearchCache(tvcache.TVCache): self.setLastUpdate() cl = [] - for group in ['alt.binaries.boneless','alt.binaries.misc','alt.binaries.hdtv','alt.binaries.hdtv.x264','alt.binaries.tv','alt.binaries.tvseries','alt.binaries.teevee']: + for group in ['alt.binaries.hdtv', 'alt.binaries.hdtv.x264', 'alt.binaries.tv', 'alt.binaries.tvseries', 'alt.binaries.teevee']: url = self.provider.url + 'rss.php?' - urlArgs = {'max': 1000,'g': group} + urlArgs = {'max': 1000, 'g': group} url += urllib.urlencode(urlArgs) diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py index 1be697e4db88f7b6176dff1c54d49ef81d8f19bb..54ea2276879e6a796187d287a8b9addf0ce57d7a 100644 --- a/sickbeard/providers/bitcannon.py +++ b/sickbeard/providers/bitcannon.py @@ -44,9 +44,6 @@ class BitCannonProvider(generic.TorrentProvider): 'trackers': self.url + 'stats', } - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] items = {'Season': [], 'Episode': [], 'RSS': []} @@ -76,9 +73,9 @@ class BitCannonProvider(generic.TorrentProvider): leechers = swarm.get(u'Leechers', 0) size = item.get(u'Size', -1) - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue @@ -86,12 +83,12 @@ class BitCannonProvider(generic.TorrentProvider): download_url = 'magnet:?xt=urn:btih:%s&dn=%s&tr=%s' % (info_hash, quote_plus(title.encode('utf-8')), u'&tr='.join([quote_plus(x.encode('utf-8')) for x in trackers])) item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] @@ -112,7 +109,7 @@ class BitCannonCache(tvcache.TVCache): def _getRSSData(self): return {'entries': []} - #search_strings = {'RSS': ['']} - #return {'entries': self.provider._doSearch(search_strings)} + # search_strings = {'RSS': ['']} + # return {'entries': self.provider._doSearch(search_strings)} provider = BitCannonProvider() diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py index 0867cacb08736d4492406983f831f6f5ea5e6a56..162f7b3bc1fb63f8c236a443f5b28f2b7a4c9faf 100644 --- a/sickbeard/providers/bitsoup.py +++ b/sickbeard/providers/bitsoup.py @@ -52,9 +52,6 @@ class BitSoupProvider(generic.TorrentProvider): "c42": 1, "c45": 1, "c49": 1, "c7": 1 } - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: logger.log(u"Invalid username or password. Check your settings", logger.WARNING) @@ -92,7 +89,7 @@ class BitSoupProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) self.search_params['search'] = search_string @@ -106,7 +103,7 @@ class BitSoupProvider(generic.TorrentProvider): torrent_table = html.find('table', attrs={'class': 'koptekst'}) torrent_rows = torrent_table.find_all('tr') if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrent_rows) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -121,7 +118,7 @@ class BitSoupProvider(generic.TorrentProvider): title = link.getText() seeders = int(cells[10].getText()) leechers = int(cells[11].getText()) - #FIXME + # FIXME size = -1 except (AttributeError, TypeError): continue @@ -129,22 +126,22 @@ class BitSoupProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - except Exception, e: + except Exception: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/bluetigers.py b/sickbeard/providers/bluetigers.py index 98039041a35fa10528dda0e6abc06677c3c7b130..4c431edac135f07eee683b7782df652feda87182 100644 --- a/sickbeard/providers/bluetigers.py +++ b/sickbeard/providers/bluetigers.py @@ -56,9 +56,6 @@ class BLUETIGERSProvider(generic.TorrentProvider): self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled - def _doLogin(self): if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()): return True @@ -91,7 +88,7 @@ class BLUETIGERSProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) self.search_params['search'] = search_string @@ -113,7 +110,7 @@ class BLUETIGERSProvider(generic.TorrentProvider): title = link.text download_url = self.urls['base_url'] + "/" + link['href'] download_url = download_url.replace("torrents-details", "download") - #FIXME + # FIXME size = -1 seeders = 1 leechers = 0 @@ -121,14 +118,14 @@ class BLUETIGERSProvider(generic.TorrentProvider): if not title or not download_url: continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -136,7 +133,7 @@ class BLUETIGERSProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py index 648f8612ce175113d3bfd3445f2211cb82aa57ee..70ee530ed0ef56819f98e85d805f3d43fcdf3140 100644 --- a/sickbeard/providers/btdigg.py +++ b/sickbeard/providers/btdigg.py @@ -1,7 +1,7 @@ # Author: Jodi Jones <venom@gen-x.co.nz> # URL: http://code.google.com/p/sickbeard/ # -#Ported to sickrage by: matigonkas +# Ported to sickrage by: matigonkas # # This file is part of SickRage. # @@ -38,9 +38,6 @@ class BTDIGGProvider(generic.TorrentProvider): self.cache = BTDiggCache(self) - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] @@ -50,7 +47,7 @@ class BTDIGGProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s" % search_string, logger.DEBUG) searchURL = self.urls['api'] + "api/private-341ada3245790954/s02?q=" + search_string + "&p=0&order=1" @@ -58,7 +55,7 @@ class BTDIGGProvider(generic.TorrentProvider): jdata = self.getURL(searchURL, json=True) if not jdata: - logger.log("No data returned to be parsed!!!") + logger.log(u"No data returned to be parsed!!!") return [] for torrent in jdata: @@ -66,26 +63,26 @@ class BTDIGGProvider(generic.TorrentProvider): title = torrent['name'] download_url = torrent['magnet'] size = torrent['size'] - #FIXME + # FIXME seeders = 1 leechers = 0 if not all([title, download_url]): continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s" % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py index 6647c38167d1fa02e82996c864911393b72466e5..6b3b767289e6ea00e8d6e80c2d7f97cf65274513 100644 --- a/sickbeard/providers/btn.py +++ b/sickbeard/providers/btn.py @@ -52,9 +52,6 @@ class BTNProvider(generic.TorrentProvider): self.url = self.urls['website'] - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.api_key: logger.log(u"Invalid api key. Check your settings", logger.WARNING) @@ -91,7 +88,7 @@ class BTNProvider(generic.TorrentProvider): parsedJSON = self._api_call(apikey, params) if not parsedJSON: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) return results if self._checkAuthFromData(parsedJSON): @@ -128,7 +125,7 @@ class BTNProvider(generic.TorrentProvider): logger.log(u"Found result: %s " % title, logger.DEBUG) results.append(torrent_info) - #FIXME SORT RESULTS + # FIXME SORT RESULTS return results def _api_call(self, apikey, params={}, results_per_page=1000, offset=0): diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py index 7d80b003f7eec6dbcbb9d933103adf49888fcd89..67641af0006547fd78cb73d998bf3508d14bd042 100644 --- a/sickbeard/providers/cpasbien.py +++ b/sickbeard/providers/cpasbien.py @@ -40,9 +40,6 @@ class CpasbienProvider(generic.TorrentProvider): self.cache = CpasbienCache(self) - def isEnabled(self): - return self.enabled - def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] @@ -52,7 +49,7 @@ class CpasbienProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.url + '/recherche/'+search_string.replace('.', '-') + '.html' @@ -85,14 +82,14 @@ class CpasbienProvider(generic.TorrentProvider): title = link.text.lower().strip() pageURL = link['href'] - #downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer')) + # downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer')) tmp = pageURL.split('/')[-1].replace('.html', '.torrent') downloadTorrentLink = ('http://www.cpasbien.io/telechargement/%s' % tmp) if downloadTorrentLink: download_url = downloadTorrentLink - #FIXME + # FIXME size = -1 seeders = 1 leechers = 0 @@ -104,7 +101,7 @@ class CpasbienProvider(generic.TorrentProvider): continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -112,7 +109,7 @@ class CpasbienProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] @@ -130,7 +127,7 @@ class CpasbienCache(tvcache.TVCache): self.minTime = 30 def _getRSSData(self): - #search_strings = {'RSS': ['']} + # search_strings = {'RSS': ['']} return {'entries': {}} provider = CpasbienProvider() diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py index 2549d82763e5aa91ef46ef3d29bfce14fa145bd0..d16cccb75180c752bf8fccc6c906c176f44fdcde 100644 --- a/sickbeard/providers/extratorrent.py +++ b/sickbeard/providers/extratorrent.py @@ -19,7 +19,6 @@ import re import traceback import xmltodict -import HTMLParser from xml.parsers.expat import ExpatError from sickbeard import logger @@ -50,9 +49,6 @@ class ExtraTorrentProvider(generic.TorrentProvider): self.headers.update({'User-Agent': USER_AGENT}) self.search_params = {'cid': 8} - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] @@ -62,22 +58,22 @@ class ExtraTorrentProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) try: - self.search_params.update({'type': ('search', 'rss')[mode == 'RSS'], 'search': search_string}) + self.search_params.update({'type': ('search', 'rss')[mode is 'RSS'], 'search': search_string}) data = self.getURL(self.urls['rss'], params=self.search_params) if not data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue if not data.startswith('<?xml'): - logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO) + logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO) continue try: - data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&')) + data = xmltodict.parse(data) except ExpatError: logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR) continue @@ -101,14 +97,14 @@ class ExtraTorrentProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -116,7 +112,7 @@ class ExtraTorrentProvider(generic.TorrentProvider): except (AttributeError, TypeError, KeyError, ValueError): logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/fnt.py b/sickbeard/providers/fnt.py index 4d15496433a3115d5f089fb8592195a5b1b59d6f..52f83e8a32985ffb9ca1129eb9efc874ea2f8fb7 100644 --- a/sickbeard/providers/fnt.py +++ b/sickbeard/providers/fnt.py @@ -54,9 +54,6 @@ class FNTProvider(generic.TorrentProvider): "visible": 1, "freeleech": 0, "nuke": 1, "3D": 0, "sort": "size", "order": "desc" } - def isEnabled(self): - return self.enabled - def _doLogin(self): if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()): @@ -93,7 +90,7 @@ class FNTProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) self.search_params['recherche'] = search_string @@ -127,7 +124,7 @@ class FNTProvider(generic.TorrentProvider): detailseedleech = link['mtcontent'] seeders = int(detailseedleech.split("<font color='#00b72e'>")[1].split("</font>")[0]) leechers = int(detailseedleech.split("<font color='red'>")[1].split("</font>")[0]) - #FIXME + # FIXME size = -1 except Exception: logger.log(u"Unable to parse torrent id & seeders & leechers. Traceback: %s " % traceback.format_exc(), logger.DEBUG) @@ -136,14 +133,14 @@ class FNTProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -151,7 +148,7 @@ class FNTProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py deleted file mode 100644 index 90e1e2e00adf6d3c568ee31421b27ac25594d0d7..0000000000000000000000000000000000000000 --- a/sickbeard/providers/frenchtorrentdb.py +++ /dev/null @@ -1,203 +0,0 @@ -# Authors: Yannick Croissant <yannick.croissant@gmail.com> -# adaur <adaur.underground@gmail.com> -# URL: http://code.google.com/p/sickbeard/ -# -# This file is part of SickRage. -# -# Sick Beard is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Sick Beard is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Sick Beard. If not, see <http://www.gnu.org/licenses/>. - -import re -from sickbeard.providers import generic - -from sickbeard.bs4_parser import BS4Parser -from sickbeard import logger -from sickbeard import tvcache - -class FrenchTorrentDBProvider(generic.TorrentProvider): - - def __init__(self): - - generic.TorrentProvider.__init__(self, "FrenchTorrentDB") - - self.supportsBacklog = True - - - self.urls = { - 'base_url': 'http://www.frenchtorrentdb.com', - } - - self.url = self.urls['base_url'] - self.search_params = { - "adv_cat%5Bs%5D%5B1%5D": 95, - "adv_cat%5Bs%5D%5B2%5D": 190, - "adv_cat%5Bs%5D%5B3%5D": 101, - "adv_cat%5Bs%5D%5B4%5D": 191, - "adv_cat%5Bs%5D%5B5%5D": 197, - "adv_cat%5Bs%5D%5B7%5D": 199, - "adv_cat%5Bs%5D%5B8%5D": 201, - "adv_cat%5Bs%5D%5B9%5D": 128, - "section": "TORRENTS", - "exact": 1, - "submit": "GO" - } - - self.username = None - self.password = None - self.ratio = None - self.minseed = None - self.minleech = None - - def isEnabled(self): - return self.enabled - - def _doLogin(self): - - params = { - "section": "LOGIN", - "challenge": 1 - } - - data = self.getURL(self.url, params=params, json=True) - - post_data = { - 'username' : self.username, - 'password' : self.password, - 'secure_login': self._getSecureLogin(data['challenge']), - 'hash' : data['hash'] - } - - params.pop('challenge') - params['ajax'] = 1 - self.getURL(self.url, params=params, post_data=post_data) - - return True - - def _getSecureLogin(self, challenges): - - def fromCharCode(*args): - return ''.join(map(unichr, args)) - - def decodeString(p, a, c, k, e, d): - a = int(a) - c = int(c) - def e(c): - if c < a: - f = '' - else: - f = e(c / a) - return f + fromCharCode(c % a + 161) - while c: - c -= 1 - if k[c]: - regex = re.compile(e(c)) - p = re.sub(regex, k[c], p) - return p - - def decodeChallenge(challenge): - regexGetArgs = re.compile('\'([^\']+)\',([0-9]+),([0-9]+),\'([^\']+)\'') - regexIsEncoded = re.compile('decodeURIComponent') - regexUnquote = re.compile('\'') - if challenge == 'a': - return '05f' - if re.match(regexIsEncoded, challenge) == None: - return re.sub(regexUnquote, '', challenge) - args = re.findall(regexGetArgs, challenge) - decoded = decodeString( - args[0][0], args[0][1], - args[0][2], args[0][3].split('|'), - 0, {}) - return decoded - - secureLogin = '' - for challenge in challenges: - secureLogin += decodeChallenge(challenge) - return secureLogin - - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): - - results = [] - items = {'Season': [], 'Episode': [], 'RSS': []} - - # check for auth - if not self._doLogin(): - return results - - for mode in search_strings.keys(): - logger.log(u"Search Mode: %s" % mode, logger.DEBUG) - for search_string in search_strings[mode]: - - if mode != 'RSS': - logger.log(u"Search string: %s " % search_string, logger.DEBUG) - - self.search_params['name'] = search_string - - r = self.getURL(self.url, params=self.search_params) - with BS4Parser(r, features=["html5lib", "permissive"]) as html: - resultsTable = html.find("div", {"class": "DataGrid"}) - - if resultsTable: - rows = resultsTable.findAll("ul") - - for row in rows: - link = row.find("a", title=True) - title = link['title'] - #FIXME - size = -1 - seeders = 1 - leechers = 0 - - autogetURL = self.url + '/' + (row.find("li", {"class": "torrents_name"}).find('a')['href'][1:]).replace('#FTD_MENU', '&menu=4') - r = self.getURL(autogetURL) - with BS4Parser(r, features=["html5lib", "permissive"]) as html: - - download_url = html.find("div", {"class" : "autoget"}).find('a')['href'] - - if not all([title, download_url]): - continue - - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': - # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) - # continue - - item = title, download_url, size, seeders, leechers - if mode != 'RSS': - logger.log(u"Found result: %s " % title, logger.DEBUG) - - items[mode].append(item) - - #For each search mode sort all the items by seeders if available - items[mode].sort(key=lambda tup: tup[3], reverse=True) - - results += items[mode] - - return results - - def seedRatio(self): - return self.ratio - - -class FrenchTorrentDBCache(tvcache.TVCache): - def __init__(self, provider_obj): - tvcache.TVCache.__init__(self, provider_obj) - - # Only poll FTDB every 10 minutes max - self.minTime = 10 - - def _getRSSData(self): - search_strings = {'RSS': ['']} - return {'entries': self.provider._doSearch(search_strings)} - -provider = FrenchTorrentDBProvider() diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py index ec355f82fcbd6c08692cae77e99c7fd7016d9364..3c5b7688d2263a848cda22853a42611976029326 100644 --- a/sickbeard/providers/freshontv.py +++ b/sickbeard/providers/freshontv.py @@ -57,9 +57,6 @@ class FreshOnTVProvider(generic.TorrentProvider): self.cookies = None - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -120,7 +117,7 @@ class FreshOnTVProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (freeleech, search_string) @@ -129,13 +126,13 @@ class FreshOnTVProvider(generic.TorrentProvider): max_page_number = 0 if not init_html: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue try: with BS4Parser(init_html, features=["html5lib", "permissive"]) as init_soup: - #Check to see if there is more than 1 page of results + # Check to see if there is more than 1 page of results pager = init_soup.find('div', {'class': 'pager'}) if pager: page_links = pager.find_all('a', href=True) @@ -150,26 +147,26 @@ class FreshOnTVProvider(generic.TorrentProvider): if page_int > max_page_number: max_page_number = page_int - #limit page number to 15 just in case something goes wrong + # limit page number to 15 just in case something goes wrong if max_page_number > 15: max_page_number = 15 - #limit RSS search + # limit RSS search if max_page_number > 3 and mode is 'RSS': max_page_number = 3 - except: + except Exception: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) continue data_response_list = [] data_response_list.append(init_html) - #Freshon starts counting pages from zero, even though it displays numbers from 1 + # Freshon starts counting pages from zero, even though it displays numbers from 1 if max_page_number > 1: for i in range(1, max_page_number): time.sleep(1) page_searchURL = searchURL + '&page=' + str(i) - #'.log(u"Search string: " + page_searchURL, logger.DEBUG) + # '.log(u"Search string: " + page_searchURL, logger.DEBUG) page_html = self.getURL(page_searchURL) if not page_html: @@ -185,14 +182,14 @@ class FreshOnTVProvider(generic.TorrentProvider): torrent_rows = html.findAll("tr", {"class": re.compile('torrent_[0-9]*')}) - #Continue only if a Release is found + # Continue only if a Release is found if len(torrent_rows) == 0: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue for individual_torrent in torrent_rows: - #skip if torrent has been nuked due to poor quality + # skip if torrent has been nuked due to poor quality if individual_torrent.find('img', alt='Nuked') != None: continue @@ -208,7 +205,7 @@ class FreshOnTVProvider(generic.TorrentProvider): download_url = self.urls['download'] % (str(torrent_id)) seeders = tryInt(individual_torrent.find('td', {'class': 'table_seeders'}).find('span').text.strip(), 1) leechers = tryInt(individual_torrent.find('td', {'class': 'table_leechers'}).find('a').text.strip(), 0) - #FIXME + # FIXME size = -1 except Exception: continue @@ -216,22 +213,22 @@ class FreshOnTVProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - except Exception as e: + except Exception: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py index c93f2f9dd4c0b506709af12a2c2c55c1320a3ef4..ff2cadc275245beef54ac686cb79d33e5ed78196 100644 --- a/sickbeard/providers/generic.py +++ b/sickbeard/providers/generic.py @@ -22,7 +22,6 @@ import datetime import os import re import itertools -import urllib from random import shuffle from base64 import b16encode, b32decode @@ -40,7 +39,7 @@ from sickrage.helper.encoding import ek from sickrage.helper.exceptions import ex from sickbeard import show_name_helpers -class GenericProvider: +class GenericProvider(object): NZB = "nzb" TORRENT = "torrent" @@ -50,8 +49,6 @@ class GenericProvider: self.providerType = None self.name = name - self.proxy = ProviderProxy() - self.proxyGlypeProxySSLwarning = None self.urls = {} self.url = '' @@ -87,7 +84,7 @@ class GenericProvider: shuffle(self.btCacheURLS) - self.proper_strings = ['PROPER|REPACK'] + self.proper_strings = ['PROPER|REPACK|REAL'] def getID(self): return GenericProvider.makeID(self.name) @@ -99,6 +96,8 @@ class GenericProvider: def imageName(self): return self.getID() + '.png' + # pylint: disable=R0201,W0612 + # Method could be a function, Unused variable def _checkAuth(self): return True @@ -106,18 +105,10 @@ class GenericProvider: return True def isActive(self): - if self.providerType == GenericProvider.NZB and sickbeard.USE_NZBS: - return self.isEnabled() - elif self.providerType == GenericProvider.TORRENT and sickbeard.USE_TORRENTS: - return self.isEnabled() - else: - return False + return False def isEnabled(self): - """ - This should be overridden and should return the config setting eg. sickbeard.MYPROVIDER - """ - return False + return self.enabled def getResult(self, episodes): """ @@ -135,22 +126,14 @@ class GenericProvider: return result - def getURL(self, url, post_data=None, params=None, timeout=30, json=False): + def getURL(self, url, post_data=None, params=None, timeout=30, json=False, needBytes=False): """ By default this is just a simple urlopen call but this method should be overridden for providers with special URL requirements (like cookies) """ - if self.proxy.isEnabled(): - self.headers.update({'Referer': self.proxy.getProxyURL()}) - self.proxyGlypeProxySSLwarning = self.proxy.getProxyURL() + 'includes/process.php?action=sslagree&submit=Continue anyway...' - else: - if 'Referer' in self.headers: - self.headers.pop('Referer') - self.proxyGlypeProxySSLwarning = None - - return helpers.getURL(self.proxy._buildURL(url), post_data=post_data, params=params, headers=self.headers, timeout=timeout, - session=self.session, json=json, proxyGlypeProxySSLwarning=self.proxyGlypeProxySSLwarning) + return helpers.getURL(url, post_data=post_data, params=params, headers=self.headers, timeout=timeout, + session=self.session, json=json, needBytes=needBytes) def _makeURL(self, result): @@ -162,19 +145,19 @@ class GenericProvider: try: torrent_name = re.findall('dn=([^&]+)', result.url)[0] - except: + except Exception: torrent_name = 'NO_DOWNLOAD_NAME' if len(torrent_hash) == 32: torrent_hash = b16encode(b32decode(torrent_hash)).upper() if not torrent_hash: - logger.log("Unable to extract torrent hash from magnet: " + ex(result.url), logger.ERROR) + logger.log(u"Unable to extract torrent hash from magnet: " + ex(result.url), logger.ERROR) return urls, filename urls = [x.format(torrent_hash=torrent_hash, torrent_name=torrent_name) for x in self.btCacheURLS] - except: - logger.log("Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR) + except Exception: + logger.log(u"Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR) return urls, filename else: urls = [result.url] @@ -200,17 +183,11 @@ class GenericProvider: urls, filename = self._makeURL(result) - if self.proxy.isEnabled(): - self.headers.update({'Referer': self.proxy.getProxyURL()}) - elif 'Referer' in self.headers: - self.headers.pop('Referer') - for url in urls: if 'NO_DOWNLOAD_NAME' in url: continue - if not self.proxy.isEnabled() and url.startswith('http'): - # Let's just set a referer for every .torrent/.nzb, should work as a cover-all without side-effects + if url.startswith('http'): self.headers.update({'Referer': '/'.join(url.split('/')[:3]) + '/'}) logger.log(u"Downloading a result from " + self.name + " at " + url) @@ -219,13 +196,13 @@ class GenericProvider: if url.endswith(GenericProvider.TORRENT) and filename.endswith(GenericProvider.NZB): filename = filename.rsplit('.', 1)[0] + '.' + GenericProvider.TORRENT - if helpers.download_file(self.proxy._buildURL(url), filename, session=self.session, headers=self.headers): + if helpers.download_file(url, filename, session=self.session, headers=self.headers): if self._verify_download(filename): logger.log(u"Saved result to " + filename, logger.INFO) return True else: logger.log(u"Could not download %s" % url, logger.WARNING) - helpers._remove_file_failed(filename) + helpers.remove_file_failed(filename) if len(urls): logger.log(u"Failed to download any results", logger.WARNING) @@ -242,10 +219,12 @@ class GenericProvider: try: parser = createParser(file_name) if parser: + # pylint: disable=W0212 + # Access to a protected member of a client class mime_type = parser._getMimeType() try: parser.stream._input.close() - except: + except Exception: pass if mime_type == 'application/x-bittorrent': return True @@ -272,6 +251,8 @@ class GenericProvider: quality = Quality.sceneQuality(title, anime) return quality + # pylint: disable=R0201,W0613 + # Method could be a function, Unused argument def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None): return [] @@ -405,9 +386,8 @@ class GenericProvider: u"This is supposed to be a season pack search but the result " + title + " is not a valid season pack, skipping it", logger.DEBUG) addCacheEntry = True - if len(parse_result.episode_numbers) and ( - parse_result.season_number not in set([ep.season for ep in episodes]) or not [ep for ep in episodes if - ep.scene_episode in parse_result.episode_numbers]): + if len(parse_result.episode_numbers) and (parse_result.season_number not in set([ep.season for ep in episodes]) + or not [ep for ep in episodes if ep.scene_episode in parse_result.episode_numbers]): logger.log( u"The result " + title + " doesn't seem to be a valid episode that we are trying to snatch, ignoring", logger.DEBUG) @@ -457,6 +437,8 @@ class GenericProvider: # add parsed result to cache for usage later on if addCacheEntry: logger.log(u"Adding item from search to cache: " + title, logger.DEBUG) + # pylint: disable=W0212 + # Access to a protected member of a client class ci = self.cache._addCacheEntry(title, url, parse_result=parse_result) if ci is not None: cl.append(ci) @@ -512,6 +494,8 @@ class GenericProvider: # check if we have items to add to cache if len(cl) > 0: + # pylint: disable=W0212 + # Access to a protected member of a client class myDB = self.cache._getDB() myDB.mass_action(cl) @@ -538,6 +522,9 @@ class NZBProvider(GenericProvider): self.providerType = GenericProvider.NZB + def isActive(self): + return sickbeard.USE_NZBS and self.isEnabled() + def _get_size(self, item): try: size = item.get('links')[1].get('length', -1) @@ -556,8 +543,11 @@ class TorrentProvider(GenericProvider): self.providerType = GenericProvider.TORRENT + def isActive(self): + return sickbeard.USE_TORRENTS and self.isEnabled() + def _get_title_and_url(self, item): - from feedparser.feedparser import FeedParserDict + from feedparser.util import FeedParserDict if isinstance(item, (dict, FeedParserDict)): title = item.get('title', '') download_url = item.get('url', '') @@ -604,7 +594,7 @@ class TorrentProvider(GenericProvider): elif ep_obj.show.anime: ep_string = show_name + ' ' + "%d" % ep_obj.scene_absolute_number else: - ep_string = show_name + ' S%02d' % int(ep_obj.scene_season) #1) showName.SXX + ep_string = show_name + ' S%02d' % int(ep_obj.scene_season) # 1) showName.SXX search_string['Season'].append(ep_string.encode('utf-8').strip()) @@ -627,7 +617,7 @@ class TorrentProvider(GenericProvider): ep_string += "%02d" % int(ep_obj.scene_absolute_number) else: ep_string += sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season, - 'episodenumber': ep_obj.scene_episode} + 'episodenumber': ep_obj.scene_episode} if add_string: ep_string = ep_string + ' %s' % add_string @@ -635,7 +625,8 @@ class TorrentProvider(GenericProvider): return [search_string] - def _clean_title_from_provider(self, title): + @staticmethod + def _clean_title_from_provider(title): return (title or '').replace(' ', '.') def findPropers(self, search_date=datetime.datetime.today()): @@ -662,44 +653,3 @@ class TorrentProvider(GenericProvider): results.append(classes.Proper(title, url, datetime.datetime.today(), show)) return results - -class ProviderProxy: - def __init__(self): - self.Type = 'GlypeProxy' - self.param = 'browse.php?u=' - self.option = '&b=32&f=norefer' - self.enabled = False - self.url = None - - self.urls = { - 'getprivate.eu (NL)': 'http://getprivate.eu/', - 'hideme.nl (NL)': 'http://hideme.nl/', - 'proxite.eu (DE)': 'http://proxite.eu/', - 'interproxy.net (EU)': 'http://interproxy.net/', - } - - def isEnabled(self): - """ Return True if we Choose to call TPB via Proxy """ - return self.enabled - - def getProxyURL(self): - """ Return the Proxy URL Choosen via Provider Setting """ - return str(self.url) - - def _buildURL(self, url): - """ Return the Proxyfied URL of the page """ - if self.isEnabled(): - url = self.getProxyURL() + self.param + urllib.quote_plus(url.encode('UTF-8')) + self.option - logger.log(u"Proxified URL: " + url, logger.DEBUG) - - return url - - def _buildRE(self, regx): - """ Return the Proxyfied RE string """ - if self.isEnabled(): - regx = re.sub('//1', self.option, regx).replace('&', '&') - logger.log(u"Proxified REGEX: " + regx, logger.DEBUG) - else: - regx = re.sub('//1', '', regx) - - return regx diff --git a/sickbeard/providers/gftracker.py b/sickbeard/providers/gftracker.py index 58c7be00605953626ced43f2a9c21cede6fa6970..826e42ccf49dbda3a63661c9f5cf626d89f2e161 100644 --- a/sickbeard/providers/gftracker.py +++ b/sickbeard/providers/gftracker.py @@ -56,9 +56,6 @@ class GFTrackerProvider(generic.TorrentProvider): self.cache = GFTrackerCache(self) - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -97,7 +94,7 @@ class GFTrackerProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (self.categories, search_string) @@ -149,12 +146,12 @@ class GFTrackerProvider(generic.TorrentProvider): # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) diff --git a/sickbeard/providers/hdbits.py b/sickbeard/providers/hdbits.py index a4eb0acf2eee061ed5e727de34c223f8f11dc826..fe2f6b91f45375a80100c93172804fa6cfa4c8d0 100644 --- a/sickbeard/providers/hdbits.py +++ b/sickbeard/providers/hdbits.py @@ -49,9 +49,6 @@ class HDBitsProvider(generic.TorrentProvider): self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.passkey: @@ -87,7 +84,7 @@ class HDBitsProvider(generic.TorrentProvider): def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None): - #FIXME + # FIXME results = [] logger.log(u"Search string: %s" % search_params, logger.DEBUG) @@ -107,7 +104,7 @@ class HDBitsProvider(generic.TorrentProvider): for item in items: results.append(item) - #FIXME SORTING + # FIXME SORTING return results def findPropers(self, search_date=None): diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py index fe6d82b8b5198af03a2bb426e025965c2e26cccc..48eec48a7180d1cb79130ceb3e37c5efd1a39178 100644 --- a/sickbeard/providers/hdspace.py +++ b/sickbeard/providers/hdspace.py @@ -21,7 +21,6 @@ import re import urllib import requests -import traceback from bs4 import BeautifulSoup from sickbeard import logger @@ -56,9 +55,6 @@ class HDSpaceProvider(generic.TorrentProvider): self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -97,18 +93,18 @@ class HDSpaceProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': searchURL = self.urls['search'] % (urllib.quote_plus(search_string.replace('.', ' ')),) else: searchURL = self.urls['search'] % '' logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s" % search_string, logger.DEBUG) data = self.getURL(searchURL) if not data or 'please try later' in data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue # Search result page contains some invalid html that prevents html parser from returning all data. @@ -123,7 +119,7 @@ class HDSpaceProvider(generic.TorrentProvider): html = BeautifulSoup(data[index:], 'html5lib') if not html: - logger.log("No html data parsed from provider", logger.DEBUG) + logger.log(u"No html data parsed from provider", logger.DEBUG) continue torrents = html.findAll('tr') @@ -133,7 +129,7 @@ class HDSpaceProvider(generic.TorrentProvider): # Skip column headers for result in torrents[1:]: if len(result.contents) < 10: - #skip extraneous rows at the end + # skip extraneous rows at the end continue try: @@ -147,14 +143,14 @@ class HDSpaceProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -162,7 +158,7 @@ class HDSpaceProvider(generic.TorrentProvider): except (AttributeError, TypeError, KeyError, ValueError): continue - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py index 357e207e9ba661252369bb2a737e1978207f7b27..e2708f3cdd8db40a231cc133930e7aba15b8bfa4 100644 --- a/sickbeard/providers/hdtorrents.py +++ b/sickbeard/providers/hdtorrents.py @@ -53,10 +53,6 @@ class HDTorrentsProvider(generic.TorrentProvider): self.cache = HDTorrentsCache(self) - - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -96,18 +92,18 @@ class HDTorrentsProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': searchURL = self.urls['search'] % (urllib.quote_plus(search_string), self.categories) else: searchURL = self.urls['rss'] % self.categories logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s" % search_string, logger.DEBUG) data = self.getURL(searchURL) if not data or 'please try later' in data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue # Search result page contains some invalid html that prevents html parser from returning all data. @@ -123,7 +119,7 @@ class HDTorrentsProvider(generic.TorrentProvider): with BS4Parser(data, features=["html5lib", "permissive"]) as html: if not html: - logger.log("No html data parsed from provider", logger.DEBUG) + logger.log(u"No html data parsed from provider", logger.DEBUG) continue empty = html.find('No torrents here') @@ -179,14 +175,14 @@ class HDTorrentsProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -194,7 +190,7 @@ class HDTorrentsProvider(generic.TorrentProvider): except (AttributeError, TypeError, KeyError, ValueError): continue - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py index 6c9f18c1a7f64e3e7c69442506fe3d56f25a43c3..3736bfcb4d4bde0066dc9b69c71e5e8dfcdec5f5 100644 --- a/sickbeard/providers/hounddawgs.py +++ b/sickbeard/providers/hounddawgs.py @@ -62,9 +62,6 @@ class HoundDawgsProvider(generic.TorrentProvider): "searchtags": '' } - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, @@ -98,7 +95,7 @@ class HoundDawgsProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) self.search_params['searchstr'] = search_string @@ -132,10 +129,10 @@ class HoundDawgsProvider(generic.TorrentProvider): allAs = (torrent[1]).find_all('a') try: - #link = self.urls['base_url'] + allAs[2].attrs['href'] - #url = result.find('td', attrs={'class': 'quickdownload'}).find('a') + # link = self.urls['base_url'] + allAs[2].attrs['href'] + # url = result.find('td', attrs={'class': 'quickdownload'}).find('a') title = allAs[2].string - #Trimming title so accepted by scene check(Feature has been rewuestet i forum) + # Trimming title so accepted by scene check(Feature has been rewuestet i forum) title = title.replace("custom.", "") title = title.replace("CUSTOM.", "") title = title.replace("Custom.", "") @@ -147,7 +144,7 @@ class HoundDawgsProvider(generic.TorrentProvider): title = title.replace("Subs.", "") download_url = self.urls['base_url']+allAs[0].attrs['href'] - #FIXME + # FIXME size = -1 seeders = 1 leechers = 0 @@ -158,14 +155,14 @@ class HoundDawgsProvider(generic.TorrentProvider): if not title or not download_url: continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -173,7 +170,7 @@ class HoundDawgsProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py index de57748862301eccce09c8f83ce7c2bd1031d998..000c9b03e42f0f19a84169d051d85f44bdcc5ac4 100644 --- a/sickbeard/providers/iptorrents.py +++ b/sickbeard/providers/iptorrents.py @@ -20,8 +20,8 @@ import re from sickbeard.providers import generic from sickbeard import logger from sickbeard import tvcache -from sickrage.helper.exceptions import AuthException from sickbeard.bs4_parser import BS4Parser +from sickrage.helper.exceptions import AuthException, ex class IPTorrentsProvider(generic.TorrentProvider): def __init__(self): @@ -48,9 +48,6 @@ class IPTorrentsProvider(generic.TorrentProvider): self.categories = '73=&60=' - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -93,12 +90,12 @@ class IPTorrentsProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) # URL with 50 tv-show results, or max 150 if adjusted in IPTorrents profile searchURL = self.urls['search'] % (self.categories, freeleech, search_string) - searchURL += ';o=seeders' if mode != 'RSS' else '' + searchURL += ';o=seeders' if mode is not 'RSS' else '' logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) data = self.getURL(searchURL) @@ -109,7 +106,7 @@ class IPTorrentsProvider(generic.TorrentProvider): data = re.sub(r'(?im)<button.+?<[\/]button>', '', data, 0) with BS4Parser(data, features=["html5lib", "permissive"]) as html: if not html: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue if html.find(text='No Torrents Found!'): @@ -119,7 +116,7 @@ class IPTorrentsProvider(generic.TorrentProvider): torrent_table = html.find('table', attrs={'class': 'torrents'}) torrents = torrent_table.find_all('tr') if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrents) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -137,14 +134,14 @@ class IPTorrentsProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -152,7 +149,7 @@ class IPTorrentsProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Error: %r" % ex(e), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] @@ -162,7 +159,8 @@ class IPTorrentsProvider(generic.TorrentProvider): def seedRatio(self): return self.ratio - def _convertSize(self, size): + @staticmethod + def _convertSize(size): size, modifier = size.split(' ') size = float(size) if modifier in 'KB': diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py index a55349612389d4386c9dffb0351ff26943f2e5d8..0168c132268e8ce7744b95655d32792c2f55588a 100755 --- a/sickbeard/providers/kat.py +++ b/sickbeard/providers/kat.py @@ -23,7 +23,6 @@ import traceback from urllib import urlencode import xmltodict -import HTMLParser import sickbeard from sickbeard import logger @@ -63,9 +62,6 @@ class KATProvider(generic.TorrentProvider): 'category': 'tv' } - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] items = {'Season': [], 'Episode': [], 'RSS': []} @@ -78,28 +74,28 @@ class KATProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - self.search_params['q'] = search_string.encode('utf-8') if mode != 'RSS' else '' - self.search_params['field'] = 'seeders' if mode != 'RSS' else 'time_add' + self.search_params['q'] = search_string.encode('utf-8') if mode is not 'RSS' else '' + self.search_params['field'] = 'seeders' if mode is not 'RSS' else 'time_add' - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s" % search_string, logger.DEBUG) - url_fmt_string = 'usearch' if mode != 'RSS' else search_string + url_fmt_string = 'usearch' if mode is not 'RSS' else search_string try: searchURL = self.urls['search'] % url_fmt_string + '?' + urlencode(self.search_params) logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) data = self.getURL(searchURL) - #data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params) + # data = self.getURL(self.urls[('search', 'rss')[mode is 'RSS']], params=self.search_params) if not data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue if not data.startswith('<?xml'): - logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO) + logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO) continue try: - data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&')) + data = xmltodict.parse(data) except ExpatError: logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR) continue @@ -114,8 +110,8 @@ class KATProvider(generic.TorrentProvider): for item in entries: try: - title = item['title'].decode('utf-8') - + title = item['title'] + assert isinstance(title, unicode) # Use the torcache link kat provides, # unless it is not torcache or we are not using blackhole # because we want to use magnets if connecting direct to client @@ -130,7 +126,7 @@ class KATProvider(generic.TorrentProvider): size = int(item['torrent:contentLength']) info_hash = item['torrent:infoHash'] - #link = item['link'] + # link = item['link'] except (AttributeError, TypeError, KeyError): continue @@ -138,19 +134,19 @@ class KATProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue if self.confirmed and not verified: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG) continue item = title, download_url, size, seeders, leechers, info_hash - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -158,7 +154,7 @@ class KATProvider(generic.TorrentProvider): except Exception: logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/libertalia.py b/sickbeard/providers/libertalia.py index 6a7a86898ce8cf54e515b424248a1fd53c23e88e..4a4b9b6b4c097cd83d0bcb1951bfd37cc55d1f6e 100644 --- a/sickbeard/providers/libertalia.py +++ b/sickbeard/providers/libertalia.py @@ -52,9 +52,6 @@ class LibertaliaProvider(generic.TorrentProvider): self.cache = LibertaliaCache(self) - def isEnabled(self): - return self.enabled - def _doLogin(self): if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()): @@ -90,7 +87,7 @@ class LibertaliaProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urlsearch % (urllib.quote(search_string), self.categories) @@ -105,16 +102,16 @@ class LibertaliaProvider(generic.TorrentProvider): rows = resultsTable.findAll("tr", {"class" : re.compile("torrent_row(.*)?")}) for row in rows: - #bypass first row because title only + # bypass first row because title only columns = row.find('td', {"class" : "torrent_name"}) - # isvfclass = row.find('td', {"class" : "sprite-vf"}) - #isvostfrclass = row.find('td', {"class" : "sprite-vostfr"}) + # isvfclass = row.find('td', {"class" : "sprite-vf"}) + # isvostfrclass = row.find('td', {"class" : "sprite-vostfr"}) link = columns.find("a", href=re.compile("torrents")) if link: title = link.text - #recherched = searchURL.replace(".", "(.*)").replace(" ", "(.*)").replace("'", "(.*)") + # recherched = searchURL.replace(".", "(.*)").replace(" ", "(.*)").replace("'", "(.*)") download_url = row.find("a", href=re.compile("torrent_pass"))['href'] - #FIXME + # FIXME size = -1 seeders = 1 leechers = 0 @@ -122,19 +119,19 @@ class LibertaliaProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py index a4e55cbcdc5d03fa2aafe62107b5d5ea8e4a3b83..c89b22540ed42b04e4b01db0c55ed7a881b97bd6 100644 --- a/sickbeard/providers/morethantv.py +++ b/sickbeard/providers/morethantv.py @@ -62,9 +62,6 @@ class MoreThanTVProvider(generic.TorrentProvider): self.cache = MoreThanTVCache(self) - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -109,7 +106,7 @@ class MoreThanTVProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (search_string.replace('(', '').replace(')', '')) @@ -125,7 +122,7 @@ class MoreThanTVProvider(generic.TorrentProvider): torrent_table = html.find('table', attrs={'class': 'torrent_table'}) torrent_rows = torrent_table.findChildren('tr') if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrent_rows) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -135,7 +132,7 @@ class MoreThanTVProvider(generic.TorrentProvider): cells = result.findChildren('td') link = cells[1].find('a', attrs={'title': 'Download'}) - #skip if torrent has been nuked due to poor quality + # skip if torrent has been nuked due to poor quality if cells[1].find('img', alt='Nuked') != None: continue @@ -163,14 +160,14 @@ class MoreThanTVProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -178,7 +175,7 @@ class MoreThanTVProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py index 89f0563c3df866bf28146b5bf6d457a1758b171b..ad1dd5412b1d4da7079fc73b8e25ad349aef0284 100644 --- a/sickbeard/providers/newpct.py +++ b/sickbeard/providers/newpct.py @@ -71,10 +71,6 @@ class newpctProvider(generic.TorrentProvider): 'q': '' } - - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] @@ -82,7 +78,7 @@ class newpctProvider(generic.TorrentProvider): lang_info = '' if not epObj or not epObj.show else epObj.show.lang - #Only search if user conditions are true + # Only search if user conditions are true if self.onlyspasearch and lang_info != 'es': logger.log(u"Show info is not spanish, skipping provider search", logger.DEBUG) return results @@ -156,13 +152,14 @@ class newpctProvider(generic.TorrentProvider): title = title.replace('Descargar ', '') - #Quality + # Quality title = title.replace('[HDTV]', '[720p HDTV x264]') title = title.replace('[HDTV 720p AC3 5.1]', '[720p HDTV x264]') title = title.replace('[HDTV 1080p AC3 5.1]', '[1080p HDTV x264]') title = title.replace('[DVDRIP]', '[DVDrip x264]') title = title.replace('[DVD Rip]', '[DVDrip x264]') title = title.replace('[DVDrip]', '[DVDrip x264]') + title = title.replace('[DVDRIP-AC3.5.1]', '[DVDrip x264]') title = title.replace('[BLuRayRip]', '[720p BlueRay x264]') title = title.replace('[BRrip]', '[720p BlueRay x264]') title = title.replace('[BDrip]', '[720p BlueRay x264]') diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py index 6ba2e04743889846e06756f9038aa9c3d8951539..40d447e5bb74f964ec11a5e2d36959ca3ddbf7fa 100644 --- a/sickbeard/providers/newznab.py +++ b/sickbeard/providers/newznab.py @@ -88,9 +88,6 @@ class NewznabProvider(generic.NZBProvider): return self.getID() + '.png' return 'newznab.png' - def isEnabled(self): - return self.enabled - def _getURL(self, url, post_data=None, params=None, timeout=30, json=False): return self.getURL(url, post_data=post_data, params=params, timeout=timeout, json=json) @@ -200,7 +197,7 @@ class NewznabProvider(generic.NZBProvider): if self.needs_auth and not self.key: logger.log(u"Invalid api key. Check your settings", logger.WARNING) - #raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.") + # raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.") return True @@ -300,7 +297,7 @@ class NewznabProvider(generic.NZBProvider): break if offset != params['offset']: - logger.log("Tell your newznab provider to fix their bloody newznab responses") + logger.log(u"Tell your newznab provider to fix their bloody newznab responses") break params['offset'] += params['limit'] @@ -371,7 +368,7 @@ class NewznabCache(tvcache.TVCache): while (datetime.datetime.now() - self.last_search).seconds < 5: time.sleep(1) - logger.log("Cache update URL: %s " % rss_url, logger.DEBUG) + logger.log(u"Cache update URL: %s " % rss_url, logger.DEBUG) data = self.getRSSFeed(rss_url) self.last_search = datetime.datetime.now() diff --git a/sickbeard/providers/nextgen.py b/sickbeard/providers/nextgen.py index 55f6413a81f1d6a27a9ed1f623f81d52c2bd419b..08e575da4364b18283be23c117d8dbf8ce1b67c2 100644 --- a/sickbeard/providers/nextgen.py +++ b/sickbeard/providers/nextgen.py @@ -57,9 +57,6 @@ class NextGenProvider(generic.TorrentProvider): self.minleech = 0 self.freeleech = True - def isEnabled(self): - return self.enabled - def getLoginParams(self): return { 'username': self.username, @@ -83,7 +80,7 @@ class NextGenProvider(generic.TorrentProvider): return True else: self.login_opener = None - except: + except Exception: self.login_opener = None if self.login_opener: @@ -105,7 +102,7 @@ class NextGenProvider(generic.TorrentProvider): return True error = 'unknown' - except: + except Exception: error = traceback.format_exc() self.login_opener = None @@ -125,7 +122,7 @@ class NextGenProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories) @@ -148,8 +145,8 @@ class NextGenProvider(generic.TorrentProvider): entries = entries_std + entries_sticky - #Xirg STANDARD TORRENTS - #Continue only if one Release is found + # Xirg STANDARD TORRENTS + # Continue only if one Release is found if not entries: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -172,14 +169,14 @@ class NextGenProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -187,7 +184,7 @@ class NextGenProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/nyaatorrents.py b/sickbeard/providers/nyaatorrents.py index d306e595256f477ab2b3515300a89dcecbe5ce55..ee7ef56343002f1163f55d7743f39f6adff1d441 100644 --- a/sickbeard/providers/nyaatorrents.py +++ b/sickbeard/providers/nyaatorrents.py @@ -19,13 +19,9 @@ import urllib import re -import generic - -from sickbeard import show_name_helpers from sickbeard import logger -from sickbeard.common import Quality from sickbeard import tvcache -from sickbeard import show_name_helpers +from sickbeard.providers import generic class NyaaProvider(generic.TorrentProvider): @@ -49,9 +45,6 @@ class NyaaProvider(generic.TorrentProvider): self.minleech = 0 self.confirmed = False - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): if self.show and not self.show.is_anime: return [] @@ -62,7 +55,7 @@ class NyaaProvider(generic.TorrentProvider): for mode in search_strings.keys(): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s" % search_string, logger.DEBUG) params = { @@ -71,7 +64,7 @@ class NyaaProvider(generic.TorrentProvider): "sort": 2, # Sort Descending By Seeders "order": 1 } - if mode != 'RSS': + if mode is not 'RSS': params["term"] = search_string.encode('utf-8') searchURL = self.url + '?' + urllib.urlencode(params) @@ -81,7 +74,7 @@ class NyaaProvider(generic.TorrentProvider): s = re.compile(summary_regex, re.DOTALL) results = [] - for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []: + for curItem in self.cache.getRSSFeed(searchURL)['entries'] or []: title = curItem['title'] download_url = curItem['link'] if not all([title, download_url]): @@ -92,16 +85,16 @@ class NyaaProvider(generic.TorrentProvider): # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue - if self.confirmed and not verified and mode != 'RSS': + if self.confirmed and not verified and mode is not 'RSS': logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -113,15 +106,8 @@ class NyaaProvider(generic.TorrentProvider): return results - def _extract_name_from_filename(self, filename): - name_regex = '(.*?)\.?(\[.*]|\d+\.TPB)\.torrent$' - logger.log(u"Comparing %s against %s" % (name_regex, filename), logger.DEBUG) - match = re.match(name_regex, filename, re.I) - if match: - return match.group(1) - return None - - def _convertSize(self, size): + @staticmethod + def _convertSize(size): size, modifier = size.split(' ') size = float(size) if modifier in 'KiB': @@ -132,7 +118,7 @@ class NyaaProvider(generic.TorrentProvider): size = size * 1024**3 elif modifier in 'TiB': size = size * 1024**4 - return size + return int(size) def seedRatio(self): return self.ratio diff --git a/sickbeard/providers/omgwtfnzbs.py b/sickbeard/providers/omgwtfnzbs.py index 90f0b362b57f6179bba7086df08a3114b874146d..775061259bcb461e15cb85774571944815fc0d3b 100644 --- a/sickbeard/providers/omgwtfnzbs.py +++ b/sickbeard/providers/omgwtfnzbs.py @@ -40,10 +40,6 @@ class OmgwtfnzbsProvider(generic.NZBProvider): self.supportsBacklog = True - - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.api_key: diff --git a/sickbeard/providers/pretome.py b/sickbeard/providers/pretome.py index dda59e612207cfcfee601e74a00fc3ca82e7547c..f165135dd6b09a1ebf9ae419bf5743b6e7edc7e4 100644 --- a/sickbeard/providers/pretome.py +++ b/sickbeard/providers/pretome.py @@ -55,9 +55,6 @@ class PretomeProvider(generic.TorrentProvider): self.cache = PretomeCache(self) - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password or not self.pin: @@ -94,7 +91,7 @@ class PretomeProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories) @@ -106,7 +103,7 @@ class PretomeProvider(generic.TorrentProvider): try: with BS4Parser(data, features=["html5lib", "permissive"]) as html: - #Continue only if one Release is found + # Continue only if one Release is found empty = html.find('h2', text="No .torrents fit this filter criteria") if empty: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) @@ -149,14 +146,14 @@ class PretomeProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -164,7 +161,7 @@ class PretomeProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py index 149f23519e29e87878e526757f78e19b158d0ed0..cfd171f831b29a9a238dc3332f0441eed892688a 100644 --- a/sickbeard/providers/rarbg.py +++ b/sickbeard/providers/rarbg.py @@ -79,14 +79,10 @@ class RarbgProvider(generic.TorrentProvider): self.cache = RarbgCache(self) - def isEnabled(self): - return self.enabled - def _doLogin(self): if self.token and self.tokenExpireDate and datetime.datetime.now() < self.tokenExpireDate: return True - resp_json = None response = self.getURL(self.urls['token'], timeout=30, json=True) if not response: @@ -119,14 +115,14 @@ class RarbgProvider(generic.TorrentProvider): ep_indexerid = None ep_indexer = None - for mode in search_params.keys(): #Mode = RSS, Season, Episode + for mode in search_params.keys(): # Mode = RSS, Season, Episode logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) - if mode == 'RSS': + if mode is 'RSS': searchURL = self.urls['listing'] + self.defaultOptions elif mode == 'Season': if ep_indexer == INDEXER_TVDB: @@ -168,7 +164,7 @@ class RarbgProvider(generic.TorrentProvider): self.next_request = datetime.datetime.now() + datetime.timedelta(seconds=10) if not data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) raise GetOutOfLoop if re.search('ERROR', data): logger.log(u"Error returned from provider", logger.DEBUG) @@ -197,12 +193,8 @@ class RarbgProvider(generic.TorrentProvider): return results logger.log(u"Using new token", logger.DEBUG) continue - if re.search('<div id="error">.*</div>', data): - logger.log(u"Proxy %s does not support https" % self.proxy.getProxyURL(), logger.DEBUG) - searchURL = searchURL.replace(u'https', 'http') - continue - #No error found break + # No error found break break else: logger.log(u"Retried 3 times without getting results", logger.DEBUG) @@ -216,7 +208,7 @@ class RarbgProvider(generic.TorrentProvider): data_json = json.loads(data.group()) else: data_json = {} - except Exception as e: + except Exception: logger.log(u"JSON load failed: %s" % traceback.format_exc(), logger.ERROR) logger.log(u"JSON load failed. Data dump: %s" % data, logger.DEBUG) continue @@ -229,13 +221,13 @@ class RarbgProvider(generic.TorrentProvider): size = item['size'] seeders = item['seeders'] leechers = item['leechers'] - pubdate = item['pubdate'] + # pubdate = item['pubdate'] if not all([title, download_url]): continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py index 436e91c3f056c0e9e3ae9394ba64aa0b6072756d..434174d3654945b27a5c5e8f8acca359e1470317 100644 --- a/sickbeard/providers/rsstorrent.py +++ b/sickbeard/providers/rsstorrent.py @@ -15,21 +15,21 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. +import io import os import re +import requests +from bencode import bdecode import sickbeard -import generic - +from sickbeard.providers import generic from sickbeard import helpers from sickbeard import logger from sickbeard import tvcache + from sickrage.helper.encoding import ek from sickrage.helper.exceptions import ex -import requests -from bencode import bdecode - class TorrentRssProvider(generic.TorrentProvider): def __init__(self, name, url, cookies='', titleTAG='title', search_mode='eponly', search_fallback=False, enable_daily=False, @@ -52,26 +52,23 @@ class TorrentRssProvider(generic.TorrentProvider): self.titleTAG = titleTAG def configStr(self): - return "%s|%s|%s|%s|%d|%s|%d|%d|%d" % (self.name or '', - self.url or '', - self.cookies or '', - self.titleTAG or '', - self.enabled, - self.search_mode or '', - self.search_fallback, - self.enable_daily, - self.enable_backlog) + return "%s|%s|%s|%s|%d|%s|%d|%d|%d" % ( + self.name or '', + self.url or '', + self.cookies or '', + self.titleTAG or '', + self.enabled, + self.search_mode or '', + self.search_fallback, + self.enable_daily, + self.enable_backlog + ) def imageName(self): - if ek(os.path.isfile, - ek(os.path.join, sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME, 'images', 'providers', - self.getID() + '.png')): + if os.path.isfile(ek(os.path.join, sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME, 'images', 'providers', self.getID() + '.png')): return self.getID() + '.png' return 'torrentrss.png' - def isEnabled(self): - return self.enabled - def _get_title_and_url(self, item): title = item.get(self.titleTAG) @@ -88,7 +85,7 @@ class TorrentRssProvider(generic.TorrentProvider): for cur_attempt in attempt_list: try: url = cur_attempt() - except: + except Exception: continue if title and url: @@ -100,10 +97,12 @@ class TorrentRssProvider(generic.TorrentProvider): try: if self.cookies: - cookie_validator = re.compile("^(\w+=\w+)(;\w+=\w+)*$") + cookie_validator = re.compile(r"^(\w+=\w+)(;\w+=\w+)*$") if not cookie_validator.match(self.cookies): return (False, 'Cookie is not correctly formatted: ' + self.cookies) + # pylint: disable=W0212 + # Access to a protected member of a client class data = self.cache._getRSSData()['entries'] if not data: return (False, 'No items found in the RSS feed ' + self.url) @@ -116,12 +115,12 @@ class TorrentRssProvider(generic.TorrentProvider): if not url: return (False, 'Unable to get torrent url from first item') - if url.startswith('magnet:') and re.search('urn:btih:([\w]{32,40})', url): + if url.startswith('magnet:') and re.search(r'urn:btih:([\w]{32,40})', url): return (True, 'RSS feed Parsed correctly') else: if self.cookies: requests.utils.add_dict_to_cookiejar(self.session.cookies, - dict(x.rsplit('=', 1) for x in (self.cookies.split(';')))) + dict(x.rsplit('=', 1) for x in self.cookies.split(';'))) torrent_file = self.getURL(url) try: bdecode(torrent_file) @@ -134,16 +133,17 @@ class TorrentRssProvider(generic.TorrentProvider): except Exception, e: return (False, 'Error when trying to load RSS: ' + ex(e)) - def dumpHTML(self, data): + @staticmethod + def dumpHTML(data): dumpName = ek(os.path.join, sickbeard.CACHE_DIR, 'custom_torrent.html') try: - fileOut = open(dumpName, 'wb') + fileOut = io.open(dumpName, 'wb') fileOut.write(data) fileOut.close() helpers.chmodAsParent(dumpName) except IOError, e: - logger.log("Unable to save the file: %s " % repr(e), logger.ERROR) + logger.log(u"Unable to save the file: %s " % repr(e), logger.ERROR) return False logger.log(u"Saved custom_torrent html dump %s " % dumpName, logger.INFO) return True diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py index f59d9fc710a385a625a8652506920b8020bcf4de..67159e3e5867a320d5379ecffbbd55e513348120 100644 --- a/sickbeard/providers/scc.py +++ b/sickbeard/providers/scc.py @@ -56,9 +56,6 @@ class SCCProvider(generic.TorrentProvider): self.categories = { 'sponly': 'c26=26&c44=44&c45=45', # Archive, non-scene HD, non-scene SD; need to include non-scene because WEB-DL packs get added to those categories 'eponly': 'c27=27&c17=17&c44=44&c45=45&c33=33&c34=34'} # TV HD, TV SD, non-scene HD, non-scene SD, foreign XviD, foreign x264 - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, @@ -92,10 +89,10 @@ class SCCProvider(generic.TorrentProvider): items = {'Season': [], 'Episode': [], 'RSS': []} for mode in search_strings.keys(): - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories[search_mode]) @@ -114,7 +111,7 @@ class SCCProvider(generic.TorrentProvider): torrent_table = html.find('table', attrs={'id': 'torrents-table'}) torrent_rows = torrent_table.find_all('tr') if torrent_table else [] - #Continue only if at least one Release is found + # Continue only if at least one Release is found if len(torrent_rows) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -141,19 +138,19 @@ class SCCProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py index 3d50a0daaa9698f5929f69b583df68c081f3fb76..92dabe2a0ce0a4df2f9aa4577ff8557b626a943f 100644 --- a/sickbeard/providers/scenetime.py +++ b/sickbeard/providers/scenetime.py @@ -53,9 +53,6 @@ class SceneTimeProvider(generic.TorrentProvider): self.categories = "&c2=1&c43=13&c9=1&c63=1&c77=1&c79=1&c100=1&c101=1" - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, @@ -84,7 +81,7 @@ class SceneTimeProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories) @@ -99,7 +96,7 @@ class SceneTimeProvider(generic.TorrentProvider): torrent_table = html.select("#torrenttable table") torrent_rows = torrent_table[0].select("tr") if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrent_rows) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -124,7 +121,7 @@ class SceneTimeProvider(generic.TorrentProvider): seeders = int(cells[labels.index('Seeders')].get_text()) leechers = int(cells[labels.index('Leechers')].get_text()) - #FIXME + # FIXME size = -1 except (AttributeError, TypeError): @@ -133,14 +130,14 @@ class SceneTimeProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -148,7 +145,7 @@ class SceneTimeProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/shazbat.py b/sickbeard/providers/shazbat.py index 8fffb1dfdbc0c6e2f49fc2fe7d35ab1796f0dc0f..95eb68edbe6ee24c57834076b77c623098fcf5a2 100644 --- a/sickbeard/providers/shazbat.py +++ b/sickbeard/providers/shazbat.py @@ -16,10 +16,9 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -import generic - from sickbeard import logger from sickbeard import tvcache +from sickbeard.providers import generic from sickrage.helper.exceptions import AuthException @@ -41,9 +40,6 @@ class ShazbatProvider(generic.TorrentProvider): 'website': u'http://www.shazbat.tv/login',} self.url = self.urls['website'] - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.passkey: raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.") @@ -74,7 +70,7 @@ class ShazbatCache(tvcache.TVCache): rss_url = self.provider.urls['base_url'] + 'rss/recent?passkey=' + provider.passkey + '&fname=true' logger.log(u"Cache update URL: %s" % rss_url, logger.DEBUG) - return self.getRSSFeed(rss_url, items=['entries', 'feed']) + return self.getRSSFeed(rss_url) def _checkAuth(self, data): return self.provider._checkAuthFromData(data) diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py index ca93eba6c02f244a5de23224744eb3bcba95e5ce..a3c5377a8a474674e1f596e97e7706df4a813924 100644 --- a/sickbeard/providers/speedcd.py +++ b/sickbeard/providers/speedcd.py @@ -52,9 +52,6 @@ class SpeedCDProvider(generic.TorrentProvider): self.cache = SpeedCDCache(self) - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, @@ -83,7 +80,7 @@ class SpeedCDProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) search_string = '+'.join(search_string.split()) @@ -109,25 +106,25 @@ class SpeedCDProvider(generic.TorrentProvider): download_url = self.urls['download'] % (torrent['id']) seeders = int(torrent['seed']) leechers = int(torrent['leech']) - #FIXME + # FIXME size = -1 if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py index 3b564f64f21e3951c9df83575e16467f158d3512..e64a6915130f529723e3b2c020262b833b7af1ed 100644 --- a/sickbeard/providers/strike.py +++ b/sickbeard/providers/strike.py @@ -32,26 +32,23 @@ class STRIKEProvider(generic.TorrentProvider): self.cache = StrikeCache(self) self.minseed, self.minleech = 2 * [None] - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] items = {'Season': [], 'Episode': [], 'RSS': []} - for mode in search_strings.keys(): #Mode = RSS, Season, Episode + for mode in search_strings.keys(): # Mode = RSS, Season, Episode logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: " + search_string.strip(), logger.DEBUG) searchURL = self.url + "api/v2/torrents/search/?category=TV&phrase=" + search_string logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) jdata = self.getURL(searchURL, json=True) if not jdata: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) return [] results = [] @@ -66,19 +63,19 @@ class STRIKEProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) item = title, download_url, size, seeders, leechers items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py index e1f10c646ad755677c724b9b957ed0f1d1da9820..4a1d4d2f9aff776ad6ff46cee3d7720a1a6dc29f 100644 --- a/sickbeard/providers/t411.py +++ b/sickbeard/providers/t411.py @@ -54,9 +54,6 @@ class T411Provider(generic.TorrentProvider): self.minleech = 0 self.confirmed = False - def isEnabled(self): - return self.enabled - def _doLogin(self): if self.token is not None: @@ -93,10 +90,10 @@ class T411Provider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) - searchURLS = ([self.urls['search'] % (search_string, u) for u in self.subcategories], [self.urls['rss']])[mode == 'RSS'] + searchURLS = ([self.urls['search'] % (search_string, u) for u in self.subcategories], [self.urls['rss']])[mode is 'RSS'] for searchURL in searchURLS: logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) data = self.getURL(searchURL, json=True) @@ -104,18 +101,18 @@ class T411Provider(generic.TorrentProvider): continue try: - if 'torrents' not in data and mode != 'RSS': + if 'torrents' not in data and mode is not 'RSS': logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue - torrents = data['torrents'] if mode != 'RSS' else data + torrents = data['torrents'] if mode is not 'RSS' else data if not torrents: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue for torrent in torrents: - if mode == 'RSS' and int(torrent['category']) not in self.subcategories: + if mode is 'RSS' and int(torrent['category']) not in self.subcategories: continue try: @@ -130,31 +127,31 @@ class T411Provider(generic.TorrentProvider): leechers = int(torrent['leechers']) verified = bool(torrent['isVerified']) - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue - if self.confirmed and not verified and mode != 'RSS': + if self.confirmed and not verified and mode is not 'RSS': logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - except Exception as e: + except Exception: logger.log(u"Invalid torrent data, skipping result: %s" % torrent, logger.DEBUG) logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.DEBUG) continue - except Exception, e: + except Exception: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available if available + # For each search mode sort all the items by seeders if available if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py index 6b90b5c5bc685c7e9dede136fecc050d14edf1e2..c9dd88e0362489ec066bd16661932574907e5e16 100644 --- a/sickbeard/providers/thepiratebay.py +++ b/sickbeard/providers/thepiratebay.py @@ -62,10 +62,7 @@ class ThePirateBayProvider(generic.TorrentProvider): 'category': 200 } - self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)//1".+?(?P<url>magnet.*?)//1".+?Size (?P<size>[\d\.]* [TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>' - - def isEnabled(self): - return self.enabled + self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)".+?(?P<url>magnet.*?)".+?Size (?P<size>[\d\.]* [TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>' def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): @@ -78,22 +75,21 @@ class ThePirateBayProvider(generic.TorrentProvider): self.search_params.update({'q': search_string.strip()}) - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: " + search_string, logger.DEBUG) - searchURL = self.urls[('search', 'rss')[mode == 'RSS']] + '?' + urlencode(self.search_params) + searchURL = self.urls[('search', 'rss')[mode is 'RSS']] + '?' + urlencode(self.search_params) logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) data = self.getURL(searchURL) - #data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params) + # data = self.getURL(self.urls[('search', 'rss')[mode is 'RSS']], params=self.search_params) if not data: continue - re_title_url = self.proxy._buildRE(self.re_title_url).replace('&f=norefer', '') - matches = re.compile(re_title_url, re.DOTALL).finditer(data) + matches = re.compile(self.re_title_url, re.DOTALL).finditer(data) for torrent in matches: title = torrent.group('title') download_url = torrent.group('url') - #id = int(torrent.group('id')) + # id = int(torrent.group('id')) size = self._convertSize(torrent.group('size')) seeders = int(torrent.group('seeders')) leechers = int(torrent.group('leechers')) @@ -101,25 +97,25 @@ class ThePirateBayProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue - #Accept Torrent only from Good People for every Episode Search + # Accept Torrent only from Good People for every Episode Search if self.confirmed and re.search(r'(VIP|Trusted|Helper|Moderator)', torrent.group(0)) is None: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result %s but that doesn't seem like a trusted result so I'm ignoring it" % title, logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py index 8e6d254c624b8f8eb1c178aaf643cc8587c13ad9..c94ba6ef53ec9044250e4b808cbdb45579c79295 100644 --- a/sickbeard/providers/titansoftv.py +++ b/sickbeard/providers/titansoftv.py @@ -2,7 +2,7 @@ # URL: http://code.google.com/p/sickbeard # Originally written for SickGear # -# This file is part of SickRage. +# This file is part of SickRage. # # SickRage is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ import urllib -import generic +from sickbeard.providers import generic from sickbeard import logger from sickbeard import tvcache from sickbeard.helpers import mapIndexersToShow @@ -38,9 +38,6 @@ class TitansOfTVProvider(generic.TorrentProvider): self.url = 'http://titansof.tv/api/torrents' self.download_url = 'http://titansof.tv/api/torrents/%s/download?apikey=%s' - def isEnabled(self): - return self.enabled - def seedRatio(self): return self.ratio @@ -58,7 +55,7 @@ class TitansOfTVProvider(generic.TorrentProvider): return True def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None): - #FIXME ADD MODE + # FIXME ADD MODE self._checkAuth() results = [] params = {} @@ -69,26 +66,26 @@ class TitansOfTVProvider(generic.TorrentProvider): searchURL = self.url + '?' + urllib.urlencode(params) logger.log(u"Search string: %s " % search_params, logger.DEBUG) - logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) + logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) parsedJSON = self.getURL(searchURL, json=True) # do search if not parsedJSON: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) return results if self._checkAuthFromData(parsedJSON): try: found_torrents = parsedJSON['results'] - except: + except Exception: found_torrents = {} for result in found_torrents: - title = parsedJSON['release_name'] - id = parsedJSON['id'] - download_url = self.download_url % (id, self.api_key) - #FIXME + title = result.get('release_name', '') + tid = result.get('id', '') + download_url = self.download_url % (tid, self.api_key) + # FIXME size, seeders, leechers size = -1 seeders = 1 leechers = 0 @@ -96,18 +93,18 @@ class TitansOfTVProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue item = title, download_url, size, seeders, leechers logger.log(u"Found result: %s " % title, logger.DEBUG) - results.append(result) + results.append(item) - #FIXME SORTING + # FIXME SORTING return results diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py index c62797543310e3a2c011657bcba2ea13fb2b6da4..5b4fc5d4fb8036ee739ac052dc0d46535eb13c13 100644 --- a/sickbeard/providers/tntvillage.py +++ b/sickbeard/providers/tntvillage.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Giovanni Borri # Modified by gborri, https://github.com/gborri for TNTVillage # @@ -28,35 +29,35 @@ from sickbeard.bs4_parser import BS4Parser from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException from sickrage.helper.exceptions import AuthException -category_excluded = {'Sport' : 22, - 'Teatro' : 23, - 'Video Musicali' : 21, - 'Film' : 4, - 'Musica' : 2, - 'Students Releases' : 13, - 'E Books' : 3, - 'Linux' : 6, - 'Macintosh' : 9, - 'Windows Software' : 10, - 'Pc Game' : 11, - 'Playstation 2' : 12, - 'Wrestling' : 24, - 'Varie' : 25, - 'Xbox' : 26, - 'Immagini sfondi' : 27, - 'Altri Giochi' : 28, - 'Fumetteria' : 30, - 'Trash' : 31, - 'PlayStation 1' : 32, - 'PSP Portable' : 33, - 'A Book' : 34, - 'Podcast' : 35, - 'Edicola' : 36, - 'Mobile' : 37} +category_excluded = {'Sport': 22, + 'Teatro': 23, + 'Video Musicali': 21, + 'Film': 4, + 'Musica': 2, + 'Students Releases': 13, + 'E Books': 3, + 'Linux': 6, + 'Macintosh': 9, + 'Windows Software': 10, + 'Pc Game': 11, + 'Playstation 2': 12, + 'Wrestling': 24, + 'Varie': 25, + 'Xbox': 26, + 'Immagini sfondi': 27, + 'Altri Giochi': 28, + 'Fumetteria': 30, + 'Trash': 31, + 'PlayStation 1': 32, + 'PSP Portable': 33, + 'A Book': 34, + 'Podcast': 35, + 'Edicola': 36, + 'Mobile': 37} + class TNTVillageProvider(generic.TorrentProvider): def __init__(self): - generic.TorrentProvider.__init__(self, "TNTVillage") self.supportsBacklog = True @@ -86,19 +87,19 @@ class TNTVillageProvider(generic.TorrentProvider): ' 720p HEVC', ' 720p'] - self.category_dict = {'Serie TV' : 29, - 'Cartoni' : 8, - 'Anime' : 7, - 'Programmi e Film TV' : 1, - 'Documentari' : 14, - 'All' : 0} + self.category_dict = {'Serie TV': 29, + 'Cartoni': 8, + 'Anime': 7, + 'Programmi e Film TV': 1, + 'Documentari': 14, + 'All': 0} - self.urls = {'base_url' : 'http://forum.tntvillage.scambioetico.org', - 'login' : 'http://forum.tntvillage.scambioetico.org/index.php?act=Login&CODE=01', - 'detail' : 'http://forum.tntvillage.scambioetico.org/index.php?showtopic=%s', - 'search' : 'http://forum.tntvillage.scambioetico.org/?act=allreleases&%s', - 'search_page' : 'http://forum.tntvillage.scambioetico.org/?act=allreleases&st={0}&{1}', - 'download' : 'http://forum.tntvillage.scambioetico.org/index.php?act=Attach&type=post&id=%s'} + self.urls = {'base_url': 'http://forum.tntvillage.scambioetico.org', + 'login': 'http://forum.tntvillage.scambioetico.org/index.php?act=Login&CODE=01', + 'detail': 'http://forum.tntvillage.scambioetico.org/index.php?showtopic=%s', + 'search': 'http://forum.tntvillage.scambioetico.org/?act=allreleases&%s', + 'search_page': 'http://forum.tntvillage.scambioetico.org/?act=allreleases&st={0}&{1}', + 'download': 'http://forum.tntvillage.scambioetico.org/index.php?act=Attach&type=post&id=%s'} self.url = self.urls['base_url'] @@ -112,10 +113,6 @@ class TNTVillageProvider(generic.TorrentProvider): self.cache = TNTVillageCache(self) - - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -135,8 +132,7 @@ class TNTVillageProvider(generic.TorrentProvider): logger.log(u"Unable to connect to provider", logger.WARNING) return False - if re.search('Sono stati riscontrati i seguenti errori', response) \ - or re.search('<title>Connettiti</title>', response): + if re.search('Sono stati riscontrati i seguenti errori', response) or re.search('<title>Connettiti</title>', response): logger.log(u"Invalid username or password. Check your settings", logger.WARNING) return False @@ -186,7 +182,8 @@ class TNTVillageProvider(generic.TorrentProvider): file_quality = (torrent_rows.find_all('td'))[1].get_text() logger.log(u"Episode quality: %s" % file_quality, logger.DEBUG) - checkName = lambda list, func: func([re.search(x, file_quality, re.I) for x in list]) + def checkName(options, func): + return func([re.search(option, file_quality, re.I) for option in options]) dvdOptions = checkName(["dvd", "dvdrip", "dvdmux", "DVD9", "DVD5"], any) bluRayOptions = checkName(["BD", "BDmux", "BDrip", "BRrip", "Bluray"], any) @@ -287,7 +284,7 @@ class TNTVillageProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode == 'RSS': + if mode is 'RSS': self.page = 2 last_page = 0 @@ -299,30 +296,30 @@ class TNTVillageProvider(generic.TorrentProvider): search_string = str(search_string).replace('.', ' ') for x in range(0, y): - z = x*20 + z = x * 20 if last_page: break - if mode != 'RSS': + if mode is not 'RSS': searchURL = (self.urls['search_page'] + '&filter={2}').format(z, self.categories, search_string) else: searchURL = self.urls['search_page'].format(z, self.categories) - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) - logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) + logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) data = self.getURL(searchURL) if not data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue try: with BS4Parser(data, features=["html5lib", "permissive"]) as html: - torrent_table = html.find('table', attrs={'class' : 'copyright'}) + torrent_table = html.find('table', attrs={'class': 'copyright'}) torrent_rows = torrent_table.find_all('tr') if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrent_rows) < 3: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) last_page = 1 @@ -341,7 +338,7 @@ class TNTVillageProvider(generic.TorrentProvider): leechers = int(leechers.strip('[]')) seeders = result.find_all('td')[3].find_all('td')[2].text seeders = int(seeders.strip('[]')) - #FIXME + # FIXME size = -1 except (AttributeError, TypeError): continue @@ -357,11 +354,11 @@ class TNTVillageProvider(generic.TorrentProvider): title += filename_qt if not self._is_italian(result) and not self.subtitle: - logger.log(u"Torrent is subtitled, skipping: %s " % title, logger.DEBUG) + logger.log(u"Torrent is subtitled, skipping: %s " % title, logger.DEBUG) continue if self.engrelease and not self._is_english(result): - logger.log(u"Torrent isnt english audio/subtitled , skipping: %s " % title, logger.DEBUG) + logger.log(u"Torrent isnt english audio/subtitled , skipping: %s " % title, logger.DEBUG) continue search_show = re.split(r'([Ss][\d{1,2}]+)', search_string)[0] @@ -380,14 +377,14 @@ class TNTVillageProvider(generic.TorrentProvider): if self._is_season_pack(title): title = re.sub(r'([Ee][\d{1,2}\-?]+)', '', title) - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -395,7 +392,7 @@ class TNTVillageProvider(generic.TorrentProvider): except Exception: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available if available + # For each search mode sort all the items by seeders if available if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py index d1d909528733182789b1585171ee954fa3d25a14..ed7acce2a9950d6992d484e8cee6acf92e6ee3fd 100644 --- a/sickbeard/providers/tokyotoshokan.py +++ b/sickbeard/providers/tokyotoshokan.py @@ -42,9 +42,6 @@ class TokyoToshokanProvider(generic.TorrentProvider): self.urls = {'base_url': 'http://tokyotosho.info/'} self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled - def seedRatio(self): return self.ratio @@ -55,7 +52,7 @@ class TokyoToshokanProvider(generic.TorrentProvider): return [x.replace('.', ' ') for x in show_name_helpers.makeSceneSearchString(self.show, ep_obj)] def _doSearch(self, search_string, search_mode='eponly', epcount=0, age=0, epObj=None): - #FIXME ADD MODE + # FIXME ADD MODE if self.show and not self.show.is_anime: return [] @@ -63,7 +60,7 @@ class TokyoToshokanProvider(generic.TorrentProvider): params = { "terms": search_string.encode('utf-8'), - "type": 1, # get anime types + "type": 1, # get anime types } searchURL = self.url + 'search.php?' + urllib.urlencode(params) @@ -88,7 +85,7 @@ class TokyoToshokanProvider(generic.TorrentProvider): title = top.find('td', attrs={'class': 'desc-top'}).text title.lstrip() download_url = top.find('td', attrs={'class': 'desc-top'}).find('a')['href'] - #FIXME + # FIXME size = -1 seeders = 1 leechers = 0 @@ -96,9 +93,9 @@ class TokyoToshokanProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue @@ -109,7 +106,7 @@ class TokyoToshokanProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #FIXME SORTING + # FIXME SORTING return results diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py index 48d4c5d5a333eab66582a77f7a1bd1adb67d48c8..30711eda2f6b62ddb9b4f378dc1e1e1987854f98 100644 --- a/sickbeard/providers/torrentbytes.py +++ b/sickbeard/providers/torrentbytes.py @@ -55,9 +55,6 @@ class TorrentBytesProvider(generic.TorrentProvider): self.cache = TorrentBytesCache(self) - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, @@ -87,7 +84,7 @@ class TorrentBytesProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories) @@ -99,7 +96,7 @@ class TorrentBytesProvider(generic.TorrentProvider): try: with BS4Parser(data, features=["html5lib", "permissive"]) as html: - #Continue only if one Release is found + # Continue only if one Release is found empty = html.find('Nothing found!') if empty: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) @@ -116,7 +113,7 @@ class TorrentBytesProvider(generic.TorrentProvider): full_id = link['href'].replace('details.php?id=', '') torrent_id = full_id.split("&")[0] - #Free leech torrents are marked with green [F L] in the title (i.e. <font color=green>[F L]</font>) + # Free leech torrents are marked with green [F L] in the title (i.e. <font color=green>[F L]</font>) freeleechTag = cells[1].find('font', attrs={'color': 'green'}) if freeleechTag and freeleechTag.text == u'[F\xa0L]': isFreeleechTorrent = True @@ -148,14 +145,14 @@ class TorrentBytesProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -163,7 +160,7 @@ class TorrentBytesProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py index 82b2cf235dca7cd1a2cdeb80de606b814f1ecdfd..1d84445385dd6c11e7df7f754b65aed7db1b98dd 100644 --- a/sickbeard/providers/torrentday.py +++ b/sickbeard/providers/torrentday.py @@ -53,9 +53,6 @@ class TorrentDayProvider(generic.TorrentProvider): self.categories = {'Season': {'c14': 1}, 'Episode': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1}, 'RSS': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1, 'c14': 1}} - def isEnabled(self): - return self.enabled - def _doLogin(self): if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()): @@ -105,7 +102,7 @@ class TorrentDayProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) search_string = '+'.join(search_string.split()) @@ -118,7 +115,7 @@ class TorrentDayProvider(generic.TorrentProvider): parsedJSON = self.getURL(self.urls['search'], post_data=post_data, json=True) if not parsedJSON: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue try: @@ -133,25 +130,25 @@ class TorrentDayProvider(generic.TorrentProvider): download_url = self.urls['download'] % ( torrent['id'], torrent['fname']) seeders = int(torrent['seed']) leechers = int(torrent['leech']) - #FIXME + # FIXME size = -1 if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available if available + # For each search mode sort all the items by seeders if available if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py index f08df58bb0d304302db3c63eae6265c5e03f580a..2ab8987dcaa441a6788cb59c680f8442852d3d8f 100644 --- a/sickbeard/providers/torrentleech.py +++ b/sickbeard/providers/torrentleech.py @@ -55,9 +55,6 @@ class TorrentLeechProvider(generic.TorrentProvider): self.cache = TorrentLeechCache(self) - def isEnabled(self): - return self.enabled - def _doLogin(self): login_params = {'username': self.username, @@ -88,7 +85,7 @@ class TorrentLeechProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode == 'RSS': + if mode is 'RSS': searchURL = self.urls['index'] % self.categories else: searchURL = self.urls['search'] % (urllib.quote_plus(search_string.encode('utf-8')), self.categories) @@ -104,7 +101,7 @@ class TorrentLeechProvider(generic.TorrentProvider): torrent_table = html.find('table', attrs={'id': 'torrenttable'}) torrent_rows = torrent_table.find_all('tr') if torrent_table else [] - #Continue only if one Release is found + # Continue only if one Release is found if len(torrent_rows) < 2: logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG) continue @@ -118,7 +115,7 @@ class TorrentLeechProvider(generic.TorrentProvider): download_url = self.urls['download'] % url['href'] seeders = int(result.find('td', attrs={'class': 'seeders'}).string) leechers = int(result.find('td', attrs={'class': 'leechers'}).string) - #FIXME + # FIXME size = -1 except (AttributeError, TypeError): continue @@ -126,14 +123,14 @@ class TorrentLeechProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -141,7 +138,7 @@ class TorrentLeechProvider(generic.TorrentProvider): except Exception, e: logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py index bd0db478637918329df2d81b18d2229365649496..7e53ac31459e9e05cf688e9fa2b09015596f766f 100644 --- a/sickbeard/providers/torrentproject.py +++ b/sickbeard/providers/torrentproject.py @@ -39,18 +39,15 @@ class TORRENTPROJECTProvider(generic.TorrentProvider): self.minleech = None self.cache = TORRENTPROJECTCache(self) - def isEnabled(self): - return self.enabled - def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None): results = [] items = {'Season': [], 'Episode': [], 'RSS': []} - for mode in search_strings.keys(): #Mode = RSS, Season, Episode + for mode in search_strings.keys(): # Mode = RSS, Season, Episode logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) @@ -70,38 +67,30 @@ class TORRENTPROJECTProvider(generic.TorrentProvider): seeders = helpers.tryInt(torrents[i]["seeds"], 1) leechers = helpers.tryInt(torrents[i]["leechs"], 0) if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': - logger.log("Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG) + if mode is not 'RSS': + logger.log(u"Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG) continue t_hash = torrents[i]["torrent_hash"] size = int(torrents[i]["torrent_size"]) - if seeders < 10: - if mode != 'RSS': - logger.log("Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG) - trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json" - jdata = self.getURL(trackerUrl, json=True) - if jdata == "maintenance": - download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969" - logger.log("Tracker url is in " + jdata + " mode, using hardcoded one" , logger.INFO) - else: - download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata]) - logger.log("Dyn Magnet: " + download_url, logger.DEBUG) - else: - download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969" - logger.log("Result has less than 10 seeds but not using Dyn Magnet becouse its from RSS" + title, logger.DEBUG) - else: - #logger.log("Torrent has more than 10 seeds using hard coded trackers", logger.DEBUG) + try: + assert seeders < 10 + assert mode is not 'RSS' + logger.log(u"Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG) + trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json" + jdata = self.getURL(trackerUrl, json=True) + assert jdata is not "maintenance" + download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata]) + except (Exception, AssertionError): download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969" - if not all([title, download_url]): continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s" % title, logger.DEBUG) items[mode].append(item) @@ -125,7 +114,7 @@ class TORRENTPROJECTCache(tvcache.TVCache): self.minTime = 20 def _getRSSData(self): - + search_params = {'RSS': ['0day']} return {'entries': self.provider._doSearch(search_params)} diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py index 0f7206eec95c7f53f7c7e7e14d66e03d65adcb84..20c3ef711aa431a314c179f661f1d5c87dfaf926 100644 --- a/sickbeard/providers/torrentz.py +++ b/sickbeard/providers/torrentz.py @@ -21,7 +21,6 @@ import re import time import traceback import xmltodict -import HTMLParser from six.moves import urllib from xml.parsers.expat import ExpatError @@ -48,9 +47,6 @@ class TORRENTZProvider(generic.TorrentProvider): 'base': 'https://torrentz.eu/'} self.url = self.urls['base'] - def isEnabled(self): - return self.enabled - def seedRatio(self): return self.ratio @@ -66,31 +62,31 @@ class TORRENTZProvider(generic.TorrentProvider): for mode in search_strings: for search_string in search_strings[mode]: search_url = self.urls['verified'] if self.confirmed else self.urls['feed'] - if mode != 'RSS': + if mode is not 'RSS': search_url += '?q=' + urllib.parse.quote_plus(search_string) logger.log(search_url) data = self.getURL(search_url) if not data: - logger.log('Seems to be down right now!') + logger.log(u'Seems to be down right now!') continue if not data.startswith("<?xml"): - logger.log('Wrong data returned from: ' + search_url, logger.DEBUG) + logger.log(u'Wrong data returned from: ' + search_url, logger.DEBUG) continue if not data.startswith('<?xml'): - logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO) + logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO) continue try: - data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&')) + data = xmltodict.parse(data) except ExpatError: logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR) continue if not all([data, 'rss' in data, 'channel' in data['rss'], 'item' in data['rss']['channel']]): - logger.log(u"Malformed rss returned, skipping", logger.DEBUG) + logger.log(u"Malformed rss returned or no results, skipping", logger.DEBUG) continue time.sleep(cpu_presets[sickbeard.CPU_PRESET]) @@ -113,15 +109,15 @@ class TORRENTZProvider(generic.TorrentProvider): download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969" size, seeders, leechers = self._split_description(item.get('description', '')) - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue items[mode].append((title, download_url, size, seeders, leechers)) - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py index 136cc1f54168cbe280ca67bb855b48ae3dcb74ad..e4e5b30e79f0ef4931a0115c74dedd36880a1d24 100644 --- a/sickbeard/providers/transmitthenet.py +++ b/sickbeard/providers/transmitthenet.py @@ -52,9 +52,6 @@ class TransmitTheNetProvider(generic.TorrentProvider): "active": 1 } - def isEnabled(self): - return self.enabled - def _checkAuth(self): if not self.username or not self.password: @@ -93,7 +90,7 @@ class TransmitTheNetProvider(generic.TorrentProvider): for mode in search_strings.keys(): for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) data = self.getURL(self.urls['index'], params=self.search_params) @@ -101,7 +98,7 @@ class TransmitTheNetProvider(generic.TorrentProvider): logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) if not data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue try: @@ -128,20 +125,20 @@ class TransmitTheNetProvider(generic.TorrentProvider): seeders = int(torrent_row.findAll('a', {'title': 'Click here to view peers details'})[0].text.strip()) leechers = int(torrent_row.findAll('a', {'title': 'Click here to view peers details'})[1].text.strip()) download_url = self.urls['base_url'] + download_href - #FIXME + # FIXME size = -1 if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py index 30dbc2f9aaa5242598e51602e5c954949e456b76..49aab00075b0503218f75e6772d567116bda63eb 100644 --- a/sickbeard/providers/tvchaosuk.py +++ b/sickbeard/providers/tvchaosuk.py @@ -14,7 +14,7 @@ # along with SickRage. If not, see <http://www.gnu.org/licenses/>. import re -#from urllib import urlencode +# from urllib import urlencode import sickbeard from sickbeard import logger @@ -55,9 +55,6 @@ class TVChaosUKProvider(generic.TorrentProvider): 'include_dead_torrents': 'no', } - def isEnabled(self): - return self.enabled - def _checkAuth(self): if self.username and self.password: return True @@ -134,15 +131,15 @@ class TVChaosUKProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) self.search_params['keywords'] = search_string.strip() data = self.getURL(self.urls['search'], params=self.search_params) - #url_searched = self.urls['search'] + '?' + urlencode(self.search_params) + # url_searched = self.urls['search'] + '?' + urlencode(self.search_params) if not data: - logger.log("No data returned from provider", logger.DEBUG) + logger.log(u"No data returned from provider", logger.DEBUG) continue with BS4Parser(data) as html: @@ -157,9 +154,9 @@ class TVChaosUKProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent + # Filter unseeded torrent if seeders < self.minseed or leechers < self.minleech: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) continue @@ -175,11 +172,11 @@ class TVChaosUKProvider(generic.TorrentProvider): # Strip year from the end or we can't parse it! title = re.sub(r'[\. ]?\(\d{4}\)', '', title) - #FIXME + # FIXME size = -1 item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) @@ -187,7 +184,7 @@ class TVChaosUKProvider(generic.TorrentProvider): except Exception: continue - #For each search mode sort all the items by seeders if available + # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/providers/womble.py b/sickbeard/providers/womble.py index 5a93315fc619a693cda8346d1fcba0894f7220c8..136d649fc061ebb986ef2ad728c054bf5ed9772f 100644 --- a/sickbeard/providers/womble.py +++ b/sickbeard/providers/womble.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -import generic +from sickbeard.providers import generic from sickbeard import logger from sickbeard import tvcache @@ -27,12 +27,9 @@ class WombleProvider(generic.NZBProvider): generic.NZBProvider.__init__(self, "Womble's Index") self.public = True self.cache = WombleCache(self) - self.urls = {'base_url': 'https://newshost.co.za/'} + self.urls = {'base_url': 'http://newshost.co.za/'} self.url = self.urls['base_url'] - def isEnabled(self): - return self.enabled - class WombleCache(tvcache.TVCache): def __init__(self, provider_obj): diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py index 0b0623c34e7cc460c06c9303f3548bfa1148b717..71cf973b5fb0310756133e72110c6c825f0b0370 100644 --- a/sickbeard/providers/xthor.py +++ b/sickbeard/providers/xthor.py @@ -45,9 +45,6 @@ class XthorProvider(generic.TorrentProvider): self.password = None self.ratio = None - def isEnabled(self): - return self.enabled - def _doLogin(self): if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()): @@ -83,7 +80,7 @@ class XthorProvider(generic.TorrentProvider): logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_params[mode]: - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) searchURL = self.urlsearch % (urllib.quote(search_string), self.categories) @@ -102,7 +99,7 @@ class XthorProvider(generic.TorrentProvider): if link: title = link.text download_url = self.url + '/' + row.find("a", href=re.compile("download.php"))['href'] - #FIXME + # FIXME size = -1 seeders = 1 leechers = 0 @@ -110,19 +107,19 @@ class XthorProvider(generic.TorrentProvider): if not all([title, download_url]): continue - #Filter unseeded torrent - #if seeders < self.minseed or leechers < self.minleech: - # if mode != 'RSS': + # Filter unseeded torrent + # if seeders < self.minseed or leechers < self.minleech: + # if mode is not 'RSS': # logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) # continue item = title, download_url, size, seeders, leechers - if mode != 'RSS': + if mode is not 'RSS': logger.log(u"Found result: %s " % title, logger.DEBUG) items[mode].append(item) - #For each search mode sort all the items by seeders if available if available + # For each search mode sort all the items by seeders if available if available items[mode].sort(key=lambda tup: tup[3], reverse=True) results += items[mode] diff --git a/sickbeard/rssfeeds.py b/sickbeard/rssfeeds.py index 5fb71ca83941057d7bdbacfd4539d2033b89ff4c..2e7fc26fcaea6db313d5951b334e93d8a72d47de 100644 --- a/sickbeard/rssfeeds.py +++ b/sickbeard/rssfeeds.py @@ -1,43 +1,29 @@ - -import os -import urllib - -import sickbeard +import re +import urlparse +from feedparser.api import parse +from feedparser.util import FeedParserDict from sickbeard import logger -from sickrage.helper.encoding import ek from sickrage.helper.exceptions import ex -from feedcache.cache import Cache - -from sqliteshelf import SQLiteShelf - - -class RSSFeeds: - def __init__(self, db_name='feeds'): - try: - db_name = ek(os.path.join, sickbeard.CACHE_DIR, 'rss', db_name) + '.db' - if not os.path.exists(os.path.dirname(db_name)): - sickbeard.helpers.makeDir(os.path.dirname(db_name)) - - self.rssDB = SQLiteShelf(db_name) - except Exception as e: - logger.log(u"FeedParser error: " + ex(e), logger.DEBUG) - - def clearCache(self, age=None): - try: - Cache(self.rssDB).purge(age) - finally: - self.rssDB.close() +def getFeed(url, request_headers=None, handlers=None): + parsed = list(urlparse.urlparse(url)) + parsed[2] = re.sub("/{2,}", "/", parsed[2]) # replace two or more / with one - def getFeed(self, url, post_data=None, request_headers=None, items=None, handlers=[]): + try: + feed = parse(url, False, False, request_headers, handlers=handlers) - if post_data: - url += urllib.urlencode(post_data) + if feed: + if 'entries' in feed: + return feed + elif 'error' in feed.feed: + err_code = feed.feed['error']['code'] + err_desc = feed.feed['error']['description'] + logger.log(u'RSS ERROR:[%s] CODE:[%s]' % (err_desc, err_code), logger.DEBUG) + else: + logger.log(u'RSS error loading url: ' + url, logger.DEBUG) - try: - resp = Cache(self.rssDB, userAgent=sickbeard.common.USER_AGENT).fetch(url, force_update=True, request_headers=request_headers, handlers=handlers) - finally: - self.rssDB.close() + except Exception as e: + logger.log(u'RSS error: ' + ex(e), logger.DEBUG) - return resp + return FeedParserDict() diff --git a/sickbeard/sab.py b/sickbeard/sab.py index b940a18f9e916c3dffa8ec75a5f28d3cf2730b63..0dc7625aabcb4ca63e088f54847c38a8a5cb7474 100644 --- a/sickbeard/sab.py +++ b/sickbeard/sab.py @@ -77,7 +77,7 @@ def sendNZB(nzb): if nzb.provider.getID() == 'newzbin': id = nzb.provider.getIDFromURL(nzb.url) if not id: - logger.log("Unable to send NZB to sab, can't find ID in URL " + str(nzb.url), logger.ERROR) + logger.log(u"Unable to send NZB to sab, can't find ID in URL " + str(nzb.url), logger.ERROR) return False params['mode'] = 'addid' params['name'] = id diff --git a/sickbeard/sbdatetime.py b/sickbeard/sbdatetime.py index be9e158920819e7187056db26b33bee115befd56..eae6a67458785b74b0ac9162856a6884c0a39559 100644 --- a/sickbeard/sbdatetime.py +++ b/sickbeard/sbdatetime.py @@ -24,69 +24,70 @@ import functools import sickbeard from sickbeard.network_timezones import sb_timezone -date_presets = ('%Y-%m-%d', - '%a, %Y-%m-%d', - '%A, %Y-%m-%d', - '%y-%m-%d', - '%a, %y-%m-%d', - '%A, %y-%m-%d', - '%m/%d/%Y', - '%a, %m/%d/%Y', - '%A, %m/%d/%Y', - '%m/%d/%y', - '%a, %m/%d/%y', - '%A, %m/%d/%y', - '%m-%d-%Y', - '%a, %m-%d-%Y', - '%A, %m-%d-%Y', - '%m-%d-%y', - '%a, %m-%d-%y', - '%A, %m-%d-%y', - '%m.%d.%Y', - '%a, %m.%d.%Y', - '%A, %m.%d.%Y', - '%m.%d.%y', - '%a, %m.%d.%y', - '%A, %m.%d.%y', - '%d-%m-%Y', - '%a, %d-%m-%Y', - '%A, %d-%m-%Y', - '%d-%m-%y', - '%a, %d-%m-%y', - '%A, %d-%m-%y', - '%d/%m/%Y', - '%a, %d/%m/%Y', - '%A, %d/%m/%Y', - '%d/%m/%y', - '%a, %d/%m/%y', - '%A, %d/%m/%y', - '%d.%m.%Y', - '%a, %d.%m.%Y', - '%A, %d.%m.%Y', - '%d.%m.%y', - '%a, %d.%m.%y', - '%A, %d.%m.%y', - '%d. %b %Y', - '%a, %d. %b %Y', - '%A, %d. %b %Y', - '%d. %b %y', - '%a, %d. %b %y', - '%A, %d. %b %y', - '%d. %B %Y', - '%a, %d. %B %Y', - '%A, %d. %B %Y', - '%d. %B %y', - '%a, %d. %B %y', - '%A, %d. %B %y', - '%b %d, %Y', - '%a, %b %d, %Y', - '%A, %b %d, %Y', - '%B %d, %Y', - '%a, %B %d, %Y', - '%A, %B %d, %Y') +date_presets = ( + '%Y-%m-%d', + '%a, %Y-%m-%d', + '%A, %Y-%m-%d', + '%y-%m-%d', + '%a, %y-%m-%d', + '%A, %y-%m-%d', + '%m/%d/%Y', + '%a, %m/%d/%Y', + '%A, %m/%d/%Y', + '%m/%d/%y', + '%a, %m/%d/%y', + '%A, %m/%d/%y', + '%m-%d-%Y', + '%a, %m-%d-%Y', + '%A, %m-%d-%Y', + '%m-%d-%y', + '%a, %m-%d-%y', + '%A, %m-%d-%y', + '%m.%d.%Y', + '%a, %m.%d.%Y', + '%A, %m.%d.%Y', + '%m.%d.%y', + '%a, %m.%d.%y', + '%A, %m.%d.%y', + '%d-%m-%Y', + '%a, %d-%m-%Y', + '%A, %d-%m-%Y', + '%d-%m-%y', + '%a, %d-%m-%y', + '%A, %d-%m-%y', + '%d/%m/%Y', + '%a, %d/%m/%Y', + '%A, %d/%m/%Y', + '%d/%m/%y', + '%a, %d/%m/%y', + '%A, %d/%m/%y', + '%d.%m.%Y', + '%a, %d.%m.%Y', + '%A, %d.%m.%Y', + '%d.%m.%y', + '%a, %d.%m.%y', + '%A, %d.%m.%y', + '%d. %b %Y', + '%a, %d. %b %Y', + '%A, %d. %b %Y', + '%d. %b %y', + '%a, %d. %b %y', + '%A, %d. %b %y', + '%d. %B %Y', + '%a, %d. %B %Y', + '%A, %d. %B %Y', + '%d. %B %y', + '%a, %d. %B %y', + '%A, %d. %B %y', + '%b %d, %Y', + '%a, %b %d, %Y', + '%A, %b %d, %Y', + '%B %d, %Y', + '%a, %B %d, %Y', + '%A, %B %d, %Y' +) -time_presets = ('%I:%M:%S %p', - '%H:%M:%S') +time_presets = ('%I:%M:%S %p', '%H:%M:%S') # helper class class static_or_instance(object): @@ -164,7 +165,7 @@ class sbdatetime(datetime.datetime): except Exception: sbdatetime.has_locale = False - return strt + return strt.decode(sickbeard.SYS_ENCODING) # display Date in SickRage Format @static_or_instance @@ -203,7 +204,7 @@ class sbdatetime(datetime.datetime): except Exception: pass - return strd + return strd.decode(sickbeard.SYS_ENCODING) # display Datetime in SickRage Format @static_or_instance @@ -242,11 +243,11 @@ class sbdatetime(datetime.datetime): except Exception: sbdatetime.has_locale = False if t_preset is not None: - strd += u', ' + dt.strftime(t_preset) + strd += ', ' + dt.strftime(t_preset) elif show_seconds: - strd += u', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS) + strd += ', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS) else: - strd += u', ' + dt.strftime(sickbeard.TIME_PRESET) + strd += ', ' + dt.strftime(sickbeard.TIME_PRESET) else: if d_preset is not None: strd = self.strftime(d_preset) @@ -262,11 +263,11 @@ class sbdatetime(datetime.datetime): except Exception: sbdatetime.has_locale = False if t_preset is not None: - strd += u', ' + self.strftime(t_preset) + strd += ', ' + self.strftime(t_preset) elif show_seconds: - strd += u', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS) + strd += ', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS) else: - strd += u', ' + self.strftime(sickbeard.TIME_PRESET) + strd += ', ' + self.strftime(sickbeard.TIME_PRESET) finally: try: if sbdatetime.has_locale: @@ -274,4 +275,4 @@ class sbdatetime(datetime.datetime): except Exception: sbdatetime.has_locale = False - return strd + return strd.decode(sickbeard.SYS_ENCODING) diff --git a/sickbeard/scene_exceptions.py b/sickbeard/scene_exceptions.py index 1aafbd97d4c4970bfa2b0e82c64b5e771488cce8..1de1c880d291a6d677e7bede82cf43456db9a9ba 100644 --- a/sickbeard/scene_exceptions.py +++ b/sickbeard/scene_exceptions.py @@ -38,39 +38,39 @@ exceptionsSeasonCache = {} exceptionLock = threading.Lock() -def shouldRefresh(list): +def shouldRefresh(exList): """ - Check if we should refresh cache for items in list + Check if we should refresh cache for items in exList - :param list: list to check + :param exList: exception list to check if needs a refresh :return: True if refresh is needed """ MAX_REFRESH_AGE_SECS = 86400 # 1 day myDB = db.DBConnection('cache.db') - rows = myDB.select("SELECT last_refreshed FROM scene_exceptions_refresh WHERE list = ?", [list]) + rows = myDB.select("SELECT last_refreshed FROM scene_exceptions_refresh WHERE list = ?", [exList]) if rows: lastRefresh = int(rows[0]['last_refreshed']) return int(time.mktime(datetime.datetime.today().timetuple())) > lastRefresh + MAX_REFRESH_AGE_SECS else: return True -def setLastRefresh(list): +def setLastRefresh(exList): """ Update last cache update time for shows in list - :param list: list to check + :param exList: exception list to set refresh time """ myDB = db.DBConnection('cache.db') myDB.upsert("scene_exceptions_refresh", {'last_refreshed': int(time.mktime(datetime.datetime.today().timetuple()))}, - {'list': list}) + {'list': exList}) def get_scene_exceptions(indexer_id, season=-1): """ Given a indexer_id, return a list of all the scene exceptions. """ - global exceptionsCache + exceptionsList = [] if indexer_id not in exceptionsCache or season not in exceptionsCache[indexer_id]: @@ -117,7 +117,6 @@ def get_scene_seasons(indexer_id): """ return a list of season numbers that have scene exceptions """ - global exceptionsSeasonCache exceptionsSeasonList = [] if indexer_id not in exceptionsSeasonCache: @@ -181,10 +180,7 @@ def retrieve_exceptions(): Looks up the exceptions on github, parses them into a dict, and inserts them into the scene_exceptions table in cache.db. Also clears the scene name cache. """ - global exception_dict, anidb_exception_dict, xem_exception_dict - # exceptions are stored in submodules in this repo, sourced from the github repos - # TODO: `git submodule update` for indexer in sickbeard.indexerApi().indexers: if shouldRefresh(sickbeard.indexerApi(indexer).name): logger.log(u"Checking for scene exception updates for " + sickbeard.indexerApi(indexer).name + "") @@ -204,7 +200,7 @@ def retrieve_exceptions(): # each exception is on one line with the format indexer_id: 'show name 1', 'show name 2', etc for cur_line in data.splitlines(): - indexer_id, sep, aliases = cur_line.partition(':') # @UnusedVariable + indexer_id, _, aliases = cur_line.partition(':') # @UnusedVariable if not aliases: continue @@ -248,8 +244,9 @@ def retrieve_exceptions(): for ex in cur_exception_dict.iteritems(): cur_exception, curSeason = ex if cur_exception not in existing_exceptions: - queries.append(["INSERT OR IGNORE INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?);", - [cur_indexer_id, cur_exception, curSeason]]) + queries.append( + ["INSERT OR IGNORE INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?);", + [cur_indexer_id, cur_exception, curSeason]]) if queries: myDB.mass_action(queries) logger.log(u"Updated scene exceptions", logger.DEBUG) @@ -265,12 +262,11 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1): """ Given a indexer_id, and a list of all show scene exceptions, update the db. """ - global exceptionsCache myDB = db.DBConnection('cache.db') myDB.action('DELETE FROM scene_exceptions WHERE indexer_id=? and season=?', [indexer_id, season]) logger.log(u"Updating scene exceptions", logger.INFO) - + # A change has been made to the scene exception list. Let's clear the cache, to make this visible if indexer_id in exceptionsCache: exceptionsCache[indexer_id] = {} @@ -281,15 +277,13 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1): [indexer_id, cur_exception, season]) def _anidb_exceptions_fetcher(): - global anidb_exception_dict - if shouldRefresh('anidb'): logger.log(u"Checking for scene exception updates for AniDB") for show in sickbeard.showList: if show.is_anime and show.indexer == 1: try: anime = adba.Anime(None, name=show.name, tvdbid=show.indexerid, autoCorrectName=True) - except: + except Exception: continue else: if anime.name and anime.name != show.name: @@ -302,9 +296,6 @@ def _anidb_exceptions_fetcher(): xem_session = requests.Session() def _xem_exceptions_fetcher(): - global xem_exception_dict - global xem_session - if shouldRefresh('xem'): for indexer in sickbeard.indexerApi().indexers: logger.log(u"Checking for XEM scene exception updates for " + sickbeard.indexerApi(indexer).name) @@ -312,7 +303,7 @@ def _xem_exceptions_fetcher(): url = "http://thexem.de/map/allNames?origin=%s&seasonNumbers=1" % sickbeard.indexerApi(indexer).config[ 'xem_origin'] - parsedJSON = helpers.getURL(url, session=xem_session, timeout = 90, json=True) + parsedJSON = helpers.getURL(url, session=xem_session, timeout=90, json=True) if not parsedJSON: logger.log(u"Check scene exceptions update failed for " + sickbeard.indexerApi( indexer).name + ", Unable to get URL: " + url, logger.DEBUG) diff --git a/sickbeard/scene_numbering.py b/sickbeard/scene_numbering.py index 01248aeffce2ca03be27e7a6cafd92ee8337da9e..3edf0fa53eaad52f2c29605aa83fae9637f6b5bd 100644 --- a/sickbeard/scene_numbering.py +++ b/sickbeard/scene_numbering.py @@ -218,7 +218,7 @@ def set_scene_numbering(indexer_id, indexer, season=None, episode=None, absolute "UPDATE scene_numbering SET scene_absolute_number = ? WHERE indexer = ? and indexer_id = ? and absolute_number = ?", [sceneAbsolute, indexer, indexer_id, absolute_number]) - #Reload data from DB so that cache and db are in sync + # Reload data from DB so that cache and db are in sync show = helpers.findCertainShow(sickbeard.showList, indexer_id) show.flushEpisodes() diff --git a/sickbeard/scheduler.py b/sickbeard/scheduler.py index 59e8e90cc2605723816998bac587e58ffbafe79b..2b56e39bdc4cff66a8e3a3652a89b761632c8c2e 100644 --- a/sickbeard/scheduler.py +++ b/sickbeard/scheduler.py @@ -82,7 +82,7 @@ class Scheduler(threading.Thread): if self.enable: current_time = datetime.datetime.now() should_run = False - #Is self.force enable + # Is self.force enable if self.force: should_run = True # check if interval has passed diff --git a/sickbeard/search.py b/sickbeard/search.py index f4ce208c223c27bc7a839009dac055f6c1dda3f5..769ee886c964d711c0abd56fee70272c5d1d0179 100644 --- a/sickbeard/search.py +++ b/sickbeard/search.py @@ -132,7 +132,7 @@ def snatchEpisode(result, endStatus=SNATCHED): dlResult = _downloadResult(result) else: if not result.content and not result.url.startswith('magnet'): - result.content = result.provider.getURL(result.url) + result.content = result.provider.getURL(result.url, needBytes=True) if result.content or result.url.startswith('magnet'): client = clients.getClientIstance(sickbeard.TORRENT_METHOD)() @@ -141,7 +141,7 @@ def snatchEpisode(result, endStatus=SNATCHED): logger.log(u"Torrent file content is empty", logger.WARNING) dlResult = False else: - logger.log(u"Unknown result type, unable to download it", logger.ERROR) + logger.log(u"Unknown result type, unable to download it (%r)" % result.resultType, logger.ERROR) dlResult = False if not dlResult: @@ -215,7 +215,7 @@ def pickBestResult(results, show): if not show.release_groups.is_valid(cur_result): continue - logger.log("Quality of " + cur_result.name + " is " + Quality.qualityStrings[cur_result.quality]) + logger.log(u"Quality of " + cur_result.name + " is " + Quality.qualityStrings[cur_result.quality]) anyQualities, bestQualities = Quality.splitQuality(show.quality) diff --git a/sickbeard/search_queue.py b/sickbeard/search_queue.py index 91a1cf1972c1b14dba95ea7a2a845feb525a1f62..32738b930ab84c5b882b26ab1e6fd3583ed0239e 100644 --- a/sickbeard/search_queue.py +++ b/sickbeard/search_queue.py @@ -126,13 +126,13 @@ class SearchQueue(generic_queue.GenericQueue): class DailySearchQueueItem(generic_queue.QueueItem): def __init__(self): self.success = None - generic_queue.QueueItem.__init__(self, 'Daily Search', DAILY_SEARCH) + generic_queue.QueueItem.__init__(self, u'Daily Search', DAILY_SEARCH) def run(self): generic_queue.QueueItem.run(self) try: - logger.log("Beginning daily search for new episodes") + logger.log(u"Beginning daily search for new episodes") foundResults = search.searchForNeededEpisodes() if not len(foundResults): @@ -158,7 +158,7 @@ class DailySearchQueueItem(generic_queue.QueueItem): class ManualSearchQueueItem(generic_queue.QueueItem): def __init__(self, show, segment, downCurQuality=False): - generic_queue.QueueItem.__init__(self, 'Manual Search', MANUAL_SEARCH) + generic_queue.QueueItem.__init__(self, u'Manual Search', MANUAL_SEARCH) self.priority = generic_queue.QueuePriorities.HIGH self.name = 'MANUAL-' + str(show.indexerid) self.success = None @@ -171,7 +171,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem): generic_queue.QueueItem.run(self) try: - logger.log("Beginning manual search for: [" + self.segment.prettyName() + "]") + logger.log(u"Beginning manual search for: [" + self.segment.prettyName() + "]") self.started = True searchResult = search.searchProviders(self.show, [self.segment], True, self.downCurQuality) @@ -204,7 +204,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem): class BacklogQueueItem(generic_queue.QueueItem): def __init__(self, show, segment): - generic_queue.QueueItem.__init__(self, 'Backlog', BACKLOG_SEARCH) + generic_queue.QueueItem.__init__(self, u'Backlog', BACKLOG_SEARCH) self.priority = generic_queue.QueuePriorities.LOW self.name = 'BACKLOG-' + str(show.indexerid) self.success = None @@ -216,7 +216,7 @@ class BacklogQueueItem(generic_queue.QueueItem): if not self.show.paused: try: - logger.log("Beginning backlog search for: [" + self.show.name + "]") + logger.log(u"Beginning backlog search for: [" + self.show.name + "]") searchResult = search.searchProviders(self.show, self.segment, False) if searchResult: @@ -237,7 +237,7 @@ class BacklogQueueItem(generic_queue.QueueItem): class FailedQueueItem(generic_queue.QueueItem): def __init__(self, show, segment, downCurQuality=False): - generic_queue.QueueItem.__init__(self, 'Retry', FAILED_SEARCH) + generic_queue.QueueItem.__init__(self, u'Retry', FAILED_SEARCH) self.priority = generic_queue.QueuePriorities.HIGH self.name = 'RETRY-' + str(show.indexerid) self.show = show @@ -263,7 +263,7 @@ class FailedQueueItem(generic_queue.QueueItem): history.logFailed(epObj, release, provider) failed_history.revertEpisode(epObj) - logger.log("Beginning failed download search for: [" + epObj.prettyName() + "]") + logger.log(u"Beginning failed download search for: [" + epObj.prettyName() + "]") # If it is wanted, self.downCurQuality doesnt matter # if it isnt wanted, we need to make sure to not overwrite the existing ep that we reverted to! @@ -279,7 +279,7 @@ class FailedQueueItem(generic_queue.QueueItem): time.sleep(common.cpu_presets[sickbeard.CPU_PRESET]) else: pass - #logger.log(u"No valid episode found to retry for: [" + self.segment.prettyName() + "]") + # logger.log(u"No valid episode found to retry for: [" + self.segment.prettyName() + "]") except Exception: logger.log(traceback.format_exc(), logger.DEBUG) diff --git a/sickbeard/showUpdater.py b/sickbeard/showUpdater.py index b55ab3dde6ea04526c33c2c5055ea5c43f7afc76..d6befb61a793941af3876fe5be47bd63d9a08bd4 100644 --- a/sickbeard/showUpdater.py +++ b/sickbeard/showUpdater.py @@ -75,7 +75,7 @@ class ShowUpdater: try: piList.append(sickbeard.showQueueScheduler.action.updateShow(curShow, True)) # @UndefinedVariable except CantUpdateShowException as e: - logger.log("Unable to update show: {0}".format(str(e)),logger.DEBUG) + logger.log(u"Unable to update show: {0}".format(str(e)),logger.DEBUG) else: logger.log( u"Not updating episodes for show " + curShow.name + " because it's marked as ended and last/next episode is not within the grace period.", diff --git a/sickbeard/show_name_helpers.py b/sickbeard/show_name_helpers.py index 392d17af0612b7ac30b3ebbdde5a1f66ff764527..8e640b250869b481e22133cca8d40aa8bf71d4b3 100644 --- a/sickbeard/show_name_helpers.py +++ b/sickbeard/show_name_helpers.py @@ -34,8 +34,8 @@ from name_parser.parser import NameParser, InvalidNameException, InvalidShowExce resultFilters = [ "sub(bed|ed|pack|s)", - "(dir|sample|sub|nfo)fix", - "sample", + "(dir|sub|nfo)fix", + "(?<!shomin.)sample", "(dvd)?extras", "dub(bed)?" ] @@ -328,8 +328,8 @@ def allPossibleShowNames(show, season=-1): elif curName.endswith(' (' + curCountry + ')'): newShowNames.append(curName.replace(' (' + curCountry + ')', ' (' + country_list[curCountry] + ')')) - # if we have "Show Name (2013)" this will strip the (2013) show year from the show name - #newShowNames.append(re.sub('\(\d{4}\)','',curName)) + # # if we have "Show Name (2013)" this will strip the (2013) show year from the show name + # newShowNames.append(re.sub('\(\d{4}\)', '', curName)) showNames += newShowNames diff --git a/sickbeard/show_queue.py b/sickbeard/show_queue.py index 544cffa92147c86a1b875f6630aa621d436247b3..e31752e09fd3f7515e24c2c2ace2eb594024d048 100644 --- a/sickbeard/show_queue.py +++ b/sickbeard/show_queue.py @@ -168,7 +168,11 @@ class ShowQueue(generic_queue.GenericQueue): return queueItemObj -class ShowQueueActions: +class ShowQueueActions(object): + + def __init__(self): + pass + REFRESH = 1 ADD = 2 UPDATE = 3 @@ -177,13 +181,14 @@ class ShowQueueActions: SUBTITLE = 6 REMOVE = 7 - names = {REFRESH: 'Refresh', - ADD: 'Add', - UPDATE: 'Update', - FORCEUPDATE: 'Force Update', - RENAME: 'Rename', - SUBTITLE: 'Subtitle', - REMOVE: 'Remove Show' + names = { + REFRESH: 'Refresh', + ADD: 'Add', + UPDATE: 'Update', + FORCEUPDATE: 'Force Update', + RENAME: 'Rename', + SUBTITLE: 'Subtitle', + REMOVE: 'Remove Show' } @@ -205,7 +210,7 @@ class ShowQueueItem(generic_queue.QueueItem): def isInQueue(self): return self in sickbeard.showQueueScheduler.action.queue + [ - sickbeard.showQueueScheduler.action.currentItem] #@UndefinedVariable + sickbeard.showQueueScheduler.action.currentItem] # @UndefinedVariable def _getName(self): return str(self.show.indexerid) @@ -305,14 +310,15 @@ class QueueItemAdd(ShowQueueItem): self._finishEarly() return except Exception, e: - logger.log(u"Error while loading information from indexer %s. Error: %r" % (self.indexer_id,sickbeard.indexerApi(self.indexer).name, ex(e)),logger.ERROR) - #logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" % - # (self.indexer_id,sickbeard.indexerApi(self.indexer).name) , logger.WARNING) + logger.log(u"%s Error while loading information from indexer %s. Error: %r" % (self.indexer_id, sickbeard.indexerApi(self.indexer).name, ex(e)), logger.ERROR) + # logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" % + # (self.indexer_id, sickbeard.indexerApi(self.indexer).name), logger.WARNING) - ui.notifications.error("Unable to add show", - "Unable to look up the show in " + self.showDir + " on " + str(sickbeard.indexerApi( - self.indexer).name) + " using ID " + str( - self.indexer_id) + ", not using the NFO. Delete .nfo and try adding manually again.") + ui.notifications.error( + "Unable to add show", + "Unable to look up the show in %s on %s using ID %s, not using the NFO. Delete .nfo and try adding manually again." % + (self.showDir, sickbeard.indexerApi(self.indexer).name, self.indexer_id) + ) if sickbeard.USE_TRAKT: @@ -365,13 +371,13 @@ class QueueItemAdd(ShowQueueItem): if self.whitelist: self.show.release_groups.set_white_keywords(self.whitelist) - # be smartish about this - #if self.show.genre and "talk show" in self.show.genre.lower(): - # self.show.air_by_date = 1 - #if self.show.genre and "documentary" in self.show.genre.lower(): - # self.show.air_by_date = 0 - #if self.show.classification and "sports" in self.show.classification.lower(): - # self.show.sports = 1 + # # be smartish about this + # if self.show.genre and "talk show" in self.show.genre.lower(): + # self.show.air_by_date = 1 + # if self.show.genre and "documentary" in self.show.genre.lower(): + # self.show.air_by_date = 0 + # if self.show.classification and "sports" in self.show.classification.lower(): + # self.show.sports = 1 except sickbeard.indexer_exception, e: logger.log( @@ -516,7 +522,7 @@ class QueueItemRename(ShowQueueItem): logger.log(u"Performing rename on " + self.show.name) try: - show_loc = self.show.location + self.show.location except ShowDirectoryNotFoundException: logger.log(u"Can't perform rename on " + self.show.name + " when the show dir is missing.", logger.WARNING) return @@ -669,6 +675,6 @@ class QueueItemRemove(ShowQueueItem): try: sickbeard.traktCheckerScheduler.action.removeShowFromTraktLibrary(self.show) except Exception as e: - logger.log(u"Unable to delete show from Trakt: %s. Error: %s" % (self.show.name, ex(e)),logger.WARNING) + logger.log(u"Unable to delete show from Trakt: %s. Error: %s" % (self.show.name, ex(e)), logger.WARNING) self.finish() diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py index a9e3000dc46b2f60a44a62c520a2b1ca72b9cb64..5e06e596a7e4e8d5d4ac81f72a90ed2091ac02f5 100644 --- a/sickbeard/subtitles.py +++ b/sickbeard/subtitles.py @@ -57,6 +57,8 @@ entry_points = { ] } +# pylint: disable=W0212 +# Access to a protected member of a client class distribution._ep_map = pkg_resources.EntryPoint.parse_map(entry_points, distribution) pkg_resources.working_set.add(distribution) @@ -102,7 +104,7 @@ def sortedServiceList(): def getEnabledServiceList(): return [x['name'] for x in sortedServiceList() if x['enabled']] -#Hack around this for now. +# Hack around this for now. def fromietf(language): return Language.fromopensubtitles(language) @@ -152,13 +154,13 @@ def downloadSubtitles(subtitles_info): save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickbeard.SUBTITLES_MULTI) if not sickbeard.EMBEDDED_SUBTITLES_ALL and sickbeard.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith(('.mkv', '.mp4')): - run_subs_extra_scripts(subtitles_info, found_subtitles) + run_subs_extra_scripts(subtitles_info, found_subtitles, video, single=not sickbeard.SUBTITLES_MULTI) current_subtitles = subtitlesLanguages(video_path)[0] new_subtitles = frozenset(current_subtitles).difference(existing_subtitles) except Exception: - logger.log("Error occurred when downloading subtitles for: %s" % video_path) + logger.log(u"Error occurred when downloading subtitles for: %s" % video_path) logger.log(traceback.format_exc(), logger.ERROR) return (existing_subtitles, None) @@ -174,12 +176,12 @@ def save_subtitles(video, subtitles, single=False, directory=None): for subtitle in subtitles: # check content if subtitle.content is None: - logger.log("Skipping subtitle for %s: no content" % video.name, logger.DEBUG) + logger.log(u"Skipping subtitle for %s: no content" % video.name, logger.DEBUG) continue # check language if subtitle.language in set(s.language for s in saved_subtitles): - logger.log("Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG) + logger.log(u"Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG) continue # create subtitle path @@ -188,7 +190,7 @@ def save_subtitles(video, subtitles, single=False, directory=None): subtitle_path = os.path.join(directory, os.path.split(subtitle_path)[1]) # save content as is or in the specified encoding - logger.log("Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG) + logger.log(u"Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG) if subtitle.encoding: with io.open(subtitle_path, 'w', encoding=subtitle.encoding) as f: f.write(subtitle.text) @@ -300,20 +302,20 @@ def getEmbeddedLanguages(video_path): try: embedded_subtitle_languages.add(Language.fromalpha3b(st.language)) except BabelfishError: - logger.log('Embedded subtitle track is not a valid language', logger.DEBUG) + logger.log(u'Embedded subtitle track is not a valid language', logger.DEBUG) embedded_subtitle_languages.add(Language('und')) elif st.name: try: embedded_subtitle_languages.add(Language.fromname(st.name)) except BabelfishError: - logger.log('Embedded subtitle track is not a valid language', logger.DEBUG) + logger.log(u'Embedded subtitle track is not a valid language', logger.DEBUG) embedded_subtitle_languages.add(Language('und')) else: embedded_subtitle_languages.add(Language('und')) else: - logger.log('MKV has no subtitle track', logger.DEBUG) + logger.log(u'MKV has no subtitle track', logger.DEBUG) except MalformedMKVError: - logger.log('MKV seems to be malformed ( %s ), ignoring embedded subtitles' % video_path, logger.INFO) + logger.log(u'MKV seems to be malformed ( %s ), ignoring embedded subtitles' % video_path, logger.INFO) return embedded_subtitle_languages @@ -341,7 +343,7 @@ def subtitleLanguageFilter(): def subtitleCodeFilter(): return [Language.fromopensubtitles(language).opensubtitles for language in language_converters['opensubtitles'].codes if len(language) == 3] -class SubtitlesFinder(): +class SubtitlesFinder(object): """ The SubtitlesFinder will be executed every hour but will not necessarly search and download subtitles. Only if the defined rule is true @@ -373,7 +375,8 @@ class SubtitlesFinder(): # you have 5 minutes to understand that one. Good luck myDB = db.DBConnection() - sqlResults = myDB.select('SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.subtitles, ' + + sqlResults = myDB.select( + 'SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.subtitles, ' + 'e.subtitles_searchcount AS searchcount, e.subtitles_lastsearch AS lastsearch, e.location, (? - e.airdate) AS airdate_daydiff ' + 'FROM tv_episodes AS e INNER JOIN tv_shows AS s ON (e.showid = s.indexer_id) ' + 'WHERE s.subtitles = 1 AND e.subtitles NOT LIKE (?) ' + @@ -381,7 +384,7 @@ class SubtitlesFinder(): 'AND e.location != ""', [today, wantedLanguages(True)]) if len(sqlResults) == 0: - logger.log('No subtitles to download', logger.INFO) + logger.log(u'No subtitles to download', logger.INFO) return rules = self._getRules() @@ -389,16 +392,17 @@ class SubtitlesFinder(): for epToSub in sqlResults: if not ek(os.path.isfile, epToSub['location']): - logger.log('Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG) + logger.log(u'Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG) continue - # Old shows rule - throwaway = datetime.datetime.strptime('20110101', '%Y%m%d') + # http://bugs.python.org/issue7980#msg221094 + # I dont think this needs done here, but keeping to be safe + datetime.datetime.strptime('20110101', '%Y%m%d') if ((epToSub['airdate_daydiff'] > 7 and epToSub['searchcount'] < 2 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['old'][epToSub['searchcount']])) or # Recent shows rule - (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))): + (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))): - logger.log('Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG) + logger.log(u'Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(epToSub['showid'])) if not showObj: @@ -425,7 +429,8 @@ class SubtitlesFinder(): self.amActive = False - def _getRules(self): + @staticmethod + def _getRules(): """ Define the hours to wait between 2 subtitles search depending on: - the episode: new or old @@ -434,31 +439,26 @@ class SubtitlesFinder(): return {'old': [0, 24], 'new': [0, 4, 8, 4, 16, 24, 24]} -def run_subs_extra_scripts(epObj, foundSubs): +def run_subs_extra_scripts(epObj, found_subtitles, video, single=False): for curScriptName in sickbeard.SUBTITLES_EXTRA_SCRIPTS: script_cmd = [piece for piece in re.split("( |\\\".*?\\\"|'.*?')", curScriptName) if piece.strip()] script_cmd[0] = ek(os.path.abspath, script_cmd[0]) logger.log(u"Absolute path to script: " + script_cmd[0], logger.DEBUG) - for video, subs in foundSubs.iteritems(): - for sub in subs: - subpath = subliminal.subtitle.get_subtitle_path(video.name, sub.language) - if os.path.isabs(sickbeard.SUBTITLES_DIR): - subpath = ek(os.path.join, sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath)) - elif sickbeard.SUBTITLES_DIR: - subpath = ek(os.path.join, ek(os.path.dirname, subpath), sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath)) + for subtitle in found_subtitles: + subtitle_path = subliminal.subtitle.get_subtitle_path(video.name, None if single else subtitle.language) - inner_cmd = script_cmd + [video.name, subpath, sub.language.opensubtitles, epObj['show.name'], - str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])] + inner_cmd = script_cmd + [video.name, subtitle_path, subtitle.language.opensubtitles, epObj['show.name'], + str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])] - # use subprocess to run the command and capture output - logger.log(u"Executing command: %s" % inner_cmd) - try: - p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR) - out, err = p.communicate() # @UnusedVariable - logger.log(u"Script result: %s" % out, logger.DEBUG) + # use subprocess to run the command and capture output + logger.log(u"Executing command: %s" % inner_cmd) + try: + p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR) + out, _ = p.communicate() # @UnusedVariable + logger.log(u"Script result: %s" % out, logger.DEBUG) - except Exception as e: - logger.log(u"Unable to run subs_extra_script: " + ex(e)) + except Exception as e: + logger.log(u"Unable to run subs_extra_script: " + ex(e)) diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py index b0754d6a1d2d369772a4cda9ed4009513884520e..e5463eadfedb0f5b4ea34d4a8a45a62323ad364c 100644 --- a/sickbeard/traktChecker.py +++ b/sickbeard/traktChecker.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Frank Fenton # URL: http://code.google.com/p/sickbeard/ # @@ -19,6 +20,8 @@ import os import traceback import datetime +from libtrakt.exceptions import traktException +from libtrakt import TraktAPI import sickbeard from sickbeard import logger @@ -29,11 +32,9 @@ from sickbeard.common import ARCHIVED from sickbeard.common import SKIPPED from sickbeard.common import UNKNOWN from sickbeard.common import WANTED +from sickbeard.common import Quality from sickrage.helper.encoding import ek from sickrage.helper.exceptions import ex -from common import Quality -from libtrakt import * -from libtrakt.exceptions import traktException def setEpisodeToWanted(show, s, e): @@ -47,7 +48,7 @@ def setEpisodeToWanted(show, s, e): if epObj.status != SKIPPED or epObj.airdate == datetime.date.fromordinal(1): return - logger.log(u"Setting episode %s S%02dE%02d to wanted" %(show.name, s, e)) + logger.log(u"Setting episode %s S%02dE%02d to wanted" % (show.name, s, e)) # figure out what segment the episode is in and remember it so we can backlog it epObj.status = WANTED @@ -59,8 +60,7 @@ def setEpisodeToWanted(show, s, e): logger.log(u"Starting backlog search for %s S%02dE%02d because some episodes were set to wanted" % (show.name, s, e)) -class TraktChecker(): - +class TraktChecker(object): def __init__(self): self.trakt_api = TraktAPI(sickbeard.SSL_VERIFY, sickbeard.TRAKT_TIMEOUT) self.todoBacklog = [] @@ -71,7 +71,6 @@ class TraktChecker(): self.amActive = False def run(self, force=False): - self.amActive = True # add shows from trakt.tv watchlist @@ -108,7 +107,7 @@ class TraktChecker(): logger.log(u"No shows found in your library, aborting library update", logger.DEBUG) return - traktShow = filter(lambda x: int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)], library) + traktShow = [x for x in library if int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)]] except traktException as e: logger.log(u"Could not connect to Trakt service. Aborting library check. Error: %s" % repr(e), logger.WARNING) @@ -128,6 +127,7 @@ class TraktChecker(): } ] } + if trakt_id == 'tvdb_id': data['shows'][0]['ids']['tvdb'] = show_obj.indexerid else: @@ -146,7 +146,6 @@ class TraktChecker(): show_obj: The TVShow object to add to trakt """ - data = {} if not self.findShow(show_obj.indexer, show_obj.indexerid): @@ -161,6 +160,7 @@ class TraktChecker(): } ] } + if trakt_id == 'tvdb_id': data['shows'][0]['ids']['tvdb'] = show_obj.indexerid else: @@ -189,26 +189,28 @@ class TraktChecker(): logger.log(u"COLLECTION::REMOVE::START - Look for Episodes to Remove From Trakt Collection", logger.DEBUG) myDB = db.DBConnection() - sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid' + sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid' episodes = myDB.select(sql_selection) + if episodes is not None: trakt_data = [] + for cur_episode in episodes: trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id'] - if self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"]), List='Collection'): + + if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'): if cur_episode["location"] == '': logger.log(u"Removing Episode %s S%02dE%02d from collection" % - (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) - trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"])) - - if len(trakt_data): + (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) + trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"])) - try: - data = self.trakt_bulk_data_generate(trakt_data) - self.trakt_api.traktRequest("sync/collection/remove", data, method='POST') - self._getShowCollection() - except traktException as e: - logger.log(u"Could not connect to Trakt service. Aborting removing episode %s S%02dE%02d from Trakt collection. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING) + if len(trakt_data): + try: + data = self.trakt_bulk_data_generate(trakt_data) + self.trakt_api.traktRequest("sync/collection/remove", data, method='POST') + self._getShowCollection() + except traktException as e: + logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING) logger.log(u"COLLECTION::REMOVE::FINISH - Look for Episodes to Remove From Trakt Collection", logger.DEBUG) @@ -217,25 +219,27 @@ class TraktChecker(): logger.log(u"COLLECTION::ADD::START - Look for Episodes to Add to Trakt Collection", logger.DEBUG) myDB = db.DBConnection() - sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in ('+','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]])+')' + sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]]) + ')' episodes = myDB.select(sql_selection) + if episodes is not None: trakt_data = [] + for cur_episode in episodes: trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id'] - if not self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"]), List='Collection'): + + if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'): logger.log(u"Adding Episode %s S%02dE%02d to collection" % - (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) - trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"])) + (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) + trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"])) if len(trakt_data): - try: data = self.trakt_bulk_data_generate(trakt_data) self.trakt_api.traktRequest("sync/collection", data, method='POST') self._getShowCollection() except traktException as e: - logger.log(u"Could not connect to Trakt service. Aborting adding episode to Trakt collection. Error: %s" % repr(e), logger.WARNING) + logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING) logger.log(u"COLLECTION::ADD::FINISH - Look for Episodes to Add to Trakt Collection", logger.DEBUG) @@ -259,54 +263,58 @@ class TraktChecker(): logger.log(u"WATCHLIST::REMOVE::START - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG) myDB = db.DBConnection() - sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid' + sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid' episodes = myDB.select(sql_selection) + if episodes is not None: trakt_data = [] + for cur_episode in episodes: trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id'] - if self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"])): + + if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])): if cur_episode["status"] not in Quality.SNATCHED + Quality.SNATCHED_PROPER + [UNKNOWN] + [WANTED]: logger.log(u"Removing Episode %s S%02dE%02d from watchlist" % - (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) - trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"])) + (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) + trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"])) - if len(trakt_data): - - try: - data = self.trakt_bulk_data_generate(trakt_data) - self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST') - self._getEpisodeWatchlist() - except traktException as e: - logger.log(u"Could not connect to Trakt service. Aborting removing episode %s S%02dE%02d from Trakt watchlist. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING) + if len(trakt_data): + try: + data = self.trakt_bulk_data_generate(trakt_data) + self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST') + self._getEpisodeWatchlist() + except traktException as e: + logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING) - logger.log(u"WATCHLIST::REMOVE::FINISH - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG) + logger.log(u"WATCHLIST::REMOVE::FINISH - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG) def addEpisodeToTraktWatchList(self): if sickbeard.TRAKT_SYNC_WATCHLIST and sickbeard.USE_TRAKT: logger.log(u"WATCHLIST::ADD::START - Look for Episodes to Add to Trakt Watchlist", logger.DEBUG) myDB = db.DBConnection() - sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in ('+','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]])+')' + sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]]) + ')' episodes = myDB.select(sql_selection) + if episodes is not None: trakt_data = [] + for cur_episode in episodes: trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id'] - if not self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"])): + + if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])): logger.log(u"Adding Episode %s S%02dE%02d to watchlist" % - (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) - trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], - cur_episode["episode"])) + (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG) + trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], + cur_episode["episode"])) if len(trakt_data): - try: data = self.trakt_bulk_data_generate(trakt_data) self.trakt_api.traktRequest("sync/watchlist", data, method='POST') self._getEpisodeWatchlist() except traktException as e: - logger.log(u"Could not connect to Trakt service. Aborting adding episode %s S%02dE%02d to Trakt watchlist. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING) + logger.log(u"Could not connect to Trakt service. Error %s" % ex(e), logger.WARNING) logger.log(u"WATCHLIST::ADD::FINISH - Look for Episodes to Add to Trakt Watchlist", logger.DEBUG) @@ -316,10 +324,12 @@ class TraktChecker(): if sickbeard.showList is not None: trakt_data = [] + for show in sickbeard.showList: trakt_id = sickbeard.indexerApi(show.indexer).config['trakt_id'] - if not self._checkInList(trakt_id,str(show.indexerid),'0','0',List='Show'): - logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % ( trakt_id,str(show.indexerid), show.name), logger.DEBUG) + + if not self._checkInList(trakt_id, str(show.indexerid), '0', '0', List='Show'): + logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % (trakt_id, str(show.indexerid), show.name), logger.DEBUG) show_el = {'title': show.name, 'year': show.startyear, 'ids': {}} if trakt_id == 'tvdb_id': show_el['ids']['tvdb'] = show.indexerid @@ -328,13 +338,12 @@ class TraktChecker(): trakt_data.append(show_el) if len(trakt_data): - try: data = {'shows': trakt_data} self.trakt_api.traktRequest("sync/watchlist", data, method='POST') self._getShowWatchlist() except traktException as e: - logger.log(u"Could not connect to Trakt service. Aborting adding show %s to Trakt watchlist. Error: %s" % (show.name, repr(e)), logger.WARNING) + logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING) logger.log(u"SHOW_WATCHLIST::ADD::FINISH - Look for Shows to Add to Trakt Watchlist", logger.DEBUG) @@ -366,11 +375,12 @@ class TraktChecker(): indexer = int(sickbeard.TRAKT_DEFAULT_INDEXER) trakt_id = sickbeard.indexerApi(indexer).config['trakt_id'] + for show_el in self.ShowWatchlist[trakt_id]: indexer_id = int(str(show_el)) show = self.ShowWatchlist[trakt_id][show_el] - #logger.log(u"Checking Show: %s %s %s" % (trakt_id, indexer_id, show['title']),logger.DEBUG) + # logger.log(u"Checking Show: %s %s %s" % (trakt_id, indexer_id, show['title']),logger.DEBUG) if int(sickbeard.TRAKT_METHOD_ADD) != 2: self.addDefaultShow(indexer, indexer_id, show['title'], SKIPPED) else: @@ -378,6 +388,7 @@ class TraktChecker(): if int(sickbeard.TRAKT_METHOD_ADD) == 1: newShow = helpers.findCertainShow(sickbeard.showList, indexer_id) + if newShow is not None: setEpisodeToWanted(newShow, 1, 1) else: @@ -403,7 +414,6 @@ class TraktChecker(): indexer_id = int(show_el) show = self.EpisodeWatchlist[trakt_id][show_el] - newShow = helpers.findCertainShow(sickbeard.showList, indexer_id) try: @@ -411,21 +421,25 @@ class TraktChecker(): if indexer_id not in managed_show: self.addDefaultShow(indexer, indexer_id, show['title'], SKIPPED) managed_show.append(indexer_id) + for season_el in show['seasons']: season = int(season_el) + for episode_el in show['seasons'][season_el]['episodes']: self.todoWanted.append((indexer_id, season, int(episode_el))) else: if newShow.indexer == indexer: for season_el in show['seasons']: season = int(season_el) + for episode_el in show['seasons'][season_el]['episodes']: setEpisodeToWanted(newShow, season, int(episode_el)) except TypeError: logger.log(u"Could not parse the output from trakt for %s " % show["title"], logger.DEBUG) logger.log(u"SHOW_WATCHLIST::CHECK::FINISH - Trakt Episode Watchlist", logger.DEBUG) - def addDefaultShow(self, indexer, indexer_id, name, status): + @staticmethod + def addDefaultShow(indexer, indexer_id, name, status): """ Adds a new show with the default settings """ @@ -435,12 +449,13 @@ class TraktChecker(): try: location = root_dirs[int(root_dirs[0]) + 1] - except: + except Exception: location = None if location: showPath = ek(os.path.join, location, helpers.sanitizeFileName(name)) dir_exists = helpers.makeDir(showPath) + if not dir_exists: logger.log(u"Unable to create the folder %s , can't add the show" % showPath, logger.WARNING) return @@ -461,43 +476,43 @@ class TraktChecker(): def manageNewShow(self, show): logger.log(u"Checking if trakt watch list wants to search for episodes from new show " + show.name, logger.DEBUG) episodes = [i for i in self.todoWanted if i[0] == show.indexerid] + for episode in episodes: self.todoWanted.remove(episode) setEpisodeToWanted(show, episode[1], episode[2]) - def _checkInList(self,trakt_id, showid, season, episode, List = None): + def _checkInList(self, trakt_id, showid, season, episode, List=None): """ Check in the Watchlist or CollectionList for Show Is the Show, Season and Episode in the trakt_id list (tvdb / tvrage) """ - #logger.log(u"Checking Show: %s %s %s " % (trakt_id, showid, List),logger.DEBUG) + # logger.log(u"Checking Show: %s %s %s " % (trakt_id, showid, List),logger.DEBUG) if "Collection" == List: try: if self.Collectionlist[trakt_id][showid]['seasons'][season]['episodes'][episode] == episode: return True - except: + except Exception: return False elif "Show" == List: try: if self.ShowWatchlist[trakt_id][showid]['id'] == showid: return True - except: + except Exception: return False else: try: if self.EpisodeWatchlist[trakt_id][showid]['seasons'][season]['episodes'][episode] == episode: return True - except: + except Exception: return False def _getShowWatchlist(self): """ Get Watchlist and parse once into addressable structure """ - try: - self.ShowWatchlist = { 'tvdb_id' : {}, 'tvrage_id': {} } + self.ShowWatchlist = {'tvdb_id': {}, 'tvrage_id': {}} TraktShowWatchlist = self.trakt_api.traktRequest("sync/watchlist/shows") tvdb_id = 'tvdb' tvrage_id = 'tvrage' @@ -505,8 +520,10 @@ class TraktChecker(): for watchlist_el in TraktShowWatchlist: tvdb = False tvrage = False + if not watchlist_el['show']['ids']["tvdb"] is None: tvdb = True + if not watchlist_el['show']['ids']["tvrage"] is None: tvrage = True @@ -515,24 +532,22 @@ class TraktChecker(): if tvdb: showid = str(watchlist_el['show']['ids'][tvdb_id]) - self.ShowWatchlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year } + self.ShowWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year} + if tvrage: showid = str(watchlist_el['show']['ids'][tvrage_id]) - self.ShowWatchlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year } - + self.ShowWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year} except traktException as e: logger.log(u"Could not connect to trakt service, cannot download Show Watchlist: %s" % repr(e), logger.WARNING) return False - return True def _getEpisodeWatchlist(self): """ Get Watchlist and parse once into addressable structure """ - try: - self.EpisodeWatchlist = { 'tvdb_id' : {}, 'tvrage_id': {} } + self.EpisodeWatchlist = {'tvdb_id': {}, 'tvrage_id': {}} TraktEpisodeWatchlist = self.trakt_api.traktRequest("sync/watchlist/episodes") tvdb_id = 'tvdb' tvrage_id = 'tvrage' @@ -540,8 +555,10 @@ class TraktChecker(): for watchlist_el in TraktEpisodeWatchlist: tvdb = False tvrage = False + if not watchlist_el['show']['ids']["tvdb"] is None: tvdb = True + if not watchlist_el['show']['ids']["tvrage"] is None: tvrage = True @@ -552,40 +569,38 @@ class TraktChecker(): if tvdb: showid = str(watchlist_el['show']['ids'][tvdb_id]) - if not showid in self.EpisodeWatchlist[tvdb_id + '_id'].keys(): - self.EpisodeWatchlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} } - if not season in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys(): - self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} } + if showid not in self.EpisodeWatchlist[tvdb_id + '_id'].keys(): + self.EpisodeWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}} - if not episode in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys(): + if season not in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys(): + self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}} + + if episode not in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys(): self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode if tvrage: showid = str(watchlist_el['show']['ids'][tvrage_id]) - if not showid in self.EpisodeWatchlist[tvrage_id + '_id'].keys(): - self.EpisodeWatchlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} } - if not season in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys(): - self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} } + if showid not in self.EpisodeWatchlist[tvrage_id + '_id'].keys(): + self.EpisodeWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}} - if not episode in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys(): - self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode + if season not in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys(): + self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}} + if episode not in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys(): + self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode except traktException as e: logger.log(u"Could not connect to trakt service, cannot download Episode Watchlist: %s" % repr(e), logger.WARNING) return False - return True def _getShowCollection(self): """ Get Collection and parse once into addressable structure """ - try: - - self.Collectionlist = { 'tvdb_id' : {}, 'tvrage_id': {} } + self.Collectionlist = {'tvdb_id': {}, 'tvrage_id': {}} logger.log(u"Getting Show Collection", logger.DEBUG) TraktCollectionList = self.trakt_api.traktRequest("sync/collection/shows") tvdb_id = 'tvdb' @@ -594,8 +609,10 @@ class TraktChecker(): for watchlist_el in TraktCollectionList: tvdb = False tvrage = False + if not watchlist_el['show']['ids']["tvdb"] is None: tvdb = True + if not watchlist_el['show']['ids']["tvrage"] is None: tvrage = True @@ -610,43 +627,45 @@ class TraktChecker(): if tvdb: showid = str(watchlist_el['show']['ids'][tvdb_id]) - if not showid in self.Collectionlist[tvdb_id + '_id'].keys(): - self.Collectionlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} } - if not season in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys(): - self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} } + if showid not in self.Collectionlist[tvdb_id + '_id'].keys(): + self.Collectionlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}} + + if season not in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys(): + self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}} - if not episode in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys(): + if episode not in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys(): self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode if tvrage: showid = str(watchlist_el['show']['ids'][tvrage_id]) - if not showid in self.Collectionlist[tvrage_id + '_id'].keys(): - self.Collectionlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} } - if not season in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys(): - self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} } + if showid not in self.Collectionlist[tvrage_id + '_id'].keys(): + self.Collectionlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}} - if not episode in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys(): - self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode + if season not in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys(): + self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}} + if episode not in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys(): + self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode except traktException as e: logger.log(u"Could not connect to trakt service, cannot download Show Collection: %s" % repr(e), logger.WARNING) return False - return True - def trakt_bulk_data_generate(self, data): + @staticmethod + def trakt_bulk_data_generate(data): """ Build the JSON structure to send back to Trakt """ - uniqueShows = {} uniqueSeasons = {} - for showid,indexerid,show_name,startyear,season,episode in data: + + for showid, indexerid, show_name, startyear, season, episode in data: if showid not in uniqueShows: - uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {},'seasons': []} + uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {}, 'seasons': []} trakt_id = sickbeard.indexerApi(indexerid).config['trakt_id'] + if trakt_id == 'tvdb_id': uniqueShows[showid]['ids']["tvdb"] = showid else: @@ -654,18 +673,21 @@ class TraktChecker(): uniqueSeasons[showid] = [] # Get the unique seasons per Show - for showid,indexerid,show_name,startyear,season,episode in data: + for showid, indexerid, show_name, startyear, season, episode in data: if season not in uniqueSeasons[showid]: uniqueSeasons[showid].append(season) - #build the query + # build the query showList = [] seasonsList = {} + for searchedShow in uniqueShows: seasonsList[searchedShow] = [] + for searchedSeason in uniqueSeasons[searchedShow]: episodesList = [] - for showid,indexerid,show_name,startyear,season,episode in data: + + for showid, indexerid, show_name, startyear, season, episode in data: if season == searchedSeason and showid == searchedShow: episodesList.append({'number': episode}) show = uniqueShows[searchedShow] diff --git a/sickbeard/tv.py b/sickbeard/tv.py index f58f3abc71e9e536716e7015c72e0ba3906573d5..1a54e45b8d049222076449d181ab68e3a4fbecc0 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -45,7 +45,6 @@ from sickbeard import notifiers from sickbeard import postProcessor from sickbeard import subtitles from sickbeard.blackandwhitelist import BlackAndWhiteList -from sickbeard import sbdatetime from sickbeard import network_timezones from sickbeard.indexers.indexer_config import INDEXER_TVRAGE from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException @@ -261,7 +260,7 @@ class TVShow(object): logger.log( "Found episode by absolute_number %s which is S%02dE%02d" % (absolute_number, season or 0, episode or 0), logger.DEBUG) elif len(sqlResults) > 1: - logger.log("Multiple entries for absolute number: " + str( + logger.log(u"Multiple entries for absolute number: " + str( absolute_number) + " in show: " + self.name + " found ", logger.ERROR) return None else: @@ -277,7 +276,7 @@ class TVShow(object): if noCreate: return None - #logger.log(str(self.indexerid) + u": An object for episode S%02dE%02d didn't exist in the cache, trying to create it" % (season or 0, episode or 0), logger.DEBUG) + # logger.log(str(self.indexerid) + u": An object for episode S%02dE%02d didn't exist in the cache, trying to create it" % (season or 0, episode or 0), logger.DEBUG) if file: ep = TVEpisode(self, season, episode, file) @@ -453,7 +452,7 @@ class TVShow(object): try: curEpisode.refreshSubtitles() except Exception: - logger.log("%s: Could not refresh subtitles" % self.indexerid, logger.ERROR) + logger.log(u"%s: Could not refresh subtitles" % self.indexerid, logger.ERROR) logger.log(traceback.format_exc(), logger.DEBUG) sql_l.append(curEpisode.get_sql()) @@ -483,8 +482,8 @@ class TVShow(object): if self.dvdorder != 0: lINDEXER_API_PARMS['dvdorder'] = True - #logger.log(u"lINDEXER_API_PARMS: " + str(lINDEXER_API_PARMS), logger.DEBUG) - #Spamming log + # logger.log(u"lINDEXER_API_PARMS: " + str(lINDEXER_API_PARMS), logger.DEBUG) + # Spamming log t = sickbeard.indexerApi(self.indexer).indexer(**lINDEXER_API_PARMS) cachedShow = t[self.indexerid] @@ -573,7 +572,7 @@ class TVShow(object): if not ep: raise EpisodeNotFoundException except EpisodeNotFoundException: - logger.log("%s: %s object for S%02dE%02d is incomplete, skipping this episode" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0)) + logger.log(u"%s: %s object for S%02dE%02d is incomplete, skipping this episode" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0)) continue else: try: @@ -583,7 +582,7 @@ class TVShow(object): continue with ep.lock: - logger.log("%s: Loading info from %s for episode S%02dE%02d" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0), logger.DEBUG) + logger.log(u"%s: Loading info from %s for episode S%02dE%02d" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0), logger.DEBUG) ep.loadFromIndexer(season, episode, tvapi=t) sql_l.append(ep.get_sql()) @@ -607,7 +606,7 @@ class TVShow(object): for cur_provider in sickbeard.metadata_provider_dict.values(): - #logger.log(u"Running metadata routines for " + cur_provider.name, logger.DEBUG) + # logger.log(u"Running metadata routines for " + cur_provider.name, logger.DEBUG) fanart_result = cur_provider.create_fanart(self) or fanart_result poster_result = cur_provider.create_poster(self) or poster_result @@ -640,7 +639,7 @@ class TVShow(object): return None if not len(parse_result.episode_numbers): - logger.log("parse_result: " + str(parse_result)) + logger.log(u"parse_result: " + str(parse_result)) logger.log(u"No episode number found in " + file + ", ignoring it", logger.WARNING) return None @@ -654,7 +653,7 @@ class TVShow(object): episode = int(curEpNum) - logger.log("%s: %s parsed to %s S%02dE%02d" % (self.indexerid, file, self.name, season or 0, episode or 0), logger.DEBUG) + logger.log(u"%s: %s parsed to %s S%02dE%02d" % (self.indexerid, file, self.name, season or 0, episode or 0), logger.DEBUG) checkQualityAgain = False same_file = False @@ -1021,7 +1020,7 @@ class TVShow(object): file_attribute = ek(os.stat, self.location)[0] if not file_attribute & stat.S_IWRITE: # File is read-only, so make it writeable - logger.log('Attempting to make writeable the read only folder %s' % self._location, logger.DEBUG) + logger.log(u'Attempting to make writeable the read only folder %s' % self._location, logger.DEBUG) try: ek(os.chmod, self.location, stat.S_IWRITE) except Exception: @@ -1125,28 +1124,28 @@ class TVShow(object): logger.log(str(self.indexerid) + ": Show dir doesn't exist, can't download subtitles", logger.DEBUG) return - logger.log("%s: Downloading subtitles" % self.indexerid, logger.DEBUG) + logger.log(u"%s: Downloading subtitles" % self.indexerid, logger.DEBUG) try: episodes = self.getAllEpisodes(has_location=True) if not episodes: - logger.log("%s: No episodes to download subtitles for %s" % (self.indexerid, self.name), logger.DEBUG) + logger.log(u"%s: No episodes to download subtitles for %s" % (self.indexerid, self.name), logger.DEBUG) return for episode in episodes: episode.downloadSubtitles(force=force) except Exception: - logger.log("%s: Error occurred when downloading subtitles for %s" % (self.indexerid, self.name), logger.DEBUG) + logger.log(u"%s: Error occurred when downloading subtitles for %s" % (self.indexerid, self.name), logger.DEBUG) logger.log(traceback.format_exc(), logger.ERROR) def saveToDB(self, forceSave=False): if not self.dirty and not forceSave: - logger.log(str(self.indexerid) + ": Not saving show to db - record is not dirty", logger.DEBUG) + # logger.log(str(self.indexerid) + ": Not saving show to db - record is not dirty", logger.DEBUG) return - logger.log(str(self.indexerid) + u": Saving show info to database", logger.DEBUG) + logger.log(u"%i: Saving to database: %s" % (self.indexerid, self.name), logger.DEBUG) controlValueDict = {"indexer_id": self.indexerid} newValueDict = {"indexer": self.indexer, @@ -1435,10 +1434,10 @@ class TVEpisode(object): logger.log(u"%s: Downloading subtitles for S%02dE%02d" % (self.show.indexerid, self.season or 0, self.episode or 0), logger.DEBUG) - #logging.getLogger('subliminal.api').addHandler(logging.StreamHandler()) - #logging.getLogger('subliminal.api').setLevel(logging.DEBUG) - #logging.getLogger('subliminal').addHandler(logging.StreamHandler()) - #logging.getLogger('subliminal').setLevel(logging.DEBUG) + # logging.getLogger('subliminal.api').addHandler(logging.StreamHandler()) + # logging.getLogger('subliminal.api').setLevel(logging.DEBUG) + # logging.getLogger('subliminal').addHandler(logging.StreamHandler()) + # logging.getLogger('subliminal').setLevel(logging.DEBUG) subtitles_info = {'location': self.location, 'subtitles': self.subtitles, 'show.indexerid': self.show.indexerid, 'season': self.season, 'episode': self.episode, 'name': self.name, 'show.name': self.show.name, 'status': self.status} @@ -1644,10 +1643,10 @@ class TVEpisode(object): if getattr(myEp, 'episodename', None) is None: logger.log(u"This episode %s - S%02dE%02d has no name on %s. Setting to an empty string" % (self.show.name, season or 0, episode or 0, sickbeard.indexerApi(self.indexer).name)) setattr(myEp, 'episodename', '') - # if I'm incomplete on TVDB but I once was complete then just delete myself from the DB for now - #if self.indexerid != -1: - # self.deleteEpisode() - #return False + # # if I'm incomplete on TVDB but I once was complete then just delete myself from the DB for now + # if self.indexerid != -1: + # self.deleteEpisode() + # return False if getattr(myEp, 'absolute_number', None) is None: logger.log(u"This episode %s - S%02dE%02d has no absolute number on %s" %(self.show.name, season or 0, episode or 0, sickbeard.indexerApi(self.indexer).name), logger.DEBUG) @@ -1816,17 +1815,17 @@ class TVEpisode(object): def __str__(self): - toReturn = "" - toReturn += "%s - S%02dE%02d - %s " % (self.show.name, self.season or 0, self.episode or 0, self.name) + "\n" - toReturn += "location: " + str(self.location) + "\n" - toReturn += "description: " + str(self.description) + "\n" - toReturn += "subtitles: " + str(",".join(self.subtitles)) + "\n" - toReturn += "subtitles_searchcount: " + str(self.subtitles_searchcount) + "\n" - toReturn += "subtitles_lastsearch: " + str(self.subtitles_lastsearch) + "\n" - toReturn += "airdate: " + str(self.airdate.toordinal()) + " (" + str(self.airdate) + ")\n" - toReturn += "hasnfo: " + str(self.hasnfo) + "\n" - toReturn += "hastbn: " + str(self.hastbn) + "\n" - toReturn += "status: " + str(self.status) + "\n" + toReturn = u"" + toReturn += u"%r - S%02rE%02r - %r\n" % (self.show.name, self.season, self.episode, self.name) + toReturn += u"location: %r\n" % self.location + toReturn += u"description: %r\n" % self.description + toReturn += u"subtitles: %r\n" % u",".join(self.subtitles) + toReturn += u"subtitles_searchcount: %r\n" % self.subtitles_searchcount + toReturn += u"subtitles_lastsearch: %r\n" % self.subtitles_lastsearch + toReturn += u"airdate: %r (%r)\n" % (self.airdate.toordinal(), self.airdate) + toReturn += u"hasnfo: %r\n" % self.hasnfo + toReturn += u"hastbn: %r\n" % self.hastbn + toReturn += u"status: %r\n" % self.status return toReturn def createMetaFiles(self): @@ -1950,13 +1949,9 @@ class TVEpisode(object): """ if not self.dirty and not forceSave: - logger.log(str(self.show.indexerid) + u": Not saving episode to db - record is not dirty", logger.DEBUG) + # logger.log(str(self.show.indexerid) + u": Not saving episode to db - record is not dirty", logger.DEBUG) return - logger.log(str(self.show.indexerid) + u": Saving episode details to database", logger.DEBUG) - - logger.log(u"STATUS IS " + str(self.status), logger.DEBUG) - newValueDict = {"indexerid": self.indexerid, "indexer": self.indexer, "name": self.name, @@ -1980,6 +1975,9 @@ class TVEpisode(object): "season": self.season, "episode": self.episode} + # logger.log(u"%s: Saving episode details to database %rx%r: %s" % + # (self.show.indexerid, self.season, self.episode, statusStrings[self.status]), logger.DEBUG) + # use a custom update/insert method to get the data into the DB myDB = db.DBConnection() myDB.upsert("tv_episodes", newValueDict, controlValueDict) @@ -2109,23 +2107,18 @@ class TVEpisode(object): else: show_name = self.show.name - # try to get the release encoder to comply with scene naming standards - encoder = Quality.sceneQualityFromName(self.release_name, epQual) - if encoder: - logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG) - - #try to get the release group + # try to get the release group rel_grp = {} rel_grp["SiCKRAGE"] = 'SiCKRAGE' - if hasattr(self, 'location'): #from the location name + if hasattr(self, 'location'): # from the location name rel_grp['location'] = release_group(self.show, self.location) if not rel_grp['location']: del rel_grp['location'] - if hasattr(self, '_release_group'): #from the release group field in db + if hasattr(self, '_release_group'): # from the release group field in db rel_grp['database'] = self._release_group if not rel_grp['database']: del rel_grp['database'] - if hasattr(self, 'release_name'): #from the release name field in db + if hasattr(self, 'release_name'): # from the release name field in db rel_grp['release_name'] = release_group(self.show, self.release_name) if not rel_grp['release_name']: del rel_grp['release_name'] @@ -2139,6 +2132,11 @@ class TVEpisode(object): relgrp = 'location' else: relgrp = 'SiCKRAGE' + # try to get the release encoder to comply with scene naming standards + encoder = Quality.sceneQualityFromName(self.release_name.replace(rel_grp[relgrp], ""), epQual) + if encoder: + logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG) + return { '%SN': show_name, '%S.N': dot(show_name), @@ -2237,7 +2235,7 @@ class TVEpisode(object): result_name = result_name.replace('%RN', '%S.N.S%0SE%0E.%E.N-' + replace_map['%RG']) result_name = result_name.replace('%rn', '%s.n.s%0se%0e.%e.n-' + replace_map['%RG'].lower()) - #logger.log(u"Episode has no release name, replacing it with a generic one: " + result_name, logger.DEBUG) + # logger.log(u"Episode has no release name, replacing it with a generic one: " + result_name, logger.DEBUG) if not replace_map['%RT']: result_name = re.sub('([ _.-]*)%RT([ _.-]*)', r'\2', result_name) @@ -2458,7 +2456,7 @@ class TVEpisode(object): related_files = postProcessor.PostProcessor(self.location).list_associated_files( self.location, base_name_only=True, subfolders=True) - #This is wrong. Cause of pp not moving subs. + # This is wrong. Cause of pp not moving subs. if self.show.subtitles and sickbeard.SUBTITLES_DIR != '': related_subs = postProcessor.PostProcessor(self.location).list_associated_files(sickbeard.SUBTITLES_DIR, subtitles_only=True, subfolders=True) @@ -2471,11 +2469,11 @@ class TVEpisode(object): # move related files for cur_related_file in related_files: - #We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all) + # We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all) cur_related_dir = ek(os.path.dirname, ek(os.path.abspath, cur_related_file)) subfolder = cur_related_dir.replace(ek(os.path.dirname, ek(os.path.abspath, self.location)), '') - #We now have a subfolder. We need to add that to the absolute_proper_path. - #First get the absolute proper-path dir + # We now have a subfolder. We need to add that to the absolute_proper_path. + # First get the absolute proper-path dir proper_related_dir = ek(os.path.dirname, ek(os.path.abspath, absolute_proper_path + file_ext)) proper_related_path = absolute_proper_path.replace(proper_related_dir, proper_related_dir + subfolder) diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py index 1103353abaeeac7dbac9dbf34762c7f9ad1e9b00..6c6ce5677c29117b532d7f9dd70be46af44da64c 100644 --- a/sickbeard/tvcache.py +++ b/sickbeard/tvcache.py @@ -23,16 +23,15 @@ import itertools import urllib2 import sickbeard - from sickbeard import db from sickbeard import logger -from sickbeard.common import Quality from sickbeard import helpers -from sickbeard.rssfeeds import RSSFeeds -from name_parser.parser import NameParser, InvalidNameException, InvalidShowException +from sickbeard.common import Quality +from sickbeard.rssfeeds import getFeed from sickbeard import show_name_helpers from sickrage.helper.encoding import ss from sickrage.helper.exceptions import AuthException, ex +from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException class CacheDBConnection(db.DBConnection): @@ -74,7 +73,7 @@ class CacheDBConnection(db.DBConnection): raise -class TVCache(): +class TVCache(object): def __init__(self, provider): self.provider = provider self.providerID = self.provider.getID() @@ -134,13 +133,11 @@ class TVCache(): except Exception, e: logger.log(u"Error while searching " + self.provider.name + ", skipping: " + repr(e), logger.DEBUG) - def getRSSFeed(self, url, post_data=None, items=[]): + def getRSSFeed(self, url): handlers = [] - if self.provider.proxy.isEnabled(): - self.provider.headers.update({'Referer': self.provider.proxy.getProxyURL()}) - elif sickbeard.PROXY_SETTING: - logger.log("Using proxy for url: " + url, logger.DEBUG) + if sickbeard.PROXY_SETTING: + logger.log(u"Using global proxy for url: " + url, logger.DEBUG) scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING) address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING handlers = [urllib2.ProxyHandler({'http': address, 'https': address})] @@ -148,11 +145,9 @@ class TVCache(): elif 'Referer' in self.provider.headers: self.provider.headers.pop('Referer') - return RSSFeeds(self.providerID).getFeed( - self.provider.proxy._buildURL(url), - post_data, - self.provider.headers, - items, + return getFeed( + url, + request_headers=self.provider.headers, handlers=handlers) def _translateTitle(self, title): @@ -178,6 +173,8 @@ class TVCache(): u"The data returned from the " + self.provider.name + " feed is incomplete, this result is unusable", logger.DEBUG) + return False + def _getLastUpdate(self): myDB = self._getDB() sqlResults = myDB.select("SELECT time FROM lastUpdate WHERE provider = ?", [self.providerID]) @@ -297,14 +294,15 @@ class TVCache(): neededEps = self.findNeededEpisodes(episode, manualSearch, downCurQuality) return neededEps[episode] if episode in neededEps else [] - def listPropers(self, date=None, delimiter="."): + def listPropers(self, date=None): myDB = self._getDB() sql = "SELECT * FROM [" + self.providerID + "] WHERE name LIKE '%.PROPER.%' OR name LIKE '%.REPACK.%'" if date != None: sql += " AND time >= " + str(int(time.mktime(date.timetuple()))) - return filter(lambda x: x['indexerid'] != 0, myDB.select(sql)) + propers_results = myDB.select(sql) + return [x for x in propers_results if x['indexerid']] def findNeededEpisodes(self, episode, manualSearch=False, downCurQuality=False): @@ -392,4 +390,3 @@ class TVCache(): self.setLastSearch() return neededEps - diff --git a/sickbeard/ui.py b/sickbeard/ui.py index 43044c6cf1953d8845005ff3e57904bcc19cf234..3d7c559bf934d59c1d188a2b4c6d22ca90b50dc2 100644 --- a/sickbeard/ui.py +++ b/sickbeard/ui.py @@ -156,7 +156,7 @@ class QueueProgressIndicator(): return len([x for x in self.queueItemList if x.isInQueue()]) def nextName(self): - for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue: #@UndefinedVariable + for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue: # @UndefinedVariable if curItem in self.queueItemList: return curItem.name diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py index 7ed739835702005d4e18121eb28ce22e6c7ffc46..b3dbf50cd0bf4cac5c6032f00151a6a9bdd7e88a 100644 --- a/sickbeard/versionChecker.py +++ b/sickbeard/versionChecker.py @@ -105,7 +105,7 @@ class CheckVersion(object): ui.notifications.message('Backup', 'Config backup failed, aborting update') return False except Exception as e: - logger.log('Update: Config backup failed. Error: %s' % ex(e), logger.ERROR) + logger.log(u'Update: Config backup failed. Error: %s' % ex(e), logger.ERROR) ui.notifications.message('Backup', 'Config backup failed, aborting update') return False @@ -621,7 +621,7 @@ class GitUpdateManager(UpdateManager): # remove untracked files and performs a hard reset on git branch to avoid update issues if sickbeard.GIT_RESET: - #self.clean() # This is removing user data and backups + # self.clean() # This is removing user data and backups self.reset() if self.branch == self._find_installed_branch(): @@ -857,7 +857,7 @@ class SourceUpdateManager(UpdateManager): # Avoid DLL access problem on WIN32/64 # These files needing to be updated manually - #or find a way to kill the access from memory + # or find a way to kill the access from memory if curfile in ('unrar.dll', 'unrar64.dll'): try: os.chmod(new_path, stat.S_IWRITE) diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py index 94490a467c7306257b8fdb4edf79fb67c8ca849a..9fbe6cfaef7b7b760382fb65d659aac3e423c814 100644 --- a/sickbeard/webapi.py +++ b/sickbeard/webapi.py @@ -18,11 +18,12 @@ # along with SickRage. If not, see <http://www.gnu.org/licenses/>. # pylint: disable=W0223,E0202 +import io import os +import re import time import urllib import datetime -import re import traceback import sickbeard @@ -39,7 +40,6 @@ from sickrage.show.History import History from sickrage.show.Show import Show from sickrage.system.Restart import Restart from sickrage.system.Shutdown import Shutdown - from sickbeard.versionChecker import CheckVersion from sickbeard import db, logger, ui, helpers from sickbeard import search_queue @@ -60,14 +60,12 @@ from sickbeard.common import UNKNOWN from sickbeard.common import WANTED from sickbeard.common import ARCHIVED from sickbeard.common import statusStrings -import codecs try: import json except ImportError: import simplejson as json - from tornado.web import RequestHandler indexer_ids = ["indexerid", "tvdbid"] @@ -86,6 +84,8 @@ result_type_map = { RESULT_FATAL: "fatal", RESULT_DENIED: "denied", } + + # basically everything except RESULT_SUCCESS / success is bad @@ -96,8 +96,8 @@ class ApiHandler(RequestHandler): def __init__(self, *args, **kwargs): super(ApiHandler, self).__init__(*args, **kwargs) - #def set_default_headers(self): - #self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + # def set_default_headers(self): + # self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') def get(self, *args, **kwargs): kwargs = self.request.arguments @@ -161,7 +161,7 @@ class ApiHandler(RequestHandler): out = callback + '(' + out + ');' # wrap with JSONP call if requested except Exception, e: # if we fail to generate the output fake an error logger.log(u"API :: " + traceback.format_exc(), logger.DEBUG) - out = '{"result": "%s", "message": "error while composing output: %s"}' %\ + out = '{"result": "%s", "message": "error while composing output: %s"}' % \ (result_type_map[RESULT_ERROR], ex(e)) return out @@ -234,7 +234,6 @@ class ApiHandler(RequestHandler): return outDict - def filter_params(self, cmd, args, kwargs): """ return only params kwargs that are for cmd and rename them to a clean version (remove "<cmd>_") @@ -618,6 +617,7 @@ class IntParseError(Exception): A value could not be parsed into an int, but should be parsable to an int """ + # -------------------------------------------------------------------------------------# @@ -754,7 +754,7 @@ class CMD_Episode(ApiCall): if helpers.tryInt(episode['airdate'], 1) > 693595: # 1900 episode['airdate'] = sbdatetime.sbdatetime.sbfdate(sbdatetime.sbdatetime.convert_to_setting( network_timezones.parse_date_time(int(episode['airdate']), showObj.airs, showObj.network)), - d_preset=dateFormat) + d_preset=dateFormat) else: episode['airdate'] = 'Never' @@ -853,7 +853,6 @@ class CMD_EpisodeSetStatus(ApiCall): # convert the string status to a int for status in statusStrings.statusStrings: if str(statusStrings[status]).lower() == str(self.status).lower(): - self.status = status break else: # if we dont break out of the for loop we got here. @@ -1213,7 +1212,7 @@ class CMD_Logs(ApiCall): data = [] if os.path.isfile(logger.logFile): - with ek(codecs.open, *[logger.logFile, 'r', 'utf-8']) as f: + with io.open(logger.logFile, 'r', encoding='utf-8') as f: data = f.readlines() regex = r"^(\d\d\d\d)\-(\d\d)\-(\d\d)\s*(\d\d)\:(\d\d):(\d\d)\s*([A-Z]+)\s*(.+?)\s*\:\:\s*(.*)$" @@ -1292,7 +1291,7 @@ class CMD_PostProcess(ApiCall): self.type = 'manual' data = processTV.processDir(self.path, process_method=self.process_method, force=self.force_replace, - is_priority=self.is_priority, failed=self.failed, type=self.type) + is_priority=self.is_priority, failed=self.failed, proc_type=self.type) if not self.return_data: data = "" @@ -2016,8 +2015,11 @@ class CMD_ShowAddExisting(ApiCall): if iqualityID or aqualityID: newQuality = Quality.combineQualities(iqualityID, aqualityID) - sickbeard.showQueueScheduler.action.addShow(int(indexer), int(self.indexerid), self.location, SKIPPED, - newQuality, int(self.flatten_folders)) + sickbeard.showQueueScheduler.action.addShow( + int(indexer), int(self.indexerid), self.location, default_status=sickbeard.STATUS_DEFAULT, + quality=newQuality, flatten_folders=int(self.flatten_folders), subtitles=self.subtitles, + default_status_after=sickbeard.STATUS_DEFAULT_AFTER, archive=self.archive_firstmatch + ) return _responds(RESULT_SUCCESS, {"name": indexerName}, indexerName + " has been queued to be added") @@ -2040,7 +2042,9 @@ class CMD_ShowAddNew(ApiCall): "anime": {"desc": "True to mark the show as an anime, False otherwise"}, "scene": {"desc": "True if episodes search should be made by scene numbering, False otherwise"}, "future_status": {"desc": "The status of future episodes"}, - "archive_firstmatch": {"desc": "True if episodes should be archived when first match is downloaded, False otherwise"}, + "archive_firstmatch": { + "desc": "True if episodes should be archived when first match is downloaded, False otherwise" + }, } } @@ -2184,10 +2188,11 @@ class CMD_ShowAddNew(ApiCall): else: helpers.chmodAsParent(showPath) - sickbeard.showQueueScheduler.action.addShow(int(indexer), int(self.indexerid), showPath, newStatus, - newQuality, - int(self.flatten_folders), self.lang, self.subtitles, self.anime, - self.scene, default_status_after=default_ep_status_after, archive=self.archive_firstmatch) # @UndefinedVariable + sickbeard.showQueueScheduler.action.addShow( + int(indexer), int(self.indexerid), showPath, default_status=newStatus, quality=newQuality, + flatten_folders=int(self.flatten_folders), lang=self.lang, subtitles=self.subtitles, anime=self.anime, + scene=self.scene, default_status_after=default_ep_status_after, archive=self.archive_firstmatch + ) return _responds(RESULT_SUCCESS, {"name": indexerName}, indexerName + " has been queued to be added") @@ -2534,7 +2539,7 @@ class CMD_ShowSeasons(ApiCall): status, quality = Quality.splitCompositeStatus(int(row["status"])) row["status"] = _get_status_Strings(status) row["quality"] = get_quality_string(quality) - if helpers.tryInt(row['airdate'], 1) > 693595: # 1900 + if helpers.tryInt(row['airdate'], 1) > 693595: # 1900 dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting( network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network)) row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat) @@ -2561,7 +2566,7 @@ class CMD_ShowSeasons(ApiCall): status, quality = Quality.splitCompositeStatus(int(row["status"])) row["status"] = _get_status_Strings(status) row["quality"] = get_quality_string(quality) - if helpers.tryInt(row['airdate'], 1) > 693595: # 1900 + if helpers.tryInt(row['airdate'], 1) > 693595: # 1900 dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting( network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network)) row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat) @@ -2777,7 +2782,7 @@ class CMD_ShowUpdate(ApiCall): sickbeard.showQueueScheduler.action.updateShow(showObj, True) # @UndefinedVariable return _responds(RESULT_SUCCESS, msg=str(showObj.name) + " has queued to be updated") except CantUpdateShowException as e: - logger.log("API::Unable to update show: {0}".format(str(e)), logger.DEBUG) + logger.log(u"API::Unable to update show: {0}".format(str(e)), logger.DEBUG) return _responds(RESULT_FAILURE, msg="Unable to update " + str(showObj.name)) @@ -2823,7 +2828,7 @@ class CMD_Shows(ApiCall): "subtitles": (0, 1)[curShow.subtitles], } - if helpers.tryInt(curShow.nextaired, 1) > 693595: # 1900 + if helpers.tryInt(curShow.nextaired, 1) > 693595: # 1900 dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting( network_timezones.parse_date_time(curShow.nextaired, curShow.airs, showDict['network'])) showDict['next_ep_airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat) @@ -2862,6 +2867,7 @@ class CMD_ShowsStats(ApiCall): 'shows_total': stats['shows']['total'], }) + # WARNING: never define a cmd call string that contains a "_" (underscore) # this is reserved for cmd indexes used while cmd chaining diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index dc441526a71a31e88763c8758c60991a67507bc5..b53917465e50a892f89540eadf258ad1c232334d 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -1,3 +1,4 @@ +# coding=utf-8 # Author: Nic Wolfe <nic@wolfeden.ca> # URL: http://code.google.com/p/sickbeard/ # @@ -16,13 +17,13 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -import traceback +import io import os +import re import time import urllib -import re import datetime -import codecs +import traceback import sickbeard from sickbeard import config, sab @@ -88,10 +89,11 @@ mako_lookup = None mako_cache = None mako_path = None + def get_lookup(): - global mako_lookup # pylint: disable=W0603 - global mako_cache # pylint: disable=W0603 - global mako_path # pylint: disable=W0603 + global mako_lookup # pylint: disable=W0603 + global mako_cache # pylint: disable=W0603 + global mako_path # pylint: disable=W0603 if mako_path is None: mako_path = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/views/") @@ -101,8 +103,8 @@ def get_lookup(): mako_lookup = TemplateLookup(directories=[mako_path], module_directory=mako_cache, format_exceptions=True) return mako_lookup -class PageTemplate(MakoTemplate): +class PageTemplate(MakoTemplate): def __init__(self, rh, filename): self.arguments = {} @@ -116,7 +118,7 @@ class PageTemplate(MakoTemplate): self.arguments['sbHandleReverseProxy'] = sickbeard.HANDLE_REVERSE_PROXY self.arguments['sbThemeName'] = sickbeard.THEME_NAME self.arguments['sbDefaultPage'] = sickbeard.DEFAULT_PAGE - self.arguments['sbLogin'] = rh.get_current_user() + self.arguments['srLogin'] = rh.get_current_user() self.arguments['sbStartTime'] = rh.startTime if rh.request.headers['Host'][0] == '[': @@ -139,6 +141,8 @@ class PageTemplate(MakoTemplate): self.arguments['title'] = "FixME" self.arguments['header'] = "FixME" self.arguments['topmenu'] = "FixME" + self.arguments['controller'] = "FixME" + self.arguments['action'] = "FixME" def render(self, *args, **kwargs): for key in self.arguments: @@ -158,8 +162,8 @@ class BaseHandler(RequestHandler): super(BaseHandler, self).__init__(*args, **kwargs) - #def set_default_headers(self): - #self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + # def set_default_headers(self): + # self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') def write_error(self, status_code, **kwargs): # handle 404 http errors @@ -175,8 +179,8 @@ class BaseHandler(RequestHandler): elif self.settings.get("debug") and "exc_info" in kwargs: exc_info = kwargs["exc_info"] - trace_info = ''.join(["%s<br/>" % line for line in traceback.format_exception(*exc_info)]) - request_info = ''.join(["<strong>%s</strong>: %s<br/>" % (k, self.request.__dict__[k]) for k in + trace_info = ''.join(["%s<br>" % line for line in traceback.format_exception(*exc_info)]) + request_info = ''.join(["<strong>%s</strong>: %s<br>" % (k, self.request.__dict__[k]) for k in self.request.__dict__.keys()]) error = exc_info[1] @@ -245,7 +249,7 @@ class WebHandler(BaseHandler): self.finish(results) except Exception: - logger.log('Failed doing webui request "%s": %s' % (route, traceback.format_exc()), logger.DEBUG) + logger.log(u'Failed doing webui request "%s": %s' % (route, traceback.format_exc()), logger.DEBUG) raise HTTPError(404) @run_on_executor @@ -259,7 +263,7 @@ class WebHandler(BaseHandler): result = function(**kwargs) return result except Exception: - logger.log('Failed doing webui callback: %s' % (traceback.format_exc()), logger.ERROR) + logger.log(u'Failed doing webui callback: %s' % (traceback.format_exc()), logger.ERROR) raise # post uses get method @@ -289,9 +293,9 @@ class LoginHandler(BaseHandler): if api_key: remember_me = int(self.get_argument('remember_me', default=0) or 0) self.set_secure_cookie('sickrage_user', api_key, expires_days=30 if remember_me > 0 else None) - logger.log('User logged into the SickRage web interface', logger.INFO) + logger.log(u'User logged into the SickRage web interface', logger.INFO) else: - logger.log('User attempted a failed login to the SickRage web interface from IP: ' + self.request.remote_ip, logger.WARNING) + logger.log(u'User attempted a failed login to the SickRage web interface from IP: ' + self.request.remote_ip, logger.WARNING) self.redirect('/' + sickbeard.DEFAULT_PAGE +'/') @@ -301,6 +305,7 @@ class LogoutHandler(BaseHandler): self.clear_cookie("sickrage_user") self.redirect('/login/') + class KeyHandler(RequestHandler): def __init__(self, *args, **kwargs): super(KeyHandler, self).__init__(*args, **kwargs) @@ -318,7 +323,7 @@ class KeyHandler(RequestHandler): self.finish({'success': api_key is not None, 'api_key': api_key}) except Exception: - logger.log('Failed doing key request: %s' % (traceback.format_exc()), logger.ERROR) + logger.log(u'Failed doing key request: %s' % (traceback.format_exc()), logger.ERROR) self.finish({'success': False, 'error': 'Failed returning results'}) @@ -393,7 +398,7 @@ class WebRoot(WebHandler): layout = 'poster' sickbeard.HOME_LAYOUT = layout - #Dont redirect to default page so user can see new layout + # Don't redirect to default page so user can see new layout return self.redirect("/home/") @staticmethod @@ -583,6 +588,7 @@ class CalendarHandler(BaseHandler): return ical + @route('/ui(/?.*)') class UI(WebRoot): def __init__(self, *args, **kwargs): @@ -674,17 +680,17 @@ class Home(WebRoot): showlists = [["Shows", sickbeard.showList]] stats = self.show_statistics() - return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1]) + return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1], controller="home", action="index") @staticmethod def show_statistics(): myDB = db.DBConnection() today = str(datetime.date.today().toordinal()) - status_quality = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')' + status_quality = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')' status_download = '(' + ','.join([str(x) for x in Quality.DOWNLOADED + Quality.ARCHIVED]) + ')' - sql_statement = 'SELECT showid, ' + sql_statement = 'SELECT showid, ' sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_quality + ') AS ep_snatched, ' sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_download + ') AS ep_downloaded, ' @@ -709,7 +715,6 @@ class Home(WebRoot): return show_stat, max_download_count - def is_alive(self, *args, **kwargs): if 'callback' in kwargs and '_' in kwargs: callback, _ = kwargs['callback'], kwargs['_'] @@ -741,9 +746,9 @@ class Home(WebRoot): @staticmethod def haveTORRENT(): - if sickbeard.USE_TORRENTS and sickbeard.TORRENT_METHOD != 'blackhole' \ - and (sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'https' - or not sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'http:'): + if sickbeard.USE_TORRENTS and sickbeard.TORRENT_METHOD != 'blackhole' and \ + (sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'https' or not + sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'http:'): return True else: return False @@ -810,7 +815,6 @@ class Home(WebRoot): else: return "Test prowl notice failed" - @staticmethod def testBoxcar(username=None): @@ -820,7 +824,6 @@ class Home(WebRoot): else: return "Error sending Boxcar notification" - @staticmethod def testBoxcar2(accesstoken=None): @@ -830,7 +833,6 @@ class Home(WebRoot): else: return "Error sending Boxcar2 notification" - @staticmethod def testPushover(userKey=None, apiKey=None): @@ -840,12 +842,10 @@ class Home(WebRoot): else: return "Error sending Pushover notification" - @staticmethod def twitterStep1(): return notifiers.twitter_notifier._get_authorization() - @staticmethod def twitterStep2(key): @@ -856,7 +856,6 @@ class Home(WebRoot): else: return "Unable to verify key" - @staticmethod def testTwitter(): @@ -866,7 +865,6 @@ class Home(WebRoot): else: return "Error sending tweet" - @staticmethod def testKODI(host=None, username=None, password=None): @@ -878,11 +876,10 @@ class Home(WebRoot): finalResult += "Test KODI notice sent successfully to " + urllib.unquote_plus(curHost) else: finalResult += "Test KODI notice failed to " + urllib.unquote_plus(curHost) - finalResult += "<br />\n" + finalResult += "<br>\n" return finalResult - def testPMC(self, host=None, username=None, password=None): self.set_header('Cache-Control', 'max-age=0,no-cache,no-store') @@ -896,7 +893,7 @@ class Home(WebRoot): finalResult += 'Successful test notice sent to Plex client ... ' + urllib.unquote_plus(curHost) else: finalResult += 'Test failed for Plex client ... ' + urllib.unquote_plus(curHost) - finalResult += '<br />' + '\n' + finalResult += '<br>' + '\n' ui.notifications.message('Tested Plex client(s): ', urllib.unquote_plus(host.replace(',', ', '))) @@ -916,8 +913,8 @@ class Home(WebRoot): elif curResult is False: finalResult += 'Test failed, No Plex Media Server host specified' else: - finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(curResult.replace(',', ', ')) - finalResult += '<br />' + '\n' + finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(str(curResult).replace(',', ', ')) + finalResult += '<br>' + '\n' ui.notifications.message('Tested Plex Media Server host(s): ', urllib.unquote_plus(host.replace(',', ', '))) @@ -1116,7 +1113,7 @@ class Home(WebRoot): checkversion = CheckVersion() backup = checkversion._runbackup() - if backup == True: + if backup is True: if sickbeard.versionCheckScheduler.action.update(): # do a hard restart @@ -1217,7 +1214,7 @@ class Home(WebRoot): else: submenu.append({'title': 'Pause', 'path': 'home/togglePause?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-pause'}) - submenu.append({'title': 'Remove', 'path': 'home/deleteShow?show=%d' % showObj.indexerid, 'class':'removeshow', 'confirm': True, 'icon': 'ui-icon ui-icon-trash'}) + submenu.append({'title': 'Remove', 'path': 'home/deleteShow?show=%d' % showObj.indexerid, 'class': 'removeshow', 'confirm': True, 'icon': 'ui-icon ui-icon-trash'}) submenu.append({'title': 'Re-scan files', 'path': 'home/refreshShow?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-refresh'}) submenu.append({'title': 'Force Full Update', 'path': 'home/updateShow?show=%d&force=1' % showObj.indexerid, 'icon': 'ui-icon ui-icon-transfer-e-w'}) submenu.append({'title': 'Update show in KODI', 'path': 'home/updateKODI?show=%d' % showObj.indexerid, 'requires': self.haveKODI(), 'icon': 'submenu-icon-kodi'}) @@ -1292,7 +1289,9 @@ class Home(WebRoot): xem_numbering=get_xem_numbering_for_show(indexerid, indexer), scene_absolute_numbering=get_scene_absolute_numbering_for_show(indexerid, indexer), xem_absolute_numbering=get_xem_absolute_numbering_for_show(indexerid, indexer), - title=showObj.name + title=showObj.name, + controller="home", + action="displayShow" ) @staticmethod @@ -1314,8 +1313,7 @@ class Home(WebRoot): if season == -1: season = "*" out.append("S" + str(season) + ": " + ", ".join(names)) - return "<br/>".join(out) - + return "<br>".join(out) def editShow(self, show=None, location=None, anyQualities=[], bestQualities=[], exceptions_list=[], flatten_folders=None, paused=None, directCall=False, air_by_date=None, sports=None, dvdorder=None, @@ -1360,7 +1358,7 @@ class Home(WebRoot): except Exception as e: anidb_failed = True ui.notifications.error('Unable to retreive Fansub Groups from AniDB.') - logger.log('Unable to retreive Fansub Groups from AniDB. Error is {0}'.format(str(e)), logger.DEBUG) + logger.log(u'Unable to retreive Fansub Groups from AniDB. Error is {0}'.format(str(e)), logger.DEBUG) with showObj.lock: show = showObj @@ -1368,11 +1366,12 @@ class Home(WebRoot): if showObj.is_anime: return t.render(show=show, scene_exceptions=scene_exceptions, groups=groups, whitelist=whitelist, - blacklist=blacklist, title='Edit Show', header='Edit Show') + blacklist=blacklist, title='Edit Show', header='Edit Show', controller="home", action="editShow") else: - return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show') + return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show', + controller="home", action="editShow") - flatten_folders = not config.checkbox_to_value(flatten_folders) # UI inverts this value + flatten_folders = not config.checkbox_to_value(flatten_folders) # UI inverts this value dvdorder = config.checkbox_to_value(dvdorder) archive_firstmatch = config.checkbox_to_value(archive_firstmatch) paused = config.checkbox_to_value(paused) @@ -1601,7 +1600,6 @@ class Home(WebRoot): return self.redirect("/home/displayShow?show=" + str(showObj.indexerid)) - def updateKODI(self, show=None): showName = None showObj = None @@ -1661,6 +1659,7 @@ class Home(WebRoot): else: return self._genericMessage("Error", errMsg) + # Use .has_key() since it is overridden for statusStrings in common.py if not statusStrings.has_key(int(status)): errMsg = "Invalid status" if direct: @@ -1716,12 +1715,12 @@ class Home(WebRoot): continue if int(status) in Quality.DOWNLOADED and epObj.status not in Quality.SNATCHED + \ - Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED + [IGNORED] and not ek(os.path.isfile, epObj.location): + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED + [IGNORED] and not ek(os.path.isfile, epObj.location): logger.log(u"Refusing to change status of " + curEp + " to DOWNLOADED because it's not SNATCHED/DOWNLOADED", logger.WARNING) continue if int(status) == FAILED and epObj.status not in Quality.SNATCHED + Quality.SNATCHED_PROPER + \ - Quality.SNATCHED_BEST + Quality.DOWNLOADED + Quality.ARCHIVED: + Quality.SNATCHED_BEST + Quality.DOWNLOADED + Quality.ARCHIVED: logger.log(u"Refusing to change status of " + curEp + " to FAILED because it's not SNATCHED/DOWNLOADED", logger.WARNING) continue @@ -1754,7 +1753,7 @@ class Home(WebRoot): myDB.mass_action(sql_l) if int(status) == WANTED and not showObj.paused: - msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br />" + msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br>" msg += '<ul>' for season, segment in segments.iteritems(): @@ -1773,7 +1772,7 @@ class Home(WebRoot): logger.log(u"Some episodes were set to wanted, but " + showObj.name + " is paused. Not adding to Backlog until show is unpaused") if int(status) == FAILED: - msg = "Retrying Search was automatically started for the following season of <b>" + showObj.name + "</b>:<br />" + msg = "Retrying Search was automatically started for the following season of <b>" + showObj.name + "</b>:<br>" msg += '<ul>' for season, segment in segments.iteritems(): @@ -1794,7 +1793,6 @@ class Home(WebRoot): else: return self.redirect("/home/displayShow?show=" + show) - def testRename(self, show=None): if show is None: @@ -1836,11 +1834,10 @@ class Home(WebRoot): t = PageTemplate(rh=self, filename="testRename.mako") submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-pencil'}] - return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename') - + return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename', + controller="home", action="previewRename") def doRename(self, show=None, eps=None): - if show is None or eps is None: errMsg = "You must specify a show and at least one episode" return self._genericMessage("Error", errMsg) @@ -1915,7 +1912,7 @@ class Home(WebRoot): showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(searchThread.show.indexerid)) if not showObj: - logger.log('No Show Object found for show with indexerID: ' + str(searchThread.show.indexerid), logger.ERROR) + logger.log(u'No Show Object found for show with indexerID: ' + str(searchThread.show.indexerid), logger.ERROR) return results if isinstance(searchThread, sickbeard.search_queue.ManualSearchQueueItem): @@ -2057,7 +2054,8 @@ class Home(WebRoot): show = int(show) indexer = int(indexer) forAbsolute = int(forAbsolute) - if sceneAbsolute is not None: sceneAbsolute = int(sceneAbsolute) + if sceneAbsolute is not None: + sceneAbsolute = int(sceneAbsolute) set_scene_numbering(show, indexer, absolute_number=forAbsolute, sceneAbsolute=sceneAbsolute) else: @@ -2068,8 +2066,10 @@ class Home(WebRoot): indexer = int(indexer) forSeason = int(forSeason) forEpisode = int(forEpisode) - if sceneSeason is not None: sceneSeason = int(sceneSeason) - if sceneEpisode is not None: sceneEpisode = int(sceneEpisode) + if sceneSeason is not None: + sceneSeason = int(sceneSeason) + if sceneEpisode is not None: + sceneEpisode = int(sceneEpisode) set_scene_numbering(show, indexer, season=forSeason, episode=forEpisode, sceneSeason=sceneSeason, sceneEpisode=sceneEpisode) @@ -2089,9 +2089,7 @@ class Home(WebRoot): return json.dumps(result) - def retryEpisode(self, show, season, episode, downCurQuality): - # retrieve the episode object and fail if we can't get one ep_obj = self._getEpisode(show, season, episode) if isinstance(ep_obj, str): @@ -2120,6 +2118,7 @@ class Home(WebRoot): return json.dumps({'result': 'failure'}) + @route('/IRC(/?.*)') class HomeIRC(Home): def __init__(self, *args, **kwargs): @@ -2128,7 +2127,8 @@ class HomeIRC(Home): def index(self): t = PageTemplate(rh=self, filename="IRC.mako") - return t.render(topmenu="system", header="IRC", title="IRC") + return t.render(topmenu="system", header="IRC", title="IRC", controller="IRC", action="index") + @route('/news(/?.*)') class HomeNews(Home): @@ -2140,7 +2140,7 @@ class HomeNews(Home): news = sickbeard.versionCheckScheduler.action.check_for_new_news(force=True) except Exception: logger.log(u'Could not load news from repo, giving a link!', logger.DEBUG) - news = 'Could not load news from the repo. [Click here for news.md]('+sickbeard.NEWS_URL+')' + news = 'Could not load news from the repo. [Click here for news.md](' + sickbeard.NEWS_URL + ')' sickbeard.NEWS_LAST_READ = sickbeard.NEWS_LATEST sickbeard.NEWS_UNREAD = 0 @@ -2149,7 +2149,7 @@ class HomeNews(Home): t = PageTemplate(rh=self, filename="markdown.mako") data = markdown2.markdown(news if news else "The was a problem connecting to github, please refresh and try again", extras=['header-ids']) - return t.render(title="News", header="News", topmenu="system", data=data) + return t.render(title="News", header="News", topmenu="system", data=data, controller="news", action="index") @route('/changes(/?.*)') @@ -2167,7 +2167,7 @@ class HomeChangeLog(Home): t = PageTemplate(rh=self, filename="markdown.mako") data = markdown2.markdown(changes if changes else "The was a problem connecting to github, please refresh and try again", extras=['header-ids']) - return t.render(title="Changelog", header="Changelog", topmenu="system", data=data) + return t.render(title="Changelog", header="Changelog", topmenu="system", data=data, controller="changes", action="index") @route('/home/postprocess(/?.*)') @@ -2177,10 +2177,10 @@ class HomePostProcess(Home): def index(self): t = PageTemplate(rh=self, filename="home_postprocess.mako") - return t.render(title='Post Processing', header='Post Processing', topmenu='home') + return t.render(title='Post Processing', header='Post Processing', topmenu='home', controller="postprocess", action="index") - def processEpisode(self, dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None, - is_priority=None, delete_on="0", failed="0", type="auto", *args, **kwargs): + def processEpisode(self, proc_dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None, + is_priority=None, delete_on="0", failed="0", proc_type="auto", *args, **kwargs): def argToBool(argument): if isinstance(argument, basestring): @@ -2195,18 +2195,20 @@ class HomePostProcess(Home): return argument - if not dir: + if not proc_dir: return self.redirect("/home/postprocess/") else: + nzbName = ss(nzbName) if nzbName else nzbName + result = processTV.processDir( - dir, nzbName, process_method=process_method, force=argToBool(force), - is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), type=type + ss(proc_dir), nzbName, process_method=process_method, force=argToBool(force), + is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), proc_type=proc_type ) if quiet is not None and int(quiet) == 1: return result - result = result.replace("\n", "<br />\n") + result = result.replace("\n", "<br>\n") return self._genericMessage("Postprocessing results", result) @@ -2217,7 +2219,7 @@ class HomeAddShows(Home): def index(self): t = PageTemplate(rh=self, filename="home_addShows.mako") - return t.render(title='Add Shows', header='Add Shows', topmenu='home') + return t.render(title='Add Shows', header='Add Shows', topmenu='home', controller="home", action="addShows") @staticmethod def getIndexerLanguages(): @@ -2246,7 +2248,7 @@ class HomeAddShows(Home): lINDEXER_API_PARMS['custom_ui'] = classes.AllShowsListUI t = sickbeard.indexerApi(indexer).indexer(**lINDEXER_API_PARMS) - logger.log("Searching for Show with searchterm: %s on Indexer: %s" % ( + logger.log(u"Searching for Show with searchterm: %s on Indexer: %s" % ( search_term, sickbeard.indexerApi(indexer).name), logger.DEBUG) try: # add search results @@ -2256,7 +2258,7 @@ class HomeAddShows(Home): for i, shows in results.iteritems(): final_results.extend([[sickbeard.indexerApi(i).name, i, sickbeard.indexerApi(i).config["show_url"], int(show['id']), - show['seriesname'], show['firstaired']] for show in shows]) + show['seriesname'], show['firstaired']] for show in shows]) # map(final_results.extend, # ([[sickbeard.indexerApi(id).name, id, sickbeard.indexerApi(id).config["show_url"], int(show['id']), @@ -2265,7 +2267,6 @@ class HomeAddShows(Home): lang_id = sickbeard.indexerApi().config['langabbv_to_id'][lang] return json.dumps({'results': final_results, 'langid': lang_id}) - def massAddTable(self, rootDir=None): t = PageTemplate(rh=self, filename="home_massAddTable.mako") @@ -2344,11 +2345,8 @@ class HomeAddShows(Home): if indexer_id and helpers.findCertainShow(sickbeard.showList, indexer_id): cur_dir['added_already'] = True - - return t.render(dirList=dir_list) - def newShow(self, show_to_add=None, other_shows=None, search_string=None): """ Display the new show page which collects a tvdb id, folder, and extra options and @@ -2402,7 +2400,7 @@ class HomeAddShows(Home): posts them to addNewShow """ t = PageTemplate(rh=self, filename="home_recommendedShows.mako") - return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False) + return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False, controller="home", action="addShows|recommendedShows") def getRecommendedShows(self): t = PageTemplate(rh=self, filename="trendingShows.mako") @@ -2423,8 +2421,7 @@ class HomeAddShows(Home): library_shows = trakt_api.traktRequest("sync/collection/shows?extended=full") or [] for show_detail in shows: - show = {} - show['show'] = show_detail + show = {'show': show_detail} try: if not helpers.findCertainShow(sickbeard.showList, [int(show['show']['ids']['tvdb'])]): if show['show']['ids']['tvdb'] not in (lshow['show']['ids']['tvdb'] for lshow in library_shows): @@ -2501,7 +2498,6 @@ class HomeAddShows(Home): return t.render(blacklist=blacklist, trending_shows=trending_shows) - def popularShows(self): """ Fetches data from IMDB to show a list of popular shows. @@ -2516,9 +2512,7 @@ class HomeAddShows(Home): return t.render(title="Popular Shows", header="Popular Shows", popular_shows=popular_shows, imdb_exception=e, topmenu="home") - def addShowToBlacklist(self, indexer_id): - # URL parameters data = {'shows': [{'ids': {'tvdb': indexer_id}}]} @@ -2615,7 +2609,7 @@ class HomeAddShows(Home): series_pieces = whichSeries.split('|') if (whichSeries and rootDir) or (whichSeries and fullShowPath and len(series_pieces) > 1): if len(series_pieces) < 6: - logger.log("Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)), + logger.log(u"Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)), logger.ERROR) ui.notifications.error("Unknown error. Unable to add show due to problem with show selection.") return self.redirect('/home/addShows/existingShows/') @@ -2653,7 +2647,7 @@ class HomeAddShows(Home): logger.log(u"Unable to create the folder " + show_dir + ", can't add the show", logger.ERROR) ui.notifications.error("Unable to add show", "Unable to create the folder " + show_dir + ", can't add the show") - #Dont redirect to default page because user wants to see the new show + # Don't redirect to default page because user wants to see the new show return self.redirect("/home/") else: helpers.chmodAsParent(show_dir) @@ -2691,26 +2685,24 @@ class HomeAddShows(Home): @staticmethod def split_extra_show(extra_show): if not extra_show: - return (None, None, None, None) + return None, None, None, None split_vals = extra_show.split('|') if len(split_vals) < 4: indexer = split_vals[0] show_dir = split_vals[1] - return (indexer, show_dir, None, None) + return indexer, show_dir, None, None indexer = split_vals[0] show_dir = split_vals[1] indexer_id = split_vals[2] show_name = '|'.join(split_vals[3:]) - return (indexer, show_dir, indexer_id, show_name) - + return indexer, show_dir, indexer_id, show_name def addExistingShows(self, shows_to_add=None, promptForSettings=None): """ Receives a dir list and add them. Adds the ones with given TVDB IDs first, then forwards along to the newShow page. """ - # grab a list of other shows to add, if provided if not shows_to_add: shows_to_add = [] @@ -2729,7 +2721,7 @@ class HomeAddShows(Home): split_vals = cur_dir.split('|') if len(split_vals) < 3: dirs_only.append(cur_dir) - if not '|' in cur_dir: + if '|' not in cur_dir: dirs_only.append(cur_dir) else: indexer, show_dir, indexer_id, show_name = self.split_extra_show(cur_dir) @@ -2739,7 +2731,6 @@ class HomeAddShows(Home): indexer_id_given.append((int(indexer), show_dir, int(indexer_id), show_name)) - # if they want me to prompt for settings then I will just carry on to the newShow page if promptForSettings and shows_to_add: return self.newShow(shows_to_add[0], shows_to_add[1:]) @@ -2779,10 +2770,9 @@ class Manage(Home, WebRoot): def __init__(self, *args, **kwargs): super(Manage, self).__init__(*args, **kwargs) - def index(self): t = PageTemplate(rh=self, filename="manage.mako") - return t.render(title='Mass Update', header='Mass Update', topmenu='manage') + return t.render(title='Mass Update', header='Mass Update', topmenu='manage', controller="manage", action="index") @staticmethod def showEpisodeStatuses(indexer_id, whichStatus): @@ -2807,7 +2797,6 @@ class Manage(Home, WebRoot): return json.dumps(result) - def episodeStatuses(self, whichStatus=None): if whichStatus: status_list = [int(whichStatus)] @@ -2822,7 +2811,7 @@ class Manage(Home, WebRoot): if not status_list: return t.render( title="Episode Overview", header="Episode Overview", - topmenu="manage", whichStatus=whichStatus) + topmenu="manage", whichStatus=whichStatus, controller="manage", action="episodeStatuses") myDB = db.DBConnection() status_results = myDB.select( @@ -2848,11 +2837,10 @@ class Manage(Home, WebRoot): return t.render( title="Episode Overview", header="Episode Overview", topmenu='manage', whichStatus=whichStatus, - show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids) - + show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids, + controller="manage", action="episodeStatuses") def changeEpisodeStatuses(self, oldStatus, newStatus, *args, **kwargs): - status_list = [int(oldStatus)] if status_list[0] == SNATCHED: status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER @@ -2918,13 +2906,12 @@ class Manage(Home, WebRoot): return json.dumps(result) - def subtitleMissed(self, whichSubs=None): - t = PageTemplate(rh=self, filename="manage_subtitleMissed.mako") if not whichSubs: - return t.render(whichSubs=whichSubs, title='Episode Overview', header='Episode Overview', topmenu='manage') + return t.render(whichSubs=whichSubs, title='Episode Overview', header='Episode Overview', topmenu='manage', + controller="manage", action="subtitleMissed") myDB = db.DBConnection() status_results = myDB.select( @@ -2954,11 +2941,10 @@ class Manage(Home, WebRoot): sorted_show_ids.append(cur_indexer_id) return t.render(whichSubs=whichSubs, show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids, - title='Missing Subtitles', header='Missing Subtitles', topmenu='manage') - + title='Missing Subtitles', header='Missing Subtitles', topmenu='manage', + controller="manage", action="subtitleMissed") def downloadSubtitleMissed(self, *args, **kwargs): - to_download = {} # make a list of all shows and their associated args @@ -2991,9 +2977,7 @@ class Manage(Home, WebRoot): return self.redirect('/manage/subtitleMissed/') - def backlogShow(self, indexer_id): - show_obj = helpers.findCertainShow(sickbeard.showList, int(indexer_id)) if show_obj: @@ -3001,9 +2985,7 @@ class Manage(Home, WebRoot): return self.redirect("/manage/backlogOverview/") - def backlogOverview(self): - t = PageTemplate(rh=self, filename="manage_backlogOverview.mako") showCounts = {} @@ -3039,9 +3021,7 @@ class Manage(Home, WebRoot): return t.render(showCounts=showCounts, showCats=showCats, showSQLResults=showSQLResults, title='Backlog Overview', header='Backlog Overview', topmenu='manage') - def massEdit(self, toEdit=None): - t = PageTemplate(rh=self, filename="manage_massEdit.mako") if not toEdit: @@ -3176,12 +3156,10 @@ class Manage(Home, WebRoot): quality_value=quality_value, subtitles_value=subtitles_value, scene_value=scene_value, sports_value=sports_value, air_by_date_value=air_by_date_value, root_dir_list=root_dir_list, title='Mass Edit', header='Mass Edit', topmenu='manage') - def massEditSubmit(self, archive_firstmatch=None, paused=None, default_ep_status=None, anime=None, sports=None, scene=None, flatten_folders=None, quality_preset=None, subtitles=None, air_by_date=None, anyQualities=[], bestQualities=[], toEdit=None, *args, **kwargs): - dir_map = {} for cur_arg in kwargs: if not cur_arg.startswith('orig_root_dir_'): @@ -3289,10 +3267,8 @@ class Manage(Home, WebRoot): return self.redirect("/manage/") - def massUpdate(self, toUpdate=None, toRefresh=None, toRename=None, toDelete=None, toRemove=None, toMetadata=None, toSubtitle=None): - if toUpdate is not None: toUpdate = toUpdate.split('|') else: @@ -3384,22 +3360,22 @@ class Manage(Home, WebRoot): messageDetail = "" if updates: - messageDetail += "<br /><b>Updates</b><br /><ul><li>" + messageDetail += "<br><b>Updates</b><br><ul><li>" messageDetail += "</li><li>".join(updates) messageDetail += "</li></ul>" if refreshes: - messageDetail += "<br /><b>Refreshes</b><br /><ul><li>" + messageDetail += "<br><b>Refreshes</b><br><ul><li>" messageDetail += "</li><li>".join(refreshes) messageDetail += "</li></ul>" if renames: - messageDetail += "<br /><b>Renames</b><br /><ul><li>" + messageDetail += "<br><b>Renames</b><br><ul><li>" messageDetail += "</li><li>".join(renames) messageDetail += "</li></ul>" if subtitles: - messageDetail += "<br /><b>Subtitles</b><br /><ul><li>" + messageDetail += "<br><b>Subtitles</b><br><ul><li>" messageDetail += "</li><li>".join(subtitles) messageDetail += "</li></ul>" @@ -3409,9 +3385,7 @@ class Manage(Home, WebRoot): return self.redirect("/manage/") - def manageTorrents(self): - t = PageTemplate(rh=self, filename="manage_torrents.mako") info_download_station = '' @@ -3428,9 +3402,9 @@ class Manage(Home, WebRoot): webui_url = '/'.join(s.strip('/') for s in (webui_url, 'gui/')) if sickbeard.TORRENT_METHOD == 'download_station': if helpers.check_url(webui_url + 'download/'): - webui_url = webui_url + 'download/' + webui_url += 'download/' else: - info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br/><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br/>' + info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br>' if not sickbeard.TORRENT_PASSWORD == "" and not sickbeard.TORRENT_USERNAME == "": webui_url = re.sub('://', '://' + str(sickbeard.TORRENT_USERNAME) + ':' + str(sickbeard.TORRENT_PASSWORD) + '@', webui_url) @@ -3439,9 +3413,7 @@ class Manage(Home, WebRoot): webui_url=webui_url, info_download_station=info_download_station, title='Manage Torrents', header='Manage Torrents', topmenu='manage') - def failedDownloads(self, limit=100, toRemove=None): - myDB = db.DBConnection('failed.db') if limit == "0": @@ -3495,9 +3467,7 @@ class ManageSearches(Manage): return self.redirect("/manage/manageSearches/") - def forceFindPropers(self): - # force it to run the next time it looks result = sickbeard.properFinderScheduler.forceRun() if result: @@ -3506,7 +3476,6 @@ class ManageSearches(Manage): return self.redirect("/manage/manageSearches/") - def pauseBacklog(self, paused=None): if paused == "1": sickbeard.searchQueueScheduler.action.pause_backlog() @@ -3575,8 +3544,8 @@ class History(WebRoot): t = PageTemplate(rh=self, filename="history.mako") submenu = [ - {'title': 'Clear History', 'path': 'history/clearHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'clearhistory', 'confirm':True}, - {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm':True}, + {'title': 'Clear History', 'path': 'history/clearHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'clearhistory', 'confirm': True}, + {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm': True}, ] return t.render(historyResults=data, compactResults=compact, limit=limit, submenu=submenu, title='History', header='History', topmenu="history") @@ -3630,7 +3599,8 @@ class ConfigGeneral(Config): def index(self): t = PageTemplate(rh=self, filename="config_general.mako") - return t.render(title='Config - General', header='General Configuration', topmenu='config', submenu=self.ConfigMenu()) + return t.render(title='Config - General', header='General Configuration', topmenu='config', submenu=self.ConfigMenu(), + controller="config", action="index") @staticmethod def generateApiKey(): @@ -3708,8 +3678,8 @@ class ConfigGeneral(Config): sickbeard.PROXY_INDEXERS = config.checkbox_to_value(proxy_indexers) sickbeard.GIT_USERNAME = git_username sickbeard.GIT_PASSWORD = git_password - #sickbeard.GIT_RESET = config.checkbox_to_value(git_reset) - #Force GIT_RESET + # sickbeard.GIT_RESET = config.checkbox_to_value(git_reset) + # Force GIT_RESET sickbeard.GIT_RESET = 1 sickbeard.GIT_AUTOISSUES = config.checkbox_to_value(git_autoissues) sickbeard.GIT_PATH = git_path @@ -3739,7 +3709,6 @@ class ConfigGeneral(Config): if date_preset: sickbeard.DATE_PRESET = date_preset - discarded_na_data = date_preset_na if indexer_default: sickbeard.INDEXER_DEFAULT = config.to_int(indexer_default) @@ -3753,7 +3722,6 @@ class ConfigGeneral(Config): sickbeard.TIMEZONE_DISPLAY = timezone_display - if not config.change_LOG_DIR(log_dir, web_log): results += ["Unable to create directory " + os.path.normpath(log_dir) + ", log directory not changed."] @@ -3781,7 +3749,7 @@ class ConfigGeneral(Config): for x in results: logger.log(x, logger.ERROR) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -3796,7 +3764,8 @@ class ConfigBackupRestore(Config): def index(self): t = PageTemplate(rh=self, filename="config_backuprestore.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Backup/Restore', header='Backup/Restore', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Backup/Restore', header='Backup/Restore', topmenu='config', + controller="config", action="backupRestore") @staticmethod def backup(backupDir=None): @@ -3804,9 +3773,9 @@ class ConfigBackupRestore(Config): finalResult = '' if backupDir: - source = [os.path.join(sickbeard.DATA_DIR, 'sickbeard.db'), sickbeard.CONFIG_FILE] - source.append(os.path.join(sickbeard.DATA_DIR, 'failed.db')) - source.append(os.path.join(sickbeard.DATA_DIR, 'cache.db')) + source = [os.path.join(sickbeard.DATA_DIR, 'sickbeard.db'), sickbeard.CONFIG_FILE, + os.path.join(sickbeard.DATA_DIR, 'failed.db'), + os.path.join(sickbeard.DATA_DIR, 'cache.db')] target = os.path.join(backupDir, 'sickrage-' + time.strftime('%Y%m%d%H%M%S') + '.zip') for (path, dirs, files) in os.walk(sickbeard.CACHE_DIR, topdown=True): @@ -3823,7 +3792,7 @@ class ConfigBackupRestore(Config): else: finalResult += "You need to choose a folder to save your backup to!" - finalResult += "<br />\n" + finalResult += "<br>\n" return finalResult @@ -3844,7 +3813,7 @@ class ConfigBackupRestore(Config): else: finalResult += "You need to select a backup file to restore!" - finalResult += "<br />\n" + finalResult += "<br>\n" return finalResult @@ -3857,7 +3826,8 @@ class ConfigSearch(Config): def index(self): t = PageTemplate(rh=self, filename="config_search.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Episode Search', header='Search Settings', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Episode Search', header='Search Settings', topmenu='config', + controller="config", action="search") def saveSearch(self, use_nzbs=None, use_torrents=None, nzb_dir=None, sab_username=None, sab_password=None, sab_apikey=None, sab_category=None, sab_category_anime=None, sab_category_backlog=None, sab_category_anime_backlog=None, sab_host=None, nzbget_username=None, @@ -3944,7 +3914,7 @@ class ConfigSearch(Config): for x in results: logger.log(x, logger.ERROR) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -3959,7 +3929,8 @@ class ConfigPostProcessing(Config): def index(self): t = PageTemplate(rh=self, filename="config_postProcessing.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Post Processing', header='Post Processing', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Post Processing', header='Post Processing', topmenu='config', + controller="config", action="postProcessing") def savePostProcessing(self, naming_pattern=None, naming_multi_ep=None, kodi_data=None, kodi_12plus_data=None, @@ -4071,7 +4042,7 @@ class ConfigPostProcessing(Config): for x in results: logger.log(x, logger.WARNING) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -4154,7 +4125,8 @@ class ConfigProviders(Config): def index(self): t = PageTemplate(rh=self, filename="config_providers.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Providers', header='Search Providers', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Providers', header='Search Providers', topmenu='config', + controller="config", action="providers") @staticmethod def canAddNewznabProvider(name): @@ -4200,11 +4172,11 @@ class ConfigProviders(Config): @staticmethod def getNewznabCategories(name, url, key): - ''' + """ Retrieves a list of possible categories with category id's Using the default url/api?cat http://yournewznaburl.com/api?t=caps&apikey=yourapikey - ''' + """ error = "" success = False @@ -4215,7 +4187,7 @@ class ConfigProviders(Config): if not key: error += "\nNo Provider Api key specified" - if error <> "": + if error != "": return json.dumps({'success': False, 'error': error}) # Get list with Newznabproviders @@ -4302,9 +4274,7 @@ class ConfigProviders(Config): return '1' - def saveProviders(self, newznab_string='', torrentrss_string='', provider_order=None, **kwargs): - results = [] provider_str_list = provider_order.split() @@ -4527,19 +4497,6 @@ class ConfigProviders(Config): except Exception: curTorrentProvider.sorting = 'seeders' - if hasattr(curTorrentProvider, 'proxy'): - try: - curTorrentProvider.proxy.enabled = config.checkbox_to_value( - kwargs[curTorrentProvider.getID() + '_proxy']) - except Exception: - curTorrentProvider.proxy.enabled = 0 - - if hasattr(curTorrentProvider.proxy, 'url'): - try: - curTorrentProvider.proxy.url = str(kwargs[curTorrentProvider.getID() + '_proxy_url']).strip() - except Exception: - curTorrentProvider.proxy.url = None - if hasattr(curTorrentProvider, 'freeleech'): try: curTorrentProvider.freeleech = config.checkbox_to_value( @@ -4638,7 +4595,7 @@ class ConfigProviders(Config): for x in results: logger.log(x, logger.ERROR) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -4653,7 +4610,8 @@ class ConfigNotifications(Config): def index(self): t = PageTemplate(rh=self, filename="config_notifications.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Notifications', header='Notifications', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Notifications', header='Notifications', topmenu='config', + controller="config", action="notifications") def saveNotifications(self, use_kodi=None, kodi_always_on=None, kodi_notify_onsnatch=None, kodi_notify_ondownload=None, @@ -4870,7 +4828,7 @@ class ConfigNotifications(Config): for x in results: logger.log(x, logger.ERROR) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -4885,7 +4843,8 @@ class ConfigSubtitles(Config): def index(self): t = PageTemplate(rh=self, filename="config_subtitles.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Subtitles', header='Subtitles', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Subtitles', header='Subtitles', topmenu='config', + controller="config", action="subtitles") def saveSubtitles(self, use_subtitles=None, subtitles_plugins=None, subtitles_languages=None, subtitles_dir=None, service_order=None, subtitles_history=None, subtitles_finder_frequency=None, @@ -4930,7 +4889,7 @@ class ConfigSubtitles(Config): for x in results: logger.log(x, logger.ERROR) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -4946,7 +4905,8 @@ class ConfigAnime(Config): t = PageTemplate(rh=self, filename="config_anime.mako") - return t.render(submenu=self.ConfigMenu(), title='Config - Anime', header='Anime', topmenu='config') + return t.render(submenu=self.ConfigMenu(), title='Config - Anime', header='Anime', topmenu='config', + controller="config", action="anime") def saveAnime(self, use_anidb=None, anidb_username=None, anidb_password=None, anidb_use_mylist=None, split_home=None): @@ -4965,7 +4925,7 @@ class ConfigAnime(Config): for x in results: logger.log(x, logger.ERROR) ui.notifications.error('Error(s) Saving Configuration', - '<br />\n'.join(results)) + '<br>\n'.join(results)) else: ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE)) @@ -4980,8 +4940,8 @@ class ErrorLogs(WebRoot): def ErrorLogsMenu(self, level): menu = [ {'title': 'Clear Errors', 'path': 'errorlogs/clearerrors/', 'requires': self.haveErrors() and level == logger.ERROR, 'icon': 'ui-icon ui-icon-trash'}, - {'title': 'Clear Warnings', 'path': 'errorlogs/clearerrors/?level='+str(logger.WARNING), 'requires': self.haveWarnings() and level == logger.WARNING, 'icon': 'ui-icon ui-icon-trash'}, - {'title': 'Submit Errors', 'path': 'errorlogs/submit_errors/', 'requires': self.haveErrors() and level == logger.ERROR, 'class':'sumbiterrors', 'confirm': True, 'icon': 'ui-icon ui-icon-arrowreturnthick-1-n'}, + {'title': 'Clear Warnings', 'path': 'errorlogs/clearerrors/?level=' + str(logger.WARNING), 'requires': self.haveWarnings() and level == logger.WARNING, 'icon': 'ui-icon ui-icon-trash'}, + {'title': 'Submit Errors', 'path': 'errorlogs/submit_errors/', 'requires': self.haveErrors() and level == logger.ERROR, 'class': 'sumbiterrors', 'confirm': True, 'icon': 'ui-icon ui-icon-arrowreturnthick-1-n'}, ] return menu @@ -4993,7 +4953,8 @@ class ErrorLogs(WebRoot): level = logger.ERROR t = PageTemplate(rh=self, filename="errorlogs.mako") - return t.render(header="Logs & Errors", title="Logs & Errors", topmenu="system", submenu=self.ErrorLogsMenu(level), logLevel=level) + return t.render(header="Logs & Errors", title="Logs & Errors", topmenu="system", submenu=self.ErrorLogsMenu(level), logLevel=level, + controller="errorlogs", action="index") @staticmethod def haveErrors(): @@ -5024,7 +4985,6 @@ class ErrorLogs(WebRoot): finalData = [] for x in reversed(data_in): - x = ss(x) match = re.match(regex, x) if match: @@ -5052,8 +5012,6 @@ class ErrorLogs(WebRoot): finalData.append("AA" + x) numLines += 1 - - if numLines >= numToShow: return finalData @@ -5090,17 +5048,17 @@ class ErrorLogs(WebRoot): data = [] if os.path.isfile(logger.logFile): - with ek(codecs.open, *[logger.logFile, 'r', 'utf-8']) as f: + with io.open(logger.logFile, 'r', encoding='utf-8') as f: data = Get_Data(minLevel, f.readlines(), 0, regex, logFilter, logSearch, maxLines) for i in range(1, int(sickbeard.LOG_NR)): if os.path.isfile(logger.logFile + "." + str(i)) and (len(data) <= maxLines): - with ek(codecs.open, *[logger.logFile + "." + str(i), 'r', 'utf-8']) as f: + with io.open(logger.logFile + "." + str(i), 'r', encoding='utf-8') as f: data += Get_Data(minLevel, f.readlines(), len(data), regex, logFilter, logSearch, maxLines) return t.render( header="Log File", title="Logs", topmenu="system", - logLines="".join(data), minLevel=minLevel, logNameFilters=logNameFilters, + logLines=u"".join(data), minLevel=minLevel, logNameFilters=logNameFilters, logFilter=logFilter, logSearch=logSearch) def submit_errors(self): diff --git a/tests/common_tests.py b/tests/common_tests.py index 024652ab38293e98ca436ac168bc34288ef8d9d2..1ba62d02d5e958dccf085fc0b2065aed7782fc1b 100644 --- a/tests/common_tests.py +++ b/tests/common_tests.py @@ -1,104 +1,254 @@ +# coding=utf-8 + +""" +Unit Tests for sickbeard/common.py +""" + import sys import os.path +import unittest sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -import unittest - from sickbeard import common + class QualityTests(unittest.TestCase): + """ + Test Case for common.Quality + """ # TODO: repack / proper ? air-by-date ? season rip? multi-ep? def test_SDTV(self): - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.PDTV.XViD-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.PDTV.x264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.HDTV.XViD-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.HDTV.x264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.DSR.XViD-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.DSR.x264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.TVRip.XViD-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.TVRip.x264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.XViD-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.x264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.x264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02 WEB-DL H 264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02_WEB-DL_H_264-GROUP")) - self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP")) + """ + Test SDTV against nameQuality + """ + tests = [ + "Test.Show.S01E02.PDTV.XViD-GROUP", + "Test.Show.S01E02.PDTV.x264-GROUP", + "Test.Show.S01E02.HDTV.XViD-GROUP", + "Test.Show.S01E02.HDTV.x264-GROUP", + "Test.Show.S01E02.DSR.XViD-GROUP", + "Test.Show.S01E02.DSR.x264-GROUP", + "Test.Show.S01E02.TVRip.XViD-GROUP", + "Test.Show.S01E02.TVRip.x264-GROUP", + "Test.Show.S01E02.WEBRip.XViD-GROUP", + "Test.Show.S01E02.WEBRip.x264-GROUP", + "Test.Show.S01E02.WEB-DL.x264-GROUP", + "Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP", + "Test.Show.S01E02 WEB-DL H 264-GROUP", + "Test.Show.S01E02_WEB-DL_H_264-GROUP", + "Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality(test)) def test_SDDVD(self): - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.XViD-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.DiVX-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.x264-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.XViD-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.DiVX-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.x264-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.XViD-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.DiVX-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.x264-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.XViD-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.DiVX-GROUP")) - self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.x264-GROUP")) + """ + Test SDDVD against nameQuality + """ + tests = [ + "Test.Show.S01E02.DVDRiP.XViD-GROUP", + "Test.Show.S01E02.DVDRiP.DiVX-GROUP", + "Test.Show.S01E02.DVDRiP.x264-GROUP", + "Test.Show.S01E02.DVDRip.WS.XViD-GROUP", + "Test.Show.S01E02.DVDRip.WS.DiVX-GROUP", + "Test.Show.S01E02.DVDRip.WS.x264-GROUP", + "Test.Show.S01E02.BDRIP.XViD-GROUP", + "Test.Show.S01E02.BDRIP.DiVX-GROUP", + "Test.Show.S01E02.BDRIP.x264-GROUP", + "Test.Show.S01E02.BDRIP.WS.XViD-GROUP", + "Test.Show.S01E02.BDRIP.WS.DiVX-GROUP", + "Test.Show.S01E02.BDRIP.WS.x264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality(test)) def test_HDTV(self): - self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test.Show.S01E02.720p.HDTV.x264-GROUP")) - self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test.Show.S01E02.HR.WS.PDTV.x264-GROUP")) + """ + Test HDTV against nameQuality + """ + tests = [ + "Test.Show.S01E02.720p.HDTV.x264-GROUP", + "Test.Show.S01E02.HR.WS.PDTV.x264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality(test)) def test_RAWHDTV(self): - self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP")) - self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP")) - self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP")) - self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP")) - self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP")) + """ + Test RAWHDTV against nameQuality + """ + tests = [ + "Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP", + "Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP", + "Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP", + "Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP", + "Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality(test)) def test_FULLHDTV(self): - self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080p.HDTV.x264-GROUP")) + """ + Test FULLHDTV against nameQuality + """ + tests = [ + "Test.Show.S01E02.1080p.HDTV.x264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality(test)) def test_HDWEBDL(self): - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEBRip-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP")) - self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP")) + """ + Test HDWEBDL against nameQuality + """ + tests = [ + "Test.Show.S01E02.720p.WEB-DL-GROUP", + "Test.Show.S01E02.720p.WEBRip-GROUP", + "Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP", + "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP", + "Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP", + "Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP", + "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP", + "Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality(test)) def test_FULLHDWEBDL(self): - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.WEB-DL-GROUP")) - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.WEBRip-GROUP")) - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP")) - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP")) - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP")) - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test Show S01E02 1080p iTunes H 264 AAC-GROUP")) - self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP")) + """ + Test FULLHDWEBDL against nameQuality + """ + tests = [ + "Test.Show.S01E02.1080p.WEB-DL-GROUP", + "Test.Show.S01E02.1080p.WEBRip-GROUP", + "Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP", + "Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP", + "Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP", + "Test Show S01E02 1080p iTunes H 264 AAC-GROUP", + "Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality(test)) def test_HDBLURAY(self): - self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.720p.BluRay.x264-GROUP")) - self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.720p.HDDVD.x264-GROUP")) + """ + Test HDBLURAY against nameQuality + """ + tests = [ + "Test.Show.S01E02.720p.BluRay.x264-GROUP", + "Test.Show.S01E02.720p.HDDVD.x264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality(test)) def test_FULLHDBLURAY(self): - self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.1080p.BluRay.x264-GROUP")) - self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.1080p.HDDVD.x264-GROUP")) + """ + Test FULLHDBLURAY against nameQuality + """ + tests = [ + "Test.Show.S01E02.1080p.BluRay.x264-GROUP", + "Test.Show.S01E02.1080p.HDDVD.x264-GROUP", + ] + for test in tests: + self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality(test)) def test_UNKNOWN(self): - self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test.Show.S01E02-SiCKBEARD")) - -# def test_reverse_parsing(self): -# self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test Show - S01E02 - SDTV - GROUP")) -# self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test Show - S01E02 - SD DVD - GROUP")) -# self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test Show - S01E02 - HDTV - GROUP")) -# self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test Show - S01E02 - RawHD - GROUP")) -# self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality("Test Show - S01E02 - 1080p HDTV - GROUP")) -# self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test Show - S01E02 - 720p WEB-DL - GROUP")) -# self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test Show - S01E02 - 1080p WEB-DL - GROUP")) -# self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 720p BluRay - GROUP")) -# self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 1080p BluRay - GROUP")) -# self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test Show - S01E02 - Unknown - SiCKBEARD")) + """ + Test UNKNOWN against nameQuality + """ + tests = [ + "Test.Show.S01E02-SiCKBEARD", + ] + for test in tests: + self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality(test)) + + @unittest.expectedFailure + # reverse parsing does not work + def test_reverse_parsing(self): + """ + Test reverse parsing for all qualities + """ + tests = [ + (common.Quality.SDTV, "Test Show - S01E02 - SDTV - GROUP"), + (common.Quality.SDDVD, "Test Show - S01E02 - SD DVD - GROUP"), + (common.Quality.HDTV, "Test Show - S01E02 - HDTV - GROUP"), + (common.Quality.RAWHDTV, "Test Show - S01E02 - RawHD - GROUP"), + (common.Quality.FULLHDTV, "Test Show - S01E02 - 1080p HDTV - GROUP"), + (common.Quality.HDWEBDL, "Test Show - S01E02 - 720p WEB-DL - GROUP"), + (common.Quality.FULLHDWEBDL, "Test Show - S01E02 - 1080p WEB-DL - GROUP"), + (common.Quality.HDBLURAY, "Test Show - S01E02 - 720p BluRay - GROUP"), + (common.Quality.FULLHDBLURAY, "Test Show - S01E02 - 1080p BluRay - GROUP"), + (common.Quality.UNKNOWN, "Test Show - S01E02 - Unknown - SiCKBEARD"), + ] + for test in tests: + quality, test = test + self.assertEqual(quality, common.Quality.nameQuality(test), + (quality, common.Quality.nameQuality(test), test)) + + +class StatusStringsTest(unittest.TestCase): + """ + Test Case for common.StatusStrings + """ + # TODO: Split tests into separate tests and add additional tests + + # Until .has_key() is removed from SickRage, we will test that it still works as expected + # pylint disable:W0402 + # Use of a deprecated module + def test_all(self): + """ + Run all status strings tests + """ + status_strings = common.statusStrings + + valid = 1, 112, '1', '112' + unused = 122, 99998989899878676, '99998989899878676', None + invalid = 'Elephant', (4, 1), [1, 233, 4, None] + + for i in valid: + self.assertTrue(i in status_strings) + + for i in unused: + self.assertFalse(i in status_strings) + with self.assertRaises(KeyError): + self.assertTrue(status_strings[i]) + + for i in status_strings: + self.assertEqual(status_strings[i], status_strings[str(i)]) + self.assertEqual(i in status_strings, str(i) in status_strings) + self.assertEqual(status_strings.has_key(i), status_strings.has_key(str(i))) + self.assertEqual(i in status_strings, status_strings.has_key(i)) + + for i in status_strings.qualities: + self.assertEqual(status_strings[i], status_strings[str(i)]) + self.assertEqual(i in status_strings, str(i) in status_strings) + self.assertEqual(status_strings.has_key(i), status_strings.has_key(str(i))) + self.assertEqual(i in status_strings, status_strings.has_key(i)) + + for i in invalid: + with self.assertRaises(TypeError): + status_strings[i] = 1 + + for i in unused: + if i is None: + with self.assertRaises(TypeError): + status_strings[str(i)] = 1 # 'None' != None + status_strings[i] = 1 # ...but None can still be used as a key + else: + status_strings[str(i)] = 1 + self.assertEqual(status_strings[i], 1) if __name__ == '__main__': + print "=======================" + print "STARTING - COMMON TESTS" + print "=======================" + suite = unittest.TestLoader().loadTestsFromTestCase(QualityTests) unittest.TextTestRunner(verbosity=2).run(suite) + + suite = unittest.TestLoader().loadTestsFromTestCase(StatusStringsTest) + unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/tests/exceptions_helper_tests.py b/tests/exceptions_helper_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..a1d4e4d29ff9030b41ea5968535de6c0ded513f7 --- /dev/null +++ b/tests/exceptions_helper_tests.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +import sys, os.path +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +import unittest + +import test_lib as test +from sickrage.helper.exceptions import ex + +class ExceptionsHelperTestCase(unittest.TestCase): + + def test_none_returns_empty(self): + self.assertEqual(ex(None), u'') + + def test_empty_args_returns_empty(self): + self.assertEqual(ex(Exception()), u'') + + def test_args_of_none_returns_empty(self): + self.assertEqual(ex(Exception(None, None)), u'') + + def test_Exception_returns_args_string(self): + self.assertEqual(ex(Exception('hi')), 'hi') + +# TODO why doesn't this work? +# def test_Exception_returns_args_ustring(self): +# self.assertEqual(ex(Exception('\xc3\xa4h')), u'äh') + + def test_Exception_returns_concatenated_args_strings(self): + self.assertEqual(ex(Exception('lots', 'of', 'strings')), 'lots : of : strings') + + def test_Exception_returns_stringified_args(self): + self.assertEqual(ex(Exception(303)), 'error 303') + +if __name__ == '__main__': + if len(sys.argv) > 1: + suite = unittest.TestLoader().loadTestsFromName('exceptions_helper_tests.ExceptionsHelperTestCase.test_' + sys.argv[1]) + unittest.TextTestRunner(verbosity=2).run(suite) + else: + suite = unittest.TestLoader().loadTestsFromTestCase(ExceptionsHelperTestCase) + unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/tests/feedparser_tests.py b/tests/feedparser_tests.py index 61603bbd525f6e43a572a44fb748704d907733c2..5ef68544a27c83fafc8a4ee19876544a94092613 100644 --- a/tests/feedparser_tests.py +++ b/tests/feedparser_tests.py @@ -4,18 +4,18 @@ sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../l sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import unittest -import test_lib as test -from sickbeard.rssfeeds import RSSFeeds -from sickbeard.tvcache import TVCache +from sickbeard.providers.womble import provider as womble + class FeedParserTests(unittest.TestCase): + # pylint: disable=W0212 def test_womble(self): - RSSFeeds().clearCache() - result = RSSFeeds().getFeed('https://newshost.co.za/rss/?sec=tv-sd&fr=false') + result = womble.cache.getRSSFeed('http://newshost.co.za/rss/?sec=tv-sd&fr=false') self.assertTrue('entries' in result) self.assertTrue('feed' in result) - for item in result['entries']: - self.assertTrue(TVCache._parseItem(item)) + for item in result['entries'] or []: + title, url = womble._get_title_and_url(item) + self.assertTrue(title and url) if __name__ == "__main__": print "==================" diff --git a/tests/helpers_tests.py b/tests/helpers_tests.py new file mode 100755 index 0000000000000000000000000000000000000000..f51b3896c3ff196b6ca7e35ed4a53ede28e6d7a2 --- /dev/null +++ b/tests/helpers_tests.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python2.7 +""" +Author: Dustyn Gibson <miigotu@gmail.com> +URL: http://github.com/SiCKRAGETV/SickRage + +This file is part of SickRage. + +SickRage is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +SickRage is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with SickRage. If not, see <http://www.gnu.org/licenses/>. +""" + +import sys +import os.path + +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +import unittest + +from sickbeard.helpers import remove_non_release_groups + +test_result = 'Show.Name.S01E01.HDTV.x264-RLSGROUP' +test_cases = { + 'removewords': [ + test_result, + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[cttv]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP.RiPSaLoT', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[GloDLS]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[EtHD]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP-20-40', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[NO-RAR] - [ www.torrentday.com ]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[rarbg]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[Seedbox]', + '{ www.SceneTime.com } - Show.Name.S01E01.HDTV.x264-RLSGROUP', + '].[www.tensiontorrent.com] - Show.Name.S01E01.HDTV.x264-RLSGROUP', + '[ www.TorrentDay.com ] - Show.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[silv4]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[AndroidTwoU]', + '[www.newpct1.com]Show.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP-NZBGEEK', + '.www.Cpasbien.pwShow.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP [1044]', + '[ www.Cpasbien.pw ] Show.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP.[BT]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[vtv]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP.[www.usabit.com]', + '[www.Cpasbien.com] Show.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[ettv]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[rartv]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP-Siklopentan', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP-RP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[PublicHD]', + '[www.Cpasbien.pe] Show.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP[eztv]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP-[SpastikusTV]', + '].[ www.tensiontorrent.com ] - Show.Name.S01E01.HDTV.x264-RLSGROUP', + '[ www.Cpasbien.com ] Show.Name.S01E01.HDTV.x264-RLSGROUP', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP- { www.SceneTime.com }', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP- [ www.torrentday.com ]', + 'Show.Name.S01E01.HDTV.x264-RLSGROUP.Renc' + ] +} + +class HelpersTests(unittest.TestCase): + def __init__(self, *args, **kwargs): + super(HelpersTests, self).__init__(*args, **kwargs) + +def test_generator(test_strings): + def _test(self): + for test_string in test_strings: + self.assertEqual(remove_non_release_groups(test_string), test_result) + return _test + +if __name__ == '__main__': + print "==================" + print "STARTING - Helpers TESTS" + print "==================" + print "######################################################################" + for name, test_data in test_cases.items(): + test_name = 'test_%s' % name + test = test_generator(test_data) + setattr(HelpersTests, test_name, test) + + suite = unittest.TestLoader().loadTestsFromTestCase(HelpersTests) + unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/tests/issue_submitter_tests.py b/tests/issue_submitter_tests.py index cd318f404b8fadfe79c8f33ea254222345cfbf17..ea8a7a495d1ba05bfdb6dd435442a4216014ffbe 100644 --- a/tests/issue_submitter_tests.py +++ b/tests/issue_submitter_tests.py @@ -17,7 +17,6 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -from __future__ import with_statement import sys, os.path @@ -33,7 +32,7 @@ def error(): try: raise Exception('FAKE EXCEPTION') except Exception as e: - logger.log("FAKE ERROR: " + ex(e), logger.ERROR) + logger.log(u"FAKE ERROR: " + ex(e), logger.ERROR) logger.submit_errors() raise diff --git a/tests/numdict_tests.py b/tests/numdict_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..f2ed80c7b0cbf148fc2012676761a43b036208e2 --- /dev/null +++ b/tests/numdict_tests.py @@ -0,0 +1,499 @@ +# coding=utf-8 + +""" +Unit Tests for sickbeard/numdict.py +""" + +import sys +import os.path +import unittest + +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) +sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from sickbeard.numdict import NumDict + +PY3 = sys.version_info >= (3, ) + +if PY3: + from collections import UserDict +else: + from UserDict import UserDict + + +class NumDictTest(unittest.TestCase): + """ + Test the NumDict class + """ + def test_constructors(self): + """ + Test NumDict constructors + """ + # dicts for testing + d0 = {} # Empty dictionary + d1 = {1: 'Elephant'} # Single numeric key + d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys + d3 = {'3': 'Aardvark'} # Numeric string key + d4 = {'3': 'Aardvark', '4': 'Ant'} # Multiple numeric string keys + d5 = {5: 'Cat', '6': 'Dog'} # Mixed numeric and numeric string keys + d6 = {1: None, '2': None} # None as values + d7 = {None: 'Empty'} # None as key + + # Construct NumDicts from dicts + n = NumDict() + n0 = NumDict(d0) + n1 = NumDict(d1) + n2 = NumDict(d2) + n3 = NumDict(d3) + n4 = NumDict(d4) + n5 = NumDict(d5) + n6 = NumDict(d6) + n7 = NumDict(d7) + + # Most NumDicts from dicts should compare equal... + self.assertEqual(n, {}) + self.assertEqual(n0, d0) + self.assertEqual(n1, d1) + self.assertEqual(n2, d2) + + # ...however, numeric keys are not equal to numeric string keys... + self.assertNotEqual(n3, d3) + self.assertNotEqual(n4, d4) + self.assertNotEqual(n5, d5) + self.assertNotEqual(n6, d6) + + # ...but None keys work just fine + self.assertEqual(n7, d7) + + # Construct dicts from NumDicts + dn = dict(n) + dn1 = dict(n1) + dn2 = dict(n2) + dn3 = dict(n3) + dn4 = dict(n4) + dn5 = dict(n5) + dn6 = dict(n6) + dn7 = dict(n7) + + # All dicts from NumDicts should compare equal + self.assertEqual(n, dn) + self.assertEqual(n1, dn1) + self.assertEqual(n2, dn2) + self.assertEqual(n3, dn3) + self.assertEqual(n4, dn4) + self.assertEqual(n5, dn5) + self.assertEqual(n6, dn6) + self.assertEqual(n7, dn7) + + # Construct NumDicts from NumDicts + nn = NumDict(n) + nn0 = NumDict(n0) + nn1 = NumDict(n1) + nn2 = NumDict(n2) + nn3 = NumDict(n3) + nn4 = NumDict(n4) + nn5 = NumDict(n5) + nn6 = NumDict(n6) + nn7 = NumDict(n7) + + # All NumDicts from NumDicts should compare equal + self.assertEqual(n, nn) + self.assertEqual(n0, nn0) + self.assertEqual(n1, nn1) + self.assertEqual(n2, nn2) + self.assertEqual(n3, nn3) + self.assertEqual(n4, nn4) + self.assertEqual(n5, nn5) + self.assertEqual(n6, nn6) + self.assertEqual(n7, nn7) + + # keyword arg constructor should fail + with self.assertRaises(TypeError): + NumDict(one=1, two=2) # Raise TypeError since we can't have numeric keywords + + # item sequence constructors work fine... + self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dn2) + self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dn2) + self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dn2) + self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dn2) + + # ...unless you have a non-numeric key + with self.assertRaises(TypeError): + NumDict([('Rat', 11), ('Snake', 12)]) + with self.assertRaises(TypeError): + NumDict(dict=[('Rat', 11), ('Snake', 12)]) + + # combining item sequence constructors with keyword args does not work + with self.assertRaises(TypeError): # Raise TypeError since we can't have numeric keywords + NumDict([(1, 'one'), (2, 'two')], two=3, five=4) + + # alternate constructors + d8 = {1: 'Echo', 2: 'Echo'} + + self.assertEqual(NumDict.fromkeys('1 2'.split()), dn6) + self.assertEqual(NumDict().fromkeys('1 2'.split()), dn6) + self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), d8) + self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), d8) + self.assertTrue(n1.fromkeys('1 2'.split()) is not n1) + self.assertIsInstance(n1.fromkeys('1 2'.split()), NumDict) + self.assertIsInstance(n2.fromkeys('1 2'.split()), NumDict) + self.assertIsInstance(n3.fromkeys('1 2'.split()), NumDict) + self.assertIsInstance(n4.fromkeys('1 2'.split()), NumDict) + + def test_repr(self): + # dicts for testing + d0 = {} # Empty dictionary + d1 = {1: 'Elephant'} # Single numeric key + d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys + d3 = {'3': 'Aardvark'} # Numeric string key + d4 = {'3': 'Aardvark', '4': 'Ant'} # Multiple numeric string keys + d5 = {5: 'Cat', '6': 'Dog'} # Mixed numeric and numeric string keys + d6 = {1: None, '2': None} # None as values + d7 = {None: 'Empty'} # None as key + + # Construct NumDicts from dicts + n = NumDict() + n0 = NumDict(d0) + n1 = NumDict(d1) + n2 = NumDict(d2) + n3 = NumDict(d3) + n4 = NumDict(d4) + n5 = NumDict(d5) + n6 = NumDict(d6) + n7 = NumDict(d7) + + reps = ( + "{}", + "{1: 'Elephant'}", + "{1: 'Elephant', 2: 'Mouse'}", + "'3': 'Aardvark'", + "{'3': 'Aardvark', '4': 'Ant'}", + "{5: 'Cat', '6': 'Dog'}", + "{1: None, '2': None}", + "{None: 'Empty'}", + ) + + # Most representations of NumDicts should compare equal to dicts... + self.assertEqual(str(n), str({})) + self.assertEqual(repr(n), repr({})) + self.assertIn(repr(n), reps) + + self.assertEqual(str(n0), str(d0)) + self.assertEqual(repr(n0), repr(d0)) + self.assertIn(repr(n0), reps) + + self.assertEqual(str(n1), str(d1)) + self.assertEqual(repr(n1), repr(d1)) + self.assertIn(repr(n1), reps) + + self.assertEqual(str(n2), str(d2)) + self.assertEqual(repr(n2), repr(d2)) + self.assertIn(repr(n2), reps) + + # ...however, numeric keys are not equal to numeric string keys... + # ...so the string representations for those are different... + self.assertNotEqual(str(n3), str(d3)) + self.assertNotEqual(repr(n3), repr(d3)) + self.assertNotIn(repr(n3), reps) + + self.assertNotEqual(str(n4), str(d4)) + self.assertNotEqual(repr(n4), repr(d4)) + self.assertNotIn(repr(n4), reps) + + self.assertNotEqual(str(n5), str(d5)) + self.assertNotEqual(repr(n5), repr(d5)) + self.assertNotIn(repr(n5), reps) + + self.assertNotEqual(str(n6), str(d6)) + self.assertNotEqual(repr(n6), repr(d6)) + self.assertNotIn(repr(n6), reps) + + # ...but None keys work just fine + self.assertEqual(str(n7), str(d7)) + self.assertEqual(repr(n7), repr(d7)) + self.assertIn(repr(n7), reps) + + def test_rich_comparison_and_len(self): + # dicts for testing + d0 = {} # Empty dictionary + d1 = {1: 'Elephant'} # Single numeric key + d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys + + # Construct NumDicts from dicts + n = NumDict() + n0 = NumDict(d0) + n1 = NumDict(d1) + n2 = NumDict(d2) + + # Construct NumDicts from NumDicts + nn = NumDict(n) + nn0 = NumDict(n0) + nn1 = NumDict(n1) + nn2 = NumDict(n2) + + all_dicts = [d0, d1, d2, n, n0, n1, n2, nn, nn0, nn1, nn2] + for a in all_dicts: + for b in all_dicts: + self.assertEqual(a == b, len(a) == len(b)) + + def test_dict_access_and_modification(self): + # dicts for testing + d0 = {} # Empty dictionary + d1 = {1: 'Elephant'} # Single numeric key + d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys + + # Construct NumDicts from dicts + n0 = NumDict() + n1 = NumDict(d1) + n2 = NumDict(d2) + + # test __getitem__ + self.assertEqual(n2[1], 'Elephant') + with self.assertRaises(KeyError): + n1['Mouse'] # key is not numeric + with self.assertRaises(KeyError): + n1.__getitem__('Mouse') # key is not numeric + with self.assertRaises(KeyError): + n1[None] # key does not exist + with self.assertRaises(KeyError): + n1.__getitem__(None) # key does not exist + + # Test __setitem__ + n3 = NumDict(n2) + self.assertEqual(n2, n3) + + n3[2] = 'Frog' + self.assertNotEqual(n2, n3) + + # Check None keys and numeric key conversion + n3['3'] = 'Armadillo' + n3[None] = 'Cockroach' + + # Check long ints + n3[12390809518259081208909880312] = 'Squid' + n3['12390809518259081208909880312'] = 'Octopus' + self.assertEqual(n3[12390809518259081208909880312], 'Octopus') + + with self.assertRaises(TypeError): + n3.__setitem__('Gorilla', 1) # key is not numeric + with self.assertRaises(TypeError): + n3['Chimpanzee'] = 1 # key is not numeric + with self.assertRaises(TypeError): + n3[(4, 1)] = 1 # key is not numeric + with self.assertRaises(TypeError): + n3[[1, 3, 4]] = 1 # key is not numeric and is not hashable + + # Test __delitem__ + del n3[3] + del n3[None] + with self.assertRaises(KeyError): + del n3[3] # already deleted + with self.assertRaises(KeyError): + n3.__delitem__(3) # already deleted + with self.assertRaises(KeyError): + del n3['Mouse'] # key would not exist, since it is not numeric + + # Test clear + n3.clear() + self.assertEqual(n3, {}) + + # Test copy() + n2a = d2.copy() + self.assertEqual(n2, n2a) + n2b = n2.copy() + self.assertEqual(n2b, n2) + n2c = UserDict({1: 'Elephant', 2: 'Mouse'}) + n2d = n2c.copy() # making a copy of a UserDict is special cased + self.assertEqual(n2c, n2d) + + class MyNumDict(NumDict): + """ + subclass Numdict for testing + """ + def display(self): + """ + add a method to subclass to differentiate from superclass + """ + print('MyNumDict:', self) + + m2 = MyNumDict(n2) + m2a = m2.copy() + self.assertEqual(m2a, m2) + + m2[1] = 'Frog' + self.assertNotEqual(m2a, m2) + + # Test keys, items, values + self.assertEqual(sorted(n2.keys()), sorted(d2.keys())) + self.assertEqual(sorted(n2.items()), sorted(d2.items())) + self.assertEqual(sorted(n2.values()), sorted(d2.values())) + + # Test "in". + for i in n2: + self.assertIn(i, n2) + self.assertEqual(i in n1, i in d1) + self.assertEqual(i in n0, i in d0) + + self.assertFalse(None in n2) + self.assertEqual(None in n2, None in d2) + + d2[None] = 'Cow' + n2[None] = d2[None] + self.assertTrue(None in n2) + self.assertEqual(None in n2, None in d2) + + self.assertEqual(n2.has_key(None), None in d2) + if not PY3: + self.assertEqual(n2.has_key(None), d2.has_key(None)) + self.assertFalse('Penguin' in n2) + + # Test update + t = NumDict() + t.update(d2) + self.assertEqual(t, n2) + + # Test get + for i in n2: + self.assertEqual(n2.get(i), n2[i]) + self.assertEqual(n1.get(i), d1.get(i)) + self.assertEqual(n0.get(i), d0.get(i)) + + for i in ['purple', None, 12312301924091284, 23]: + self.assertEqual(n2.get(i), d2.get(i), i) + + with self.assertRaises(AssertionError): + i = '1' + self.assertEqual(n2.get(i), d2.get(i), i) # d2 expects string key which does not exist + + # Test "in" iteration. + n2b = n2 + for i in range(20): + n2[i] = str(i) + n2b[str(i)] = str(i) + self.assertEqual(n2, n2b) + + ikeys = [] + for k in n2: + ikeys.append(k) + self.assertEqual(set(ikeys), set(n2.keys())) + + # Test setdefault + x = 1 + t = NumDict() + self.assertEqual(t.setdefault(x, 42), 42) + self.assertEqual(t.setdefault(x, '42'), 42) + self.assertNotEqual(t.setdefault(x, 42), '42') + self.assertNotEqual(t.setdefault(x, '42'), '42') + self.assertIn(x, t) + + self.assertEqual(t.setdefault(x, 23), 42) + self.assertEqual(t.setdefault(x, '23'), 42) + self.assertNotEqual(t.setdefault(x, 23), '42') + self.assertNotEqual(t.setdefault(x, '23'), '42') + self.assertIn(x, t) + + # Test pop + x = 1 + t = NumDict({x: 42}) + self.assertEqual(t.pop(x), 42) + self.assertRaises(KeyError, t.pop, x) + self.assertEqual(t.pop(x, 1), 1) + t[x] = 42 + self.assertEqual(t.pop(x, 1), 42) + + # Test popitem + x = 1 + t = NumDict({x: 42}) + self.assertEqual(t.popitem(), (x, 42)) + self.assertRaises(KeyError, t.popitem) + + def test_missing(self): + # Make sure NumDict doesn't have a __missing__ method + self.assertEqual(hasattr(NumDict, "__missing__"), False) + + class D(NumDict): + """ + subclass defines __missing__ method returning a value + """ + def __missing__(self, key): + return 42 + + d = D({1: 2, 3: 4}) + self.assertEqual(d[1], 2) + self.assertEqual(d[3], 4) + self.assertNotIn(2, d) + self.assertNotIn(2, d.keys()) + self.assertEqual(d[2], 42) + + class E(NumDict): + """ + subclass defines __missing__ method raising RuntimeError + """ + def __missing__(self, key): + raise RuntimeError(key) + + e = E() + try: + e[42] + except RuntimeError as err: + self.assertEqual(err.args, (42,)) + else: + self.fail("e[42] didn't raise RuntimeError") + + class F(NumDict): + """ + subclass sets __missing__ instance variable (no effect) + """ + def __init__(self): + # An instance variable __missing__ should have no effect + self.__missing__ = lambda key: None + NumDict.__init__(self) + f = F() + try: + f[42] + except KeyError as err: + self.assertEqual(err.args, (42,)) + else: + self.fail("f[42] didn't raise KeyError") + + class G(NumDict): + """ + subclass doesn't define __missing__ at a all + """ + pass + + g = G() + try: + g[42] + except KeyError as err: + self.assertEqual(err.args, (42,)) + else: + self.fail("g[42] didn't raise KeyError") + + class H(D): + """ + subclass calls super classes __missing__ and modifies the value before returning it + """ + def __missing__(self, key): + return super(H, self).__missing__(key) + 1 + + h = H() + self.assertEqual(h[None], d[None]+1) + + +def test_main(): + import logging + log = logging.getLogger(__name__) + logging.basicConfig(level=logging.DEBUG) + + log.info("=======================") + log.info("STARTING - COMMON TESTS") + log.info("=======================") + log.info("######################################################################") + + suite = unittest.TestLoader().loadTestsFromTestCase(NumDictTest) + unittest.TextTestRunner(verbosity=2).run(suite) + + +if __name__ == "__main__": + test_main() diff --git a/tests/test_lib.py b/tests/test_lib.py index 0fc43d5b8457ca6aa8337fa53396127df93f492e..dd28942dcd379a2b6764f430f53b0e7b0df80845 100644 --- a/tests/test_lib.py +++ b/tests/test_lib.py @@ -17,7 +17,6 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -from __future__ import with_statement import sys, os.path sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) diff --git a/tests/torrent_tests.py b/tests/torrent_tests.py index 73b6ff289f14f8b2a436cb7c0b5a9c1ca209408a..23a60edd6b4d8a75f938510d82746e637b71c44e 100644 --- a/tests/torrent_tests.py +++ b/tests/torrent_tests.py @@ -17,7 +17,6 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -from __future__ import with_statement import sys, os.path sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib'))) diff --git a/tests/xem_tests.py b/tests/xem_tests.py index 0aa22c1b4989846dff02ded21c0dfaea69e3087f..97fa2d425c1c48b176eafa6fdf5c62abead2f874 100644 --- a/tests/xem_tests.py +++ b/tests/xem_tests.py @@ -17,7 +17,6 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. -from __future__ import with_statement import sys, os.path sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))