py3: misc fixes to make all module import

This commit is contained in:
Kovid Goyal 2019-04-04 13:55:58 +05:30
parent a7f3fd798b
commit b9a3e1952e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
80 changed files with 311 additions and 191 deletions

View File

@ -374,9 +374,9 @@ class LRFMetaFile(object):
return res return res
return restore_pos return restore_pos
locals_ = func() locals_ = func()
if locals_.has_key("fget"): # noqa if 'fget' in locals_:
locals_["fget"] = decorator(locals_["fget"]) locals_["fget"] = decorator(locals_["fget"])
if locals_.has_key("fset"): # noqa if 'fset' in locals_:
locals_["fset"] = decorator(locals_["fset"]) locals_["fset"] = decorator(locals_["fset"])
return property(**locals_) return property(**locals_)

View File

@ -9,7 +9,7 @@ import io
import codecs import codecs
import os import os
from pylrfopt import tagListOptimizer from .pylrfopt import tagListOptimizer
from polyglot.builtins import iteritems, string_or_bytes from polyglot.builtins import iteritems, string_or_bytes
PYLRF_VERSION = "1.0" PYLRF_VERSION = "1.0"

View File

@ -42,7 +42,7 @@ from xml.sax.saxutils import escape
from datetime import date from datetime import date
from xml.etree.ElementTree import Element, SubElement, ElementTree from xml.etree.ElementTree import Element, SubElement, ElementTree
from pylrf import (LrfWriter, LrfObject, LrfTag, LrfToc, from .pylrf import (LrfWriter, LrfObject, LrfTag, LrfToc,
STREAM_COMPRESSED, LrfTagStream, LrfStreamBase, IMAGE_TYPE_ENCODING, STREAM_COMPRESSED, LrfTagStream, LrfStreamBase, IMAGE_TYPE_ENCODING,
BINDING_DIRECTION_ENCODING, LINE_TYPE_ENCODING, LrfFileStream, BINDING_DIRECTION_ENCODING, LINE_TYPE_ENCODING, LrfFileStream,
STREAM_FORCE_COMPRESSED) STREAM_FORCE_COMPRESSED)
@ -1153,7 +1153,7 @@ class TextStyle(LrsStyle):
"rubyadjust", "rubyalign", "rubyoverhang", "rubyadjust", "rubyalign", "rubyoverhang",
"empdotsposition", 'emplinetype', 'emplineposition'] "empdotsposition", 'emplinetype', 'emplineposition']
validSettings = baseDefaults.keys() + alsoAllow validSettings = list(baseDefaults) + alsoAllow
defaults = baseDefaults.copy() defaults = baseDefaults.copy()
@ -1214,7 +1214,7 @@ class PageStyle(LrsStyle):
alsoAllow = ["header", "evenheader", "oddheader", alsoAllow = ["header", "evenheader", "oddheader",
"footer", "evenfooter", "oddfooter"] "footer", "evenfooter", "oddfooter"]
validSettings = baseDefaults.keys() + alsoAllow validSettings = list(baseDefaults) + alsoAllow
defaults = baseDefaults.copy() defaults = baseDefaults.copy()
@classmethod @classmethod

View File

@ -14,13 +14,13 @@ from calibre.ebooks.metadata.book.base import Metadata
from calibre import browser from calibre import browser
from calibre.ebooks.BeautifulSoup import BeautifulSoup from calibre.ebooks.BeautifulSoup import BeautifulSoup
from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.chardet import xml_to_unicode
from polyglot.builtins import codepoint_to_chr, unicode_type from polyglot.builtins import codepoint_to_chr, unicode_type, range
from polyglot.urllib import parse_qs, quote_plus from polyglot.urllib import parse_qs, quote_plus
URL = \ URL = \
"http://ww2.kdl.org/libcat/WhatsNext.asp?AuthorLastName={0}&AuthorFirstName=&SeriesName=&BookTitle={1}&CategoryID=0&cmdSearch=Search&Search=1&grouping=" "http://ww2.kdl.org/libcat/WhatsNext.asp?AuthorLastName={0}&AuthorFirstName=&SeriesName=&BookTitle={1}&CategoryID=0&cmdSearch=Search&Search=1&grouping="
_ignore_starts = u'\'"'+u''.join(codepoint_to_chr(x) for x in range(0x2018, 0x201e)+[0x2032, 0x2033]) _ignore_starts = u'\'"'+u''.join(codepoint_to_chr(x) for x in list(range(0x2018, 0x201e))+[0x2032, 0x2033])
def get_series(title, authors, timeout=60): def get_series(title, authors, timeout=60):

View File

@ -34,9 +34,9 @@ aid_able_tags = {'a', 'abbr', 'address', 'article', 'aside', 'audio', 'b',
'span', 'strong', 'sub', 'summary', 'sup', 'textarea', 'time', 'ul', 'var', 'span', 'strong', 'sub', 'summary', 'sup', 'textarea', 'time', 'ul', 'var',
'video'} 'video'}
_self_closing_pat = re.compile(bytes( _self_closing_pat = re.compile(
r'<(?P<tag>%s)(?=[\s/])(?P<arg>[^>]*)/>'%('|'.join(aid_able_tags|{'script', r'<(?P<tag>%s)(?=[\s/])(?P<arg>[^>]*)/>'%('|'.join(aid_able_tags|{'script',
'style', 'title', 'head'}))), 'style', 'title', 'head'})).encode('ascii'),
re.IGNORECASE) re.IGNORECASE)

View File

@ -4,15 +4,22 @@ __license__ = 'GPL v3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>' __copyright__ = '2009, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
from polyglot.builtins import range
def r(*a):
return list(range(*a))
# Uncommon Characters supported by PML. \\a tag codes # Uncommon Characters supported by PML. \\a tag codes
A_CHARS = range(160, 256) + range(130, 136) + range(138, 141) + \ A_CHARS = r(160, 256) + r(130, 136) + r(138, 141) + \
range(145, 152) + range(153, 157) + [159] r(145, 152) + r(153, 157) + [159]
# Extended Unicode characters supported by PML # Extended Unicode characters supported by PML
Latin_ExtendedA = range(0x0100, 0x0104) + [0x0105, 0x0107, 0x010C, 0x010D, Latin_ExtendedA = r(0x0100, 0x0104) + [0x0105, 0x0107, 0x010C, 0x010D,
0x0112, 0x0113, 0x0115, 0x0117, 0x0119, 0x011B, 0x011D, 0x011F, 0x012A, 0x0112, 0x0113, 0x0115, 0x0117, 0x0119, 0x011B, 0x011D, 0x011F, 0x012A,
0x012B, 0x012D, 0x012F, 0x0131, 0x0141, 0x0142, 0x0144, 0x0148] + \ 0x012B, 0x012D, 0x012F, 0x0131, 0x0141, 0x0142, 0x0144, 0x0148] + \
range(0x014B, 0x014E) + [0x014F, 0x0151, 0x0155] + range(0x0159, 0x015C) + \ r(0x014B, 0x014E) + [0x014F, 0x0151, 0x0155] + r(0x0159, 0x015C) + \
[0x015F, 0x0163, 0x0169, 0x016B, 0x016D, 0x0177, 0x017A, 0x017D, 0x017E] [0x015F, 0x0163, 0x0169, 0x016B, 0x016D, 0x0177, 0x017A, 0x017D, 0x017E]
Latin_ExtendedB = [0x01BF, 0x01CE, 0x01D0, 0x01D2, 0x01D4, 0x01E1, 0x01E3, Latin_ExtendedB = [0x01BF, 0x01CE, 0x01D0, 0x01D2, 0x01D4, 0x01E1, 0x01E3,
0x01E7, 0x01EB, 0x01F0, 0x0207, 0x021D, 0x0227, 0x022F, 0x0233] 0x01E7, 0x01EB, 0x01F0, 0x0207, 0x021D, 0x0227, 0x022F, 0x0233]
@ -20,23 +27,23 @@ IPA_Extensions = [0x0251, 0x0251, 0x0254, 0x0259, 0x025C, 0x0265, 0x026A,
0x0272, 0x0283, 0x0289, 0x028A, 0x028C, 0x028F, 0x0292, 0x0294, 0x029C] 0x0272, 0x0283, 0x0289, 0x028A, 0x028C, 0x028F, 0x0292, 0x0294, 0x029C]
Spacing_Modifier_Letters = [0x02BE, 0x02BF, 0x02C7, 0x02C8, 0x02CC, 0x02D0, Spacing_Modifier_Letters = [0x02BE, 0x02BF, 0x02C7, 0x02C8, 0x02CC, 0x02D0,
0x02D8, 0x02D9] 0x02D8, 0x02D9]
Greek_and_Coptic = range(0x0391, 0x03A2) + range(0x03A3, 0x03AA) + \ Greek_and_Coptic = r(0x0391, 0x03A2) + r(0x03A3, 0x03AA) + \
range(0x03B1, 0x03CA) + [0x03D1, 0x03DD] r(0x03B1, 0x03CA) + [0x03D1, 0x03DD]
Hebrew = range(0x05D0, 0x05EB) Hebrew = r(0x05D0, 0x05EB)
Latin_Extended_Additional = [0x1E0B, 0x1E0D, 0x1E17, 0x1E22, 0x1E24, 0x1E25, Latin_Extended_Additional = [0x1E0B, 0x1E0D, 0x1E17, 0x1E22, 0x1E24, 0x1E25,
0x1E2B, 0x1E33, 0x1E37, 0x1E41, 0x1E43, 0x1E45, 0x1E47, 0x1E53] + \ 0x1E2B, 0x1E33, 0x1E37, 0x1E41, 0x1E43, 0x1E45, 0x1E47, 0x1E53] + \
range(0x1E59, 0x1E5C) + [0x1E61, 0x1E63, 0x1E6B, 0x1E6D, 0x1E6F, 0x1E91, r(0x1E59, 0x1E5C) + [0x1E61, 0x1E63, 0x1E6B, 0x1E6D, 0x1E6F, 0x1E91,
0x1E93, 0x1E96, 0x1EA1, 0x1ECD, 0x1EF9] 0x1E93, 0x1E96, 0x1EA1, 0x1ECD, 0x1EF9]
General_Punctuation = [0x2011, 0x2038, 0x203D, 0x2042] General_Punctuation = [0x2011, 0x2038, 0x203D, 0x2042]
Arrows = [0x2190, 0x2192] Arrows = [0x2190, 0x2192]
Mathematical_Operators = [0x2202, 0x221A, 0x221E, 0x2225, 0x222B, 0x2260, Mathematical_Operators = [0x2202, 0x221A, 0x221E, 0x2225, 0x222B, 0x2260,
0x2294, 0x2295, 0x22EE] 0x2294, 0x2295, 0x22EE]
Enclosed_Alphanumerics = [0x24CA] Enclosed_Alphanumerics = [0x24CA]
Miscellaneous_Symbols = range(0x261C, 0x2641) + range(0x2642, 0x2648) + \ Miscellaneous_Symbols = r(0x261C, 0x2641) + r(0x2642, 0x2648) + \
range(0x2660, 0x2664) + range(0x266D, 0x2670) r(0x2660, 0x2664) + r(0x266D, 0x2670)
Dingbats = [0x2713, 0x2720] Dingbats = [0x2713, 0x2720]
Private_Use_Area = range(0xE000, 0xE01D) + range(0xE01E, 0xE029) + \ Private_Use_Area = r(0xE000, 0xE01D) + r(0xE01E, 0xE029) + \
range(0xE02A, 0xE052) r(0xE02A, 0xE052)
Alphabetic_Presentation_Forms = [0xFB02, 0xFB2A, 0xFB2B] Alphabetic_Presentation_Forms = [0xFB02, 0xFB2A, 0xFB2B]
# \\U tag codes. # \\U tag codes.

View File

@ -156,7 +156,7 @@ class Document:
continue # try again continue # try again
else: else:
return cleaned_article return cleaned_article
except StandardError as e: except Exception as e:
self.log.exception('error getting summary: ') self.log.exception('error getting summary: ')
reraise(Unparseable, Unparseable(str(e)), sys.exc_info()[2]) reraise(Unparseable, Unparseable(str(e)), sys.exc_info()[2])

View File

@ -1,4 +1,4 @@
from functions import textile, textile_restricted, Textile from .functions import textile, textile_restricted, Textile
if False: if False:
textile, textile_restricted, Textile textile, textile_restricted, Textile

View File

@ -18,7 +18,7 @@ from calibre.utils.icu import sort_key
from calibre.utils.localization import localize_user_manual_link from calibre.utils.localization import localize_user_manual_link
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type
from catalog_epub_mobi_ui import Ui_Form from .catalog_epub_mobi_ui import Ui_Form
from PyQt5.Qt import (Qt, QAbstractItemView, QCheckBox, QComboBox, from PyQt5.Qt import (Qt, QAbstractItemView, QCheckBox, QComboBox,
QDoubleSpinBox, QIcon, QInputDialog, QLineEdit, QRadioButton, QDoubleSpinBox, QIcon, QInputDialog, QLineEdit, QRadioButton,
QSize, QSizePolicy, QTableWidget, QTableWidgetItem, QTextEdit, QToolButton, QSize, QSizePolicy, QTableWidget, QTableWidgetItem, QTextEdit, QToolButton,

View File

@ -204,7 +204,7 @@
<customwidget> <customwidget>
<class>BookView</class> <class>BookView</class>
<extends>QGraphicsView</extends> <extends>QGraphicsView</extends>
<header>bookview.h</header> <header>calibre/gui2/lrf_renderer/bookview.h</header>
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<resources> <resources>

View File

@ -127,7 +127,7 @@
<customwidget> <customwidget>
<class>ResultsView</class> <class>ResultsView</class>
<extends>QTreeView</extends> <extends>QTreeView</extends>
<header>results_view.h</header> <header>calibre/gui2/store/config/chooser/results_view.h</header>
</customwidget> </customwidget>
<customwidget> <customwidget>
<class>HistoryLineEdit</class> <class>HistoryLineEdit</class>

View File

@ -347,7 +347,7 @@
<customwidget> <customwidget>
<class>ResultsView</class> <class>ResultsView</class>
<extends>QTreeView</extends> <extends>QTreeView</extends>
<header>results_view.h</header> <header>calibre/gui2/store/config/chooser/results_view.h</header>
</customwidget> </customwidget>
<customwidget> <customwidget>
<class>HistoryLineEdit2</class> <class>HistoryLineEdit2</class>

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 5 # Needed for dynamic plugin loading store_version = 5 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -44,7 +47,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 7 # Needed for dynamic plugin loading store_version = 7 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -44,7 +47,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 15 # Needed for dynamic plugin loading store_version = 15 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -46,7 +49,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 15 # Needed for dynamic plugin loading store_version = 15 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib2 import urlencode
from lxml import html from lxml import html
@ -46,7 +49,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 15 # Needed for dynamic plugin loading store_version = 15 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -46,7 +49,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 5 # Needed for dynamic plugin loading store_version = 5 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -44,7 +47,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 15 # Needed for dynamic plugin loading store_version = 15 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -46,7 +49,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 16 # Needed for dynamic plugin loading store_version = 16 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html, etree from lxml import html, etree
@ -44,7 +47,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,7 +7,10 @@ from __future__ import (unicode_literals, division, absolute_import,
store_version = 15 # Needed for dynamic plugin loading store_version = 15 # Needed for dynamic plugin loading
from contextlib import closing from contextlib import closing
import urllib try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -44,7 +47,7 @@ def search_amazon(query, max_results=10, timeout=60,
x = x.encode('utf-8') x = x.encode('utf-8')
return x return x
uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()} uquery = {asbytes(k):asbytes(v) for k, v in uquery.items()}
url = base_url + '?' + urllib.urlencode(uquery).decode('ascii') url = base_url + '?' + urlencode(uquery).decode('ascii')
br = browser(user_agent=get_user_agent()) br = browser(user_agent=get_user_agent())
counter = max_results counter = max_results

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
from urllib import urlencode
from contextlib import closing from contextlib import closing
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html

View File

@ -7,7 +7,10 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib2 try:
from urllib.parse import quote
except ImportError:
from urllib2 import quote
from contextlib import closing from contextlib import closing
from lxml import html from lxml import html
@ -41,7 +44,7 @@ class BeamEBooksDEStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'https://www.beam-shop.de/search?saltFieldLimitation=all&sSearch=' + urllib2.quote(query) url = 'https://www.beam-shop.de/search?saltFieldLimitation=all&sSearch=' + quote(query)
br = browser() br = browser()
counter = max_results counter = max_results

View File

@ -8,8 +8,11 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -37,7 +40,7 @@ class BNStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.barnesandnoble.com/s/%s?keyword=%s&store=ebook&view=list' % (query.replace(' ', '-'), urllib.quote_plus(query)) url = 'http://www.barnesandnoble.com/s/%s?keyword=%s&store=ebook&view=list' % (query.replace(' ', '-'), quote_plus(query))
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2014, Rafael Vega <rafavega@gmail.com>' __copyright__ = '2014, Rafael Vega <rafavega@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -35,7 +38,7 @@ class BubokPortugalStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.bubok.pt/resellers/calibre_search/' + urllib.quote_plus(query) url = 'http://www.bubok.pt/resellers/calibre_search/' + quote_plus(query)
br = browser() br = browser()
@ -72,4 +75,3 @@ class BubokPortugalStore(BasicStoreConfig, StorePlugin):
def get_details(self, search_result, timeout): def get_details(self, search_result, timeout):
return True return True

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2014, Rafael Vega <rafavega@gmail.com>' __copyright__ = '2014, Rafael Vega <rafavega@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -35,7 +38,7 @@ class BubokPublishingStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.bubok.es/resellers/calibre_search/' + urllib.quote_plus(query) url = 'http://www.bubok.es/resellers/calibre_search/' + quote_plus(query)
br = browser() br = browser()
@ -72,4 +75,3 @@ class BubokPublishingStore(BasicStoreConfig, StorePlugin):
def get_details(self, search_result, timeout): def get_details(self, search_result, timeout):
return True return True

View File

@ -8,8 +8,12 @@ __copyright__ = '2011, Alex Stanev <alex@stanev.org>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
from urllib.error import HTTPError
except ImportError:
from urllib import quote, HTTPError
from lxml import html from lxml import html
@ -51,7 +55,7 @@ class ChitankaStore(BasicStoreConfig, StorePlugin):
return return
base_url = 'http://chitanka.info' base_url = 'http://chitanka.info'
url = base_url + '/search?q=' + urllib2.quote(query) url = base_url + '/search?q=' + quote(query)
counter = max_results counter = max_results
# search for book title # search for book title
@ -82,7 +86,7 @@ class ChitankaStore(BasicStoreConfig, StorePlugin):
s.downloads['TXT'] = base_url + ''.join(data.xpath('.//a[@class="dl dl-txt"]/@href')).strip().replace('.zip', '') s.downloads['TXT'] = base_url + ''.join(data.xpath('.//a[@class="dl dl-txt"]/@href')).strip().replace('.zip', '')
s.formats = 'FB2, EPUB, TXT, SFB' s.formats = 'FB2, EPUB, TXT, SFB'
yield s yield s
except urllib2.HTTPError as e: except HTTPError as e:
if e.code == 404: if e.code == 404:
return return
else: else:

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -42,7 +45,7 @@ class EBookNLStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = ('http://www.ebook.nl/store/advanced_search_result.php?keywords=' + urllib2.quote(query)) url = ('http://www.ebook.nl/store/advanced_search_result.php?keywords=' + quote(query))
br = browser() br = browser()
counter = max_results counter = max_results

View File

@ -8,9 +8,12 @@ __copyright__ = '2011-2016, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from base64 import b64encode from base64 import b64encode
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -55,7 +58,7 @@ class EbookpointStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=25, timeout=60): def search(self, query, max_results=25, timeout=60):
url = 'http://ebookpoint.pl/search?qa=&szukaj=' + urllib.quote_plus( url = 'http://ebookpoint.pl/search?qa=&szukaj=' + quote_plus(
query.decode('utf-8').encode('iso-8859-2')) + '&serwisyall=0&wprzyg=0&wsprzed=1&wyczerp=0&formaty=em-p' query.decode('utf-8').encode('iso-8859-2')) + '&serwisyall=0&wprzyg=0&wsprzed=1&wyczerp=0&formaty=em-p'
br = browser() br = browser()

View File

@ -8,8 +8,11 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -44,7 +47,7 @@ class EbookscomStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.ebooks.com/SearchApp/SearchResults.net?term=' + urllib.quote_plus(query) url = 'http://www.ebooks.com/SearchApp/SearchResults.net?term=' + quote_plus(query)
br = browser() br = browser()
@ -56,7 +59,7 @@ class EbookscomStore(BasicStoreConfig, StorePlugin):
break break
id = ''.join(data.xpath('.//a[1]/@href')) id = ''.join(data.xpath('.//a[1]/@href'))
mo = re.search('\d+', id) mo = re.search(r'\d+', id)
if not mo: if not mo:
continue continue
id = mo.group() id = mo.group()

View File

@ -7,7 +7,10 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib2 try:
from urllib.parse import quote
except ImportError:
from urllib2 import quote
from contextlib import closing from contextlib import closing
from lxml import html from lxml import html
@ -42,7 +45,7 @@ class EBookShoppeUKStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.ebookshoppe.com/search.php?search_query=' + urllib2.quote(query) url = 'http://www.ebookshoppe.com/search.php?search_query=' + quote(query)
br = browser() br = browser()
br.addheaders = [("Referer", "http://www.ebookshoppe.com/")] br.addheaders = [("Referer", "http://www.ebookshoppe.com/")]

View File

@ -9,8 +9,11 @@ __docformat__ = 'restructuredtext en'
import re import re
import random import random
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -55,7 +58,7 @@ class eKnigiStore(BasicStoreConfig, StorePlugin):
return return
base_url = 'http://e-knigi.net' base_url = 'http://e-knigi.net'
url = base_url + '/virtuemart?page=shop.browse&search_category=0&search_limiter=anywhere&keyword=' + urllib2.quote(query) url = base_url + '/virtuemart?page=shop.browse&search_category=0&search_limiter=anywhere&keyword=' + quote(query)
br = browser() br = browser()

View File

@ -8,9 +8,12 @@ __copyright__ = '2011-2017, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from base64 import b64encode from base64 import b64encode
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -55,7 +58,7 @@ class EmpikStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.empik.com/ebooki/ebooki,3501,s?resultsPP=' + str(max_results) + '&q=' + urllib.quote(query) url = 'http://www.empik.com/ebooki/ebooki,3501,s?resultsPP=' + str(max_results) + '&q=' + quote(query)
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
from PyQt5.Qt import QUrl from PyQt5.Qt import QUrl
@ -33,7 +36,7 @@ def parse_html(raw):
def search_google(query, max_results=10, timeout=60, write_html_to=None): def search_google(query, max_results=10, timeout=60, write_html_to=None):
url = 'https://www.google.com/search?tbm=bks&q=' + urllib.quote_plus(query) url = 'https://www.google.com/search?tbm=bks&q=' + quote_plus(query)
br = browser() br = browser()

View File

@ -10,8 +10,11 @@ __docformat__ = 'restructuredtext en'
import base64 import base64
import mimetypes import mimetypes
import re import re
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import etree from lxml import etree
@ -31,7 +34,7 @@ def fix_url(url):
def search(query, max_results=10, timeout=60, write_raw_to=None): def search(query, max_results=10, timeout=60, write_raw_to=None):
url = 'http://m.gutenberg.org/ebooks/search.opds/?query=' + urllib.quote_plus(query) url = 'http://m.gutenberg.org/ebooks/search.opds/?query=' + quote_plus(query)
counter = max_results counter = max_results
br = browser(user_agent='calibre/'+__version__) br = browser(user_agent='calibre/'+__version__)

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html, etree from lxml import html, etree
@ -23,7 +26,7 @@ from calibre.gui2.store.web_store_dialog import WebStoreDialog
def search_kobo(query, max_results=10, timeout=60, write_html_to=None): def search_kobo(query, max_results=10, timeout=60, write_html_to=None):
from css_selectors import Select from css_selectors import Select
url = 'https://www.kobobooks.com/search/search.html?q=' + urllib.quote_plus(query) url = 'https://www.kobobooks.com/search/search.html?q=' + quote_plus(query)
br = browser() br = browser()
@ -89,7 +92,7 @@ class KoboStore(BasicStoreConfig, StorePlugin):
murl = 'https://click.linksynergy.com/fs-bin/click?id=%s&subid=&offerid=280046.1&type=10&tmpid=9310&RD_PARM1=http%%3A%%2F%%2Fkobo.com' % pub_id murl = 'https://click.linksynergy.com/fs-bin/click?id=%s&subid=&offerid=280046.1&type=10&tmpid=9310&RD_PARM1=http%%3A%%2F%%2Fkobo.com' % pub_id
if detail_item: if detail_item:
purl = 'https://click.linksynergy.com/link?id=%s&offerid=280046&type=2&murl=%s' % (pub_id, urllib.quote_plus(detail_item)) purl = 'https://click.linksynergy.com/link?id=%s&offerid=280046&type=2&murl=%s' % (pub_id, quote_plus(detail_item))
url = purl url = purl
else: else:
purl = None purl = None

View File

@ -8,9 +8,12 @@ __copyright__ = '2011-2017, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from base64 import b64encode from base64 import b64encode
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -55,7 +58,7 @@ class LegimiStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'https://www.legimi.pl/ebooki/?szukaj=' + urllib.quote_plus(query) url = 'https://www.legimi.pl/ebooki/?szukaj=' + quote_plus(query)
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -43,7 +46,7 @@ class LibreDEStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = ('http://www.ebook.de/de/pathSearch?nav=52122&searchString=' + urllib2.quote(query)) url = ('http://www.ebook.de/de/pathSearch?nav=52122&searchString=' + quote(query))
br = browser() br = browser()
counter = max_results counter = max_results

View File

@ -9,7 +9,10 @@ __docformat__ = 'restructuredtext en'
import random import random
import re import re
import urllib2 try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from contextlib import closing from contextlib import closing
from lxml import etree from lxml import etree
@ -37,7 +40,7 @@ class LitResStore(BasicStoreConfig, StorePlugin):
if detail_item: if detail_item:
# http://www.litres.ru/pages/biblio_book/?art=157074 # http://www.litres.ru/pages/biblio_book/?art=157074
detail_url = self.shop_url + u'/pages/biblio_book/' + aff_id +\ detail_url = self.shop_url + u'/pages/biblio_book/' + aff_id +\
u'&art=' + urllib2.quote(detail_item) u'&art=' + quote(detail_item)
if external or self.config.get('open_external', False): if external or self.config.get('open_external', False):
open_url(QUrl(url_slash_cleaner(detail_url if detail_url else url))) open_url(QUrl(url_slash_cleaner(detail_url if detail_url else url)))
@ -50,7 +53,7 @@ class LitResStore(BasicStoreConfig, StorePlugin):
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
search_url = u'http://robot.litres.ru/pages/catalit_browser/?checkpoint=2000-01-02&'\ search_url = u'http://robot.litres.ru/pages/catalit_browser/?checkpoint=2000-01-02&'\
'search=%s&limit=0,%s' 'search=%s&limit=0,%s'
search_url = search_url % (urllib2.quote(query), max_results) search_url = search_url % (quote(query), max_results)
counter = max_results counter = max_results
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -43,7 +46,7 @@ class MillsBoonUKStore(BasicStoreConfig, StorePlugin):
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
base_url = 'https://www.millsandboon.co.uk' base_url = 'https://www.millsandboon.co.uk'
url = base_url + '/search.aspx??format=ebook&searchText=' + urllib2.quote(query) url = base_url + '/search.aspx??format=ebook&searchText=' + quote(query)
br = browser() br = browser()
counter = max_results counter = max_results

View File

@ -8,8 +8,11 @@ __copyright__ = '2011-2016, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -46,7 +49,7 @@ class NextoStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.nexto.pl/szukaj.xml?search-clause=' + urllib.quote_plus(query) + '&scid=1015' url = 'http://www.nexto.pl/szukaj.xml?search-clause=' + quote_plus(query) + '&scid=1015'
br = browser() br = browser()
offset=0 offset=0

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -36,7 +39,7 @@ class OpenBooksStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'https://drmfree.calibre-ebook.com/search/?q=' + urllib.quote_plus(query) url = 'https://drmfree.calibre-ebook.com/search/?q=' + quote_plus(query)
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011-2013, Roman Mukhin <ramses_ru at hotmail.com>' __copyright__ = '2011-2013, Roman Mukhin <ramses_ru at hotmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from PyQt5.Qt import QUrl from PyQt5.Qt import QUrl
@ -34,7 +37,7 @@ def parse_html(raw):
def search(query, max_results=15, timeout=60): def search(query, max_results=15, timeout=60):
url = 'http://www.ozon.ru/?context=search&text=%s&store=1,0&group=div_book' % urllib.quote_plus(query) url = 'http://www.ozon.ru/?context=search&text=%s&store=1,0&group=div_book' % quote_plus(query)
counter = max_results counter = max_results
br = browser() br = browser()

View File

@ -7,7 +7,10 @@ __license__ = 'GPL 3'
__copyright__ = '2012-2017, Tomasz Długosz <tomek3d@gmail.com>' __copyright__ = '2012-2017, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from base64 import b64encode from base64 import b64encode
from contextlib import closing from contextlib import closing
@ -59,7 +62,7 @@ class PublioStore(BasicStoreConfig, StorePlugin):
counter = max_results counter = max_results
page = 1 page = 1
while counter: while counter:
with closing(br.open('http://www.publio.pl/e-booki,strona' + str(page) + '.html?q=' + urllib.quote(query), timeout=timeout)) as f: # noqa with closing(br.open('http://www.publio.pl/e-booki,strona' + str(page) + '.html?q=' + quote(query), timeout=timeout)) as f: # noqa
doc = html.fromstring(f.read()) doc = html.fromstring(f.read())
for data in doc.xpath('//div[@class="products-list"]//div[@class="product-tile"]'): for data in doc.xpath('//div[@class="products-list"]//div[@class="product-tile"]'):
if counter <= 0: if counter <= 0:

View File

@ -8,8 +8,11 @@ __copyright__ = '2011, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from lxml import html from lxml import html
@ -46,7 +49,7 @@ class RW2010Store(BasicStoreConfig, StorePlugin):
br = browser() br = browser()
counter = max_results counter = max_results
with closing(br.open(url, data=urllib.urlencode(values), timeout=timeout)) as f: with closing(br.open(url, data=urlencode(values), timeout=timeout)) as f:
doc = html.fromstring(f.read()) doc = html.fromstring(f.read())
for data in doc.xpath('//div[@class="ProductDetail"]'): for data in doc.xpath('//div[@class="ProductDetail"]'):
if counter <= 0: if counter <= 0:

View File

@ -9,8 +9,11 @@ __docformat__ = 'restructuredtext en'
import random import random
import re import re
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -25,7 +28,7 @@ from calibre.gui2.store.web_store_dialog import WebStoreDialog
def search(query, max_results=10, timeout=60): def search(query, max_results=10, timeout=60):
url = 'https://www.smashwords.com/books/search?query=' + urllib2.quote(query) url = 'https://www.smashwords.com/books/search?query=' + quote(query)
br = browser() br = browser()
try: try:

View File

@ -7,9 +7,12 @@ __license__ = 'GPL 3'
__copyright__ = '2017, Tomasz Długosz <tomek3d@gmail.com>' __copyright__ = '2017, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from base64 import b64encode from base64 import b64encode
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -60,7 +63,7 @@ class SwiatEbookowStore(BasicStoreConfig, StorePlugin):
counter = max_results counter = max_results
while counter: while counter:
with closing(br.open('https://www.swiatebookow.pl/ebooki/?q=' + urllib.quote(query) + '&page=' + str(page), timeout=timeout)) as f: with closing(br.open('https://www.swiatebookow.pl/ebooki/?q=' + quote(query) + '&page=' + str(page), timeout=timeout)) as f:
doc = html.fromstring(f.read().decode('utf-8')) doc = html.fromstring(f.read().decode('utf-8'))
for data in doc.xpath('//div[@class="category-item-container"]//div[@class="book-large"]'): for data in doc.xpath('//div[@class="category-item-container"]//div[@class="book-large"]'):
if counter <= 0: if counter <= 0:

View File

@ -8,9 +8,12 @@ __copyright__ = '2011-2017, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
import urllib
from base64 import b64encode from base64 import b64encode
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -55,7 +58,7 @@ class VirtualoStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=12, timeout=60): def search(self, query, max_results=12, timeout=60):
url = 'http://virtualo.pl/?q=' + urllib.quote(query) url = 'http://virtualo.pl/?q=' + quote(query)
br = browser() br = browser()
no_drm_pattern = re.compile(r'Watermark|Brak') no_drm_pattern = re.compile(r'Watermark|Brak')

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib2 import quote_plus
from lxml import html from lxml import html
@ -36,7 +39,7 @@ class WeightlessBooksStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://weightlessbooks.com/?s=' + urllib.quote_plus(query) url = 'http://weightlessbooks.com/?s=' + quote_plus(query)
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib2
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from lxml import html from lxml import html
@ -43,7 +46,7 @@ class WHSmithUKStore(BasicStoreConfig, StorePlugin):
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = ('http://www.whsmith.co.uk/search?keywordCategoryId=wc_dept_ebooks&results=60' url = ('http://www.whsmith.co.uk/search?keywordCategoryId=wc_dept_ebooks&results=60'
'&page=1&keywords=' + urllib2.quote(query)) '&page=1&keywords=' + quote(query))
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011-2017, Tomasz Długosz <tomek3d@gmail.com>' __copyright__ = '2011-2017, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from base64 import b64encode from base64 import b64encode
try:
from urllib.parse import urlencode, quote_plus
except ImportError:
from urllib import urlencode, quote_plus
from lxml import html from lxml import html
from mechanize import Request from mechanize import Request
@ -33,7 +36,7 @@ def as_base64(data):
def search(query, max_results=10, timeout=60): def search(query, max_results=10, timeout=60):
url = 'http://woblink.com/publication/ajax?mode=none&query=' + urllib.quote_plus(query.encode('utf-8')) url = 'http://woblink.com/publication/ajax?mode=none&query=' + quote_plus(query.encode('utf-8'))
if max_results > 10: if max_results > 10:
if max_results > 20: if max_results > 20:
url += '&limit=30' url += '&limit=30'
@ -46,7 +49,7 @@ def search(query, max_results=10, timeout=60):
'X-Requested-With': 'XMLHttpRequest', 'X-Requested-With': 'XMLHttpRequest',
'Referrer':'http://woblink.com/ebooki-kategorie', 'Referrer':'http://woblink.com/ebooki-kategorie',
'Cache-Control':'max-age=0', 'Cache-Control':'max-age=0',
}, data=urllib.urlencode({ }, data=urlencode({
'nw_filtry_filtr_zakrescen_formularz[min]':'0', 'nw_filtry_filtr_zakrescen_formularz[min]':'0',
'nw_filtry_filtr_zakrescen_formularz[max]':'350', 'nw_filtry_filtr_zakrescen_formularz[max]':'350',
})) }))

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2012-2014, Tomasz Długosz <tomek3d@gmail.com>' __copyright__ = '2012-2014, Tomasz Długosz <tomek3d@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import html from lxml import html
@ -41,7 +44,7 @@ class WolneLekturyStore(BasicStoreConfig, StorePlugin):
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://wolnelektury.pl/szukaj?q=' + urllib.quote_plus(query.encode('utf-8')) url = 'http://wolnelektury.pl/szukaj?q=' + quote_plus(query.encode('utf-8'))
br = browser() br = browser()

