summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/ACKS.txt399
-rw-r--r--Doc/glossary.rst5
-rw-r--r--Doc/library/atexit.rst4
-rw-r--r--Doc/library/bsddb.rst2
-rw-r--r--Doc/library/datetime.rst337
-rw-r--r--Doc/library/mhlib.rst2
-rw-r--r--Doc/library/multifile.rst2
-rw-r--r--Doc/library/readline.rst2
-rw-r--r--Doc/library/robotparser.rst2
-rw-r--r--Doc/library/telnetlib.rst2
-rw-r--r--Doc/library/urllib.rst2
-rw-r--r--Doc/whatsnew/2.6.rst4
-rw-r--r--Lib/doctest.py9
-rw-r--r--Lib/httplib.py2
-rw-r--r--Lib/test/README11
-rw-r--r--Lib/test/test_tempfile.py2
-rw-r--r--Misc/ACKS2
-rw-r--r--Objects/stringobject.c63
18 files changed, 568 insertions, 284 deletions
diff --git a/Doc/ACKS.txt b/Doc/ACKS.txt
index 09ac0ab..f9049c5 100644
--- a/Doc/ACKS.txt
+++ b/Doc/ACKS.txt
@@ -1,206 +1,207 @@
Contributors to the Python Documentation
----------------------------------------
-This file lists people who have contributed in some way to the Python
+This section lists people who have contributed in some way to the Python
documentation. It is probably not complete -- if you feel that you or
anyone else should be on this list, please let us know (send email to
docs@python.org), and we'll be glad to correct the problem.
-* Aahz
-* Michael Abbott
-* Steve Alexander
-* Jim Ahlstrom
-* Fred Allen
-* A. Amoroso
-* Pehr Anderson
-* Oliver Andrich
-* Jesús Cea Avión
-* Daniel Barclay
-* Chris Barker
-* Don Bashford
-* Anthony Baxter
-* Bennett Benson
-* Jonathan Black
-* Robin Boerdijk
-* Michal Bozon
-* Aaron Brancotti
-* Georg Brandl
-* Keith Briggs
-* Lee Busby
-* Lorenzo M. Catucci
-* Carl Cerecke
-* Mauro Cicognini
-* Gilles Civario
-* Mike Clarkson
-* Steve Clift
-* Dave Cole
-* Matthew Cowles
-* Jeremy Craven
-* Andrew Dalke
-* Ben Darnell
-* L. Peter Deutsch
-* Robert Donohue
-* Fred L. Drake, Jr.
-* Josip Dzolonga
-* Jeff Epler
-* Michael Ernst
-* Blame Andy Eskilsson
-* Carey Evans
-* Martijn Faassen
-* Carl Feynman
-* Dan Finnie
-* Hernán Martínez Foffani
-* Stefan Franke
-* Jim Fulton
-* Peter Funk
-* Lele Gaifax
-* Matthew Gallagher
-* Ben Gertzfield
-* Nadim Ghaznavi
-* Jonathan Giddy
-* Shelley Gooch
-* Nathaniel Gray
-* Grant Griffin
-* Thomas Guettler
-* Anders Hammarquist
-* Mark Hammond
-* Harald Hanche-Olsen
-* Manus Hand
-* Gerhard Häring
-* Peter Harris
-* Travis B. Hartwell
-* Tim Hatch
-* Janko Hauser
-* Bernhard Herzog
-* Magnus L. Hetland
-* Konrad Hinsen
-* Stefan Hoffmeister
-* Albert Hofkamp
-* Gregor Hoffleit
-* Steve Holden
-* Thomas Holenstein
-* Gerrit Holl
-* Rob Hooft
-* Brian Hooper
-* Randall Hopper
-* Michael Hudson
-* Eric Huss
-* Jeremy Hylton
-* Roger Irwin
-* Jack Jansen
-* Philip H. Jensen
-* Pedro Diaz Jimenez
-* Kent Johnson
-* Lucas de Jonge
-* Andreas Jung
-* Robert Kern
-* Jim Kerr
-* Jan Kim
-* Greg Kochanski
-* Guido Kollerie
-* Peter A. Koren
-* Daniel Kozan
-* Andrew M. Kuchling
-* Dave Kuhlman
-* Erno Kuusela
-* Thomas Lamb
-* Detlef Lannert
-* Piers Lauder
-* Glyph Lefkowitz
-* Robert Lehmann
-* Marc-André Lemburg
-* Ross Light
-* Ulf A. Lindgren
-* Everett Lipman
-* Mirko Liss
-* Martin von Löwis
-* Fredrik Lundh
-* Jeff MacDonald
-* John Machin
-* Andrew MacIntyre
-* Vladimir Marangozov
-* Vincent Marchetti
-* Laura Matson
-* Daniel May
-* Rebecca McCreary
-* Doug Mennella
-* Paolo Milani
-* Skip Montanaro
-* Paul Moore
-* Ross Moore
-* Sjoerd Mullender
-* Dale Nagata
-* Ng Pheng Siong
-* Koray Oner
-* Tomas Oppelstrup
-* Denis S. Otkidach
-* Zooko O'Whielacronx
-* William Park
-* Joonas Paalasmaa
-* Harri Pasanen
-* Bo Peng
-* Tim Peters
-* Christopher Petrilli
-* Justin D. Pettit
-* Chris Phoenix
-* François Pinard
-* Paul Prescod
-* Eric S. Raymond
-* Edward K. Ream
-* Sean Reifschneider
-* Bernhard Reiter
-* Armin Rigo
-* Wes Rishel
-* Jim Roskind
-* Guido van Rossum
-* Donald Wallace Rouse II
-* Nick Russo
-* Chris Ryland
-* Constantina S.
-* Hugh Sasse
-* Bob Savage
-* Scott Schram
-* Neil Schemenauer
-* Barry Scott
-* Joakim Sernbrant
-* Justin Sheehy
-* Charlie Shepherd
-* Michael Simcich
-* Ionel Simionescu
-* Michael Sloan
-* Gregory P. Smith
-* Roy Smith
-* Clay Spence
-* Nicholas Spies
-* Tage Stabell-Kulo
-* Frank Stajano
-* Anthony Starks
-* Greg Stein
-* Peter Stoehr
-* Mark Summerfield
-* Reuben Sumner
-* Kalle Svensson
-* Jim Tittsler
-* Ville Vainio
-* Martijn Vries
-* Charles G. Waldman
-* Greg Ward
-* Barry Warsaw
-* Corran Webster
-* Glyn Webster
-* Bob Weiner
-* Eddy Welbourne
-* Jeff Wheeler
-* Mats Wichmann
-* Gerry Wiener
-* Timothy Wild
-* Collin Winter
-* Blake Winton
-* Dan Wolfe
-* Steven Work
-* Thomas Wouters
-* Ka-Ping Yee
-* Rory Yorke
-* Moshe Zadka
-* Milan Zamazal
-* Cheng Zhang
+.. acks::
+
+ * Aahz
+ * Michael Abbott
+ * Steve Alexander
+ * Jim Ahlstrom
+ * Fred Allen
+ * A. Amoroso
+ * Pehr Anderson
+ * Oliver Andrich
+ * Jesús Cea Avión
+ * Daniel Barclay
+ * Chris Barker
+ * Don Bashford
+ * Anthony Baxter
+ * Bennett Benson
+ * Jonathan Black
+ * Robin Boerdijk
+ * Michal Bozon
+ * Aaron Brancotti
+ * Georg Brandl
+ * Keith Briggs
+ * Lee Busby
+ * Lorenzo M. Catucci
+ * Carl Cerecke
+ * Mauro Cicognini
+ * Gilles Civario
+ * Mike Clarkson
+ * Steve Clift
+ * Dave Cole
+ * Matthew Cowles
+ * Jeremy Craven
+ * Andrew Dalke
+ * Ben Darnell
+ * L. Peter Deutsch
+ * Robert Donohue
+ * Fred L. Drake, Jr.
+ * Josip Dzolonga
+ * Jeff Epler
+ * Michael Ernst
+ * Blame Andy Eskilsson
+ * Carey Evans
+ * Martijn Faassen
+ * Carl Feynman
+ * Dan Finnie
+ * Hernán Martínez Foffani
+ * Stefan Franke
+ * Jim Fulton
+ * Peter Funk
+ * Lele Gaifax
+ * Matthew Gallagher
+ * Ben Gertzfield
+ * Nadim Ghaznavi
+ * Jonathan Giddy
+ * Shelley Gooch
+ * Nathaniel Gray
+ * Grant Griffin
+ * Thomas Guettler
+ * Anders Hammarquist
+ * Mark Hammond
+ * Harald Hanche-Olsen
+ * Manus Hand
+ * Gerhard Häring
+ * Travis B. Hartwell
+ * Tim Hatch
+ * Janko Hauser
+ * Bernhard Herzog
+ * Magnus L. Hetland
+ * Konrad Hinsen
+ * Stefan Hoffmeister
+ * Albert Hofkamp
+ * Gregor Hoffleit
+ * Steve Holden
+ * Thomas Holenstein
+ * Gerrit Holl
+ * Rob Hooft
+ * Brian Hooper
+ * Randall Hopper
+ * Michael Hudson
+ * Eric Huss
+ * Jeremy Hylton
+ * Roger Irwin
+ * Jack Jansen
+ * Philip H. Jensen
+ * Pedro Diaz Jimenez
+ * Kent Johnson
+ * Lucas de Jonge
+ * Andreas Jung
+ * Robert Kern
+ * Jim Kerr
+ * Jan Kim
+ * Greg Kochanski
+ * Guido Kollerie
+ * Peter A. Koren
+ * Daniel Kozan
+ * Andrew M. Kuchling
+ * Dave Kuhlman
+ * Erno Kuusela
+ * Thomas Lamb
+ * Detlef Lannert
+ * Piers Lauder
+ * Glyph Lefkowitz
+ * Robert Lehmann
+ * Marc-André Lemburg
+ * Ross Light
+ * Ulf A. Lindgren
+ * Everett Lipman
+ * Mirko Liss
+ * Martin von Löwis
+ * Fredrik Lundh
+ * Jeff MacDonald
+ * John Machin
+ * Andrew MacIntyre
+ * Vladimir Marangozov
+ * Vincent Marchetti
+ * Laura Matson
+ * Daniel May
+ * Rebecca McCreary
+ * Doug Mennella
+ * Paolo Milani
+ * Skip Montanaro
+ * Paul Moore
+ * Ross Moore
+ * Sjoerd Mullender
+ * Dale Nagata
+ * Ng Pheng Siong
+ * Koray Oner
+ * Tomas Oppelstrup
+ * Denis S. Otkidach
+ * Zooko O'Whielacronx
+ * William Park
+ * Joonas Paalasmaa
+ * Harri Pasanen
+ * Bo Peng
+ * Tim Peters
+ * Christopher Petrilli
+ * Justin D. Pettit
+ * Chris Phoenix
+ * François Pinard
+ * Paul Prescod
+ * Eric S. Raymond
+ * Edward K. Ream
+ * Sean Reifschneider
+ * Bernhard Reiter
+ * Armin Rigo
+ * Wes Rishel
+ * Jim Roskind
+ * Guido van Rossum
+ * Donald Wallace Rouse II
+ * Nick Russo
+ * Chris Ryland
+ * Constantina S.
+ * Hugh Sasse
+ * Bob Savage
+ * Scott Schram
+ * Neil Schemenauer
+ * Barry Scott
+ * Joakim Sernbrant
+ * Justin Sheehy
+ * Charlie Shepherd
+ * Michael Simcich
+ * Ionel Simionescu
+ * Michael Sloan
+ * Gregory P. Smith
+ * Roy Smith
+ * Clay Spence
+ * Nicholas Spies
+ * Tage Stabell-Kulo
+ * Frank Stajano
+ * Anthony Starks
+ * Greg Stein
+ * Peter Stoehr
+ * Mark Summerfield
+ * Reuben Sumner
+ * Kalle Svensson
+ * Jim Tittsler
+ * Ville Vainio
+ * Martijn Vries
+ * Charles G. Waldman
+ * Greg Ward
+ * Barry Warsaw
+ * Corran Webster
+ * Glyn Webster
+ * Bob Weiner
+ * Eddy Welbourne
+ * Jeff Wheeler
+ * Mats Wichmann
+ * Gerry Wiener
+ * Timothy Wild
+ * Collin Winter
+ * Blake Winton
+ * Dan Wolfe
+ * Steven Work
+ * Thomas Wouters
+ * Ka-Ping Yee
+ * Rory Yorke
+ * Moshe Zadka
+ * Milan Zamazal
+ * Cheng Zhang
diff --git a/Doc/glossary.rst b/Doc/glossary.rst
index 3459bda..b9d8424 100644
--- a/Doc/glossary.rst
+++ b/Doc/glossary.rst
@@ -55,6 +55,11 @@ Glossary
advanced mathematical feature. If you're not aware of a need for them,
it's almost certain you can safely ignore them.
+ context manager
+ Objects which control the environment seen in a :keyword:`with`
+ statement by defining :meth:`__enter__` and :meth:`__exit__` methods.
+ See :pep:`343`.
+
decorator
A function returning another function, usually applied as a function
transformation using the ``@wrapper`` syntax. Common examples for
diff --git a/Doc/library/atexit.rst b/Doc/library/atexit.rst
index abef2fe..11b4120 100644
--- a/Doc/library/atexit.rst
+++ b/Doc/library/atexit.rst
@@ -4,8 +4,8 @@
.. module:: atexit
:synopsis: Register and execute cleanup functions.
-.. moduleauthor:: Skip Montanaro <skip@mojam.com>
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. moduleauthor:: Skip Montanaro <skip@pobox.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
The :mod:`atexit` module defines functions to register and unregister cleanup
diff --git a/Doc/library/bsddb.rst b/Doc/library/bsddb.rst
index aff1d5b..1b153c9 100644
--- a/Doc/library/bsddb.rst
+++ b/Doc/library/bsddb.rst
@@ -4,7 +4,7 @@
.. module:: bsddb
:synopsis: Interface to Berkeley DB database library
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
The :mod:`bsddb` module provides an interface to the Berkeley DB library. Users
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index 87a9bbd..adc1664 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -161,6 +161,7 @@ dates or times.
Note that normalization of negative values may be surprising at first. For
example, ::
+ >>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
@@ -264,6 +265,26 @@ comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
considered to be true if and only if it isn't equal to ``timedelta(0)``.
+Example usage::
+
+ >>> from datetime import timedelta
+ >>> year = timedelta(days=365)
+ >>> another_year = timedelta(weeks=40, days=84, hours=23,
+ ... minutes=50, seconds=600) # adds up to 365 days
+ >>> year == another_year
+ True
+ >>> ten_years = 10 * year
+ >>> ten_years, ten_years.days // 365
+ (datetime.timedelta(3650), 10)
+ >>> nine_years = ten_years - year
+ >>> nine_years, nine_years.days // 365
+ (datetime.timedelta(3285), 9)
+ >>> three_years = nine_years // 3;
+ >>> three_years, three_years.days // 365
+ (datetime.timedelta(1095), 3)
+ >>> abs(three_years - ten_years) == 2 * three_years + year
+ True
+
.. _datetime-date:
@@ -485,6 +506,55 @@ Instance methods:
Format codes referring to hours, minutes or seconds will see 0 values. See
section :ref:`strftime-behavior`.
+Example of counting days to an event::
+
+ >>> import time
+ >>> from datetime import date
+ >>> today = date.today()
+ >>> today
+ datetime.date(2007, 12, 5)
+ >>> today == date.fromtimestamp(time.time())
+ True
+ >>> my_birthday = date(today.year, 6, 24)
+ >>> if my_birthday < today:
+ ... my_birthday = my_birthday.replace(year=today.year + 1)
+ >>> my_birthday
+ datetime.date(2008, 6, 24)
+ >>> time_to_birthday = abs(my_birthday - today)
+ >>> time_to_birthday.days
+ 202
+
+Example of working with :class:`date`::
+
+ >>> from datetime import date
+ >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
+ >>> d
+ datetime.date(2002, 3, 11)
+ >>> t = d.timetuple()
+ >>> for i in t:
+ ... print i
+ 2002 # year
+ 3 # month
+ 11 # day
+ 0
+ 0
+ 0
+ 0 # weekday (0 = Monday)
+ 70 # 70th day in the year
+ -1
+ >>> ic = d.isocalendar()
+ >>> for i in ic:
+ ... print i # doctest: +SKIP
+ 2002 # ISO year
+ 11 # ISO week number
+ 1 # ISO day number ( 1 = Monday )
+ >>> d.isoformat()
+ '2002-03-11'
+ >>> d.strftime("%d/%m/%y")
+ '11/03/02'
+ >>> d.strftime("%A %d. %B %Y")
+ 'Monday 11. March 2002'
+
.. _datetime-datetime:
@@ -919,6 +989,106 @@ Instance methods:
Return a string representing the date and time, controlled by an explicit format
string. See section :ref:`strftime-behavior`.
+Examples of working with datetime objects::
+
+ >>> from datetime import datetime, date, time
+ >>> # Using datetime.combine()
+ >>> d = date(2005, 7, 14)
+ >>> t = time(12, 30)
+ >>> datetime.combine(d, t)
+ datetime.datetime(2005, 7, 14, 12, 30)
+ >>> # Using datetime.now() or datetime.utcnow()
+ >>> datetime.now()
+ datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
+ >>> datetime.utcnow()
+ datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
+ >>> # Using datetime.strptime()
+ >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
+ >>> dt
+ datetime.datetime(2006, 11, 21, 16, 30)
+ >>> # Using datetime.timetuple() to get tuple of all attributes
+ >>> tt = dt.timetuple()
+ >>> for it in tt:
+ ... print it
+ ...
+ 2006 # year
+ 11 # month
+ 21 # day
+ 16 # hour
+ 30 # minute
+ 0 # second
+ 1 # weekday (0 = Monday)
+ 325 # number of days since 1st January
+ -1 # dst - method tzinfo.dst() returned None
+ >>> # Date in ISO format
+ >>> ic = dt.isocalendar()
+ >>> for it in ic:
+ ... print it
+ ...
+ 2006 # ISO year
+ 47 # ISO week
+ 2 # ISO weekday
+ >>> # Formatting datetime
+ >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
+ 'Tuesday, 21. November 2006 04:30PM'
+
+Using datetime with tzinfo::
+
+ >>> from datetime import timedelta, datetime, tzinfo
+ >>> class GMT1(tzinfo):
+ ... def __init__(self): # DST starts last Sunday in March
+ ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
+ ... self.dston = d - timedelta(days=d.weekday() + 1)
+ ... d = datetime(dt.year, 11, 1)
+ ... self.dstoff = d - timedelta(days=d.weekday() + 1)
+ ... def utcoffset(self, dt):
+ ... return timedelta(hours=1) + self.dst(dt)
+ ... def dst(self, dt):
+ ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
+ ... return timedelta(hours=1)
+ ... else:
+ ... return timedelta(0)
+ ... def tzname(self,dt):
+ ... return "GMT +1"
+ ...
+ >>> class GMT2(tzinfo):
+ ... def __init__(self):
+ ... d = datetime(dt.year, 4, 1)
+ ... self.dston = d - timedelta(days=d.weekday() + 1)
+ ... d = datetime(dt.year, 11, 1)
+ ... self.dstoff = d - timedelta(days=d.weekday() + 1)
+ ... def utcoffset(self, dt):
+ ... return timedelta(hours=1) + self.dst(dt)
+ ... def dst(self, dt):
+ ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
+ ... return timedelta(hours=2)
+ ... else:
+ ... return timedelta(0)
+ ... def tzname(self,dt):
+ ... return "GMT +2"
+ ...
+ >>> gmt1 = GMT1()
+ >>> # Daylight Saving Time
+ >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
+ >>> dt1.dst()
+ datetime.timedelta(0)
+ >>> dt1.utcoffset()
+ datetime.timedelta(0, 3600)
+ >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
+ >>> dt2.dst()
+ datetime.timedelta(0, 3600)
+ >>> dt2.utcoffset()
+ datetime.timedelta(0, 7200)
+ >>> # Convert datetime to another time zone
+ >>> dt3 = dt2.astimezone(GMT2())
+ >>> dt3 # doctest: +ELLIPSIS
+ datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
+ >>> dt2 # doctest: +ELLIPSIS
+ datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
+ >>> dt2.utctimetuple() == dt3.utctimetuple()
+ True
+
+
.. _datetime-time:
@@ -1064,6 +1234,30 @@ Instance methods:
``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
return ``None`` or a string object.
+Example::
+
+ >>> from datetime import time, tzinfo
+ >>> class GMT1(tzinfo):
+ ... def utcoffset(self, dt):
+ ... return timedelta(hours=1)
+ ... def dst(self, dt):
+ ... return timedelta(0)
+ ... def tzname(self,dt):
+ ... return "Europe/Prague"
+ ...
+ >>> t = time(12, 10, 30, tzinfo=GMT1())
+ >>> t # doctest: +ELLIPSIS
+ datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
+ >>> gmt = GMT1()
+ >>> t.isoformat()
+ '12:10:30+01:00'
+ >>> t.dst()
+ datetime.timedelta(0)
+ >>> t.tzname()
+ 'Europe/Prague'
+ >>> t.strftime("%H:%M:%S %Z")
+ '12:10:30 Europe/Prague'
+
.. _datetime-tzinfo:
@@ -1277,7 +1471,7 @@ Applications that can't bear such ambiguities should avoid using hybrid
:class:`tzinfo` subclasses; there are no ambiguities when using UTC, or any
other fixed-offset :class:`tzinfo` subclass (such as a class representing only
EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
-
+
.. _strftime-behavior:
@@ -1298,48 +1492,113 @@ For :class:`date` objects, the format codes for hours, minutes, and seconds
should not be used, as :class:`date` objects have no such values. If they're
used anyway, ``0`` is substituted for them.
-For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
-strings.
-
-For an aware object:
-
-``%z``
- :meth:`utcoffset` is transformed into a 5-character string of the form +HHMM or
- -HHMM, where HH is a 2-digit string giving the number of UTC offset hours, and
- MM is a 2-digit string giving the number of UTC offset minutes. For example, if
- :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
- replaced with the string ``'-0330'``.
-
-``%Z``
- If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty string.
- Otherwise ``%Z`` is replaced by the returned value, which must be a string.
-
The full set of format codes supported varies across platforms, because Python
calls the platform C library's :func:`strftime` function, and platform
-variations are common. The documentation for Python's :mod:`time` module lists
-the format codes that the C standard (1989 version) requires, and those work on
-all platforms with a standard C implementation. Note that the 1999 version of
-the C standard added additional format codes.
+variations are common.
+
+The following is a list of all the format codes that the C standard (1989
+version) requires, and these work on all platforms with a standard C
+implementation. Note that the 1999 version of the C standard added additional
+format codes.
The exact range of years for which :meth:`strftime` works also varies across
platforms. Regardless of platform, years before 1900 cannot be used.
-.. % %% This example is obsolete, since strptime is now supported by datetime.
-.. %
-.. % \subsection{Examples}
-.. %
-.. % \subsubsection{Creating Datetime Objects from Formatted Strings}
-.. %
-.. % The \class{datetime} class does not directly support parsing formatted time
-.. % strings. You can use \function{time.strptime} to do the parsing and create
-.. % a \class{datetime} object from the tuple it returns:
-.. %
-.. % \begin{verbatim}
-.. % >>> s = "2005-12-06T12:13:14"
-.. % >>> from datetime import datetime
-.. % >>> from time import strptime
-.. % >>> datetime(*strptime(s, "%Y-%m-%dT%H:%M:%S")[0:6])
-.. % datetime.datetime(2005, 12, 6, 12, 13, 14)
-.. % \end{verbatim}
-.. %
++-----------+--------------------------------+-------+
+| Directive | Meaning | Notes |
++===========+================================+=======+
+| ``%a`` | Locale's abbreviated weekday | |
+| | name. | |
++-----------+--------------------------------+-------+
+| ``%A`` | Locale's full weekday name. | |
++-----------+--------------------------------+-------+
+| ``%b`` | Locale's abbreviated month | |
+| | name. | |
++-----------+--------------------------------+-------+
+| ``%B`` | Locale's full month name. | |
++-----------+--------------------------------+-------+
+| ``%c`` | Locale's appropriate date and | |
+| | time representation. | |
++-----------+--------------------------------+-------+
+| ``%d`` | Day of the month as a decimal | |
+| | number [01,31]. | |
++-----------+--------------------------------+-------+
+| ``%H`` | Hour (24-hour clock) as a | |
+| | decimal number [00,23]. | |
++-----------+--------------------------------+-------+
+| ``%I`` | Hour (12-hour clock) as a | |
+| | decimal number [01,12]. | |
++-----------+--------------------------------+-------+
+| ``%j`` | Day of the year as a decimal | |
+| | number [001,366]. | |
++-----------+--------------------------------+-------+
+| ``%m`` | Month as a decimal number | |
+| | [01,12]. | |
++-----------+--------------------------------+-------+
+| ``%M`` | Minute as a decimal number | |
+| | [00,59]. | |
++-----------+--------------------------------+-------+
+| ``%p`` | Locale's equivalent of either | \(1) |
+| | AM or PM. | |
++-----------+--------------------------------+-------+
+| ``%S`` | Second as a decimal number | \(2) |
+| | [00,61]. | |
++-----------+--------------------------------+-------+
+| ``%U`` | Week number of the year | \(3) |
+| | (Sunday as the first day of | |
+| | the week) as a decimal number | |
+| | [00,53]. All days in a new | |
+| | year preceding the first | |
+| | Sunday are considered to be in | |
+| | week 0. | |
++-----------+--------------------------------+-------+
+| ``%w`` | Weekday as a decimal number | |
+| | [0(Sunday),6]. | |
++-----------+--------------------------------+-------+
+| ``%W`` | Week number of the year | \(3) |
+| | (Monday as the first day of | |
+| | the week) as a decimal number | |
+| | [00,53]. All days in a new | |
+| | year preceding the first | |
+| | Monday are considered to be in | |
+| | week 0. | |
++-----------+--------------------------------+-------+
+| ``%x`` | Locale's appropriate date | |
+| | representation. | |
++-----------+--------------------------------+-------+
+| ``%X`` | Locale's appropriate time | |
+| | representation. | |
++-----------+--------------------------------+-------+
+| ``%y`` | Year without century as a | |
+| | decimal number [00,99]. | |
++-----------+--------------------------------+-------+
+| ``%Y`` | Year with century as a decimal | |
+| | number. | |
++-----------+--------------------------------+-------+
+| ``%z`` | UTC offset in the form +HHMM | \(4) |
+| | or -HHMM (empty string if the | |
+| | the object is naive). | |
++-----------+--------------------------------+-------+
+| ``%Z`` | Time zone name (empty string | |
+| | if the object is naive). | |
++-----------+--------------------------------+-------+
+| ``%%`` | A literal ``'%'`` character. | |
++-----------+--------------------------------+-------+
+Notes:
+
+(1)
+ When used with the :func:`strptime` function, the ``%p`` directive only affects
+ the output hour field if the ``%I`` directive is used to parse the hour.
+
+(2)
+ The range really is ``0`` to ``61``; this accounts for leap seconds and the
+ (very rare) double leap seconds.
+
+(3)
+ When used with the :func:`strptime` function, ``%U`` and ``%W`` are only used in
+ calculations when the day of the week and the year are specified.
+
+(4)
+ For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
+ ``%z`` is replaced with the string ``'-0330'``.
diff --git a/Doc/library/mhlib.rst b/Doc/library/mhlib.rst
index 15d2b05..0dd5353 100644
--- a/Doc/library/mhlib.rst
+++ b/Doc/library/mhlib.rst
@@ -7,7 +7,7 @@
.. % LaTeX'ized from the comments in the module by Skip Montanaro
-.. % <skip@mojam.com>.
+.. % <skip@pobox.com>.
The :mod:`mhlib` module provides a Python interface to MH folders and their
contents.
diff --git a/Doc/library/multifile.rst b/Doc/library/multifile.rst
index 3e79229..0614b86 100644
--- a/Doc/library/multifile.rst
+++ b/Doc/library/multifile.rst
@@ -155,7 +155,7 @@ Finally, :class:`MultiFile` instances have two public instance variables:
:class:`MultiFile` Example
--------------------------
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
::
diff --git a/Doc/library/readline.rst b/Doc/library/readline.rst
index 9426504..5399d3e 100644
--- a/Doc/library/readline.rst
+++ b/Doc/library/readline.rst
@@ -5,7 +5,7 @@
.. module:: readline
:platform: Unix
:synopsis: GNU readline support for Python.
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
The :mod:`readline` module defines a number of functions to facilitate
diff --git a/Doc/library/robotparser.rst b/Doc/library/robotparser.rst
index 1a66955..2451799 100644
--- a/Doc/library/robotparser.rst
+++ b/Doc/library/robotparser.rst
@@ -4,7 +4,7 @@
.. module:: robotparser
:synopsis: Loads a robots.txt file and answers questions about fetchability of other URLs.
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
.. index::
diff --git a/Doc/library/telnetlib.rst b/Doc/library/telnetlib.rst
index 7f08e70..4c8ce45 100644
--- a/Doc/library/telnetlib.rst
+++ b/Doc/library/telnetlib.rst
@@ -4,7 +4,7 @@
.. module:: telnetlib
:synopsis: Telnet client class.
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
.. index:: single: protocol; Telnet
diff --git a/Doc/library/urllib.rst b/Doc/library/urllib.rst
index f4c85bc..77eb632 100644
--- a/Doc/library/urllib.rst
+++ b/Doc/library/urllib.rst
@@ -363,7 +363,7 @@ Restrictions:
URLopener Objects
-----------------
-.. sectionauthor:: Skip Montanaro <skip@mojam.com>
+.. sectionauthor:: Skip Montanaro <skip@pobox.com>
:class:`URLopener` and :class:`FancyURLopener` objects have the following
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index 3a0096c..65cf3d1 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -545,9 +545,9 @@ complete list of changes, or look through the CVS logs for all the details.
(Contributed by Raymond Hettinger.)
* Another change to the :mod:`collections` module is that the
- :class:`deque` type now supports an optional `maxlen` parameter;
+ :class:`deque` type now supports an optional *maxlen* parameter;
if supplied, the deque's size will be restricted to no more
- than ``maxlen`` items. Adding more items to a full deque causes
+ than *maxlen* items. Adding more items to a full deque causes
old items to be discarded.
::
diff --git a/Lib/doctest.py b/Lib/doctest.py
index eb863cb..4a2da32 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -2651,12 +2651,15 @@ def _test():
sys.path.insert(0, dirname)
m = __import__(filename[:-3])
del sys.path[0]
- testmod(m)
+ failures, _ = testmod(m)
else:
- testfile(filename, module_relative=False)
+ failures, _ = testfile(filename, module_relative=False)
+ if failures:
+ return 1
else:
r = unittest.TextTestRunner()
r.run(DocTestSuite())
+ return 0
if __name__ == "__main__":
- _test()
+ sys.exit(_test())
diff --git a/Lib/httplib.py b/Lib/httplib.py
index dc8bd6b..2b38e76 100644
--- a/Lib/httplib.py
+++ b/Lib/httplib.py
@@ -478,7 +478,7 @@ class HTTPResponse:
# Some HTTP/1.0 implementations have support for persistent
# connections, using rules different than HTTP/1.1.
- # For older HTTP, Keep-Alive indiciates persistent connection.
+ # For older HTTP, Keep-Alive indicates persistent connection.
if self.msg.getheader("keep-alive"):
return False
diff --git a/Lib/test/README b/Lib/test/README
index 8aab357..fdc847c 100644
--- a/Lib/test/README
+++ b/Lib/test/README
@@ -3,7 +3,7 @@ Writing Python Regression Tests
+++++++++++++++++++++++++++++++
:Author: Skip Montanaro
-:Contact: skip@mojam.com
+:Contact: skip@pobox.com
Introduction
============
@@ -382,15 +382,6 @@ test_support provides the following useful objects:
statement is *not* correct Python syntax.
-Python and C statement coverage results are currently available at
-
- http://www.musi-cal.com/~skip/python/Python/dist/src/
-
-As of this writing (July, 2000) these results are being generated nightly.
-You can refer to the summaries and the test coverage output files to see
-where coverage is adequate or lacking and write test cases to beef up the
-coverage.
-
Some Non-Obvious regrtest Features
==================================
* Automagic test detection: When you create a new test file
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index 8d91927..1e41f9e 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -299,7 +299,7 @@ class test__mkstemp_inner(TC):
# On Windows a spawn* /path/ with embedded spaces shouldn't be quoted,
# but an arg with embedded spaces should be decorated with double
# quotes on each end
- if sys.platform in ('win32'):
+ if sys.platform in ('win32',):
decorated = '"%s"' % sys.executable
tester = '"%s"' % tester
else:
diff --git a/Misc/ACKS b/Misc/ACKS
index 05256ab..602a498 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -190,7 +190,6 @@ David Ely
Jeff Epler
Tom Epperly
Stoffel Erasmus
-Turkay Eren
Jürgen A. Erhard
Michael Ernst
Ben Escoto
@@ -665,6 +664,7 @@ Anthony Tuininga
Christopher Tur Lesniewski-Laas
Stephen Turner
Bill Tutt
+Eren Türkay
Doobee R. Tzeck
Lionel Ulmer
Roger Upole
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 1c0a70d..855f6cd 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -1061,8 +1061,9 @@ static const char *stripformat[] = {"|O:lstrip", "|O:rstrip", "|O:strip"};
#define RSKIP_NONSPACE(s, i) { while (i>=0 && !ISSPACE(s[i])) i--; }
Py_LOCAL_INLINE(PyObject *)
-split_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
+split_whitespace(PyStringObject *self, Py_ssize_t len, Py_ssize_t maxsplit)
{
+ const char *s = PyString_AS_STRING(self);
Py_ssize_t i, j, count=0;
PyObject *str;
PyObject *list = PyList_New(PREALLOC_SIZE(maxsplit));
@@ -1077,6 +1078,13 @@ split_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
if (i==len) break;
j = i; i++;
SKIP_NONSPACE(s, i, len);
+ if (j == 0 && i == len && PyString_CheckExact(self)) {
+ /* No whitespace in self, so just use it as list[0] */
+ Py_INCREF(self);
+ PyList_SET_ITEM(list, 0, (PyObject *)self);
+ count++;
+ break;
+ }
SPLIT_ADD(s, j, i);
}
@@ -1095,8 +1103,9 @@ split_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
}
Py_LOCAL_INLINE(PyObject *)
-split_char(const char *s, Py_ssize_t len, char ch, Py_ssize_t maxcount)
+split_char(PyStringObject *self, Py_ssize_t len, char ch, Py_ssize_t maxcount)
{
+ const char *s = PyString_AS_STRING(self);
register Py_ssize_t i, j, count=0;
PyObject *str;
PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
@@ -1115,7 +1124,13 @@ split_char(const char *s, Py_ssize_t len, char ch, Py_ssize_t maxcount)
}
}
}
- if (i <= len) {
+ if (i == 0 && count == 0 && PyString_CheckExact(self)) {
+ /* ch not in self, so just use self as list[0] */
+ Py_INCREF(self);
+ PyList_SET_ITEM(list, 0, (PyObject *)self);
+ count++;
+ }
+ else if (i <= len) {
SPLIT_ADD(s, i, len);
}
FIX_PREALLOC_SIZE(list);
@@ -1151,7 +1166,7 @@ string_split(PyStringObject *self, PyObject *args)
if (maxsplit < 0)
maxsplit = PY_SSIZE_T_MAX;
if (subobj == Py_None)
- return split_whitespace(s, len, maxsplit);
+ return split_whitespace(self, len, maxsplit);
if (_getbuffer(subobj, &vsub) < 0)
return NULL;
sub = vsub.buf;
@@ -1162,11 +1177,8 @@ string_split(PyStringObject *self, PyObject *args)
PyObject_ReleaseBuffer(subobj, &vsub);
return NULL;
}
- else if (n == 1) {
- char ch = sub[0];
- PyObject_ReleaseBuffer(subobj, &vsub);
- return split_char(s, len, ch, maxsplit);
- }
+ else if (n == 1)
+ return split_char(self, len, sub[0], maxsplit);
list = PyList_New(PREALLOC_SIZE(maxsplit));
if (list == NULL) {
@@ -1263,8 +1275,9 @@ string_rpartition(PyStringObject *self, PyObject *sep_obj)
}
Py_LOCAL_INLINE(PyObject *)
-rsplit_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
+rsplit_whitespace(PyStringObject *self, Py_ssize_t len, Py_ssize_t maxsplit)
{
+ const char *s = PyString_AS_STRING(self);
Py_ssize_t i, j, count=0;
PyObject *str;
PyObject *list = PyList_New(PREALLOC_SIZE(maxsplit));
@@ -1279,6 +1292,13 @@ rsplit_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
if (i<0) break;
j = i; i--;
RSKIP_NONSPACE(s, i);
+ if (j == len-1 && i < 0 && PyString_CheckExact(self)) {
+ /* No whitespace in self, so just use it as list[0] */
+ Py_INCREF(self);
+ PyList_SET_ITEM(list, 0, (PyObject *)self);
+ count++;
+ break;
+ }
SPLIT_ADD(s, i + 1, j + 1);
}
if (i >= 0) {
@@ -1299,8 +1319,9 @@ rsplit_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
}
Py_LOCAL_INLINE(PyObject *)
-rsplit_char(const char *s, Py_ssize_t len, char ch, Py_ssize_t maxcount)
+rsplit_char(PyStringObject *self, Py_ssize_t len, char ch, Py_ssize_t maxcount)
{
+ const char *s = PyString_AS_STRING(self);
register Py_ssize_t i, j, count=0;
PyObject *str;
PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
@@ -1318,7 +1339,13 @@ rsplit_char(const char *s, Py_ssize_t len, char ch, Py_ssize_t maxcount)
}
}
}
- if (j >= -1) {
+ if (i < 0 && count == 0 && PyString_CheckExact(self)) {
+ /* ch not in self, so just use self as list[0] */
+ Py_INCREF(self);
+ PyList_SET_ITEM(list, 0, (PyObject *)self);
+ count++;
+ }
+ else if (j >= -1) {
SPLIT_ADD(s, 0, j + 1);
}
FIX_PREALLOC_SIZE(list);
@@ -1346,7 +1373,7 @@ string_rsplit(PyStringObject *self, PyObject *args)
{
Py_ssize_t len = PyString_GET_SIZE(self), n, i, j;
Py_ssize_t maxsplit = -1, count=0;
- const char *s = PyString_AS_STRING(self), *sub;
+ const char *s, *sub;
Py_buffer vsub;
PyObject *list, *str, *subobj = Py_None;
@@ -1355,7 +1382,7 @@ string_rsplit(PyStringObject *self, PyObject *args)
if (maxsplit < 0)
maxsplit = PY_SSIZE_T_MAX;
if (subobj == Py_None)
- return rsplit_whitespace(s, len, maxsplit);
+ return rsplit_whitespace(self, len, maxsplit);
if (_getbuffer(subobj, &vsub) < 0)
return NULL;
sub = vsub.buf;
@@ -1366,11 +1393,8 @@ string_rsplit(PyStringObject *self, PyObject *args)
PyObject_ReleaseBuffer(subobj, &vsub);
return NULL;
}
- else if (n == 1) {
- char ch = sub[0];
- PyObject_ReleaseBuffer(subobj, &vsub);
- return rsplit_char(s, len, ch, maxsplit);
- }
+ else if (n == 1)
+ return rsplit_char(self, len, sub[0], maxsplit);
list = PyList_New(PREALLOC_SIZE(maxsplit));
if (list == NULL) {
@@ -1381,6 +1405,7 @@ string_rsplit(PyStringObject *self, PyObject *args)
j = len;
i = j - n;
+ s = PyString_AS_STRING(self);
while ( (i >= 0) && (maxsplit-- > 0) ) {
for (; i>=0; i--) {
if (Py_STRING_MATCH(s, i, sub, n)) {