|
Fixes and changes since PyProtocols 0.9.2 |
|
|
|
- The 'factory' parameter to 'adapt()' was REMOVED. An informal survey of |
|
PyProtocols' users indicated that nobody was using it to any significant |
|
degree, and its removal was unopposed. This feature was an extension to |
|
PEP 246, so this brings PyProtocols into closer conformance with the PEP. |
|
|
|
- Raise 'AdaptationFailure' instead of 'NotImplementedError' when adaptation |
|
is unsuccessful. 'AdaptationFailure' is a subclass of both 'TypeError' and |
|
'NotImplementedError', so code written according to either PEP 246 or older |
|
versions of PyProtocols will still catch the error. |
|
|
|
- There is now an 'AbstractBase' class, similar to 'Interface', that can be |
|
used for the "ABC" (Abstract Base Class) style of interface usage, where the |
|
interface may contain implementation code, and can be subclassed to create |
|
concrete implementations. In previous versions, you could use 'Interface' |
|
as such a base class, but now calling an 'Interface' object performs |
|
adaptation, rather than instantiation. |
|
|
|
- 'Protocol' instances (except for 'AbstractBase' subclasses) are now callable |
|
with a signature similar to 'adapt()'. E.g. 'ISomething(foo,*args)' is |
|
equivalent to 'adapt(foo,ISomething,*args)'. This convenient API, pioneered |
|
by Twisted and later adopted by Zope X3, is now available in PyProtocols as |
|
well. (Note that as a result of this change, the PyProtocols test suite now |
|
requires a Zope X3 alpha release or better.) |
|
|
|
- 'setup.py' now accepts a '--without-speedups' global option to disable |
|
the C speedups module. |
|
|
|
- We now support the latest 'adapter_hooks' protocol provided by Zope X3 |
|
interfaces, allowing multiple interface registry systems to participate |
|
in Zope interfaces' '__adapt__()' implementation. |
|
|
|
- Declaring an adapter from an instance to a protocol that was part |
|
of a circular implication path resulted in infinite recursion. |
|
Correcting the problem required a change in the return signature |
|
of the 'declareProvides()' method in the 'IOpenProvider' interface. |
|
Please see the docstring or the updated reference manual for details. |
|
Thanks to Bob Ippolito for discovering the problem and bringing it to my |
|
attention. |
|
|
|
- Defining an adapter from one protocol to another, when that adapter does not |
|
shorten the adaptation path, would produce a spurious 'KeyError'. |
|
|
|
Fixes since PyProtocols 0.9.1 |
|
|
|
- Fixed missing unit tests for 'Variation' class, and the two bugs in |
|
'Variation' that weren't found because of the missing tests. |
|
|
Fixes and Enhancements since PyProtocols 0.9 |
Fixes and Enhancements since PyProtocols 0.9 |
|
|
- Added the 'factoryMethod' and 'equivalentProtocols' keywords to 'advise()'. |
- Added the 'factoryMethod' and 'equivalentProtocols' keywords to 'advise()'. |
|
|
- (NEEDS DOC) Added 'sequenceOf()', allowing you to easily create a protocol |
- Added 'sequenceOf()', allowing you to easily create a protocol |
that represents a sequence of some base protocol, and automatically adapt |
that represents a sequence of some base protocol, and automatically adapt |
basic sequences (e.g. lists and tuples) to a "sequence of" the base |
basic sequences (e.g. lists and tuples) to a "sequence of" the base |
protocol, as long as all members of the input sequence can be adapted to the |
protocol, as long as all members of the input sequence can be adapted to the |
base protocol. By default, only lists and tuples are considered to support |
base protocol. By default, only lists and tuples are considered to support |
'IBasicSequence'. |
'IBasicSequence'. |
|
|
- (NEEDS DOC) Added 'protocolForType()' and 'protocolForURI()', that allow you |
- Added 'protocolForType()' and 'protocolForURI()', that allow you |
to link interfaces by intended semantics, not just by having identical |
to link interfaces by intended semantics, not just by having identical |
instances. For example, you can use 'protocolForType(file,["read"])' to |
instances. For example, you can use 'protocolForType(file,["read"])' to |
symbolize a file-like object with a 'read()' method, or |
symbolize a file-like object with a 'read()' method, or |
module is used in a larger program, the linkage between the symbolic and |
module is used in a larger program, the linkage between the symbolic and |
actual forms of the interface can be accomplished semi-automatically. |
actual forms of the interface can be accomplished semi-automatically. |
|
|
- (NEEDS DOC) Enhanced Zope 3 support: Now, adapters can be registered between |
- Enhanced Zope 3 support: Now, adapters can be registered between Zope |
Zope interfaces, and any types or instances. Note, however, that |
interfaces, and any types or instances. Note, however, that |
interface-to-interface adaptation may not work if a class only declares what |
interface-to-interface adaptation may not work if a class only declares what |
it implements using the Zope interface API. This limitation might be able |
it implements using the Zope interface API. This limitation might be able |
to be removed later. Zope interfaces can now pass a much larger segment of |
to be removed later. Zope interfaces can now pass a much larger segment of |
the test suite than before. |
the test suite than before. |
|
|
- (NEEDS DOC) Added 'protocols.Variation(baseProtocol,context=None)'; this |
- Added 'protocols.Variation(baseProtocol,context=None)'; this |
implements the 'LocalProtocol' example in the documentation. |
implements the 'LocalProtocol' example in the documentation. |
|
|
- (NEEDS DOC) Added 'Adapter' and 'StickyAdapter' convenience base classes. |
- Added 'Adapter' and 'StickyAdapter' convenience base classes. 'Adapter' |
'Adapter' offers a ready-made '__init__()' method suitable for most adapter |
offers a ready-made '__init__()' method suitable for most adapter |
classes, while 'StickyAdapter' instances automatically declare themselves as |
classes, while 'StickyAdapter' instances automatically declare themselves as |
an instance-specific adapter for any object they're used on. Thus, a |
an instance-specific adapter for any object they're used on. Thus, a |
'StickyAdapter' can maintain its state across 'adapt()' calls for the same |
'StickyAdapter' can maintain its state across 'adapt()' calls for the same |
could raise bizarre errors and/or behave strangely when 'adapt()' was called |
could raise bizarre errors and/or behave strangely when 'adapt()' was called |
on 'ExtensionClass' instances. |
on 'ExtensionClass' instances. |
|
|
|
- Fixed some problems with the test suite when running under Python 2.3. |
|
PyProtocols itself worked fine, but the test suite was bitten by two minor |
|
semantic changes that took effect in 2.3, resulting in lots of error |
|
messages about ModuleType needing a parameter, and a test failure for |
|
'checkClassInfo' in the 'FrameInfoTest' test class. |
|
|
- Fixed a memory leak in the C "speedups" module that leaked unbound |
- Fixed a memory leak in the C "speedups" module that leaked unbound |
'__conform__' and '__adapt__' methods, as well as '__class__' and '__mro__' |
'__conform__' and '__adapt__' methods, as well as '__class__' and '__mro__' |
references. Also, fixed the C code potentially reraising invalid error |
references. Also, fixed the C code potentially reraising invalid error |