[Python-Dev] Breaking undocumented API

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Mon Nov 8 23:35:53 CET 2010


On 09:57 pm, brett at python.org wrote:
>On Mon, Nov 8, 2010 at 13:45,  <exarkun at twistedmatrix.com> wrote:
>>On 09:25 pm, brett at python.org wrote:
>>>
>>>On Mon, Nov 8, 2010 at 13:03,  <exarkun at twistedmatrix.com> wrote:
>>>>
>>>>On 07:58 pm, brett at python.org wrote:
>>>>>>
>>>>>>I don't think a strict don't remove without deprecation policy is
>>>>>>workable.  For example, is trace.rx_blank constant part of the 
>>>>>>trace
>>>>>>module API that needs to be preserved indefinitely?  I don't even 
>>>>>>know
>>>>>>if it is possible to add a deprecation warning to it, but
>>>>>>CoverageResults._blank_re would certainly be a better place for 
>>>>>>it.
>>>>>
>>>>>The deprecation policy obviously cannot apply to module-level
>>>>>attributes.
>>>>
>>>>I'm not sure why this is.  Can you elaborate?
>>>
>>>There is no way to directly trigger a DeprecationWarning for an
>>>attribute. We can still document it, but there is just no way to
>>>programmatically enforce it.
>>
>>What about `deprecatedModuleAttribute`
>>(<http://twistedmatrix.com/documents/current/api/twisted.python.deprecate.html>)
>>or zope.deprecation
>>(<http://docs.zope.org/zope3/Book/deprecation/show.html>) which 
>>inspired it?
>
>Just checked the code and it looks like it substitutes the module for
>some proxy object? To begin that break subclass checks. After that I
>don't know the ramifications without really digging into the
>ModuleType code.

That could be fixed if ModuleType allowed subclassing. :)

For what it's worth, no one has complained about problems caused by 
`deprecatedModuleAttribute`, but we've only been using it for about two 
and a half years.

Jean-Paul


More information about the Python-Dev mailing list