[Subversion] / PEAK / CHANGES.txt  

Diff of /PEAK/CHANGES.txt

Parent Directory | Revision Log

version 1433, Thu Oct 30 00:35:14 2003 UTC version 1503, Sat Nov 29 04:01:31 2003 UTC
Line 2 
Line 2 
   
  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
Line 297 
Line 401 
   
  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


Generate output suitable for use with a patch program
Legend:
Removed from v.1433  
changed lines
  Added in v.1503

cvs-admin@eby-sarna.com

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help