View File

@ -7,8 +7,11 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>' __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing from contextlib import closing
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
from lxml import etree from lxml import etree
@ -39,7 +42,7 @@ class XinXiiStore(BasicStoreConfig, OpenSearchOPDSStore):
function so this one is modified to remove parts that are used. function so this one is modified to remove parts that are used.
''' '''
url = 'http://www.xinxii.com/catalog-search/query/?keywords=' + urllib.quote_plus(query) url = 'http://www.xinxii.com/catalog-search/query/?keywords=' + quote_plus(query)
counter = max_results counter = max_results
br = browser() br = browser()

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import ANIMNS from .namespaces import ANIMNS
from element import Element from .element import Element
# Autogenerated # Autogenerated
@ -58,4 +58,3 @@ def Set(**args):
def Transitionfilter(**args): def Transitionfilter(**args):
return Element(qname = (ANIMNS,'transitionFilter'), **args) return Element(qname = (ANIMNS,'transitionFilter'), **args)

View File

@ -17,7 +17,7 @@
# #
# Contributor(s): # Contributor(s):
# #
from namespaces import * from .namespaces import *
import re, types import re, types
pattern_color = re.compile(r'#[0-9a-fA-F]{6}') pattern_color = re.compile(r'#[0-9a-fA-F]{6}')

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import CHARTNS from .namespaces import CHARTNS
from element import Element from .element import Element
# Autogenerated # Autogenerated
def Axis(**args): def Axis(**args):
@ -84,4 +84,3 @@ def Title(**args):
def Wall(**args): def Wall(**args):
return Element(qname = (CHARTNS,'wall'), **args) return Element(qname = (CHARTNS,'wall'), **args)

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import CONFIGNS from .namespaces import CONFIGNS
from element import Element from .element import Element
# Autogenerated # Autogenerated
def ConfigItem(**args): def ConfigItem(**args):
@ -36,4 +36,3 @@ def ConfigItemMapNamed(**args):
def ConfigItemSet(**args): def ConfigItemSet(**args):
return Element(qname = (CONFIGNS, 'config-item-set'), **args) return Element(qname = (CONFIGNS, 'config-item-set'), **args)

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import DCNS from .namespaces import DCNS
from element import Element from .element import Element
# Autogenerated # Autogenerated
def Creator(**args): def Creator(**args):

