[Python-3000-checkins] r59425 - in python/branches/py3k: Doc/ACKS.txt Doc/glossary.rst Doc/library/atexit.rst Doc/library/bsddb.rst Doc/library/datetime.rst Doc/library/mhlib.rst Doc/library/multifile.rst Doc/library/readline.rst Doc/library/robotparser.rst Doc/library/telnetlib.rst Doc/library/urllib.rst Doc/whatsnew/2.6.rst Lib/doctest.py Lib/httplib.py Lib/test/README Lib/test/test_tempfile.py Misc/ACKS Objects/stringobject.c

christian.heimes python-3000-checkins at python.org
Sat Dec 8 18:28:34 CET 2007


Author: christian.heimes
Date: Sat Dec  8 18:28:33 2007
New Revision: 59425

Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Doc/ACKS.txt
   python/branches/py3k/Doc/glossary.rst
   python/branches/py3k/Doc/library/atexit.rst
   python/branches/py3k/Doc/library/bsddb.rst
   python/branches/py3k/Doc/library/datetime.rst
   python/branches/py3k/Doc/library/mhlib.rst
   python/branches/py3k/Doc/library/multifile.rst
   python/branches/py3k/Doc/library/readline.rst
   python/branches/py3k/Doc/library/robotparser.rst
   python/branches/py3k/Doc/library/telnetlib.rst
   python/branches/py3k/Doc/library/urllib.rst
   python/branches/py3k/Doc/whatsnew/2.6.rst
   python/branches/py3k/Lib/doctest.py
   python/branches/py3k/Lib/httplib.py
   python/branches/py3k/Lib/test/README
   python/branches/py3k/Lib/test/test_tempfile.py
   python/branches/py3k/Misc/ACKS
   python/branches/py3k/Objects/stringobject.c
Log:
Merged revisions 59407-59422 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r59407 | armin.rigo | 2007-12-07 20:19:55 +0100 (Fri, 07 Dec 2007) | 2 lines
  
  This is probably what was meant here.
........
  r59410 | guido.van.rossum | 2007-12-08 05:38:23 +0100 (Sat, 08 Dec 2007) | 2 lines
  
  Be (just a bit :) more specific about release date.
........
  r59411 | alexandre.vassalotti | 2007-12-08 05:49:22 +0100 (Sat, 08 Dec 2007) | 3 lines
  
  Fix issue #1530.
  Return an error exit status if not all tests passes.
........
  r59413 | georg.brandl | 2007-12-08 11:56:39 +0100 (Sat, 08 Dec 2007) | 2 lines
  
  Fix tpyo.
........
  r59414 | georg.brandl | 2007-12-08 12:05:05 +0100 (Sat, 08 Dec 2007) | 2 lines
  
  Fix markup in whatsnew, use new directive in ACKS.
........
  r59415 | georg.brandl | 2007-12-08 12:05:36 +0100 (Sat, 08 Dec 2007) | 2 lines
  
  Fix Eren's name.
........
  r59416 | georg.brandl | 2007-12-08 12:23:13 +0100 (Sat, 08 Dec 2007) | 2 lines
  
  Add examples to the datetime documentation. Written for GHOP by "h4wk.cz".
........
  r59417 | skip.montanaro | 2007-12-08 15:37:43 +0100 (Sat, 08 Dec 2007) | 2 lines
  
  Note that open() is the preferred way to open files (issue 1510).
........
  r59418 | skip.montanaro | 2007-12-08 16:23:31 +0100 (Sat, 08 Dec 2007) | 1 line
  
  + "context manager"
........
  r59419 | skip.montanaro | 2007-12-08 16:26:16 +0100 (Sat, 08 Dec 2007) | 1 line
  
  correct email address
........
  r59420 | skip.montanaro | 2007-12-08 16:33:24 +0100 (Sat, 08 Dec 2007) | 3 lines
  
  When splitting, avoid making a copy of the string if the split doesn't find
  anything (issue 1538).
........


