Merged revisions 77937 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r77937 | benjamin.peterson | 2010-02-02 20:35:45 -0600 (Tue, 02 Feb 2010) | 75 lines

  Merged revisions 77484,77487,77561,77570,77593,77603,77608,77667,77702-77703,77739,77858,77887,77889 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r77484 | skip.montanaro | 2010-01-13 19:12:34 -0600 (Wed, 13 Jan 2010) | 4 lines

    Update PyEval_EvalFrame to PyEval_EvalFrameEx.  This looks to have been done
    partially before.  Also add a comment describing how this might have to work
    with different versions of the interpreter.
  ........
    r77487 | ezio.melotti | 2010-01-14 05:34:10 -0600 (Thu, 14 Jan 2010) | 1 line

    Fixed typo
  ........
    r77561 | georg.brandl | 2010-01-17 02:42:30 -0600 (Sun, 17 Jan 2010) | 1 line

    #7699: improve datetime docs: straightforward linking to strftime/strptime section, mark classmethods as such.
  ........
    r77570 | georg.brandl | 2010-01-17 06:14:42 -0600 (Sun, 17 Jan 2010) | 1 line

    Add note about usage of STRINGLIB_EMPTY.
  ........
    r77593 | georg.brandl | 2010-01-17 17:33:53 -0600 (Sun, 17 Jan 2010) | 1 line

    Fix internal reference.
  ........
    r77603 | benjamin.peterson | 2010-01-18 17:07:56 -0600 (Mon, 18 Jan 2010) | 8 lines

    data descriptors do not override the class dictionary if __get__ is not defined

    Adjust documentation and add a test to verify this behavior.

    See http://mail.python.org/pipermail/python-dev/2010-January/095637.html for
    discussion.
  ........
    r77608 | gregory.p.smith | 2010-01-19 02:19:03 -0600 (Tue, 19 Jan 2010) | 6 lines

    Do not compile stubs for the sha2 series hashes in the openssl hashlib
    module when the openssl version is too old to support them.  That
    leads both compiled code bloat and to unittests attempting to test
    implementations that don't exist for comparison purposes on such
    platforms.
  ........
    r77667 | mark.dickinson | 2010-01-21 12:32:27 -0600 (Thu, 21 Jan 2010) | 1 line

    Add two more test_strtod test values.
  ........
    r77702 | georg.brandl | 2010-01-23 02:43:31 -0600 (Sat, 23 Jan 2010) | 1 line

    #7762: fix refcount annotation of PyUnicode_Tailmatch().
  ........
    r77703 | georg.brandl | 2010-01-23 02:47:54 -0600 (Sat, 23 Jan 2010) | 1 line

    #7725: fix referencing issue.
  ........
    r77739 | benjamin.peterson | 2010-01-24 21:52:52 -0600 (Sun, 24 Jan 2010) | 1 line

    mention from_float() in error message
  ........
    r77858 | georg.brandl | 2010-01-30 11:57:48 -0600 (Sat, 30 Jan 2010) | 1 line

    #7802: fix invalid example (heh).
  ........
    r77887 | georg.brandl | 2010-01-31 12:51:49 -0600 (Sun, 31 Jan 2010) | 5 lines

    Fix-up ftplib documentation:
    move exception descriptions to toplevel, not inside a class
    remove attribution in "versionadded"
    spell and grammar check docstring of FTP_TLS
  ........
    r77889 | michael.foord | 2010-01-31 13:59:26 -0600 (Sun, 31 Jan 2010) | 1 line

    Minor modification to unittest documentation.
  ........
................
This commit is contained in:
Benjamin Peterson 2010-02-03 02:43:37 +00:00
parent 93fc46f3f4
commit 23b9ef7205
11 changed files with 136 additions and 64 deletions

View file

@ -1631,7 +1631,7 @@ PyUnicode_Join:PyObject*::+1:
PyUnicode_Join:PyObject*:separator:0: PyUnicode_Join:PyObject*:separator:0:
PyUnicode_Join:PyObject*:seq:0: PyUnicode_Join:PyObject*:seq:0:
PyUnicode_Tailmatch:PyObject*::+1: PyUnicode_Tailmatch:int:::
PyUnicode_Tailmatch:PyObject*:str:0: PyUnicode_Tailmatch:PyObject*:str:0:
PyUnicode_Tailmatch:PyObject*:substr:0: PyUnicode_Tailmatch:PyObject*:substr:0:
PyUnicode_Tailmatch:int:start:: PyUnicode_Tailmatch:int:start::

View file

@ -36,7 +36,6 @@ than rational, and there is no standard suitable for every application.
The :mod:`datetime` module exports the following constants: The :mod:`datetime` module exports the following constants:
.. data:: MINYEAR .. data:: MINYEAR
The smallest year number allowed in a :class:`date` or :class:`datetime` object. The smallest year number allowed in a :class:`date` or :class:`datetime` object.
@ -61,7 +60,6 @@ The :mod:`datetime` module exports the following constants:
Available Types Available Types
--------------- ---------------
.. class:: date .. class:: date
:noindex: :noindex:
@ -131,7 +129,6 @@ Subclass relationships::
A :class:`timedelta` object represents a duration, the difference between two A :class:`timedelta` object represents a duration, the difference between two
dates or times. dates or times.
.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) .. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
All arguments are optional and default to ``0``. Arguments may be integers All arguments are optional and default to ``0``. Arguments may be integers
@ -168,8 +165,8 @@ dates or times.
>>> (d.days, d.seconds, d.microseconds) >>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999) (-1, 86399, 999999)
Class attributes are:
Class attributes are:
.. attribute:: timedelta.min .. attribute:: timedelta.min
@ -314,16 +311,16 @@ systems.
If an argument outside those ranges is given, :exc:`ValueError` is raised. If an argument outside those ranges is given, :exc:`ValueError` is raised.
Other constructors, all class methods: Other constructors, all class methods:
.. classmethod:: date.today()
.. method:: date.today()
Return the current local date. This is equivalent to Return the current local date. This is equivalent to
``date.fromtimestamp(time.time())``. ``date.fromtimestamp(time.time())``.
.. method:: date.fromtimestamp(timestamp) .. classmethod:: date.fromtimestamp(timestamp)
Return the local date corresponding to the POSIX timestamp, such as is returned Return the local date corresponding to the POSIX timestamp, such as is returned
by :func:`time.time`. This may raise :exc:`ValueError`, if the timestamp is out by :func:`time.time`. This may raise :exc:`ValueError`, if the timestamp is out
@ -333,15 +330,15 @@ Other constructors, all class methods:
timestamp, leap seconds are ignored by :meth:`fromtimestamp`. timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
.. method:: date.fromordinal(ordinal) .. classmethod:: date.fromordinal(ordinal)
Return the date corresponding to the proleptic Gregorian ordinal, where January Return the date corresponding to the proleptic Gregorian ordinal, where January
1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <= 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <=
date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) == date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
d``. d``.
Class attributes:
Class attributes:
.. attribute:: date.min .. attribute:: date.min
@ -358,8 +355,8 @@ Class attributes:
The smallest possible difference between non-equal date objects, The smallest possible difference between non-equal date objects,
``timedelta(days=1)``. ``timedelta(days=1)``.
Instance attributes (read-only):
Instance attributes (read-only):
.. attribute:: date.year .. attribute:: date.year
@ -375,6 +372,7 @@ Instance attributes (read-only):
Between 1 and the number of days in the given month of the given year. Between 1 and the number of days in the given month of the given year.
Supported operations: Supported operations:
+-------------------------------+----------------------------------------------+ +-------------------------------+----------------------------------------------+
@ -427,7 +425,6 @@ objects are considered to be true.
Instance methods: Instance methods:
.. method:: date.replace(year, month, day) .. method:: date.replace(year, month, day)
Return a date with the same value, except for those members given new values by Return a date with the same value, except for those members given new values by
@ -507,7 +504,8 @@ Instance methods:
Return a string representing the date, controlled by an explicit format string. Return a string representing the date, controlled by an explicit format string.
Format codes referring to hours, minutes or seconds will see 0 values. See Format codes referring to hours, minutes or seconds will see 0 values. See
section :ref:`strftime-behavior`. section :ref:`strftime-strptime-behavior`.
Example of counting days to an event:: Example of counting days to an event::
@ -574,7 +572,6 @@ both directions; like a time object, :class:`datetime` assumes there are exactly
Constructor: Constructor:
.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) .. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
The year, month and day arguments are required. *tzinfo* may be ``None``, or an The year, month and day arguments are required. *tzinfo* may be ``None``, or an
@ -593,15 +590,14 @@ Constructor:
Other constructors, all class methods: Other constructors, all class methods:
.. classmethod:: datetime.today()
.. method:: datetime.today()
Return the current local datetime, with :attr:`tzinfo` ``None``. This is Return the current local datetime, with :attr:`tzinfo` ``None``. This is
equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`, equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
:meth:`fromtimestamp`. :meth:`fromtimestamp`.
.. method:: datetime.now(tz=None) .. classmethod:: datetime.now(tz=None)
Return the current local date and time. If optional argument *tz* is ``None`` Return the current local date and time. If optional argument *tz* is ``None``
or not specified, this is like :meth:`today`, but, if possible, supplies more or not specified, this is like :meth:`today`, but, if possible, supplies more
@ -615,14 +611,14 @@ Other constructors, all class methods:
See also :meth:`today`, :meth:`utcnow`. See also :meth:`today`, :meth:`utcnow`.
.. method:: datetime.utcnow() .. classmethod:: datetime.utcnow()
Return the current UTC date and time, with :attr:`tzinfo` ``None``. This is like Return the current UTC date and time, with :attr:`tzinfo` ``None``. This is like
:meth:`now`, but returns the current UTC date and time, as a naive :meth:`now`, but returns the current UTC date and time, as a naive
:class:`datetime` object. See also :meth:`now`. :class:`datetime` object. See also :meth:`now`.
.. method:: datetime.fromtimestamp(timestamp, tz=None) .. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Return the local date and time corresponding to the POSIX timestamp, such as is Return the local date and time corresponding to the POSIX timestamp, such as is
returned by :func:`time.time`. If optional argument *tz* is ``None`` or not returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
@ -643,7 +639,7 @@ Other constructors, all class methods:
identical :class:`datetime` objects. See also :meth:`utcfromtimestamp`. identical :class:`datetime` objects. See also :meth:`utcfromtimestamp`.
.. method:: datetime.utcfromtimestamp(timestamp) .. classmethod:: datetime.utcfromtimestamp(timestamp)
Return the UTC :class:`datetime` corresponding to the POSIX timestamp, with Return the UTC :class:`datetime` corresponding to the POSIX timestamp, with
:attr:`tzinfo` ``None``. This may raise :exc:`ValueError`, if the timestamp is :attr:`tzinfo` ``None``. This may raise :exc:`ValueError`, if the timestamp is
@ -652,7 +648,7 @@ Other constructors, all class methods:
:meth:`fromtimestamp`. :meth:`fromtimestamp`.
.. method:: datetime.fromordinal(ordinal) .. classmethod:: datetime.fromordinal(ordinal)
Return the :class:`datetime` corresponding to the proleptic Gregorian ordinal, Return the :class:`datetime` corresponding to the proleptic Gregorian ordinal,
where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
@ -660,7 +656,7 @@ Other constructors, all class methods:
microsecond of the result are all 0, and :attr:`tzinfo` is ``None``. microsecond of the result are all 0, and :attr:`tzinfo` is ``None``.
.. method:: datetime.combine(date, time) .. classmethod:: datetime.combine(date, time)
Return a new :class:`datetime` object whose date members are equal to the given Return a new :class:`datetime` object whose date members are equal to the given
:class:`date` object's, and whose time and :attr:`tzinfo` members are equal to :class:`date` object's, and whose time and :attr:`tzinfo` members are equal to
@ -669,18 +665,18 @@ Other constructors, all class methods:
object, its time and :attr:`tzinfo` members are ignored. object, its time and :attr:`tzinfo` members are ignored.
.. method:: datetime.strptime(date_string, format) .. classmethod:: datetime.strptime(date_string, format)
Return a :class:`datetime` corresponding to *date_string*, parsed according to Return a :class:`datetime` corresponding to *date_string*, parsed according to
*format*. This is equivalent to ``datetime(*(time.strptime(date_string, *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
can't be parsed by :func:`time.strptime` or if it returns a value which isn't a can't be parsed by :func:`time.strptime` or if it returns a value which isn't a
time tuple. time tuple. See section :ref:`strftime-strptime-behavior`.
Class attributes: Class attributes:
.. attribute:: datetime.min .. attribute:: datetime.min
The earliest representable :class:`datetime`, ``datetime(MINYEAR, 1, 1, The earliest representable :class:`datetime`, ``datetime(MINYEAR, 1, 1,
@ -698,8 +694,8 @@ Class attributes:
The smallest possible difference between non-equal :class:`datetime` objects, The smallest possible difference between non-equal :class:`datetime` objects,
``timedelta(microseconds=1)``. ``timedelta(microseconds=1)``.
Instance attributes (read-only):
Instance attributes (read-only):
.. attribute:: datetime.year .. attribute:: datetime.year
@ -741,6 +737,7 @@ Instance attributes (read-only):
The object passed as the *tzinfo* argument to the :class:`datetime` constructor, The object passed as the *tzinfo* argument to the :class:`datetime` constructor,
or ``None`` if none was passed. or ``None`` if none was passed.
Supported operations: Supported operations:
+---------------------------------------+-------------------------------+ +---------------------------------------+-------------------------------+
@ -814,7 +811,6 @@ all :class:`datetime` objects are considered to be true.
Instance methods: Instance methods:
.. method:: datetime.date() .. method:: datetime.date()
Return :class:`date` object with same year, month and day. Return :class:`date` object with same year, month and day.
@ -992,7 +988,8 @@ Instance methods:
.. method:: datetime.strftime(format) .. method:: datetime.strftime(format)
Return a string representing the date and time, controlled by an explicit format Return a string representing the date and time, controlled by an explicit format
string. See section :ref:`strftime-behavior`. string. See section :ref:`strftime-strptime-behavior`.
Examples of working with datetime objects: Examples of working with datetime objects:
@ -1105,7 +1102,6 @@ Using datetime with tzinfo:
A time object represents a (local) time of day, independent of any particular A time object represents a (local) time of day, independent of any particular
day, and subject to adjustment via a :class:`tzinfo` object. day, and subject to adjustment via a :class:`tzinfo` object.
.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) .. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
All arguments are optional. *tzinfo* may be ``None``, or an instance of a All arguments are optional. *tzinfo* may be ``None``, or an instance of a
@ -1139,8 +1135,8 @@ Class attributes:
``timedelta(microseconds=1)``, although note that arithmetic on :class:`time` ``timedelta(microseconds=1)``, although note that arithmetic on :class:`time`
objects is not supported. objects is not supported.
Instance attributes (read-only):
Instance attributes (read-only):
.. attribute:: time.hour .. attribute:: time.hour
@ -1167,6 +1163,7 @@ Instance attributes (read-only):
The object passed as the tzinfo argument to the :class:`time` constructor, or The object passed as the tzinfo argument to the :class:`time` constructor, or
``None`` if none was passed. ``None`` if none was passed.
Supported operations: Supported operations:
* comparison of :class:`time` to :class:`time`, where *a* is considered less * comparison of :class:`time` to :class:`time`, where *a* is considered less
@ -1189,8 +1186,8 @@ Supported operations:
only if, after converting it to minutes and subtracting :meth:`utcoffset` (or only if, after converting it to minutes and subtracting :meth:`utcoffset` (or
``0`` if that's ``None``), the result is non-zero. ``0`` if that's ``None``), the result is non-zero.
Instance methods:
Instance methods:
.. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) .. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
@ -1216,7 +1213,7 @@ Instance methods:
.. method:: time.strftime(format) .. method:: time.strftime(format)
Return a string representing the time, controlled by an explicit format string. Return a string representing the time, controlled by an explicit format string.
See section :ref:`strftime-behavior`. See section :ref:`strftime-strptime-behavior`.
.. method:: time.utcoffset() .. method:: time.utcoffset()
@ -1241,6 +1238,7 @@ Instance methods:
``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
return ``None`` or a string object. return ``None`` or a string object.
Example: Example:
>>> from datetime import time, tzinfo >>> from datetime import time, tzinfo
@ -1377,6 +1375,7 @@ methods. Exactly which methods are needed depends on the uses made of aware
The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`. The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
These methods are called by a :class:`datetime` or :class:`time` object, in These methods are called by a :class:`datetime` or :class:`time` object, in
response to their methods of the same names. A :class:`datetime` object passes response to their methods of the same names. A :class:`datetime` object passes
itself as the argument, and a :class:`time` object passes ``None`` as the itself as the argument, and a :class:`time` object passes ``None`` as the
@ -1480,10 +1479,10 @@ other fixed-offset :class:`tzinfo` subclass (such as a class representing only
EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)). EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
.. _strftime-behavior: .. _strftime-strptime-behavior:
:meth:`strftime` Behavior :meth:`strftime` and :meth:`strptime` Behavior
------------------------- ----------------------------------------------
:class:`date`, :class:`datetime`, and :class:`time` objects all support a :class:`date`, :class:`datetime`, and :class:`time` objects all support a
``strftime(format)`` method, to create a string representing the time under the ``strftime(format)`` method, to create a string representing the time under the
@ -1491,9 +1490,14 @@ control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())`` acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
although not all objects support a :meth:`timetuple` method. although not all objects support a :meth:`timetuple` method.
Conversely, the :meth:`datetime.strptime` class method creates a
:class:`datetime` object from a string representing a date and time and a
corresponding format string. ``datetime.strptime(date_string, format)`` is
equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
For :class:`time` objects, the format codes for year, month, and day should not For :class:`time` objects, the format codes for year, month, and day should not
be used, as time objects have no such values. If they're used anyway, ``1900`` be used, as time objects have no such values. If they're used anyway, ``1900``
is substituted for the year, and ``0`` for the month and day. is substituted for the year, and ``1`` for the month and day.
For :class:`date` objects, the format codes for hours, minutes, seconds, and For :class:`date` objects, the format codes for hours, minutes, seconds, and
microseconds should not be used, as :class:`date` objects have no such microseconds should not be used, as :class:`date` objects have no such
@ -1615,14 +1619,14 @@ platforms. Regardless of platform, years before 1900 cannot be used.
Notes: Notes:
(1) (1)
When used with the :func:`strptime` function, the ``%f`` directive When used with the :meth:`strptime` method, the ``%f`` directive
accepts from one to six digits and zero pads on the right. ``%f`` is accepts from one to six digits and zero pads on the right. ``%f`` is
an extension to the set of format characters in the C standard (but an extension to the set of format characters in the C standard (but
implemented separately in datetime objects, and therefore always implemented separately in datetime objects, and therefore always
available). available).
(2) (2)
When used with the :func:`strptime` function, the ``%p`` directive only affects When used with the :meth:`strptime` method, the ``%p`` directive only affects
the output hour field if the ``%I`` directive is used to parse the hour. the output hour field if the ``%I`` directive is used to parse the hour.
(3) (3)
@ -1630,11 +1634,11 @@ Notes:
accounts for leap seconds and the (very rare) double leap seconds. accounts for leap seconds and the (very rare) double leap seconds.
The :mod:`time` module may produce and does accept leap seconds since The :mod:`time` module may produce and does accept leap seconds since
it is based on the Posix standard, but the :mod:`datetime` module it is based on the Posix standard, but the :mod:`datetime` module
does not accept leap seconds in :func:`strptime` input nor will it does not accept leap seconds in :meth:`strptime` input nor will it
produce them in :func:`strftime` output. produce them in :func:`strftime` output.
(4) (4)
When used with the :func:`strptime` function, ``%U`` and ``%W`` are only used in When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in
calculations when the day of the week and the year are specified. calculations when the day of the week and the year are specified.
(5) (5)

