|
Fixes and Enhancements since Version 0.5 alpha 2 |
|
|
|
Changed, Enhanced, or Newly Deprecated Features |
|
|
|
- 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()'. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
- Added a 'shellcmd:' URL scheme that returns a function that calls |
|
'os.system()' on the body of the URL. It's intended for use as a command |
|
factory, as is needed by the 'URLChecker' periodic task. |
|
|
|
- You can now define adapters from arbitrary types to 'binding.IBindingNode', |
|
and thus be able to use them as part of a component hierarchy - without |
|
needing to directly add 'getParentComponent()' or 'getComponentName()' |
|
methods to them. |
|
|
|
- Added experimental 'invoke.c' script for POSIX-ish platforms with funky |
|
'#!' support, or lack thereof. |
|
|
|
'invoke' is designed to be used like this:: |
|
|
|
#!/usr/local/bin/invoke peak somearg otherarg... |
|
|
|
This should work on most sane platforms with a long-enough commandline. |
|
(See "this page":http://homepages.cwi.nl/~aeb/std/hashexclam-1.html for |
|
details on the insanely incompatible ways different Unixes interpret '#!' |
|
lines.) |
|
|
|
The script is not currently built or installed by setup.py. On the |
|
platforms it's targeted at, you should be able to build it with:: |
|
|
|
gcc -o invoke invoke.c |
|
|
|
(Yes, it really is that simple of a script.) |
|
|
|
- Added a ZConfig schema for 'running.commands.EventDriven' applications, |
|
a ZConfig component definition for adaptive tasks, and a running shortcut |
|
called 'EventDriven'. |
|
|
|
It should now be possible to do this:: |
|
|
|
#!/usr/bin/env peak EventDriven |
|
|
|
at the top of a ZConfig file formatted according to the new schema, and |
|
have it run. There are two periodic tasks that can be configured and |
|
run from such a file: 'CleanupFiles' and 'URLChecker'. 'CleanupFiles' will |
|
delete files matching a pattern that are older than a certain age, while |
|
'URLChecker' will check to see if the target of a naming system URL is |
|
up/available/working, and if not, runs a command to restart it. As an |
|
amusing demo, try specifying a 'file:' URL with a 'shellcmd:touch theFile' |
|
to recreate the file, then add a 'CleanupFiles' that deletes the file the |
|
checker looks for. This can be hours (well, minutes) of exciting fun as you |
|
watch the dueling daemons undoing each others' work. |
|
|
|
- Added 'zconfig.schema' URL scheme that loads an enhanced ZConfig schema |
|
object that can act as a command line interpreter using the 'peak' script. |
|
|
|
To use it, run 'peak zconfig.schema:urlToSchema urlOfConfig'. Or, add |
|
a line like this:: |
|
|
|
#!/usr/bin/env peak zconfig.schema:pkgfile:some.package/schema.xml |
|
|
|
to the top of a configuration file, and make the configuration file |
|
executable. Note that the schema specified must convert to an object |
|
that's usable with the commands bootstrap framework. Also note that |
|
if you have a local PEAK_CONFIG file, you can add a 'peak.running.shortcuts' |
|
entry to shorten the URL reference in your #! line. E.g.:: |
|
|
|
#!/usr/bin/env peak mySchema |
|
|
|
will suffice if you have defined 'peak.running.shortcuts.mySchema' as |
|
'naming.LinkRef("zconfig.schema:pkgfile:some.package/schema.xml")'. |
|
|
|
There is also a 'peak ZConfig urlOfSchema urlOfConfig' variant, that was |
|
added to support putting '#!/usr/bin/env peak ZConfig' at the top of |
|
schema files, but unfortunately that's not valid XML. |
|
|
|
- Standardized file-based URL syntaxes (e.g logfiles and lockfiles) to |
|
follow RFC 1738/2396, and Python 'urllib'. This shouldn't affect much |
|
besides the canonical forms of the URLs. Added 'pkgfile:some.pkg/filepath' |
|
URL syntax for ease of referring to files near modules. (A convenience |
|
intended mainly for referencing ZConfig schemas.) |
|
|
|
- Added the UML 1.4 metamodel, and thus the ability to load UML 1.4 |
|
models encoded in XMI 1.1. |
|
|
|
- Added support in the mof2py code generator for "unprefixing" enumerated |
|
values, so that UML and other metamodels' enumerations work correctly |
|
when loading from XMI. Also, mof2py no longer emits 'config.setupModule()' |
|
calls in generated code, as in practice they are not needed. |
|
|
|
- Running 'peak test' from the command line is roughly equivalent to running |
|
'unittest.py', except that the test suite defaults to the PEAK test suite. |
|
You can, however run any test suite from the command line with a dotted |
|
module/attribute path, e.g 'peak test foo.bar.test_suite'. |
|
|
- 'binding.Acquire()' now accepts a 'default' value argument, and |
- 'binding.Acquire()' now accepts a 'default' value argument, and |
'binding.New()' no longer accepts the 'bindToOwner' flag. |
'binding.New()' no longer accepts the 'bindToOwner' flag. |
|
|
also been removed, as they were based on 'isImplementedBy()'. |
also been removed, as they were based on 'isImplementedBy()'. |
|
|
- REMOVED ability to use '__implements__' and '__class_implements__' to |
- REMOVED ability to use '__implements__' and '__class_implements__' to |
declare support for interfaces. Use 'implements()', 'classProvides()', |
declare support for interfaces. Use 'protocols.advise()' or a related |
'directlyProvides()', 'moduleProvides()', etc. to do this now; they |
API to do this now. The 'protocols' package is available automatically |
are now available automatically from 'peak.api'. Similarly, the ability |
from 'peak.api'. |
to use 'isImplementedBy()' with interfaces declared by PEAK is REMOVED. |
|
You can still use 'isImplementedBy()' with Zope interfaces, of course, |
Similarly, the ability to use 'isImplementedBy()' with interfaces declared |
but we recommend you switch to 'adapt()', which will work with both PEAK |
by PEAK is REMOVED. You can still use 'isImplementedBy()' with Zope |
and Zope interfaces. |
interfaces, of course, but we recommend you switch to 'adapt()', which |
|
should work with both PEAK and Zope interfaces. |
|
|
- Replaced all use of 'zope.interface' with 'protocols' package because |
- Replaced all use of 'zope.interface' with 'protocols' package because |
the 'protocols' package: |
the 'protocols' package: |
* uses adaptation as the fundamental approach to dealing with interfaces, |
* uses adaptation as the fundamental approach to dealing with interfaces, |
and avoids the use of 'isImplementedBy()'. In the *rare* case that you |
and avoids the use of 'isImplementedBy()'. In the *rare* case that you |
need to introspect rather than adapt, you can always call adapt() and |
need to introspect rather than adapt, you can always call adapt() and |
check the result. |
check the result. (But introspection usually means that you're using |
|
interfaces as a form of metadata; it's better to create an explicit |
|
interface that provides the metadata you seek, and adapt to that |
|
interface, than to use interfaces as data.) |
|
|
Most of these features are unavailable in 'zope.interface', and some have |
Most of these features are unavailable in 'zope.interface', and some have |
been declared by the Zope Pope to be unacceptable or undesirable features |
been declared by the Zope Pope to be unacceptable or undesirable features |
about this, as they are part of the naming package's extensibility |
about this, as they are part of the naming package's extensibility |
framework.) |
framework.) |
|
|
- 'EigenRegistry' and 'PropertyMap' no longer attempt to figure out whether |
|
implied (i.e. inherited) interfaces are more or less general with respect |
|
to a previous registration. This was behavior that emulated Zope adapter |
|
registries, but what we really wanted was more akin to a Zope "type" |
|
registry. The only parts of the test suite that used the old behavior |
|
were the tests specifically written to ensure that behavior! |
|
|
|
- 'binding.bindTo()' now accepts a 'default=' argument, whose value will be |
- 'binding.bindTo()' now accepts a 'default=' argument, whose value will be |
used in case of a 'NameNotFound' error. |
used in case of a 'NameNotFound' error. |
|
|
|
|
Corrected Problems |
Corrected Problems |
|
|
|
- Fixed a problem in ZConfig 'schema.dtd'; I used 'PCDATA' where I should've |
|
used 'CDATA'. |
|
|
|
- Fixed a problem with 'binding.supertype()' not working correctly if the MRO |
|
it was searching contained a "classic" class. Now 'supertype()' skips any |
|
classic classes it finds. (It probably should be rewritten entirely.) |
|
|
|
- Fixed misc. problems with 'fromZConfig()' component constructor |
|
|
|
- Fixed source distributions missing essential setup files |
|
|
|
- Fixed a problem with assembly events, where a parent component that didn't |
|
need assembly notification, wouldn't ever notify its children of assembly |
|
if they requested the notification after the parent had already received |
|
it. |
|
|
|
- Fixed a bug in automatic metaclass generation that caused extra unneeded |
|
metaclasses to be generated. |
|
|
- Fixed 'naming.lookup()' and related APIs not setting the parent component |
- Fixed 'naming.lookup()' and related APIs not setting the parent component |
of created objects without an explicitly supplied 'creationParent' keyword |
of created objects without an explicitly supplied 'creationParent' keyword |
argument. This used to "sort of work" when we had implicit configuration |
argument. This used to "sort of work" when we had implicit configuration |