summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/csv.py22
-rw-r--r--Lib/getpass.py2
-rw-r--r--Lib/inspect.py14
-rw-r--r--Lib/logging/__init__.py30
-rw-r--r--Lib/multiprocessing/managers.py2
-rwxr-xr-xLib/platform.py2
-rw-r--r--Lib/test/test___all__.py1
-rw-r--r--Lib/test/test_csv.py9
-rw-r--r--Lib/test/test_socket.py2
-rw-r--r--Lib/textwrap.py6
10 files changed, 59 insertions, 31 deletions
diff --git a/Lib/csv.py b/Lib/csv.py
index ee62abe..59ec372 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -165,7 +165,7 @@ class Sniffer:
Returns a dialect (or None) corresponding to the sample
"""
- quotechar, delimiter, skipinitialspace = \
+ quotechar, doublequote, delimiter, skipinitialspace = \
self._guess_quote_and_delimiter(sample, delimiters)
if not delimiter:
delimiter, skipinitialspace = self._guess_delimiter(sample,
@@ -179,8 +179,8 @@ class Sniffer:
lineterminator = '\r\n'
quoting = QUOTE_MINIMAL
# escapechar = ''
- doublequote = False
+ dialect.doublequote = doublequote
dialect.delimiter = delimiter
# _csv.reader won't accept a quotechar of ''
dialect.quotechar = quotechar or '"'
@@ -212,8 +212,8 @@ class Sniffer:
break
if not matches:
- return ('', None, 0) # (quotechar, delimiter, skipinitialspace)
-
+ # (quotechar, doublequote, delimiter, skipinitialspace)
+ return ('', False, None, 0)
quotes = {}
delims = {}
spaces = 0
@@ -248,7 +248,19 @@ class Sniffer:
delim = ''
skipinitialspace = 0
- return (quotechar, delim, skipinitialspace)
+ # if we see an extra quote between delimiters, we've got a
+ # double quoted format
+ dq_regexp = re.compile(r"((%(delim)s)|^)\W*%(quote)s[^%(delim)s\n]*%(quote)s[^%(delim)s\n]*%(quote)s\W*((%(delim)s)|$)" % \
+ {'delim':delim, 'quote':quotechar}, re.MULTILINE)
+
+
+
+ if dq_regexp.search(data):
+ doublequote = True
+ else:
+ doublequote = False
+
+ return (quotechar, doublequote, delim, skipinitialspace)
def _guess_delimiter(self, data, delimiters):
diff --git a/Lib/getpass.py b/Lib/getpass.py
index 857188f..d0030ae 100644
--- a/Lib/getpass.py
+++ b/Lib/getpass.py
@@ -51,7 +51,7 @@ def unix_getpass(prompt='Password: ', stream=None):
# If that fails, see if stdin can be controlled.
try:
fd = sys.stdin.fileno()
- except:
+ except (AttributeError, ValueError):
passwd = fallback_getpass(prompt, stream)
input = sys.stdin
if not stream:
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 79565c1..1f1b7f9 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -398,12 +398,12 @@ def getfile(object):
if ismodule(object):
if hasattr(object, '__file__'):
return object.__file__
- raise TypeError('arg is a built-in module')
+ raise TypeError('{!r} is a built-in module'.format(object))
if isclass(object):
object = sys.modules.get(object.__module__)
if hasattr(object, '__file__'):
return object.__file__
- raise TypeError('arg is a built-in class')
+ raise TypeError('{!r} is a built-in class'.format(object))
if ismethod(object):
object = object.__func__
if isfunction(object):
@@ -414,8 +414,8 @@ def getfile(object):
object = object.f_code
if iscode(object):
return object.co_filename
- raise TypeError('arg is not a module, class, method, '
- 'function, traceback, frame, or code object')
+ raise TypeError('{!r} is not a module, class, method, '
+ 'function, traceback, frame, or code object'.format(object))
ModuleInfo = namedtuple('ModuleInfo', 'name suffix mode module_type')
@@ -747,7 +747,7 @@ def _getfullargs(co):
names of the * and ** arguments or None."""
if not iscode(co):
- raise TypeError('arg is not a code object')
+ raise TypeError('{!r} is not a code object'.format(co))
nargs = co.co_argcount
names = co.co_varnames
@@ -811,7 +811,7 @@ def getfullargspec(func):
if ismethod(func):
func = func.__func__
if not isfunction(func):
- raise TypeError('arg is not a Python function')
+ raise TypeError('{!r} is not a Python function'.format(func))
args, varargs, kwonlyargs, varkw = _getfullargs(func.__code__)
return FullArgSpec(args, varargs, varkw, func.__defaults__,
kwonlyargs, func.__kwdefaults__, func.__annotations__)
@@ -944,7 +944,7 @@ def getframeinfo(frame, context=1):
else:
lineno = frame.f_lineno
if not isframe(frame):
- raise TypeError('arg is not a frame or traceback object')
+ raise TypeError('{!r} is not a frame or traceback object'.format(frame))
filename = getsourcefile(frame) or getfile(frame)
if context > 0:
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index f932110..fecca2b 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -271,11 +271,14 @@ class LogRecord:
else:
self.thread = None
self.threadName = None
- if logMultiprocessing:
- from multiprocessing import current_process
- self.processName = current_process().name
- else:
+ if not logMultiprocessing:
self.processName = None
+ else:
+ try:
+ from multiprocessing import current_process
+ self.processName = current_process().name
+ except ImportError:
+ self.processName = None
if logProcesses and hasattr(os, 'getpid'):
self.process = os.getpid()
else:
@@ -734,16 +737,16 @@ class StreamHandler(Handler):
sys.stdout or sys.stderr may be used.
"""
- def __init__(self, strm=None):
+ def __init__(self, stream=None):
"""
Initialize the handler.
- If strm is not specified, sys.stderr is used.
+ If stream is not specified, sys.stderr is used.
"""
Handler.__init__(self)
- if strm is None:
- strm = sys.stderr
- self.stream = strm
+ if stream is None:
+ stream = sys.stderr
+ self.stream = stream
def flush(self):
"""
@@ -1113,7 +1116,11 @@ class Logger(Filterer):
Find the stack frame of the caller so that we can note the source
file name, line number and function name.
"""
- f = currentframe().f_back
+ f = currentframe()
+ #On some versions of IronPython, currentframe() returns None if
+ #IronPython isn't run with -X:Frames.
+ if f is not None:
+ f = f.f_back
rv = "(unknown file)", 0, "(unknown function)"
while hasattr(f, "f_code"):
co = f.f_code
@@ -1145,7 +1152,8 @@ class Logger(Filterer):
"""
if _srcfile:
#IronPython doesn't track Python frames, so findCaller throws an
- #exception. We trap it here so that IronPython can use logging.
+ #exception on some versions of IronPython. We trap it here so that
+ #IronPython can use logging.
try:
fn, lno, func = self.findCaller()
except ValueError:
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index 40af8f0..8faf34e 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -413,7 +413,7 @@ class Server(object):
self.id_to_refcount[ident] -= 1
if self.id_to_refcount[ident] == 0:
del self.id_to_obj[ident], self.id_to_refcount[ident]
- util.debug('disposing of obj with id %d', ident)
+ util.debug('disposing of obj with id %r', ident)
finally:
self.mutex.release()
diff --git a/Lib/platform.py b/Lib/platform.py
index 21e098b..13129d5 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -10,7 +10,7 @@
"""
# This module is maintained by Marc-Andre Lemburg <mal@egenix.com>.
# If you find problems, please submit bug reports/patches via the
-# Python SourceForge Project Page and assign them to "lemburg".
+# Python bug tracker (http://bugs.python.org) and assign them to "lemburg".
#
# Still needed:
# * more support for WinCE
diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py
index 8ebe568..a4e69b2 100644
--- a/Lib/test/test___all__.py
+++ b/Lib/test/test___all__.py
@@ -82,6 +82,7 @@ class AllTest(unittest.TestCase):
self.check_all("keyword")
self.check_all("linecache")
self.check_all("locale")
+ self.check_all("logging")
self.check_all("macpath")
self.check_all("macurl2path")
self.check_all("mailbox")
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index 95105be..75d1a91 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -767,7 +767,7 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
'Harry''s':'Arlington Heights':'IL':'2/1/03':'Kimi Hayes'
'Shark City':'Glendale Heights':'IL':'12/28/02':'Prezence'
'Tommy''s Place':'Blue Island':'IL':'12/28/02':'Blue Sunday/White Crow'
-'Stonecutters Seafood and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
+'Stonecutters ''Seafood'' and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
"""
header = '''\
"venue","city","state","date","performers"
@@ -826,6 +826,13 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
self.assertEqual(dialect.delimiter, "|")
self.assertEqual(dialect.quotechar, "'")
+ def test_doublequote(self):
+ sniffer = csv.Sniffer()
+ dialect = sniffer.sniff(self.header)
+ self.assertFalse(dialect.doublequote)
+ dialect = sniffer.sniff(self.sample2)
+ self.assertTrue(dialect.doublequote)
+
if not hasattr(sys, "gettotalrefcount"):
if support.verbose: print("*** skipping leakage tests ***")
else:
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 8313006..0f0cb80 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -291,7 +291,7 @@ class GeneralModuleTests(unittest.TestCase):
# On some versions, this loses a reference
orig = sys.getrefcount(__name__)
socket.getnameinfo(__name__,0)
- except SystemError:
+ except TypeError:
if sys.getrefcount(__name__) != orig:
self.fail("socket.getnameinfo loses a reference")
diff --git a/Lib/textwrap.py b/Lib/textwrap.py
index 1f2e9b4..f4886a1 100644
--- a/Lib/textwrap.py
+++ b/Lib/textwrap.py
@@ -135,7 +135,7 @@ class TextWrapper:
"""_split(text : string) -> [string]
Split the text to wrap into indivisible chunks. Chunks are
- not quite the same as words; see wrap_chunks() for full
+ not quite the same as words; see _wrap_chunks() for full
details. As an example, the text
Look, goof-ball -- use the -b option!
breaks into the following chunks:
@@ -163,9 +163,9 @@ class TextWrapper:
space to two.
"""
i = 0
- pat = self.sentence_end_re
+ patsearch = self.sentence_end_re.search
while i < len(chunks)-1:
- if chunks[i+1] == " " and pat.search(chunks[i]):
+ if chunks[i+1] == " " and patsearch(chunks[i]):
chunks[i+1] = " "
i += 2
else: