Add --mozilla-cookies CLI option.

This commit is contained in:
Jim Miller 2022-04-06 10:52:11 -05:00
parent d7f149e990
commit 81ef198d00
3 changed files with 54 additions and 30 deletions

View file

@ -163,6 +163,11 @@ def mkParser(calibre, parser=None):
parser.add_option('--color',
action='store_true', dest='color',
help='Display a errors and warnings in a contrasting color. Requires package colorama on Windows.', )
parser.add_option('--mozilla-cookies',
dest='mozillacookies',
help='Read and use cookies from COOKIEFILE in Mozilla/Netscape cookies.txt format.',
metavar='COOKIEFILE')
def printVersion(*args):
print("Version: %s" % version)
@ -175,6 +180,8 @@ def mkParser(calibre, parser=None):
## undocumented feature for development use. Save page cache and
## cookies between runs. Saves in PWD as files global_cache and
## global_cookies
## *does* honor --mozilla-cookies setting and writes cookies to
## *set file instead of global_cookies.
parser.add_option('--save-cache', '--save_cache',
action='store_true', dest='save_cache',
help=SUPPRESS_HELP, )
@ -655,13 +662,23 @@ def get_configuration(url,
## All CLI downloads are sequential and share one cookiejar,
## loaded the first time through here.
if not hasattr(options,'cookiejar'):
options.cookiejar = configuration.get_cookiejar()
cookiefile = None
if options.mozillacookies:
cookiefile = options.mozillacookies
options.cookiejar = configuration.get_cookiejar(filename=cookiefile,
mozilla=True)
else:
options.cookiejar = configuration.get_cookiejar()
if options.save_cache:
if not cookiefile:
cookiefile = global_cookies
options.cookiejar.set_autosave(True,filename=cookiefile)
if cookiefile:
try:
options.cookiejar.load_cookiejar(global_cookies)
options.cookiejar.load_cookiejar(cookiefile)
except Exception as e:
logger.warning("Didn't load --save-cache %s\nContinue without loading cookies"%e)
options.cookiejar.set_autosave(True,filename=global_cookies)
logger.warning("Didn't load cookie file %s\nContinue without loading cookies"%e)
else:
configuration.set_cookiejar(options.cookiejar)

View file

@ -1060,8 +1060,8 @@ class Configuration(ConfigParser):
def set_sleep_override(self,val):
return self.sleeper.set_sleep_override(val)
def get_cookiejar(self,filename=None):
return self.get_fetcher().get_cookiejar(filename)
def get_cookiejar(self,filename=None,mozilla=False):
return self.get_fetcher().get_cookiejar(filename,mozilla)
def set_cookiejar(self,cookiejar):
self.get_fetcher().set_cookiejar(cookiejar)

View file

@ -26,7 +26,7 @@ logger = logging.getLogger(__name__)
# py2 vs py3 transition
from .six.moves.urllib.parse import quote_plus
from .six.moves.http_cookiejar import LWPCookieJar
from .six.moves.http_cookiejar import LWPCookieJar, MozillaCookieJar
from .six import text_type as unicode
from .six import ensure_binary, ensure_text
@ -297,28 +297,6 @@ class FetcherResponse(object):
self.fromcache = fromcache
self.json = json
class BasicCookieJar(LWPCookieJar,object):
def __init__(self,*args,**kargs):
super(BasicCookieJar,self).__init__(*args,**kargs)
self.autosave = False
# self.filename from parent(s)
## used by CLI --save-cache dev debugging feature
def set_autosave(self,autosave=False,filename=None):
self.autosave = autosave
self.filename = filename
def load_cookiejar(self,filename=None):
self.load(self.filename or filename,
ignore_discard=True,
ignore_expires=True)
def save_cookiejar(self,filename=None):
self.save(filename or self.filename,
ignore_discard=True,
ignore_expires=True)
class Fetcher(object):
def __init__(self,getConfig_fn,getConfigList_fn):
self.getConfig = getConfig_fn
@ -326,8 +304,36 @@ class Fetcher(object):
self.cookiejar = None
def get_cookiejar(self,filename=None):
def get_cookiejar(self,filename=None,mozilla=False):
if self.cookiejar is None:
if mozilla:
ParentCookieJar = MozillaCookieJar
else:
ParentCookieJar = LWPCookieJar
class BasicCookieJar(ParentCookieJar,object):
def __init__(self,*args,**kargs):
super(BasicCookieJar,self).__init__(*args,**kargs)
self.autosave = False
# self.filename from parent(s)
## used by CLI --save-cache dev debugging feature
def set_autosave(self,autosave=False,filename=None):
self.autosave = autosave
self.filename = filename
def load_cookiejar(self,filename=None):
self.load(self.filename or filename,
ignore_discard=True,
ignore_expires=True)
def save_cookiejar(self,filename=None):
self.save(filename or self.filename,
ignore_discard=True,
ignore_expires=True)
self.cookiejar = BasicCookieJar(filename=filename)
if filename:
try:
@ -360,6 +366,7 @@ class Fetcher(object):
referer=None,
usecache=True):
# logger.debug("fetcher do_request")
# logger.debug(self.get_cookiejar())
headers = self.make_headers(url,referer=referer)
fetchresp = self.request(method,url,
headers=headers,