View File

@ -18,9 +18,9 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import DR3DNS from .namespaces import DR3DNS
from element import Element from .element import Element
from draw import StyleRefElement from .draw import StyleRefElement
# Autogenerated # Autogenerated
def Cube(**args): def Cube(**args):
@ -40,4 +40,3 @@ def Scene(**args):
def Sphere(**args): def Sphere(**args):
return StyleRefElement(qname = (DR3DNS,'sphere'), **args) return StyleRefElement(qname = (DR3DNS,'sphere'), **args)

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import DRAWNS, STYLENS, PRESENTATIONNS from .namespaces import DRAWNS, STYLENS, PRESENTATIONNS
from element import Element from .element import Element
def StyleRefElement(stylename=None, classnames=None, **args): def StyleRefElement(stylename=None, classnames=None, **args):
qattrs = {} qattrs = {}

View File

@ -24,9 +24,9 @@
# #
import xml.dom import xml.dom
from xml.dom.minicompat import * from xml.dom.minicompat import *
from namespaces import nsdict from .namespaces import nsdict
import grammar from . import grammar
from attrconverters import AttrConverters from .attrconverters import AttrConverters
# The following code is pasted form xml.sax.saxutils # The following code is pasted form xml.sax.saxutils
# Tt makes it possible to run the code without the xml sax package installed # Tt makes it possible to run the code without the xml sax package installed
@ -80,9 +80,9 @@ def _nsassign(namespace):
return nsdict.setdefault(namespace,"ns" + str(len(nsdict))) return nsdict.setdefault(namespace,"ns" + str(len(nsdict)))
# Exceptions # Exceptions
class IllegalChild(StandardError): class IllegalChild(Exception):
""" Complains if you add an element to a parent where it is not allowed """ """ Complains if you add an element to a parent where it is not allowed """
class IllegalText(StandardError): class IllegalText(Exception):
""" Complains if you add text or cdata to an element where it is not allowed """ """ Complains if you add text or cdata to an element where it is not allowed """
class Node(xml.dom.Node): class Node(xml.dom.Node):
@ -255,7 +255,7 @@ class Text(Childless, Node):
if self.data: if self.data:
f.write(_escape(type(u'')(self.data).encode('utf-8'))) f.write(_escape(type(u'')(self.data).encode('utf-8')))
class CDATASection(Childless, Text): class CDATASection(Text, Childless):
nodeType = Node.CDATA_SECTION_NODE nodeType = Node.CDATA_SECTION_NODE
def toXml(self,level,f): def toXml(self,level,f):

View File

@ -19,7 +19,7 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import * from .namespaces import *
# Inline element don't cause a box # Inline element don't cause a box
# They are analogous to the HTML elements SPAN, B, I etc. # They are analogous to the HTML elements SPAN, B, I etc.

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import FORMNS from .namespaces import FORMNS
from element import Element from .element import Element
# Autogenerated # Autogenerated

View File

@ -23,7 +23,7 @@ Currently it contains the legal child elements of a given element.
To be used for validation check in the API To be used for validation check in the API
""" """
from namespaces import * from .namespaces import *
# The following code is generated from the RelaxNG schema with this notice: # The following code is generated from the RelaxNG schema with this notice:

View File

@ -26,8 +26,8 @@
from __future__ import print_function from __future__ import print_function
from xml.sax import handler from xml.sax import handler
from element import Element from .element import Element
from namespaces import OFFICENS from .namespaces import OFFICENS
# #
# Parse the XML files # Parse the XML files

View File

@ -20,8 +20,8 @@
# #
# #
from namespaces import MANIFESTNS from .namespaces import MANIFESTNS
from element import Element from .element import Element
# Autogenerated # Autogenerated
def Manifest(**args): def Manifest(**args):
@ -38,4 +38,3 @@ def Algorithm(**args):
def KeyDerivation(**args): def KeyDerivation(**args):
return Element(qname = (MANIFESTNS,'key-derivation'), **args) return Element(qname = (MANIFESTNS,'key-derivation'), **args)

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import MATHNS from .namespaces import MATHNS
from element import Element from .element import Element
# ODF 1.0 section 12.5 # ODF 1.0 section 12.5
# Mathematical content is represented by MathML 2.0 # Mathematical content is represented by MathML 2.0

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import METANS from .namespaces import METANS
from element import Element from .element import Element
# Autogenerated # Autogenerated
def AutoReload(**args): def AutoReload(**args):

View File

@ -18,9 +18,9 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import NUMBERNS from .namespaces import NUMBERNS
from element import Element from .element import Element
from style import StyleElement from .style import StyleElement
# Autogenerated # Autogenerated
@ -101,4 +101,3 @@ def WeekOfYear(**args):
def Year(**args): def Year(**args):
return Element(qname = (NUMBERNS,'year'), **args) return Element(qname = (NUMBERNS,'year'), **args)

View File

@ -20,9 +20,9 @@
# Contributor(s): # Contributor(s):
# #
import sys, zipfile, xml.dom.minidom import zipfile, xml.dom.minidom
from namespaces import nsdict from .namespaces import nsdict
from elementtypes import * from .elementtypes import *
IGNORED_TAGS = [ IGNORED_TAGS = [
'draw:a' 'draw:a'

View File

@ -25,9 +25,9 @@ from xml.sax import handler
from xml.sax.saxutils import escape, quoteattr from xml.sax.saxutils import escape, quoteattr
from xml.dom import Node from xml.dom import Node
from opendocument import load from .opendocument import load
from namespaces import ANIMNS, CHARTNS, CONFIGNS, DCNS, DR3DNS, DRAWNS, FONS, \ from .namespaces import ANIMNS, CHARTNS, CONFIGNS, DCNS, DR3DNS, DRAWNS, FONS, \
FORMNS, MATHNS, METANS, NUMBERNS, OFFICENS, PRESENTATIONNS, SCRIPTNS, \ FORMNS, MATHNS, METANS, NUMBERNS, OFFICENS, PRESENTATIONNS, SCRIPTNS, \
SMILNS, STYLENS, SVGNS, TABLENS, TEXTNS, XLINKNS SMILNS, STYLENS, SVGNS, TABLENS, TEXTNS, XLINKNS

View File

@ -18,9 +18,9 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import OFFICENS from .namespaces import OFFICENS
from element import Element from .element import Element
from draw import StyleRefElement from .draw import StyleRefElement
# Autogenerated # Autogenerated
def Annotation(**args): def Annotation(**args):

View File

@ -20,15 +20,13 @@
__doc__="""Use OpenDocument to generate your documents.""" __doc__="""Use OpenDocument to generate your documents."""
import zipfile, time, sys, mimetypes, copy import zipfile, time, sys, mimetypes
from cStringIO import StringIO from .namespaces import *
from namespaces import * from . import manifest, meta, element
import manifest, meta from .office import *
from office import * from .attrconverters import make_NCName
import element
from attrconverters import make_NCName
from xml.sax.xmlreader import InputSource from xml.sax.xmlreader import InputSource
from odfmanifest import manifestlist from .odfmanifest import manifestlist
from polyglot.io import PolyglotBytesIO from polyglot.io import PolyglotBytesIO
__version__= TOOLSVERSION __version__= TOOLSVERSION
@ -177,7 +175,7 @@ class OpenDocument:
""" Generates the content.xml file """ Generates the content.xml file
Always written as a bytestream in UTF-8 encoding Always written as a bytestream in UTF-8 encoding
""" """
xml=StringIO() xml=PolyglotBytesIO()
xml.write(_XMLPROLOGUE) xml.write(_XMLPROLOGUE)
x = DocumentContent() x = DocumentContent()
x.write_open_tag(0, xml) x.write_open_tag(0, xml)
@ -202,7 +200,7 @@ class OpenDocument:
""" Generates the manifest.xml file """ Generates the manifest.xml file
The self.manifest isn't avaible unless the document is being saved The self.manifest isn't avaible unless the document is being saved
""" """
xml=StringIO() xml=PolyglotBytesIO()
xml.write(_XMLPROLOGUE) xml.write(_XMLPROLOGUE)
self.manifest.toXml(0,xml) self.manifest.toXml(0,xml)
return xml.getvalue() return xml.getvalue()

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import PRESENTATIONNS from .namespaces import PRESENTATIONNS
from element import Element from .element import Element
# ODF 1.0 section 9.6 and 9.7 # ODF 1.0 section 9.6 and 9.7
# Autogenerated # Autogenerated

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import SCRIPTNS from .namespaces import SCRIPTNS
from element import Element from .element import Element
# ODF 1.0 section 12.4.1 # ODF 1.0 section 12.4.1
# The <script:event-listener> element binds an event to a macro. # The <script:event-listener> element binds an event to a macro.

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import STYLENS from .namespaces import STYLENS
from element import Element from .element import Element
def StyleElement(**args): def StyleElement(**args):
e = Element(**args) e = Element(**args)

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import SVGNS from .namespaces import SVGNS
from element import Element from .element import Element
from draw import DrawElement from draw import DrawElement
# Autogenerated # Autogenerated

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import TABLENS from .namespaces import TABLENS
from element import Element from .element import Element
# Autogenerated # Autogenerated

View File

@ -18,9 +18,9 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import TEXTNS from .namespaces import TEXTNS
from element import Element from .element import Element
from style import StyleElement from .style import StyleElement
# Autogenerated # Autogenerated
def A(**args): def A(**args):
@ -559,4 +559,3 @@ def VariableSet(**args):
def WordCount(**args): def WordCount(**args):
return Element(qname = (TEXTNS,'word-count'), **args) return Element(qname = (TEXTNS,'word-count'), **args)

View File

@ -18,8 +18,8 @@
# Contributor(s): # Contributor(s):
# #
from namespaces import XFORMSNS from .namespaces import XFORMSNS
from element import Element from .element import Element
# ODF 1.0 section 11.2 # ODF 1.0 section 11.2
# XForms is designed to be embedded in another XML format. # XForms is designed to be embedded in another XML format.