Sycn to trunk.

This commit is contained in:
John Schember 2009-08-10 21:21:53 -04:00
commit 6ecb62a1be
8 changed files with 127 additions and 138 deletions

View File

@ -2,7 +2,7 @@ __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
__appname__ = 'calibre'
__version__ = '0.6.5'
__version__ = '0.6.6'
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
import re

View File

@ -29,7 +29,7 @@ class CLI(object):
def get_file(self, path, outfile, end_session=True):
path = self.munge_path(path)
with open(path, 'rb') as src:
shutil.copyfileobj(src, outfile, 10*1024*1024)
shutil.copyfileobj(src, outfile)
def put_file(self, infile, path, replace_file=False, end_session=True):
path = self.munge_path(path)
@ -44,10 +44,8 @@ class CLI(object):
d = os.path.dirname(path)
if not os.path.exists(d):
os.makedirs(d)
dest = open(path, 'wb')
shutil.copyfileobj(infile, dest, 10*1024*1024)
dest.flush()
dest.close()
with open(path, 'wb') as dest:
shutil.copyfileobj(infile, dest)
if close:
infile.close()

View File

@ -4,12 +4,13 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
Interface to isbndb.com. My key HLLXQX2A.
'''
import sys, re, socket
from urllib import urlopen, quote
import sys, re
from urllib import quote
from calibre.utils.config import OptionParser
from calibre.ebooks.metadata import MetaInformation
from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup
from calibre import browser
BASE_URL = 'http://isbndb.com/api/books.xml?access_key=%(key)s&page_number=1&results=subjects,authors,texts&'
@ -20,12 +21,10 @@ def fetch_metadata(url, max=100, timeout=5.):
books = []
page_number = 1
total_results = sys.maxint
timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(timeout)
try:
br = browser()
while len(books) < total_results and max > 0:
try:
raw = urlopen(url).read()
raw = br.open(url, timeout=timeout).read()
except Exception, err:
raise ISBNDBError('Could not fetch ISBNDB metadata. Error: '+str(err))
soup = BeautifulStoneSoup(raw,
@ -40,8 +39,6 @@ def fetch_metadata(url, max=100, timeout=5.):
books.extend(book_list.findAll('bookdata'))
max -= 1
return books
finally:
socket.setdefaulttimeout(timeout)
class ISBNDBMetadata(MetaInformation):

View File

@ -38,17 +38,16 @@ def cover_from_isbn(isbn, timeout=5., username=None, password=None):
global browser
if browser is None:
browser = _browser()
_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(timeout)
src = None
try:
return browser.open(OPENLIBRARY%isbn).read(), 'jpg'
return browser.open(OPENLIBRARY%isbn, timeout=timeout).read(), 'jpg'
except:
pass # Cover not found
if username and password:
login(username, password, force=False)
try:
src = browser.open('http://www.librarything.com/isbn/'+isbn).read().decode('utf-8', 'replace')
src = browser.open('http://www.librarything.com/isbn/'+isbn,
timeout=timeout).read().decode('utf-8', 'replace')
except Exception, err:
if isinstance(getattr(err, 'args', [None])[0], socket.timeout):
err = LibraryThingError(_('LibraryThing.com timed out. Try again later.'))
@ -66,8 +65,6 @@ def cover_from_isbn(isbn, timeout=5., username=None, password=None):
url = re.sub(r'_S[XY]\d+', '', url['src'])
cover_data = browser.open(url).read()
return cover_data, url.rpartition('.')[-1]
finally:
socket.setdefaulttimeout(_timeout)
def option_parser():
parser = OptionParser(usage=\

View File

@ -84,5 +84,5 @@ class MainWindow(QMainWindow):
msg = '<b>%s</b>:'%type.__name__ + unicode(str(value), 'utf8', 'replace')
error_dialog(self, _('ERROR: Unhandled exception'), msg, det_msg=fe,
show=True)
except:
except BaseException:
pass

View File

@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: calibre 0.6.5\n"
"POT-Creation-Date: 2009-08-10 11:28+MDT\n"
"PO-Revision-Date: 2009-08-10 11:28+MDT\n"
"Project-Id-Version: calibre 0.6.6\n"
"POT-Creation-Date: 2009-08-10 19:10+MDT\n"
"PO-Revision-Date: 2009-08-10 19:10+MDT\n"
"Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
@ -93,8 +93,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:139
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:141
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:248
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:255
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:258
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:91
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:98
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:19
@ -1087,7 +1087,7 @@ msgid "Path to output file"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:290
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:116
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113
msgid "Verbose processing"
msgstr ""
@ -1164,51 +1164,51 @@ msgstr ""
msgid "Set book ID"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:87
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:90
msgid "Enable autorotation of images that are wider than the screen width."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:91
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:94
msgid "Set the space between words in pts. Default is %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:94
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:97
msgid "Add a header to all the pages with title and author."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:97
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:100
msgid "Set the format of the header. %a is replaced by the author and %t by the title. Default is %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:101
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:104
msgid "Add extra spacing below the header. Default is %default pt."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:104
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:107
msgid "Minimum paragraph indent (the indent of the first line of a paragraph) in pts. Default: %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:109
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:112
msgid "Render tables in the HTML as images (useful if the document has large or complex tables)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:114
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:117
msgid "Multiply the size of text in rendered tables by this factor. Default is %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:118
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:121
msgid "The serif family of fonts to embed"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:121
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:124
msgid "The sans-serif family of fonts to embed"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:124
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:127
msgid "The monospace family of fonts to embed"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:149
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:152
msgid "Comic"
msgstr ""
@ -1363,7 +1363,7 @@ msgstr ""
msgid "No cover found"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:97
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:94
msgid ""
"\n"
"%prog [options] key\n"
@ -1376,39 +1376,39 @@ msgid ""
"\n"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:108
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:105
msgid "The ISBN ID of the book you want metadata for."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:110
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:107
msgid "The author whose book to search for."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:112
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:109
msgid "The title of the book to search for."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:114
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111
msgid "The publisher of the book to search for."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:54
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:53
msgid "LibraryThing.com timed out. Try again later."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:61
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:60
msgid "Could not fetch cover as server is experiencing high load. Please try again later."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:61
msgid " not found."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:65
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:64
msgid "LibraryThing.com server error. Try again later."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:74
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:71
msgid ""
"\n"
"%prog [options] ISBN\n"
@ -1890,7 +1890,12 @@ msgid "Default action to perform when send to device button is clicked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:113
msgid "Copied to clipboard"
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:396
msgid "Copied"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:142
msgid "Copy"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:142
@ -2828,7 +2833,7 @@ msgid "Attached, you will find the e-book"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:550
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:176
msgid "by"
msgstr ""
@ -2928,7 +2933,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:214
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:215
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:344
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83
@ -2968,157 +2973,161 @@ msgid "&Profile:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:169
msgid " plugins"
msgid "%(plugin_type)s %(plugins)s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:194
msgid "Conversion"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:194
msgid "General"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:194
msgid "Interface"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:170
msgid "plugins"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:195
msgid "Conversion"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:195
msgid "General"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:195
msgid "Interface"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:196
msgid ""
"Email\n"
"Delivery"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:197
msgid "Advanced"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:197
msgid ""
"Content\n"
"Server"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:197
msgid "Plugins"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:214
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:215
msgid "Auto send"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:214
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:215
msgid "Email"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:219
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:220
msgid "Formats to email. The first matching format will be sent."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:220
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:221
msgid "If checked, downloaded news will be automatically mailed <br>to this email address (provided it is in one of the listed formats)."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:294
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:295
msgid "new email address"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:510
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:511
msgid "No valid plugin path"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:511
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:512
msgid "%s is not a valid plugin path"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:514
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:515
msgid "Choose plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:526
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:527
msgid "Plugin cannot be disabled"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:527
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:528
msgid "The plugin: %s cannot be disabled"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:536
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:537
msgid "Plugin not customizable"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:537
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:538
msgid "Plugin: %s does not need customization"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:562
msgid "Customize %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:571
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:572
msgid "Cannot remove builtin plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:572
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:573
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:605
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:606
msgid "Error log:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:612
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:613
msgid "Access log:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:637
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:638
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:562
msgid "Failed to start content server"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:661
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:662
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:468
msgid "Select location for books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:678
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:679
msgid "Invalid size"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:679
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:680
msgid "The size %s is invalid. must be of the form widthxheight"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:724
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:729
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:725
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:730
msgid "Invalid database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:725
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:726
msgid "Invalid database location "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:726
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:727
msgid "<br>Must be a directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:730
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:731
msgid "Invalid database location.<br>Cannot write to "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:755
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:756
msgid "Checking..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:756
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:757
msgid "Checking database integrity. This may take a while."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:769
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:770
msgid "Some inconsistencies found"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:770
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:771
msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly."
msgstr ""
@ -5427,10 +5436,6 @@ msgstr ""
msgid "Failed to move library"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:396
msgid "Copied"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:440
msgid "Invalid database"
msgstr ""
@ -6354,50 +6359,50 @@ msgstr ""
msgid "Chinese"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:458
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:452
msgid ""
"%prog URL\n"
"\n"
"Where URL is for example http://google.com"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:461
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:455
msgid "Base directory into which URL is saved. Default is %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:464
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:458
msgid "Timeout in seconds to wait for a response from the server. Default: %default s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:467
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:461
msgid "Maximum number of levels to recurse i.e. depth of links to follow. Default %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:470
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:464
msgid "The maximum number of files to download. This only applies to files from <a href> tags. Default is %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:472
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:466
msgid "Minimum interval in seconds between consecutive fetches. Default is %default s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:474
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:468
msgid "The character encoding for the websites you are trying to download. The default is to try and guess the encoding."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:476
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:470
msgid "Only links that match this regular expression will be followed. This option can be specified multiple times, in which case as long as a link matches any one regexp, it will be followed. By default all links are followed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:478
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:472
msgid "Any link that matches this regular expression will be ignored. This option can be specified multiple times, in which case as long as any regexp matches a link, it will be ignored.By default, no links are ignored. If both --filter-regexp and --match-regexp are specified, then --filter-regexp is applied first."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:474
msgid "Do not download CSS stylesheets."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:481
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:475
msgid "Show detailed output information. Useful for debugging"
msgstr ""

View File

@ -192,8 +192,6 @@ class Server(Thread):
if len(self.pool) + len(self.workers) < self.pool_size:
try:
self.pool.append(self.launch_worker())
except CriticalError:
raise
except Exception:
pass

View File

@ -105,9 +105,8 @@ class RecursiveFetcher(object):
if not os.path.exists(self.base_dir):
os.makedirs(self.base_dir)
self.log = log
self.default_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(options.timeout)
self.verbose = options.verbose
self.timeout = options.timeout
self.encoding = options.encoding
self.browser = options.browser if hasattr(options, 'browser') else browser()
self.max_recursions = options.max_recursions
@ -194,7 +193,7 @@ class RecursiveFetcher(object):
url = urlparse.urlunparse(purl)
with self.browser_lock:
try:
with closing(self.browser.open(url)) as f:
with closing(self.browser.open(url, timeout=self.timeout)) as f:
data = response(f.read()+f.read())
data.newurl = f.geturl()
except urllib2.URLError, err:
@ -204,7 +203,7 @@ class RecursiveFetcher(object):
getattr(getattr(err, 'args', [None])[0], 'errno', None) == -2: # Connection reset by peer or Name or service not know
self.log.debug('Temporary error, retrying in 1 second')
time.sleep(1)
with closing(self.browser.open(url)) as f:
with closing(self.browser.open(url, timeout=self.timeout)) as f:
data = response(f.read()+f.read())
data.newurl = f.geturl()
else:
@ -450,11 +449,6 @@ class RecursiveFetcher(object):
print
return res
def __del__(self):
dt = getattr(self, 'default_timeout', None)
if dt is not None:
socket.setdefaulttimeout(dt)
def option_parser(usage=_('%prog URL\n\nWhere URL is for example http://google.com')):
parser = OptionParser(usage=usage)
parser.add_option('-d', '--base-dir',