Patch #1478993: take advantage of BaseException/Exception split in cookielib
This commit is contained in:
parent
b5f2e5cc50
commit
e854e765f4
|
@ -12,9 +12,10 @@ libwww-perl, I hope.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import time, re, logging
|
import time, re, logging
|
||||||
from cookielib import (reraise_unmasked_exceptions, FileCookieJar, LoadError,
|
from cookielib import (_warn_unhandled_exception, FileCookieJar, LoadError,
|
||||||
Cookie, MISSING_FILENAME_TEXT, join_header_words, split_header_words,
|
Cookie, MISSING_FILENAME_TEXT,
|
||||||
iso2time, time2isoz)
|
join_header_words, split_header_words,
|
||||||
|
iso2time, time2isoz)
|
||||||
|
|
||||||
def lwp_cookie_str(cookie):
|
def lwp_cookie_str(cookie):
|
||||||
"""Return string representation of Cookie in an the LWP cookie file format.
|
"""Return string representation of Cookie in an the LWP cookie file format.
|
||||||
|
@ -92,7 +93,8 @@ class LWPCookieJar(FileCookieJar):
|
||||||
def _really_load(self, f, filename, ignore_discard, ignore_expires):
|
def _really_load(self, f, filename, ignore_discard, ignore_expires):
|
||||||
magic = f.readline()
|
magic = f.readline()
|
||||||
if not re.search(self.magic_re, magic):
|
if not re.search(self.magic_re, magic):
|
||||||
msg = "%s does not seem to contain cookies" % filename
|
msg = ("%r does not look like a Set-Cookie3 (LWP) format "
|
||||||
|
"file" % filename)
|
||||||
raise LoadError(msg)
|
raise LoadError(msg)
|
||||||
|
|
||||||
now = time.time()
|
now = time.time()
|
||||||
|
@ -159,6 +161,10 @@ class LWPCookieJar(FileCookieJar):
|
||||||
if not ignore_expires and c.is_expired(now):
|
if not ignore_expires and c.is_expired(now):
|
||||||
continue
|
continue
|
||||||
self.set_cookie(c)
|
self.set_cookie(c)
|
||||||
except:
|
|
||||||
reraise_unmasked_exceptions((IOError,))
|
except IOError:
|
||||||
raise LoadError("invalid Set-Cookie3 format file %s" % filename)
|
raise
|
||||||
|
except Exception:
|
||||||
|
_warn_unhandled_exception()
|
||||||
|
raise LoadError("invalid Set-Cookie3 format file %r: %r" %
|
||||||
|
(filename, line))
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
import re, time, logging
|
import re, time, logging
|
||||||
|
|
||||||
from cookielib import (reraise_unmasked_exceptions, FileCookieJar, LoadError,
|
from cookielib import (_warn_unhandled_exception, FileCookieJar, LoadError,
|
||||||
Cookie, MISSING_FILENAME_TEXT)
|
Cookie, MISSING_FILENAME_TEXT)
|
||||||
|
|
||||||
class MozillaCookieJar(FileCookieJar):
|
class MozillaCookieJar(FileCookieJar):
|
||||||
"""
|
"""
|
||||||
|
@ -51,7 +51,7 @@ class MozillaCookieJar(FileCookieJar):
|
||||||
if not re.search(self.magic_re, magic):
|
if not re.search(self.magic_re, magic):
|
||||||
f.close()
|
f.close()
|
||||||
raise LoadError(
|
raise LoadError(
|
||||||
"%s does not look like a Netscape format cookies file" %
|
"%r does not look like a Netscape format cookies file" %
|
||||||
filename)
|
filename)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -104,9 +104,11 @@ class MozillaCookieJar(FileCookieJar):
|
||||||
continue
|
continue
|
||||||
self.set_cookie(c)
|
self.set_cookie(c)
|
||||||
|
|
||||||
except:
|
except IOError:
|
||||||
reraise_unmasked_exceptions((IOError,))
|
raise
|
||||||
raise LoadError("invalid Netscape format file %s: %s" %
|
except Exception:
|
||||||
|
_warn_unhandled_exception()
|
||||||
|
raise LoadError("invalid Netscape format cookies file %r: %r" %
|
||||||
(filename, line))
|
(filename, line))
|
||||||
|
|
||||||
def save(self, filename=None, ignore_discard=False, ignore_expires=False):
|
def save(self, filename=None, ignore_discard=False, ignore_expires=False):
|
||||||
|
|
|
@ -7,9 +7,9 @@ Docstrings, comments and debug strings in this code refer to the
|
||||||
attributes of the HTTP cookie system as cookie-attributes, to distinguish
|
attributes of the HTTP cookie system as cookie-attributes, to distinguish
|
||||||
them clearly from Python attributes.
|
them clearly from Python attributes.
|
||||||
|
|
||||||
Class diagram (note that the classes which do not derive from
|
Class diagram (note that BSDDBCookieJar and the MSIE* classes are not
|
||||||
FileCookieJar are not distributed with the Python standard library, but
|
distributed with the Python standard library, but are available from
|
||||||
are available from http://wwwsearch.sf.net/):
|
http://wwwsearch.sf.net/):
|
||||||
|
|
||||||
CookieJar____
|
CookieJar____
|
||||||
/ \ \
|
/ \ \
|
||||||
|
@ -25,7 +25,10 @@ are available from http://wwwsearch.sf.net/):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import sys, re, urlparse, copy, time, urllib, logging
|
__all__ = ['Cookie', 'CookieJar', 'CookiePolicy', 'DefaultCookiePolicy',
|
||||||
|
'FileCookieJar', 'LWPCookieJar', 'LoadError', 'MozillaCookieJar']
|
||||||
|
|
||||||
|
import re, urlparse, copy, time, urllib, logging
|
||||||
try:
|
try:
|
||||||
import threading as _threading
|
import threading as _threading
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -39,15 +42,10 @@ DEFAULT_HTTP_PORT = str(httplib.HTTP_PORT)
|
||||||
MISSING_FILENAME_TEXT = ("a filename was not supplied (nor was the CookieJar "
|
MISSING_FILENAME_TEXT = ("a filename was not supplied (nor was the CookieJar "
|
||||||
"instance initialised with one)")
|
"instance initialised with one)")
|
||||||
|
|
||||||
def reraise_unmasked_exceptions(unmasked=()):
|
def _warn_unhandled_exception():
|
||||||
# There are a few catch-all except: statements in this module, for
|
# There are a few catch-all except: statements in this module, for
|
||||||
# catching input that's bad in unexpected ways.
|
# catching input that's bad in unexpected ways. Warn if any
|
||||||
# This function re-raises some exceptions we don't want to trap.
|
# exceptions are caught there.
|
||||||
unmasked = unmasked + (KeyboardInterrupt, SystemExit, MemoryError)
|
|
||||||
etype = sys.exc_info()[0]
|
|
||||||
if issubclass(etype, unmasked):
|
|
||||||
raise
|
|
||||||
# swallowed an exception
|
|
||||||
import warnings, traceback, StringIO
|
import warnings, traceback, StringIO
|
||||||
f = StringIO.StringIO()
|
f = StringIO.StringIO()
|
||||||
traceback.print_exc(None, f)
|
traceback.print_exc(None, f)
|
||||||
|
@ -1555,8 +1553,8 @@ class CookieJar:
|
||||||
try:
|
try:
|
||||||
cookies = self._cookies_from_attrs_set(
|
cookies = self._cookies_from_attrs_set(
|
||||||
split_header_words(rfc2965_hdrs), request)
|
split_header_words(rfc2965_hdrs), request)
|
||||||
except:
|
except Exception:
|
||||||
reraise_unmasked_exceptions()
|
_warn_unhandled_exception()
|
||||||
cookies = []
|
cookies = []
|
||||||
|
|
||||||
if ns_hdrs and netscape:
|
if ns_hdrs and netscape:
|
||||||
|
@ -1564,8 +1562,8 @@ class CookieJar:
|
||||||
# RFC 2109 and Netscape cookies
|
# RFC 2109 and Netscape cookies
|
||||||
ns_cookies = self._cookies_from_attrs_set(
|
ns_cookies = self._cookies_from_attrs_set(
|
||||||
parse_ns_headers(ns_hdrs), request)
|
parse_ns_headers(ns_hdrs), request)
|
||||||
except:
|
except Exception:
|
||||||
reraise_unmasked_exceptions()
|
_warn_unhandled_exception()
|
||||||
ns_cookies = []
|
ns_cookies = []
|
||||||
self._process_rfc2109_cookies(ns_cookies)
|
self._process_rfc2109_cookies(ns_cookies)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue