Fixes and Enhancements since Version 0.5 alpha 3 |
Fixes and Enhancements since Version 0.5 alpha 3 |
|
|
|
- Most 'peak.web' interfaces have changed significantly. If you implemented |
|
anything based on the older interfaces, and it still works, it's sheer |
|
bloody luck. In particular, note that every method in 'web.IWebTraversable' |
|
now has different inputs and/or outputs than before. Please read the new |
|
interface docs and update your code! The changed interfaces offer much |
|
more flexibility and functionality than before, but they will require you to |
|
update your code. |
|
|
|
- 'web.ContainerAsTraversable' has been removed. It was redundant, since the |
|
new default traversal mechanism used by 'Traversable' and 'Decorator' now |
|
handles getitem, getattr, and views. |
|
|
|
- Added Zope 3-like "namespaces" to 'peak.web'. Path segments in a URL |
|
may be prefixed with '"++some_id++"' in order to invoke a corresponding |
|
namespace handler registered under '"peak.web.namespaces.some_id"'. |
|
Namespace handlers must implement 'web.INamespaceHandler', and they are |
|
supplied with the original path segment as well as the separated namespace |
|
and name. Also, as in Zope 3, '"@@foo"' is a shortcut for '"++view++foo"'. |
|
Builtin namespaces at this time include 'view', 'item', 'attr', 'skin', and |
|
'resources'. 'skin' treats the rest of its path segment as a skin name, |
|
and sets the current skin, while 'resources' begins traversal to resources |
|
found in the current skin. The other namespaces are as described at: |
|
|
|
"Resources and traversal in peak.web":http://www.eby-sarna.com/pipermail/peak/2004-August/001712.html |
|
|
|
- Fixed several 'peak.events' bugs, as reported by Vladimir Iliev, Yaroslav |
|
Samchuk, and Alexander Smishlajev: |
|
|
|
* 'events.AnyOf' could hold multiple references to a single event source, |
|
and nesting 'AnyOf()' calls could leak references to the nested events. |
|
|
|
* 'events.subscribe()' had a potential race condition wherein a callback |
|
could be invoked after its weak reference was garbage collected, leading |
|
to bizarre error messages about 'self' being 'None'. |
|
|
|
* 'select()' could be called on select event objects even if there were |
|
no current subscribers to the event, potentially leading to calling |
|
'select()' on a closed socket. |
|
|
|
* Non-default signal handlers were remaining installed even when there |
|
were no current subscribers to the applicable event, as long as a |
|
reference to the event object existed. |
|
|
|
As a result of these changes, certain I/O event types (esp. signals and |
|
stream readable/writeable events) are now longer-lived. For example, |
|
signal event objects are now immortal, and the read/write event for a |
|
particular 'fileno()' will be reused for as long as its supplying |
|
'Selector' or 'EventLoop' instance exists. (Previously, weak references |
|
were used so that these objects would be recycled when not in use.) |
|
|
|
- Added 'config.registeredProtocol()' API, that supports defining named and |
|
local protocols. This allows easy emulation of Zope 3's "named" and "local" |
|
adapters and views. |
|
|
|
- 'binding.Component' objects no longer support instance configuration at |
|
runtime (i.e., they no longer implement 'config.IConfigurable'). If you |
|
need a component to be configurable at runtime, you must now derive from |
|
(or mix in) 'binding.Configurable' instead. If you get errors about |
|
a missing 'registerProvider' attribute, or about being unable to adapt to |
|
'IConfigurable', try changing your base class from 'binding.Component' |
|
to 'binding.Configurable', or add it as a mixin if you're deriving from |
|
a class that uses 'binding.Component' as its base. |
|
|
|
- 'binding.IComponent' no longer derives from 'config.IConfigurable' or |
|
'config.IConfigMap', only 'config.IConfigSource'. This means that |
|
'IComponent' no longer guarantees or requires the presence of the |
|
'registerProvider()' method: now only 'config.IConfigurable' does that. |
|
|
|
- The 'config.IConfigMap' interface is now DEPRECATED. Use |
|
'config.IConfigurable' instead. The '_configKeysMatching()' method |
|
of 'IConfigMap' was moved to 'config.IConfigSource', so if you've |
|
implemented a custom 'IConfigSource', be sure to add this method. |
|
|
|
- 'web.ISkinService' and 'web.ILayerService' were consolidated into |
|
'web.IInteractionPolicy', because the need to have configurable |
|
implementations of these services is negligible. That is, the |
|
corresponding property namespaces ('peak.web.skins' and 'peak.web.layers') |
|
are more than adequate as registries. |
|
|
|
- Removed 'peak.running.timers' and 'peak.util.dispatch'. Neither was in |
|
active use, and both are being replaced by the new generic functions |
|
package in PyProtocols. |
|
|
- The 'config.iterParents' API is now moved to 'binding.iterParents', and all |
- The 'config.iterParents' API is now moved to 'binding.iterParents', and all |
'binding' functions that walk the component hierarchy use it. It has also |
'binding' functions that walk the component hierarchy use it. It has also |
been changed to avoid infinite loops in the case of a pathological |
been changed to avoid infinite loops in the case of a pathological |