|
Fixes and Enhancements since Version 0.5 alpha 2 |
|
|
|
Changed, Enhanced, or Newly Deprecated Features |
|
|
|
- Added simple example scripts and small applications in the 'examples' |
|
directory. |
|
|
|
- There is a new command-line namespace introspection tool, 'n2', which |
|
can be accessed by running 'peak n2'. Type 'peak n2 -h' for help. |
|
|
|
- The PEAK_CONFIG environment variable can now list multiple files, separated |
|
by the platform's 'os.pathsep' (e.g. ':' on Unix, ';' on Windows). |
|
|
|
- It's no longer necessary to provide a '_defaultState()' implementation |
|
for an EntityDM: a default implementation is now supplied. |
|
|
|
- Added automatic installation of 'datetime' package for Python < 2.3. |
|
|
|
- CGI support has been moved from 'peak.running.zpublish' into |
|
'peak.running.commands' (for "raw" CGI/FastCGI) and 'peak.web' (for the |
|
PEAK high-level publishing framework). You can use 'peak CGI someName' to |
|
adapt 'someName' to a 'running.IRerunnableCGI' and run it as a CGI/FastCGI. |
|
|
|
- There is now a 'peak.security' package, available from 'peak.api' as |
|
'security'. It provides permission management functions: you can define |
|
abstract permissions by subclassing 'security.Permission', then create |
|
permission checking rules by subclassing 'security.RuleSet', and declare |
|
the permissions needed to access attributes of a class with |
|
'security.allow()'. The test suite demonstrates a complex application |
|
ruleset with dynamic, data-driven permissions. |
|
|
|
- There is now an interface for "Active Descriptors": |
|
'binding.IActiveDescriptor'. 'peak.binding' now uses this interface to |
|
identify active descriptors, so you can now create your own. (Previously, |
|
'peak.binding' used 'isinstance()' to detect active descriptors.) |
|
|
|
- 'peak.naming' no longer automatically converts all addresses to the |
|
addressed objects. You must specifically request the interface you want |
|
by adapting the retrieved object to that interface. This can be done by |
|
supplying an 'adaptTo=ISomething' keyword argument to the attribute binding |
|
definition or your 'lookupComponent()' call. |
|
|
|
The naming system no longer has 'objectFactories' and 'stateFactories'; |
|
these have been replaced with adaptation. Writable naming contexts must |
|
have a 'serializationProtocol' attribute specifying what interface an object |
|
should be adapted to before attempting to store it in that context. |
|
|
|
The naming system no longer processes the 'creationName' keyword argument; |
|
this is now considered the sole responsibility of 'peak.binding'. The |
|
'IComponent.lookupComponent()' method still accepts the keyword argument, |
|
and attribute bindings still handle the creation name transparently. It is |
|
just not available via naming system APIs, and naming contexts no longer |
|
have to deal with it. |
|
|
|
The naming system base classes no longer use 'attrs' as an input parameter |
|
or return value. If you've subclassed anything from 'peak.naming.contexts', |
|
note that your '_get()' methods should now just return the lookup value, |
|
rather than a 'state,attrs' tuple. For most naming contexts, this just |
|
means you should change 'return foo, None' statements to just 'return foo'. |
|
|
|
- REMOVED 'naming.ParsedURL'; it was deprecated as of 0.5 alpha 2. |
|
|
|
- The 'provides' keyword argument to various 'peak.binding' APIs has been |
|
renamed to 'offerAs', and it must be a sequence of configuration keys. |
|
(Previously, it accepted either a single key or a tuple of keys.) |
|
The signature of 'binding.Constant()' was changed as well; the first |
|
positional argument is now the constant value, and 'offerAs' is now a |
|
keyword argument. (Previously, 'provides' was the first positional argument |
|
of 'binding.Constant()'.) The 'registerProvider()' method of |
|
'config.IConfigurable()' also now accepts only a single configuration key, |
|
as does 'EigenRegistry.register()'. |
|
|
|
Also, all 'peak.binding' APIs now only accept positional parameters for |
|
items unique to that API. Items common to multiple APIs (such as 'offerAs', |
|
'doc', 'attrName', etc.) should now be supplied as keyword arguments. |
|
|
|
Bindings also now automatically "suggest" the containing object as a parent |
|
component for the contained object, whenever a value is assigned to them or |
|
computed. If a non-None 'adaptTo' is set on the binding, the value assigned |
|
or computed will be adapted to the specified protocol before the parent |
|
component is suggested. 'binding.New()' no longer relies on the |
|
'IComponentFactory' interface, but instead uses the new adapt/suggest |
|
mechanisms. |
|
|
|
Previously, parent components were only "suggested" when a binding was set |
|
via component constructor keyword arguments. Now, this is done at any time |
|
bindings are set, but *not* for non-binding keyword arguments. In other |
|
words, ordinary attributes of a component do not receive "suggested parent" |
|
notices, even when set via constructor keyword arguments. If you want an |
|
attribute to do this, you must define the attribute with the binding API; |
|
e.g. via 'requireBinding()' or 'binding.Constant()'. If you do *not* want |
|
a binding to suggest a parent component, use 'suggestParent=False' in the |
|
binding definition. |
|
|
|
Corrected Problems |
|
|
|
- The default reactor supplied in 'peak.running.scheduler' would consume |
|
CPU continuously if it was waiting for I/O and no tasks were scheduled. |
|
|
|
|
|
|
|
|
|
|
|
|
Fixes and Enhancements since Version 0.5 alpha 1 |
Fixes and Enhancements since Version 0.5 alpha 1 |
|
|
Changed, Enhanced, or Newly Deprecated Features |
Changed, Enhanced, or Newly Deprecated Features |