Patch #1478993: take advantage of BaseException/Exception split in cookielib

This commit is contained in:
Georg Brandl 2006-05-08 17:48:01 +00:00
parent b5f2e5cc50
commit e854e765f4
3 changed files with 35 additions and 29 deletions

View File

@ -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))

View File

@ -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):

View File

@ -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)