|
|
Changed, Enhanced, or Newly Deprecated Features |
Changed, Enhanced, or Newly Deprecated Features |
|
|
- There is now an interface for "Active Descriptors": |
- .ini files now support "smart property" objects ('config.ISmartProperty'). |
'binding.IActiveDescriptor'. 'peak.binding' now uses this interface to |
If a property rule defined in an .ini file evaluates at runtime to an object |
identify active descriptors, so you can now create your own. (Previously, |
that implements 'ISmartProperty', the object will be given a chance to |
'peak.binding' used 'isinstance()' to detect active descriptors.) |
compute a value for the property, in place of being used itself. This helps |
|
to simplify definition of complex property rules in .ini files, by allowing |
- 'peak.naming' no longer automatically converts all addresses to the |
the use of helper classes. Also, 'naming.LinkRef' and 'naming.Reference' |
addressed objects. You must specifically request the interface you want |
(indirectly) support this interface, so you can now use them in .ini files |
by adapting the retrieved object to that interface. This can be done by |
to refer to an object via the naming system. (Previously, 'naming.LinkRef' |
supplying an 'adaptTo=ISomething' keyword argument to the attribute binding |
wouldn't do the right thing unless the property was looked up via a |
definition or your 'lookupComponent()' call. |
'config:' URL, and 'naming.Reference' didn't exist.) |
|
|
The naming system no longer has 'objectFactories' and 'stateFactories'; |
- 'peak.util.imports.whenImported()' can now be used even when the specified |
these have been replaced with adaptation. Writable naming contexts must |
module has already been loaded. |
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 has 'objectFactories' and 'stateFactories' as |
|
utilities; they have been replaced with new mechanisms involving adaptation. |
|
Previously, addresses had a 'retrieve()' method that could be used to |
|
retrieve the object defined by the address. Now, to retrieve an object for |
|
an address, you must either define a context that processes the address, or |
|
the address must have a 'defaultFactory' attribute, which provides a name |
|
to be imported to get an 'IObjectFactory' that can construct the referenced |
|
object. (This is simpler than it sounds; for URLs that reference |
|
ManagedConnections, for example, all you need to do is provide the fully |
|
qualified name of the connection class.) |
|
|
|
Meanwhile, 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; |
The naming system no longer processes the 'creationName' keyword argument; |
this is now considered the sole responsibility of 'peak.binding'. The |
this is now considered the sole responsibility of 'peak.binding'. The |
rather than a 'state,attrs' tuple. For most naming contexts, this just |
rather than a 'state,attrs' tuple. For most naming contexts, this just |
means you should change 'return foo, None' statements to just 'return foo'. |
means you should change 'return foo, None' statements to just 'return foo'. |
|
|
|
- Property definition rules in an .ini file can now refer to 'rulePrefix' and |
|
'ruleSuffix' variables. 'rulePrefix' is a '.'-terminated string, |
|
representing the name the rule was defined with. For example, if the |
|
rule was defined for '"foo.bar.*"', then 'rulePrefix' will be '"foo.bar."'. |
|
The 'ruleSuffix' will be the portion of the 'propertyName' that follows |
|
'rulePrefix'. So, if looking up property '"foo.bar.baz"', then the |
|
'"foo.bar.*"' rule will execute with a 'ruleSuffix' of '"baz"'. This should |
|
make it easier to work with hierarchical property namespaces. |
|
|
|
- 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.) |
|
|
- REMOVED 'naming.ParsedURL'; it was deprecated as of 0.5 alpha 2. |
- REMOVED 'naming.ParsedURL'; it was deprecated as of 0.5 alpha 2. |
|
|
- The 'provides' keyword argument to various 'peak.binding' APIs has been |
- The 'provides' keyword argument to various 'peak.binding' APIs has been |
a binding to suggest a parent component, use 'suggestParent=False' in the |
a binding to suggest a parent component, use 'suggestParent=False' in the |
binding definition. |
binding definition. |
|
|
|
Corrected Problems |
|
|
|
- There was a typo in peak.naming.arithmetic that caused homogeneous non-URL |
|
name subtraction to fail. |
|
|
|
- The default reactor supplied in 'peak.running.scheduler' would consume |
|
CPU continuously if it was waiting for I/O and no tasks were scheduled. |
|
|
|
- The 'peak.util.imports.whenImported' function didn't work. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|