Modified: python/branches/py3k/Doc/ACKS.txt
==============================================================================
--- python/branches/py3k/Doc/ACKS.txt	(original)
+++ python/branches/py3k/Doc/ACKS.txt	Sat Dec  8 18:28:33 2007
@@ -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 at 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

Modified: python/branches/py3k/Doc/glossary.rst
==============================================================================
--- python/branches/py3k/Doc/glossary.rst	(original)
+++ python/branches/py3k/Doc/glossary.rst	Sat Dec  8 18:28:33 2007
@@ -55,6 +55,11 @@
       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

Modified: python/branches/py3k/Doc/library/atexit.rst
==============================================================================
--- python/branches/py3k/Doc/library/atexit.rst	(original)
+++ python/branches/py3k/Doc/library/atexit.rst	Sat Dec  8 18:28:33 2007
@@ -4,8 +4,8 @@
 
 .. module:: atexit
    :synopsis: Register and execute cleanup functions.
-.. moduleauthor:: Skip Montanaro <skip at mojam.com>
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. moduleauthor:: Skip Montanaro <skip at pobox.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 The :mod:`atexit` module defines functions to register and unregister cleanup

Modified: python/branches/py3k/Doc/library/bsddb.rst
==============================================================================
--- python/branches/py3k/Doc/library/bsddb.rst	(original)
+++ python/branches/py3k/Doc/library/bsddb.rst	Sat Dec  8 18:28:33 2007
@@ -4,7 +4,7 @@
 
 .. module:: bsddb
    :synopsis: Interface to Berkeley DB database library
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 The :mod:`bsddb` module provides an interface to the Berkeley DB library.  Users

Modified: python/branches/py3k/Doc/library/datetime.rst
==============================================================================
--- python/branches/py3k/Doc/library/datetime.rst	(original)
+++ python/branches/py3k/Doc/library/datetime.rst	Sat Dec  8 18:28:33 2007
@@ -161,6 +161,7 @@
    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 @@
 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 @@
    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 @@
    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 @@
    ``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 @@
 :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 @@
 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'``.

Modified: python/branches/py3k/Doc/library/mhlib.rst
==============================================================================
--- python/branches/py3k/Doc/library/mhlib.rst	(original)
+++ python/branches/py3k/Doc/library/mhlib.rst	Sat Dec  8 18:28:33 2007
@@ -7,7 +7,7 @@
 
 
 .. % LaTeX'ized from the comments in the module by Skip Montanaro
-.. % <skip at mojam.com>.
+.. % <skip at pobox.com>.
 
 The :mod:`mhlib` module provides a Python interface to MH folders and their
 contents.

Modified: python/branches/py3k/Doc/library/multifile.rst
==============================================================================
--- python/branches/py3k/Doc/library/multifile.rst	(original)
+++ python/branches/py3k/Doc/library/multifile.rst	Sat Dec  8 18:28:33 2007
@@ -155,7 +155,7 @@
 :class:`MultiFile` Example
 --------------------------
 
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 ::

Modified: python/branches/py3k/Doc/library/readline.rst
==============================================================================
--- python/branches/py3k/Doc/library/readline.rst	(original)
+++ python/branches/py3k/Doc/library/readline.rst	Sat Dec  8 18:28:33 2007
@@ -5,7 +5,7 @@
 .. module:: readline
    :platform: Unix
    :synopsis: GNU readline support for Python.
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 The :mod:`readline` module defines a number of functions to facilitate

Modified: python/branches/py3k/Doc/library/robotparser.rst
==============================================================================
--- python/branches/py3k/Doc/library/robotparser.rst	(original)
+++ python/branches/py3k/Doc/library/robotparser.rst	Sat Dec  8 18:28:33 2007
@@ -4,7 +4,7 @@
 
 .. module:: robotparser
    :synopsis: Loads a robots.txt file and answers questions about fetchability of other URLs.
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 .. index::

Modified: python/branches/py3k/Doc/library/telnetlib.rst
==============================================================================
--- python/branches/py3k/Doc/library/telnetlib.rst	(original)
+++ python/branches/py3k/Doc/library/telnetlib.rst	Sat Dec  8 18:28:33 2007
@@ -4,7 +4,7 @@
 
 .. module:: telnetlib
    :synopsis: Telnet client class.
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 .. index:: single: protocol; Telnet

Modified: python/branches/py3k/Doc/library/urllib.rst
==============================================================================
--- python/branches/py3k/Doc/library/urllib.rst	(original)
+++ python/branches/py3k/Doc/library/urllib.rst	Sat Dec  8 18:28:33 2007
@@ -363,7 +363,7 @@
 URLopener Objects
 -----------------
 
-.. sectionauthor:: Skip Montanaro <skip at mojam.com>
+.. sectionauthor:: Skip Montanaro <skip at pobox.com>
 
 
 :class:`URLopener` and :class:`FancyURLopener` objects have the following

Modified: python/branches/py3k/Doc/whatsnew/2.6.rst
==============================================================================
--- python/branches/py3k/Doc/whatsnew/2.6.rst	(original)
+++ python/branches/py3k/Doc/whatsnew/2.6.rst	Sat Dec  8 18:28:33 2007
@@ -545,9 +545,9 @@
   (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.
 
   ::

Modified: python/branches/py3k/Lib/doctest.py
==============================================================================
--- python/branches/py3k/Lib/doctest.py	(original)
+++ python/branches/py3k/Lib/doctest.py	Sat Dec  8 18:28:33 2007
@@ -2651,12 +2651,15 @@
                 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())

Modified: python/branches/py3k/Lib/httplib.py
==============================================================================
--- python/branches/py3k/Lib/httplib.py	(original)
+++ python/branches/py3k/Lib/httplib.py	Sat Dec  8 18:28:33 2007
@@ -478,7 +478,7 @@
         # 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
 

Modified: python/branches/py3k/Lib/test/README
==============================================================================
--- python/branches/py3k/Lib/test/README	(original)
+++ python/branches/py3k/Lib/test/README	Sat Dec  8 18:28:33 2007
@@ -3,7 +3,7 @@
 +++++++++++++++++++++++++++++++
 
 :Author: Skip Montanaro
-:Contact: skip at mojam.com
+:Contact: skip at pobox.com
 
 Introduction
 ============
@@ -382,15 +382,6 @@
       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

Modified: python/branches/py3k/Lib/test/test_tempfile.py
==============================================================================
--- python/branches/py3k/Lib/test/test_tempfile.py	(original)
+++ python/branches/py3k/Lib/test/test_tempfile.py	Sat Dec  8 18:28:33 2007
@@ -299,7 +299,7 @@
         # 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:

Modified: python/branches/py3k/Misc/ACKS
==============================================================================
--- python/branches/py3k/Misc/ACKS	(original)
+++ python/branches/py3k/Misc/ACKS	Sat Dec  8 18:28:33 2007
@@ -190,7 +190,6 @@
 Jeff Epler
 Tom Epperly
 Stoffel Erasmus
-Turkay Eren
 Jürgen A. Erhard
 Michael Ernst
 Ben Escoto
@@ -665,6 +664,7 @@
 Christopher Tur Lesniewski-Laas
 Stephen Turner
 Bill Tutt
+Eren Türkay
 Doobee R. Tzeck
 Lionel Ulmer
 Roger Upole

Modified: python/branches/py3k/Objects/stringobject.c
==============================================================================
--- python/branches/py3k/Objects/stringobject.c	(original)
+++ python/branches/py3k/Objects/stringobject.c	Sat Dec  8 18:28:33 2007
@@ -1061,8 +1061,9 @@
 #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 @@
 		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 @@
 }
 
 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 @@
 			}
 		}
 	}
-	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 @@
 	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 @@
 		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 @@
 }
 
 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 @@
 		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 @@
 }
 
 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 @@
 			}
 		}
 	}
-	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 @@
 {
 	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 @@
 	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 @@
 		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 @@
 	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)) {


More information about the Python-3000-checkins mailing list