[Python-Dev] Py2.5 issue: decimal context manager misimplemented, misdesigned, and misdocumented (original) (raw)
Raymond Hettinger rhettinger at ewtllc.com
Wed Aug 30 02:20:34 CEST 2006
- Previous message: [Python-Dev] Small Py3k task: fix modulefinder.py
- Next message: [Python-Dev] Py2.5 issue: decimal context manager misimplemented, misdesigned, and misdocumented
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I would like to see the changes to the decimal module reverted for the Py2.5 release.
Currently, the code in the decimal module implements the context manager as a separate class instead of incorporating it directly in decimal.Context. This makes the API unnecessarily complex and is not pretty compared to the code it was intended to replace.
Worse still, the implementation saves a reference to the context instead of making a copy of it. Remember decimal.Context objects are mutable -- the current implementation does not fulfill its contract to restore the context to its original state at the conclusion of the with-statement.
The right way to do it was presented in PEP343. The implementation was correct and the API was simple.
Additionally:
The examples in WhatsNew don't work because the implementation uses a different method name to fetch to context (this is a shallow error except that the name in WhatsNew is better and we don't really want to have a new method for this). It doesn't bode well that none of the release candidate end users noticed this discrepancy -- it means they are not trying out the examples.
The implementation's doc string examples were not tested and don't work (this is a deep error). One reads:
with decimal.getcontext() as ctx: ctx.prec += 2 s = ... return +s
To get this to work with the current implementation, it should read
with decimal.getcontext().copy().get_manager() as ctx:
ctx.prec += 2
s = ...
return +s
This is horrid. Please either revert the patch or fix it to match PEP-343.
Raymond
- Previous message: [Python-Dev] Small Py3k task: fix modulefinder.py
- Next message: [Python-Dev] Py2.5 issue: decimal context manager misimplemented, misdesigned, and misdocumented
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]