Some minor style fixes.
This commit is contained in:
parent
b8484cde50
commit
8b90aa5cfb
18 changed files with 71 additions and 40 deletions
|
@ -15,8 +15,6 @@ Comic modules for each comic are located in L{dosagelib.plugins}.
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
from pbr.version import VersionInfo
|
from pbr.version import VersionInfo
|
||||||
|
|
||||||
AppName = u'dosage'
|
AppName = u'dosage'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ class ArgumentParser(argparse.ArgumentParser):
|
||||||
with out.pager():
|
with out.pager():
|
||||||
out.info(self.format_help())
|
out.info(self.format_help())
|
||||||
|
|
||||||
|
|
||||||
Examples = """\
|
Examples = """\
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
List available comics:
|
List available comics:
|
||||||
|
@ -293,6 +294,7 @@ def do_column_list(scrapers):
|
||||||
del names[:names_per_line]
|
del names[:names_per_line]
|
||||||
return num, disabled
|
return num, disabled
|
||||||
|
|
||||||
|
|
||||||
TAG_ADULT = "adult"
|
TAG_ADULT = "adult"
|
||||||
TAG_LANG = "lang"
|
TAG_LANG = "lang"
|
||||||
TAG_DISABLED = "dis"
|
TAG_DISABLED = "dis"
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
"""
|
"""
|
||||||
Define basic configuration data like version or application name.
|
Define basic configuration data like version or application name.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
from . import AppName, AppVersion
|
from . import AppName, AppVersion
|
||||||
|
|
||||||
App = AppName + u' ' + AppVersion
|
App = AppName + u' ' + AppVersion
|
||||||
|
@ -18,7 +19,7 @@ UserAgent = u"Mozilla/5.0 (compatible; %s/%s; +%s)" % (AppName, AppVersion,
|
||||||
Url)
|
Url)
|
||||||
Copyright = u"""Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
Copyright = u"""Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
Copyright (C) 2012-2014 Bastian Kleineidam
|
Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
Copyright (C) 2015-2016 Tobias Gruetzmacher
|
Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
"""
|
"""
|
||||||
Freeware = AppName + u""" comes with ABSOLUTELY NO WARRANTY!
|
Freeware = AppName + u""" comes with ABSOLUTELY NO WARRANTY!
|
||||||
This is free software, and you are welcome to redistribute it
|
This is free software, and you are welcome to redistribute it
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
@ -310,6 +310,7 @@ def addHandlerClass(clazz):
|
||||||
raise ValueError("%s must be subclassed from %s" % (clazz, EventHandler))
|
raise ValueError("%s must be subclassed from %s" % (clazz, EventHandler))
|
||||||
_handler_classes[clazz.name] = clazz
|
_handler_classes[clazz.name] = clazz
|
||||||
|
|
||||||
|
|
||||||
addHandlerClass(HtmlEventHandler)
|
addHandlerClass(HtmlEventHandler)
|
||||||
addHandlerClass(RSSEventHandler)
|
addHandlerClass(RSSEventHandler)
|
||||||
addHandlerClass(JSONEventHandler)
|
addHandlerClass(JSONEventHandler)
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# ISO 693-1 language codes from pycountry
|
# ISO 693-1 language codes from pycountry
|
||||||
# This file is automatically generated, DO NOT EDIT!
|
# This file is automatically generated, DO NOT EDIT!
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
Languages = {
|
Languages = {
|
||||||
'de': u'German',
|
'de': 'German',
|
||||||
'en': u'English',
|
'en': 'English',
|
||||||
'es': u'Spanish; Castilian',
|
'es': 'Spanish; Castilian',
|
||||||
'fi': u'Finnish',
|
'fi': 'Finnish',
|
||||||
'fr': u'French',
|
'fr': 'French',
|
||||||
'it': u'Italian',
|
'it': 'Italian',
|
||||||
'ja': u'Japanese',
|
'ja': 'Japanese',
|
||||||
'pt': u'Portuguese',
|
'pt': 'Portuguese',
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
# -*- coding: iso-8859-1 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
from re import compile, escape
|
from re import compile, escape
|
||||||
from ..scraper import _BasicScraper
|
from ..scraper import _BasicScraper
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
from ..scraper import _ParserScraper
|
from ..scraper import _ParserScraper
|
||||||
from ..helpers import bounceStarter
|
from ..helpers import bounceStarter
|
||||||
|
|
||||||
|
|
||||||
class Xkcd(_ParserScraper):
|
class Xkcd(_ParserScraper):
|
||||||
name = 'xkcd'
|
name = 'xkcd'
|
||||||
url = 'http://xkcd.com/'
|
url = 'http://xkcd.com/'
|
||||||
|
|
|
@ -1,12 +1,17 @@
|
||||||
# -*- coding: iso-8859-1 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# TODO: Not sure if this RSS output is "valid", should be though.
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
# Might also be nice categorise Comics under one Item
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import xml.dom.minidom
|
import xml.dom.minidom
|
||||||
import time
|
import time
|
||||||
from .configuration import App
|
from .configuration import App
|
||||||
|
|
||||||
|
# TODO: Not sure if this RSS output is "valid", should be though.
|
||||||
|
# Might also be nice categorise Comics under one Item
|
||||||
|
|
||||||
|
|
||||||
class Feed(object):
|
class Feed(object):
|
||||||
"""Write an RSS feed with comic strip images."""
|
"""Write an RSS feed with comic strip images."""
|
||||||
|
|
||||||
|
@ -62,10 +67,13 @@ def parseFeed(filename, yesterday):
|
||||||
"""Parse an RSS feed and filter only entries that are newer than yesterday."""
|
"""Parse an RSS feed and filter only entries that are newer than yesterday."""
|
||||||
dom = xml.dom.minidom.parse(filename)
|
dom = xml.dom.minidom.parse(filename)
|
||||||
|
|
||||||
getText = lambda node, tag: node.getElementsByTagName(tag)[0].childNodes[0].data
|
def getText(node, tag):
|
||||||
getNode = lambda tag: dom.getElementsByTagName(tag)
|
node.getElementsByTagName(tag)[0].childNodes[0].data
|
||||||
|
|
||||||
content = getNode('channel')[0] # Only one channel node
|
def getNode(tag):
|
||||||
|
dom.getElementsByTagName(tag)
|
||||||
|
|
||||||
|
content = getNode('channel')[0] # Only one channel node
|
||||||
|
|
||||||
feedTitle = getText(content, 'title')
|
feedTitle = getText(content, 'title')
|
||||||
feedLink = getText(content, 'link')
|
feedLink = getText(content, 'link')
|
||||||
|
@ -75,7 +83,7 @@ def parseFeed(filename, yesterday):
|
||||||
|
|
||||||
for item in getNode('item'):
|
for item in getNode('item'):
|
||||||
itemDate = time.strptime(getText(item, 'pubDate'), '%a, %d %b %Y %H:%M:%S GMT')
|
itemDate = time.strptime(getText(item, 'pubDate'), '%a, %d %b %Y %H:%M:%S GMT')
|
||||||
if (itemDate > yesterday): # If newer than yesterday
|
if (itemDate > yesterday): # If newer than yesterday
|
||||||
feed.addItem(getText(item, 'title'),
|
feed.addItem(getText(item, 'title'),
|
||||||
getText(item, 'link'),
|
getText(item, 'link'),
|
||||||
getText(item, 'description'),
|
getText(item, 'description'),
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# -*- coding: iso-8859-1 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copied from: https://github.com/pycontribs/tendo
|
# Copied from: https://github.com/pycontribs/tendo
|
||||||
# License: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
# License: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||||
# Author: Sorin Sbarnea
|
# Author: Sorin Sbarnea
|
||||||
# Changes: changed logging and formatting
|
# Changes: changed logging and formatting
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import errno
|
import errno
|
||||||
|
@ -49,7 +51,7 @@ class SingleInstance(object):
|
||||||
self.fd = os.open(self.lockfile, os.O_CREAT | os.O_EXCL | os.O_RDWR)
|
self.fd = os.open(self.lockfile, os.O_CREAT | os.O_EXCL | os.O_RDWR)
|
||||||
except OSError:
|
except OSError:
|
||||||
type, e, tb = sys.exc_info()
|
type, e, tb = sys.exc_info()
|
||||||
if e.errno == errno.EACCES: # EACCES == 13
|
if e.errno == errno.EACCES: # EACCES == 13
|
||||||
self.exit(exit_code)
|
self.exit(exit_code)
|
||||||
raise
|
raise
|
||||||
else: # non Windows
|
else: # non Windows
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
# -*- coding: iso-8859-1 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
Function to check for updates.
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
"""
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import dosagelib
|
import dosagelib
|
||||||
from dosagelib import configuration
|
from dosagelib import configuration
|
||||||
|
@ -9,10 +12,10 @@ from .util import urlopen
|
||||||
from distutils.version import StrictVersion
|
from distutils.version import StrictVersion
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
|
||||||
UPDATE_URL = "https://api.github.com/repos/webcomics/dosage/releases/latest"
|
UPDATE_URL = "https://api.github.com/repos/webcomics/dosage/releases/latest"
|
||||||
|
|
||||||
def check_update ():
|
|
||||||
|
def check_update():
|
||||||
"""Return the following values:
|
"""Return the following values:
|
||||||
(False, errmsg) - online version could not be determined
|
(False, errmsg) - online version could not be determined
|
||||||
(True, None) - user has newest version
|
(True, None) - user has newest version
|
||||||
|
@ -33,7 +36,7 @@ def check_update ():
|
||||||
return True, (version, None)
|
return True, (version, None)
|
||||||
|
|
||||||
|
|
||||||
def get_online_version ():
|
def get_online_version():
|
||||||
"""Download update info and parse it."""
|
"""Download update info and parse it."""
|
||||||
session = requests.session()
|
session = requests.session()
|
||||||
page = urlopen(UPDATE_URL, session).json()
|
page = urlopen(UPDATE_URL, session).json()
|
||||||
|
@ -47,6 +50,6 @@ def get_online_version ():
|
||||||
return version, url
|
return version, url
|
||||||
|
|
||||||
|
|
||||||
def is_newer_version (version):
|
def is_newer_version(version):
|
||||||
"""Check if given version is newer than current version."""
|
"""Check if given version is newer than current version."""
|
||||||
return StrictVersion(version) > StrictVersion(dosagelib.__version__)
|
return StrictVersion(version) > StrictVersion(dosagelib.__version__)
|
||||||
|
|
|
@ -40,5 +40,6 @@ class CreatorsUpdater(ComicListUpdater):
|
||||||
langopt = ", 'es'" if name.lower().endswith('spanish') else ''
|
langopt = ", 'es'" if name.lower().endswith('spanish') else ''
|
||||||
return u"cls('%s', '%s'%s)," % (name, path, langopt)
|
return u"cls('%s', '%s'%s)," % (name, path, langopt)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
CreatorsUpdater(__file__).run()
|
CreatorsUpdater(__file__).run()
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
'''update languages.py from pycountry'''
|
'''update languages.py from pycountry'''
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ def main():
|
||||||
f.write('# -*- coding: %s -*-%s' % (encoding, os.linesep))
|
f.write('# -*- coding: %s -*-%s' % (encoding, os.linesep))
|
||||||
f.write('# ISO 693-1 language codes from pycountry%s' % os.linesep)
|
f.write('# ISO 693-1 language codes from pycountry%s' % os.linesep)
|
||||||
f.write('# This file is automatically generated, DO NOT EDIT!%s' % os.linesep)
|
f.write('# This file is automatically generated, DO NOT EDIT!%s' % os.linesep)
|
||||||
|
f.write('from __future__ import absolute_import, division, print_function%s' % os.linesep)
|
||||||
lang = get_used_languages()
|
lang = get_used_languages()
|
||||||
write_languages(f, lang)
|
write_languages(f, lang)
|
||||||
|
|
||||||
|
|
|
@ -167,5 +167,6 @@ class SmackJeevesUpdater(ComicListUpdater):
|
||||||
opt += ", endOfLife=True"
|
opt += ", endOfLife=True"
|
||||||
return u"cls('%s', %s)," % (name, opt)
|
return u"cls('%s', %s)," % (name, opt)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
SmackJeevesUpdater(__file__).run()
|
SmackJeevesUpdater(__file__).run()
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2013-2014 Bastian Kleineidam
|
# Copyright (C) 2013-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
# Copyright (C) 2013-2014 Bastian Kleineidam
|
# Copyright (C) 2013-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2016 Tobias Gruetzmacher
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from dosagelib import scraper
|
from dosagelib import scraper
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
# Author: Sorin Sbarnea
|
# Author: Sorin Sbarnea
|
||||||
# Changes: changed logging and formatting
|
# Changes: changed logging and formatting
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
from dosagelib import singleton
|
from dosagelib import singleton
|
||||||
from multiprocessing import Process
|
from multiprocessing import Process
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
|
||||||
# Copyright (C) 2012-2014 Bastian Kleineidam
|
# Copyright (C) 2012-2014 Bastian Kleineidam
|
||||||
# Copyright (C) 2016 Tobias Gruetzmacher
|
# Copyright (C) 2015-2017 Tobias Gruetzmacher
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import re
|
import re
|
||||||
|
@ -30,9 +32,9 @@ class TestRegex(object):
|
||||||
ValuePrefix = '/bla/'
|
ValuePrefix = '/bla/'
|
||||||
|
|
||||||
@pytest.mark.parametrize("tag,value,domatch", [
|
@pytest.mark.parametrize("tag,value,domatch", [
|
||||||
('<img src="%s">', ValuePrefix+'foo', True),
|
('<img src="%s">', ValuePrefix + 'foo', True),
|
||||||
('< img src = "%s" >', ValuePrefix, True),
|
('< img src = "%s" >', ValuePrefix, True),
|
||||||
('<img class="prev" src="%s">', ValuePrefix+'...', True),
|
('<img class="prev" src="%s">', ValuePrefix + '...', True),
|
||||||
('<img origsrc="%s">', ValuePrefix, False),
|
('<img origsrc="%s">', ValuePrefix, False),
|
||||||
('<Img src="%s">', ValuePrefix, True),
|
('<Img src="%s">', ValuePrefix, True),
|
||||||
('<img SrC="%s">', ValuePrefix, True),
|
('<img SrC="%s">', ValuePrefix, True),
|
||||||
|
|
Loading…
Reference in a new issue