|
|
Changed, Enhanced, or Newly Deprecated Features |
Changed, Enhanced, or Newly Deprecated Features |
|
|
- Added 'config.Fallback()' convenience class for redirecting property lookups |
- The 'referencedType' of a 'model.StructuralFeature' can now be any |
from one namespace to another. See 'peak.ini' for usage examples. |
'binding.IComponentKey', not just a type or a string. Types are also now |
|
implicitly component keys, which means you can use 'binding.Obtain(SomeType)' |
|
to look up 'SomeType'. (Right now, this is no different than using 'SomeType' |
|
without the 'binding.Obtain()', but in future releases this will use a |
|
"class replacement service" to allow easy replacement of model and other |
|
collaborator classes, while implementing AOP-like features.) |
|
|
|
- Added 'naming.Indirect(key)', a 'binding.IComponentKey' that can be used to |
|
do an indirect lookup via another 'IComponentKey' (such as a name). Using |
|
'naming.Indirect()', you can replace code like this:: |
|
|
|
socket = binding.Obtain( |
|
lambda self: self.lookupComponent(self.socketURL), |
|
adaptTo = [IListeningSocket] |
|
) |
|
|
|
with code like this:: |
|
|
|
socket = binding.Obtain( |
|
naming.Indirect('socketURL'), adaptTo = [IListeningSocket] |
|
) |
|
|
|
- Added 'peak.running.supervisor', a mini-framework for pre-forking, |
|
multiprocess servers, such as for FastCGI. The framework includes a ZConfig |
|
schema for process supervisors, and support for automatically forking new |
|
children (up to a predefined maximum, with a minimum interval between |
|
launches) when a socket has pending connections and all of its child |
|
processes are busy. With this setup, you can take more advantage of |
|
multiprocessor machines for CPU-intensive services. |
|
|
|
- Standardized these characteristics of name and address syntax: |
|
|
|
* '//' at the beginning of URL bodies is *mandatory* when the URL begins |
|
with an "authority" as described by RFC 2396. When the URL is not |
|
required to contain an authority (e.g. 'peak.storage.SQL.GenericSQL_URL'), |
|
the '//' is *optional*, and the canonical form of the URL will not include |
|
it. |
|
|
|
* Standardized names for RFC 2396 fields: 'user', 'passwd', 'host', and |
|
'port'. |
|
|
|
- Added 'peak.metamodels.ASDL', a metamodel for the Zephyr Abstract Syntax |
|
Description Language. ASDL is a convenient way to describe a domain model |
|
for an abstract syntax tree (AST), and the models generated with the new |
|
ASDL tool can be combined with concrete syntax to create a complete parsing |
|
solution for "mini languages", possibly including the Python language |
|
itself. (Future versions of the Python and Jython compilers are likely to |
|
use AST models based on ASDL, and in the current Python CVS sandbox there's |
|
already an ASDL model of Python's AST available.) |
|
|
|
- Enhanced 'fmtparse' and 'peak.model' to allow using types as syntax rules |
|
for parsing, including abstract types. An abstract type's syntax is the |
|
union (using 'fmtparse.Alternatives') of the syntaxes of its subclasses |
|
(as specified by 'mdl_subclassNames'). |
|
|
|
- Added 'IMainLoop.setExitCode()' and 'IMainLoop.childForked()' methods, to |
|
allow reactor-driven components to control the mainloop's exit code. |
|
|
|
- DEPRECATED 'peak.util.signal_stack'. Instead, bind to a |
|
'running.ISignalManager' and use its 'addHandler()/removeHandler()' methods. |
|
This has the same effect as 'pushSignals()' and 'popSignals()', except that |
|
you do not have to remove handlers in the same order as you add them, and |
|
*all* active handlers are invoked for a given signal that they handle. |
|
|
|
- Added 'IBasicReactor.crash()', which forces an immediate reactor loop exit, |
|
ignoring pending scheduled calls. |
|
|
|
- Added 'peak.running.commands.runMain()', a convenience function for starting |
|
an application's "main" command, that also makes it easy for forked child |
|
processes to exit and replace the parent process' "main". The 'peak' script |
|
has now been shortened to:: |
|
|
|
from peak.running import commands |
|
commands.runMain( commands.Bootstrap ) |
|
|
|
so it's now much easier to create alternative startup scripts, if you need |
|
to, or to add an 'if __name__=="__main__"' clause to a module. |
|
|
|
- Added 'peak.util.mockdb', a "mock object" implementation of a DBAPI 2.0 |
|
driver module. 'mockdb' connections can be told to 'expect()' queries |
|
and 'provide()' data to their callers, and will raise AssertionErrors when |
|
they are used in a way that doesn't conform to your supplied expectations. |
|
This is intended to be used for unit testing components that depend on |
|
a database connection: you can verify that they send the right SQL, and |
|
you can provide them with dummy data to use. There is also a 'mockdb:' URL |
|
and peak.storage driver, so you can easily use a mock DB connection in place |
|
of a real one within a PEAK application, for testing purposes. Note, |
|
however, that 'peak.util.mockdb' is a DBAPI 2.0 driver in itself, and thus |
|
can also be used to test DBAPI usage outside of PEAK. |
|
|
|
- SQL connection objects now provide an 'appConfig' attribute that is a |
|
driver-specific 'config.Namespace()'. This allows you to easily set up |
|
configuration properties that are driver-specific. For example, you could |
|
use properties to configure driver-specific SQL snippets, then access them |
|
via the connection's 'appConfig' namespace. The namespaces are of the form |
|
'DRIVER.appConfig', where 'DRIVER' is the name of the DBAPI module for that |
|
connection type (e.g. 'pgdb', 'cx_Oracle', etc.). |
|
|
|
- Added 'config.Namespace()' convenience class for redirecting property |
|
lookups from one namespace to another. See the docstring and 'peak.ini' for |
|
usage examples. 'PropertyName.of()' now returns 'Namespace' instances |
|
instead of 'PropertySet' instances. |
|
|
|
- DEPRECATED the 'config.PropertySet' class; please convert to using |
|
'config.Namespace', as it will disappear in the 0.5alpha4 release cycle. |
|
|
- SQL connection objects now get their type converters from a distinct |
- SQL connection objects now get their type converters from a distinct |
property namespace for each DBAPI driver. For example a driver using the |
property namespace for each DBAPI driver. For example a driver using the |
|
|
Corrected Problems |
Corrected Problems |
|
|
|
- 'peak.running.commands.CGICommand' could become confused on certain BSD |
|
variants (such as Mac OS/X), and assume it was running under FastCGI, even |
|
if it wasn't. (Because the operating systems in question use socket pairs |
|
to implement pipes.) |
|
|
|
- Fixed some problems with the test suite when running under Python 2.3. |
|
PEAK itself worked fine, but the test suite was bitten by two minor |
|
semantic changes that took effect in 2.3, resulting in lots of error |
|
messages about ModuleType needing a parameter, and a test failure for |
|
'checkClassInfo' in the 'FrameInfoTest' test class. |
|
|
- Transaction participants that raised an error in their 'abortTransaction()' |
- Transaction participants that raised an error in their 'abortTransaction()' |
method, would not receive a 'finishTransaction()' call, the error was |
method, would not receive a 'finishTransaction()' call, the error was |
passed through to the transaction service's caller, and later participants |
passed through to the transaction service's caller, and later participants |