View file

@ -108,7 +108,7 @@ script. For example::
cProfile.py [-o output_file] [-s sort_order] cProfile.py [-o output_file] [-s sort_order]
:option:`-s` only applies to standard output (:option:`-o` is not supplied). ``-s`` only applies to standard output (``-o`` is not supplied).
Look in the :class:`Stats` documentation for valid sort values. Look in the :class:`Stats` documentation for valid sort values.
When you wish to review the profile, you should use the methods in the When you wish to review the profile, you should use the methods in the

View file

@ -731,9 +731,9 @@ Test cases
.. method:: assertSameElements(expected, actual, msg=None) .. method:: assertSameElements(expected, actual, msg=None)
Test that sequence *expected* contains the same elements as *actual*. Test that sequence *expected* contains the same elements as *actual*,
When they don't an error message listing the differences between the regardless of their order. When they don't, an error message listing
sequences will be generated. the differences between the sequences will be generated.
If specified *msg* will be used as the error message on failure. If specified *msg* will be used as the error message on failure.

View file

@ -383,8 +383,8 @@ by providing an invalid URI::
import xmlrpc.client import xmlrpc.client
# create a ServerProxy with an invalid URI # create a ServerProxy with an URI that doesn't respond to XMLRPC requests
proxy = xmlrpc.client.ServerProxy("http://invalidaddress/") proxy = xmlrpc.client.ServerProxy("http://google.com/")
try: try:
proxy.some_method() proxy.some_method()

View file

@ -1413,11 +1413,17 @@ Super Binding
``A.__dict__['m'].__get__(obj, A)``. ``A.__dict__['m'].__get__(obj, A)``.
For instance bindings, the precedence of descriptor invocation depends on the For instance bindings, the precedence of descriptor invocation depends on the
which descriptor methods are defined. Normally, data descriptors define both which descriptor methods are defined. A descriptor can define any combination
:meth:`__get__` and :meth:`__set__`, while non-data descriptors have just the of :meth:`__get__`, :meth:`__set__` and :meth:`__delete__`. If it does not
:meth:`__get__` method. Data descriptors always override a redefinition in an define :meth:`__get__`, then accessing the attribute will return the descriptor
object itself unless there is a value in the object's instance dictionary. If
the descriptor defines :meth:`__set__` and/or :meth:`__delete__`, it is a data
descriptor; if it defines neither, it is a non-data descriptor. Normally, data
descriptors define both :meth:`__get__` and :meth:`__set__`, while non-data
descriptors have just the :meth:`__get__` method. Data descriptors with
:meth:`__set__` and :meth:`__get__` defined always override a redefinition in an
instance dictionary. In contrast, non-data descriptors can be overridden by instance dictionary. In contrast, non-data descriptors can be overridden by
instances. [#]_ instances.
Python methods (including :func:`staticmethod` and :func:`classmethod`) are Python methods (including :func:`staticmethod` and :func:`classmethod`) are
implemented as non-data descriptors. Accordingly, instances can redefine and implemented as non-data descriptors. Accordingly, instances can redefine and
@ -2006,13 +2012,6 @@ object itself in order to be consistently invoked by the interpreter).
controlled conditions. It generally isn't a good idea though, since it can controlled conditions. It generally isn't a good idea though, since it can
lead to some very strange behaviour if it is handled incorrectly. lead to some very strange behaviour if it is handled incorrectly.
.. [#] A descriptor can define any combination of :meth:`__get__`,
:meth:`__set__` and :meth:`__delete__`. If it does not define :meth:`__get__`,
then accessing the attribute even on an instance will return the descriptor
object itself. If the descriptor defines :meth:`__set__` and/or
:meth:`__delete__`, it is a data descriptor; if it defines neither, it is a
non-data descriptor.
.. [#] For operands of the same type, it is assumed that if the non-reflected method .. [#] For operands of the same type, it is assumed that if the non-reflected method
(such as :meth:`__add__`) fails the operation is not supported, which is why the (such as :meth:`__add__`) fails the operation is not supported, which is why the
reflected method is not called. reflected method is not called.

View file

@ -648,8 +648,8 @@ class Decimal(object):
return self return self
if isinstance(value, float): if isinstance(value, float):
raise TypeError("Cannot convert float to Decimal. " + raise TypeError("Cannot convert float in Decimal constructor. "
"First convert the float to a string") "Use from_float class method.")
raise TypeError("Cannot convert %r to Decimal" % value) raise TypeError("Cannot convert %r to Decimal" % value)

View file

@ -4159,6 +4159,26 @@ order (MRO) for bases """
c[1:2] = 3 c[1:2] = 3
self.assertEqual(c.value, 3) self.assertEqual(c.value, 3)
def test_set_and_no_get(self):
# See
# http://mail.python.org/pipermail/python-dev/2010-January/095637.html
class Descr(object):
def __init__(self, name):
self.name = name
def __set__(self, obj, value):
obj.__dict__[self.name] = value
descr = Descr("a")
class X(object):
a = descr
x = X()
self.assertIs(x.a, descr)
x.a = 42
self.assertEqual(x.a, 42)
def test_getattr_hooks(self): def test_getattr_hooks(self):
# issue 4230 # issue 4230

View file

@ -313,6 +313,42 @@ class StrtodTests(unittest.TestCase):
'4106250198039490000000000000000000000000000000000000000e-38', '4106250198039490000000000000000000000000000000000000000e-38',
# issue 7632 bug 8: the following produced 10.0 # issue 7632 bug 8: the following produced 10.0
'10.900000000000000012345678912345678912345', '10.900000000000000012345678912345678912345',
# two humongous values from issue 7743
'116512874940594195638617907092569881519034793229385' #...
'228569165191541890846564669771714896916084883987920' #...
'473321268100296857636200926065340769682863349205363' #...
'349247637660671783209907949273683040397979984107806' #...
'461822693332712828397617946036239581632976585100633' #...
'520260770761060725403904123144384571612073732754774' #...
'588211944406465572591022081973828448927338602556287' #...
'851831745419397433012491884869454462440536895047499' #...
'436551974649731917170099387762871020403582994193439' #...
'761933412166821484015883631622539314203799034497982' #...
'130038741741727907429575673302461380386596501187482' #...
'006257527709842179336488381672818798450229339123527' #...
'858844448336815912020452294624916993546388956561522' #...
'161875352572590420823607478788399460162228308693742' #...
'05287663441403533948204085390898399055004119873046875e-1075',
'525440653352955266109661060358202819561258984964913' #...
'892256527849758956045218257059713765874251436193619' #...
'443248205998870001633865657517447355992225852945912' #...
'016668660000210283807209850662224417504752264995360' #...
'631512007753855801075373057632157738752800840302596' #...
'237050247910530538250008682272783660778181628040733' #...
'653121492436408812668023478001208529190359254322340' #...
'397575185248844788515410722958784640926528544043090' #...
'115352513640884988017342469275006999104519620946430' #...
'818767147966495485406577703972687838176778993472989' #...
'561959000047036638938396333146685137903018376496408' #...
'319705333868476925297317136513970189073693314710318' #...
'991252811050501448326875232850600451776091303043715' #...
'157191292827614046876950225714743118291034780466325' #...
'085141343734564915193426994587206432697337118211527' #...
'278968731294639353354774788602467795167875117481660' #...
'4738791256853675690543663283782215866825e-1180',
# exercise exit conditions in bigcomp comparison loop # exercise exit conditions in bigcomp comparison loop
'2602129298404963083833853479113577253105939995688e2', '2602129298404963083833853479113577253105939995688e2',
'260212929840496308383385347911357725310593999568896e0', '260212929840496308383385347911357725310593999568896e0',

View file

@ -49,6 +49,10 @@
#define HASH_OBJ_CONSTRUCTOR 0 #define HASH_OBJ_CONSTRUCTOR 0
#endif #endif
/* Minimum OpenSSL version needed to support sha224 and higher. */
#if defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x00908000)
#define _OPENSSL_SUPPORTS_SHA2
#endif
typedef struct { typedef struct {
PyObject_HEAD PyObject_HEAD
@ -70,10 +74,12 @@ static PyTypeObject EVPtype;
DEFINE_CONSTS_FOR_NEW(md5) DEFINE_CONSTS_FOR_NEW(md5)
DEFINE_CONSTS_FOR_NEW(sha1) DEFINE_CONSTS_FOR_NEW(sha1)
#ifdef _OPENSSL_SUPPORTS_SHA2
DEFINE_CONSTS_FOR_NEW(sha224) DEFINE_CONSTS_FOR_NEW(sha224)
DEFINE_CONSTS_FOR_NEW(sha256) DEFINE_CONSTS_FOR_NEW(sha256)
DEFINE_CONSTS_FOR_NEW(sha384) DEFINE_CONSTS_FOR_NEW(sha384)
DEFINE_CONSTS_FOR_NEW(sha512) DEFINE_CONSTS_FOR_NEW(sha512)
#endif
static EVPobject * static EVPobject *
@ -537,10 +543,12 @@ EVP_new(PyObject *self, PyObject *args, PyObject *kwdict)
GEN_CONSTRUCTOR(md5) GEN_CONSTRUCTOR(md5)
GEN_CONSTRUCTOR(sha1) GEN_CONSTRUCTOR(sha1)
#ifdef _OPENSSL_SUPPORTS_SHA2
GEN_CONSTRUCTOR(sha224) GEN_CONSTRUCTOR(sha224)
GEN_CONSTRUCTOR(sha256) GEN_CONSTRUCTOR(sha256)
GEN_CONSTRUCTOR(sha384) GEN_CONSTRUCTOR(sha384)
GEN_CONSTRUCTOR(sha512) GEN_CONSTRUCTOR(sha512)
#endif
/* List of functions exported by this module */ /* List of functions exported by this module */
@ -548,10 +556,12 @@ static struct PyMethodDef EVP_functions[] = {
{"new", (PyCFunction)EVP_new, METH_VARARGS|METH_KEYWORDS, EVP_new__doc__}, {"new", (PyCFunction)EVP_new, METH_VARARGS|METH_KEYWORDS, EVP_new__doc__},
CONSTRUCTOR_METH_DEF(md5), CONSTRUCTOR_METH_DEF(md5),
CONSTRUCTOR_METH_DEF(sha1), CONSTRUCTOR_METH_DEF(sha1),
#ifdef _OPENSSL_SUPPORTS_SHA2
CONSTRUCTOR_METH_DEF(sha224), CONSTRUCTOR_METH_DEF(sha224),
CONSTRUCTOR_METH_DEF(sha256), CONSTRUCTOR_METH_DEF(sha256),
CONSTRUCTOR_METH_DEF(sha384), CONSTRUCTOR_METH_DEF(sha384),
CONSTRUCTOR_METH_DEF(sha512), CONSTRUCTOR_METH_DEF(sha512),
#endif
{NULL, NULL} /* Sentinel */ {NULL, NULL} /* Sentinel */
}; };
@ -599,9 +609,11 @@ PyInit__hashlib(void)
/* these constants are used by the convenience constructors */ /* these constants are used by the convenience constructors */
INIT_CONSTRUCTOR_CONSTANTS(md5); INIT_CONSTRUCTOR_CONSTANTS(md5);
INIT_CONSTRUCTOR_CONSTANTS(sha1); INIT_CONSTRUCTOR_CONSTANTS(sha1);
#ifdef _OPENSSL_SUPPORTS_SHA2
INIT_CONSTRUCTOR_CONSTANTS(sha224); INIT_CONSTRUCTOR_CONSTANTS(sha224);
INIT_CONSTRUCTOR_CONSTANTS(sha256); INIT_CONSTRUCTOR_CONSTANTS(sha256);
INIT_CONSTRUCTOR_CONSTANTS(sha384); INIT_CONSTRUCTOR_CONSTANTS(sha384);
INIT_CONSTRUCTOR_CONSTANTS(sha512); INIT_CONSTRUCTOR_CONSTANTS(sha512);
#endif
return m; return m;
} }

View file

@ -13,7 +13,8 @@ STRINGLIB_CHAR
STRINGLIB_EMPTY STRINGLIB_EMPTY
a PyObject representing the empty string a PyObject representing the empty string, only to be used if
STRINGLIB_MUTABLE is 0
int STRINGLIB_CMP(STRINGLIB_CHAR*, STRINGLIB_CHAR*, Py_ssize_t) int STRINGLIB_CMP(STRINGLIB_CHAR*, STRINGLIB_CHAR*, Py_ssize_t)
@ -35,9 +36,9 @@ STRINGLIB_CHAR* STRINGLIB_STR(PyObject*)
int STRINGLIB_CHECK_EXACT(PyObject *) int STRINGLIB_CHECK_EXACT(PyObject *)
returns true if the object is an instance of our type, not a subclass. returns true if the object is an instance of our type, not a subclass
STRINGLIB_MUTABLE STRINGLIB_MUTABLE
Must be 0 or 1 to tell the cpp macros in stringlib code if the object must be 0 or 1 to tell the cpp macros in stringlib code if the object
being operated on is mutable or not. being operated on is mutable or not