Commit 3e0d3191 authored by Guido van Rossum's avatar Guido van Rossum

The usual.

parent dfd8954e
...@@ -60,6 +60,7 @@ Exception(*) ...@@ -60,6 +60,7 @@ Exception(*)
""" """
class Exception: class Exception:
"""Proposed base class for all exceptions."""
def __init__(self, *args): def __init__(self, *args):
self.args = args self.args = args
...@@ -75,9 +76,11 @@ class Exception: ...@@ -75,9 +76,11 @@ class Exception:
return self.args[i] return self.args[i]
class StandardError(Exception): class StandardError(Exception):
"""Base class for all standard Python exceptions."""
pass pass
class SyntaxError(StandardError): class SyntaxError(StandardError):
"""Invalid syntax."""
filename = lineno = offset = text = None filename = lineno = offset = text = None
msg = "" msg = ""
def __init__(self, *args): def __init__(self, *args):
...@@ -94,8 +97,7 @@ class SyntaxError(StandardError): ...@@ -94,8 +97,7 @@ class SyntaxError(StandardError):
return str(self.msg) return str(self.msg)
class EnvironmentError(StandardError): class EnvironmentError(StandardError):
"""Base class for exceptions that occur outside the Python system. """Base class for I/O related errors."""
Primarily used as a base class for OSError and IOError."""
def __init__(self, *args): def __init__(self, *args):
self.args = args self.args = args
self.errno = None self.errno = None
...@@ -126,70 +128,94 @@ class EnvironmentError(StandardError): ...@@ -126,70 +128,94 @@ class EnvironmentError(StandardError):
return StandardError.__str__(self) return StandardError.__str__(self)
class IOError(EnvironmentError): class IOError(EnvironmentError):
"""I/O operation failed."""
pass pass
class OSError(EnvironmentError): class OSError(EnvironmentError):
"""Used by the posix module.""" """OS system call failed."""
pass pass
class RuntimeError(StandardError): class RuntimeError(StandardError):
"""Unspecified run-time error."""
pass pass
class NotImplementedError(RuntimeError): class NotImplementedError(RuntimeError):
"""Method or function hasn't been implemented yet."""
pass pass
class SystemError(StandardError): class SystemError(StandardError):
"""Internal error in the Python interpreter.
Please report this to the Python maintainer, along with the traceback,
the Python version, and the hardware/OS platform and version."""
pass pass
class EOFError(StandardError): class EOFError(StandardError):
"""Read beyond end of file."""
pass pass
class ImportError(StandardError): class ImportError(StandardError):
"""Import can't find module, or can't find name in module."""
pass pass
class TypeError(StandardError): class TypeError(StandardError):
"""Inappropriate argument type."""
pass pass
class ValueError(StandardError): class ValueError(StandardError):
"""Inappropriate argument value (of correct type)."""
pass pass
class KeyboardInterrupt(StandardError): class KeyboardInterrupt(StandardError):
"""Program interrupted by user."""
pass pass
class AssertionError(StandardError): class AssertionError(StandardError):
"""Assertion failed."""
pass pass
class ArithmeticError(StandardError): class ArithmeticError(StandardError):
"""Base class for arithmetic errors."""
pass pass
class OverflowError(ArithmeticError): class OverflowError(ArithmeticError):
"""Result too large to be represented."""
pass pass
class FloatingPointError(ArithmeticError): class FloatingPointError(ArithmeticError):
"""Floating point operation failed."""
pass pass
class ZeroDivisionError(ArithmeticError): class ZeroDivisionError(ArithmeticError):
"""Second argument to a division or modulo operation was zero."""
pass pass
class LookupError(StandardError): class LookupError(StandardError):
"""Base class for lookup errors."""
pass pass
class IndexError(LookupError): class IndexError(LookupError):
"""Sequence index out of range."""
pass pass
class KeyError(LookupError): class KeyError(LookupError):
"""Mapping key not found."""
pass pass
class AttributeError(StandardError): class AttributeError(StandardError):
"""Attribute not found."""
pass pass
class NameError(StandardError): class NameError(StandardError):
"""Name not found locally or globally."""
pass pass
class MemoryError(StandardError): class MemoryError(StandardError):
"""Out of memory."""
pass pass
class SystemExit(Exception): class SystemExit(Exception):
"""Request to exit from the interpreter."""
def __init__(self, *args): def __init__(self, *args):
self.args = args self.args = args
if len(args) == 0: if len(args) == 0:
......
...@@ -331,7 +331,7 @@ class DumbWriter(NullWriter): ...@@ -331,7 +331,7 @@ class DumbWriter(NullWriter):
self.atbreak = 0 self.atbreak = 0
def send_paragraph(self, blankline): def send_paragraph(self, blankline):
self.file.write('\n' + '\n'*blankline) self.file.write('\n'*blankline)
self.col = 0 self.col = 0
self.atbreak = 0 self.atbreak = 0
......
...@@ -376,6 +376,9 @@ class Telnet: ...@@ -376,6 +376,9 @@ class Telnet:
def interact(self): def interact(self):
"""Interaction function, emulates a very dumb telnet client.""" """Interaction function, emulates a very dumb telnet client."""
if sys.platform == "win32":
self.mt_interact()
return
while 1: while 1:
rfd, wfd, xfd = select.select([self, sys.stdin], [], []) rfd, wfd, xfd = select.select([self, sys.stdin], [], [])
if self in rfd: if self in rfd:
...@@ -393,6 +396,29 @@ class Telnet: ...@@ -393,6 +396,29 @@ class Telnet:
break break
self.write(line) self.write(line)
def mt_interact(self):
"""Multithreaded version of interact()."""
import thread
thread.start_new_thread(self.listener, ())
while 1:
line = sys.stdin.readline()
if not line:
break
self.write(line)
def listener(self):
"""Helper for mt_interact() -- this executes in the other thread."""
while 1:
try:
data = self.read_eager()
except EOFError:
print '*** Connection closed by remote host ***'
return
if data:
sys.stdout.write(data)
else:
sys.stdout.flush()
def expect(self, list, timeout=None): def expect(self, list, timeout=None):
"""Read until one from a list of a regular expressions matches. """Read until one from a list of a regular expressions matches.
......
from test_support import verbose
import rfc822, sys
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
def test(msg, results):
fp = StringIO()
fp.write(msg)
fp.seek(0)
m = rfc822.Message(fp)
i = 0
for n, a in m.getaddrlist('to') + m.getaddrlist('cc'):
if verbose:
print 'name:', repr(n), 'addr:', repr(a)
try:
mn, ma = results[i][0], results[i][1]
except IndexError:
print 'extra parsed address:', repr(n), repr(a)
continue
i = i + 1
if mn == n and ma == a:
if verbose:
print ' [matched]'
else:
if verbose:
print ' [no match]'
print 'not found:', repr(n), repr(a)
test('''Date: Wed, 13 Jan 1999 23:57:35 -0500
From: Guido van Rossum <guido@CNRI.Reston.VA.US>
To: "Guido van
: Rossum" <guido@python.org>
Subject: test2
test2
''', [('Guido van\n : Rossum', 'guido@python.org')])
test('''From: Barry <bwarsaw@python.org
To: guido@python.org (Guido: the Barbarian)
Subject: nonsense
test''', [('Guido: the Barbarian', 'guido@python.org'),
])
test('''From: Barry <bwarsaw@python.org
To: guido@python.org (Guido: the Barbarian)
Cc: "Guido: the Madman" <guido@python.org>
test''', [('Guido: the Barbarian', 'guido@python.org'),
('Guido: the Madman', 'guido@python.org')
])
test('''To: "The monster with
the very long name: Guido" <guido@python.org>
test''', [('The monster with\n the very long name: Guido',
'guido@python.org')])
test('''To: "Amit J. Patel" <amitp@Theory.Stanford.EDU>
CC: Mike Fletcher <mfletch@vrtelecom.com>,
"'string-sig@python.org'" <string-sig@python.org>
Cc: fooz@bat.com, bart@toof.com
Cc: goit@lip.com
test''', [('Amit J. Patel', 'amitp@Theory.Stanford.EDU'),
('Mike Fletcher', 'mfletch@vrtelecom.com'),
("'string-sig@python.org'", 'string-sig@python.org'),
('', 'fooz@bat.com'),
('', 'bart@toof.com'),
('', 'goit@lip.com'),
])
# This one is just twisted. I don't know what the proper result should be,
# but it shouldn't be to infloop, which is what used to happen!
test('''To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com>
test''', [('', ''),
('', 'dd47@mail.xxx.edu'),
('', '_at_hmhq@hdq-mdm1-imgout.companay.com')
])
...@@ -49,3 +49,4 @@ class UserList: ...@@ -49,3 +49,4 @@ class UserList:
def index(self, item): return self.data.index(item) def index(self, item): return self.data.index(item)
def reverse(self): self.data.reverse() def reverse(self): self.data.reverse()
def sort(self, *args): apply(self.data.sort, args) def sort(self, *args): apply(self.data.sort, args)
def extend(self, list): self.data.extend(list)
...@@ -54,6 +54,7 @@ Tom Christiansen ...@@ -54,6 +54,7 @@ Tom Christiansen
Vadim Chugunov Vadim Chugunov
Steve Clift Steve Clift
Matt Conway Matt Conway
Greg Couch
Steve Cousins Steve Cousins
Drew Csillag Drew Csillag
Tom Culliton Tom Culliton
...@@ -82,6 +83,7 @@ Niels Ferguson ...@@ -82,6 +83,7 @@ Niels Ferguson
Sebastian Fernandez Sebastian Fernandez
Nils Fischbeck Nils Fischbeck
Robin Friedrich Robin Friedrich
Ivan Frohe
Jim Fulton Jim Fulton
Peter Funk Peter Funk
Lele Gaifax Lele Gaifax
...@@ -224,6 +226,7 @@ Dirk Soede ...@@ -224,6 +226,7 @@ Dirk Soede
Per Spilling Per Spilling
Greg Stein Greg Stein
Dan Stromberg Dan Stromberg
Nathan Sullivan
Neale Pickett Neale Pickett
Dan Pierson Dan Pierson
RajGopal Srinivasan RajGopal Srinivasan
...@@ -257,6 +260,7 @@ Gerry Wiener ...@@ -257,6 +260,7 @@ Gerry Wiener
Sue Williams Sue Williams
Frank Willison Frank Willison
Dik Winter Dik Winter
Blake Winton
Lars Wirzenius Lars Wirzenius
Stefan Witzel Stefan Witzel
Richard Wolff Richard Wolff
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment