Fixes and Enhancements since Version 0.5 alpha 3 |
Fixes and Enhancements since Version 0.5 alpha 3 |
|
|
|
- Added a '-c/--config' option to PEAK bootstrap commands to load an .ini |
|
configuration file in a new service area before executing any subcommands. |
|
|
|
This allows you to do things like:: |
|
|
|
peak launch -c bulletins ref:sitemap@sitemap.xml |
|
|
|
which loads the 'bulletins' configuration file before launching the sitemap. |
|
Note that if you are subclassing 'commands.Bootstrap' you can suppress this |
|
option using 'options.reject_inheritance("-c","--config")' in the body of |
|
your subclass' class definition. You may wish to do this if your |
|
application's subcommands must run in the same service area as the parent |
|
command. (E.g. if the parent command expects the subcommand to partake in |
|
a transaction controlled by the parent command.) |
|
|
|
- Added a 'value' property to 'model.Enumeration', so that you can access |
|
an enumeration instance's value (i.e., the value it hashes and compares |
|
equal to) |
|
|
|
- Added a 'binding.hasParent(component,parent)' API function, which is |
|
specially optimized for use with generic functions, so that you can |
|
define generic function methods that apply only within some part of a |
|
component hierarchy. |
|
|
|
- PEAK no longer supports Python 2.2; Python 2.3.4 or better is required. |
|
|
|
- The kjbuckets extension module is no longer built and installed by default; |
|
you must explicitly enable it with a '--with-kjbuckets' flag passed to |
|
'setup.py'. Please port your code as soon as practical, this option will |
|
go away soon. |
|
|
|
- Use of the included 'kjbuckets' module is now DEPRECATED, due to increasing |
|
bitrot. Aaron Watters originally wrote this extension for Python 1.2, and |
|
it has not been well-maintained for newer versions of the Python/C API. |
|
Instead of 'kjSet' objects, use the Python 2.3 'Set' type, and instead of |
|
the 'kjGraph' type, use the new 'Graph' type in 'peak.util.Graph'. Some |
|
porting effort may be required, as these types are not precisely the same |
|
in signature as the originals. |
|
|
|
- The '_setNS()' method of the 'peak.util.SOX.ISOXNode_NS' interface has |
|
changed signature, due to a lack of use of the second argument in the code |
|
base, and its dependency on 'kjbuckets'. |
|
|
|
- The old 'peak.security' implementation has been removed, and replaced with |
|
a simpler, more flexible implementation based on generic functions (using |
|
less than half the code and seven fewer interfaces). Complete documentation |
|
and API tests for the new implementation can be found in 'rules.txt' in the |
|
'peak.security' package directory. |
|
|
|
Also, the new implemetation does not require redundant |
|
'security.allow(security.Anybody)' declarations just because you've declared |
|
other permissions for a class, so these declarations have been removed from |
|
``peak.web``. They don't do any harm, however, so you can leave them in |
|
your own code as long as you change them to use 'binding.metadata()' instead |
|
of the deprecated 'security.allow()'. |
|
|
|
- 'security.allow()' is now DEPRECATED; please use 'binding.metadata()' |
|
instead. (There is no change to the calling signature, but |
|
'binding.metadata' accepts any metadata, not just permissions.) |
|
|
|
- Added 'peak.running.options', a new option-parsing framework that extends |
|
'optparse' to support the PEAK 'commands' framework. Command instances |
|
can now refer to 'self.parsed_args' to find their non-option arguments, |
|
and to trigger setting of their attributes (or calling of methods) based on |
|
their raw arguments from 'self.argv'. See 'options.txt' in the |
|
'peak.running' package directory for a complete tutorial. |
|
|
|
- There is now a 'binding.initAttrs()' function that can be used to initialize |
|
an object's attributes from e.g. constructor keyword arguments, similar to |
|
how 'binding.Component' and 'binding.Attribute' constructors work. |
|
|
|
- Security permissions can now be declared as attribute metadata. |
|
|
|
That is, instead of doing declarations like this:: |
|
|
|
class Foo: |
|
bar = binding.Require("Something", permissionNeeded=SomePerm) |
|
|
|
class AnElement(model.Element): |
|
class someFeature(model.Attribute): |
|
permissionNeeded = SomePerm |
|
|
|
you can (and should) now do them like this:: |
|
|
|
class Foo: |
|
bar = binding.Require("Something", [SomePerm]) |
|
|
|
class AnElement(model.Element): |
|
class someFeature(model.Attribute): |
|
metadata = [SomePerm] |
|
|
|
or this:: |
|
|
|
class Foo: |
|
binding.metadata(bar = [SomePerm]) |
|
|
|
class AnElement(model.Element): |
|
|
|
binding.metadata(someFeature = [SomePerm]) |
|
|
|
class someFeature(model.Attribute): |
|
# ... |
|
|
|
It isn't necessary to enclose metadata in brackets, but it helps to |
|
emphasize its annotational nature. Also note that e.g. 'web.bindResource()' |
|
needs 'metadata' to be a keyword argument. |
|
|
|
- The 'permissionNeeded' attribute of 'model.Feature' and 'binding.Attribute' |
|
objects is now DEPRECATED. See examples above for how to upgrade, and please |
|
switch to using metadata as soon as practical. In addition the |
|
'security.IGuardedDescriptor' interface has been removed, because it was |
|
only used in connection with the 'permissionNeeded' attribute mechanism. |
|
|
|
- Added a new "attribute metadata" mini-framework to 'peak.binding'. This |
|
framework makes it possible to declare arbitrary metadata about attributes, |
|
using either a class advisor ('binding.metadata()', similar in form and |
|
function to the existing 'security.allow()') or using a 'metadata' attribute |
|
of attribute bindings (which is the second positional parameter in all |
|
the standard bindings like 'Make', 'Obtain', etc.). Over time, existing |
|
metadata mechanisms will be refactored to use this new mini-framework, |
|
instead of the various integrated ad-hoc mechanisms that exist now (like |
|
the 'permissionNeeded' attribute). For more information on how the new |
|
metadata hooks work, including doctest examples, see the 'attributes.txt' |
|
file in the 'peak.binding' package, under the heading "Attribute Metadata". |
|
|
|
- Added a new function, 'binding.activateClass()', that can be used to |
|
activate any bindings in the class. This can now be used in place of |
|
subclassing a PEAK base class or using a PEAK metaclass. In future, this |
|
will be integrated into PEAK attribute descriptors such that defining a |
|
descriptor within a class' body is sufficient to cause this function to be |
|
invoked. |
|
|
|
- 'binding.IBindingNode' was REMOVED, consolidated into 'binding.IComponent', |
|
as its various individual methods have been replaced with generic functions |
|
in the existing 'binding' API. For example, 'binding.getParentComponent(x)' |
|
should be used in preference to 'x.getParentComponent()' unless it is |
|
a requirement that 'x' implement the full 'binding.IComponent' interface. |
|
This makes it easier to define what 'binding.getParentComponent()' and |
|
'binding.getComponentName()' will mean for non-component types, as you do |
|
not have to define an adapter class with all of the 'IBindingNode' methods. |
|
Also, this makes PEAK itself cleaner, as we often weren't bothering to |
|
properly implement the full 'IBindingNode' interface anyway. |
|
|
|
In addition, 'binding.suggestParentComponent()' is now also a generic |
|
function, dispatching on the target (i.e. child) object. |
|
|
|
- 'naming.IReferenceable' was REMOVED, as it is not in use anywhere in PEAK. |
|
This will be replaced with a generic function when we do actually need this |
|
functionality. |
|
|
- There is a new 'config.getStreamFactory' generic function, to make it easy |
- There is a new 'config.getStreamFactory' generic function, to make it easy |
to accept URLs, filenames, or 'naming.IStreamFactory' objects as the source |
to accept URLs, filenames, or 'naming.IStreamFactory' objects as the source |
of a "file". |
of a "file". |