[Subversion] / PEAK / CHANGES.txt  

Diff of /PEAK/CHANGES.txt

Parent Directory | Revision Log

version 379, Tue Apr 2 21:38:41 2002 UTC version 1801, Sat Sep 18 22:58:10 2004 UTC
Line 1 
Line 1 
 New Features and Bug Fixes since v0.2, preview 1  Fixes and Enhancements since Version 0.5 alpha 3
   
  * SEF.DynamicBinding is now SEF.AutoCreated, and all AutoCreatable   - Added 'config.registeredProtocol()' API, that supports defining named and
    classes like SEF.App and SEF.Service must now have an '__init__' method     local protocols.  This allows easy emulation of Zope 3's "named" and "local"
    that accepts their SEF parent component.  This lets such objects have     adapters and views.
    access to the SEF hierarchy during initialization.  (Note that this  
    means any '__init__' methods of such classes must be revised to take   - 'binding.Component' objects no longer support instance configuration at
    this into consideration.  See TW.Database.DataModel.Database for an     runtime (i.e., they no longer implement 'config.IConfigurable').  If you
    example of such a revision.)     need a component to be configurable at runtime, you must now derive from
      (or mix in) 'binding.Configurable' instead.  If you get errors about
    Also, I dropped the unused SEF.StaticBinding class.     a missing 'registerProvider' attribute, or about being unable to adapt to
      'IConfigurable', try changing your base class from 'binding.Component'
  * 'setupModule()' and 'adviseModule()' will now issue warnings for most     to 'binding.Configurable', or add it as a mixin if you're deriving from
    questionable code structures and variable redefinitions that might not     a class that uses 'binding.Component' as its base.
    work the way you'd expect or intend under module inheritance.  
    - 'binding.IComponent' no longer derives from 'config.IConfigurable' or
  * Added tests and documentation for 'adviseModule()' API     'config.IConfigMap', only 'config.IConfigSource'.  This means that
      'IComponent' no longer guarantees or requires the presence of the
  * Added a 'test' command to 'setup.py' that installs and then tests all of     'registerProvider()' method: now only 'config.IConfigurable' does that.
    TransWarp.  (It saves me time running the unit tests while I'm writing  
    new code.)   - The 'config.IConfigMap' interface is now DEPRECATED.  Use
      'config.IConfigurable' instead.  The '_configKeysMatching()' method
  * Added warnings for detectable module-level modifications of mutables     of 'IConfigMap' was moved to 'config.IConfigSource', so if you've
    in modules which are used for inheritances or advice.  Added an API     implemented a custom 'IConfigSource', be sure to add this method.
    function, 'configure(object, attr1=val, attr2=val,...)' to safely  
    set attributes of mutables that might have been defined in a derived   - 'web.ISkinService' and 'web.ILayerService' were consolidated into
    module.     'web.IInteractionPolicy', because the need to have configurable
      implementations of these services is negligible.  That is, the
  * Removed 'Meta.ClassInit' and '__class_init__' support.  Use metaclass     corresponding property namespaces ('peak.web.skins' and 'peak.web.layers')
    '__init__' methods instead; see 'TW.Database.DataModel.RecordTypeMC'     are more than adequate as registries.
    for one example of the conversion.  
    - Removed 'peak.running.timers' and 'peak.util.dispatch'.  Neither was in
  * Added 'SEF.bindToParent()', 'SEF.bindToNames()', and 'SEF.bindToSelf()'     active use, and both are being replaced by the new generic functions
    descriptors, to allow more flexible component parameter bindings.     package in PyProtocols.
   
  * Improved key integrity checks in DataModel: Record objects now disallow   - The 'config.iterParents' API is now moved to 'binding.iterParents', and all
    modification of key fields unless the old value is None, and cache     'binding' functions that walk the component hierarchy use it.  It has also
    collisions between records with supposedly unique keys will result in an     been changed to avoid infinite loops in the case of a pathological
    AssertionError.     component structure.
   
  * Added 'SET' method (ala WarpCORE's set_X procedures) to   - The 'persistence' package has been moved to 'peak.persistence' to avoid
    TW.Utils.MiniTable.     conflicts with ZODB3 and the latest version of Zope 3.  It will eventually
      be phased out, but for now this move is the simplest way to get it out of
  * Added more docs to TW.Utils.Code, and removed 'iterFromEnd()' method     the way.
    from code objects.  Added experimental 'nextSplit' index to codeIndex  
    objects that does top-level block analysis to allow splitting a code   - The 'peak.util.SOX' module now uses only one parser, based directly on
    object into smaller routines.     'expat', instead of using SAX.  The new parser expects a new node interface,
      'IXMLBuilder', but adapters from the previous interfaces ('ISOXNode' and
  * Fixed the "reference to rebound class within another class" problem     'ISOXNode_NS') are supplied for backward compatibility.  All of PEAK's
    with module inheritance, as reported by (who else?) Ulrich Eck.  :)     direct XML handling (currently just 'peak.storage.xmi' and
      'peak.web.templates') have been refactored to use the new interface.  Some
  * Rewrote SEF "features" to use 'element.verbFeature()' style methods     parsing classes (such as 'ObjectMakingHandler', 'NSHandler', and
    instead of 'element.feature.verb()' style.  UML/XMI/Querying code     'DOMletParser') are no longer available.
    still uses the old-style SEF framework, which is still available from  
    'TW.SEF.FeatureObjects'.  See the docs of 'TW.SEF.Basic.FeatureMC'   - 'peak.web' no longer uses Zope X3 for HTTP publishing support; it has been
    and 'TW.API.Meta.MethodExporter' for details on how new-style methods     refactored to use a "simpler, more uniform architecture":http://www.eby-sarna.com/pipermail/peak/2004-May/001462.html
    work.     See also "more on the architecture":http://www.eby-sarna.com/pipermail/peak/2004-June/001482.html
      and subsequent posts in that thread.
  * Fixed misc. bugs in 'DataModel', 'LDAPModel', 'Connections', and  
    'TW.Caching' found by Ulrich Eck.  Thanks Ulrich!  Also, added a fix     As a consequence, "various features have been removed":http://www.eby-sarna.com/pipermail/peak/2004-June/001500.html
    to ensure that non-existent records are invalidated by     from 'peak.web', for possible return at a future date.  Here is a rough
    'RecordType.getItem()'.     outline of the changes made so far:
   
  * Added basic Specialist implementation to 'TW.SEF.Basic', and reverted      * The 'pageProtocol', 'pathProtocol', and 'errorProtocol' machinery are
    naming from 'TypeService' and 'ITypeService' to 'Specialist' and        gone.  They will be replaced in the future with an explicit "controller"
    'ISpecialist'.  Updated 'TW.SEF.Interfaces' to reflect "self"-less        wrapping mechanism to allow application-specific renderings of the same
    convention for documenting methods.        underlying components.
   
  * Dropped obsolete 'TW.Database.Records' module.      * The Zope 'request' and 'response' objects are gone, along with all of
         their special handling for cookies, character sets, form variables,
  * Fixed the base class "rebind by name" bugs in module inheritance, and        automatically marshalling parameters to functions, etc.  These items of
    updated the documentation to more clearly reflect what it is that        functionality will be gradually replaced by functions in 'peak.web.api'.
    metaclass generation and module inheritance does and does not do.  Added  
    test cases to prevent regression of the rebind-by-name problem.        As a result of this, arbitrary functions and methods can no longer be
         used as web pages; instead, functions and methods to be published must
  * The 'setup.py' script features a new command, 'happy', which can be used        use the same inputs and outputs as the 'IHTTPHandler.handle_http()'
    to generate the API reference docs, and this command runs as part of the        method.
    'sdist' command to build source distributions.  
       * The 'IWebPage', 'IWebInteraction', 'ITraversalContext', 'Traversal',
         'TraversalContext', and 'Interaction' interfaces and classes no longer
         exist, as they are unneeded in the new architecture.  Instead of
         having a central 'IWebInteraction' that's referenced by numerous
         'ITraversalContext' objects, the new approach uses an 'environ' mapping
         for most functions.  For access control, a 'security.IInteraction' is
         now used, whose function is limited to security checks.  Most
         functions previously performed by 'IWebInteraction' have moved to
         'IInteractionPolicy' or to 'peak.web.api' functions operating on
         'environ' mappings.
   
       * Web exceptions can define a 'levelName' attribute that determines the
         severity level with which the exception will be logged.  This allows
         one to e.g. avoid logging tracebacks for 'NotFound' errors.
   
       * Various interface calling signatures have changed slightly.  For example,
         'IAuthService.getUser()' now accepts an 'environ' mapping instead of
         an interaction.  'IInteractionPolicy.newInteraction()' now takes keyword
         arguments, but not a 'request'.  The 'IWebTraversable' interface no longer
         has a 'getObject()' method, and the 'IWebException.handleException()'
         method signature has changed as well.  Finally, all methods that
         previously accepted 'ITraversalContext' (such as
         'IDOMletState.renderFor()') now expect 'environ' mappings.
   
       * 'web.TestInteraction' was replaced with 'web.TestPolicy', and
         'web.Interaction' was removed, since 'IWebInteraction' is no longer part
         of the architecture.
   
    - The 'log()' method of PEAK loggers ('logs.ILogger') now accepts a level name
      *or* a number, for convenient invocation.
   
    - SQL transaction semantics have changed.  Now, issuing an SQL statement
      *always* causes the connection to join the active PEAK transaction, even if
      you request that the SQL be issued "outside" a transaction.  Such SQL will
      be issued outside of the *database* transaction, but not outside of the
      PEAK transaction.  This simplifies the overall processing model for dealing
      with "untransacted" SQL such as Sybase DDL or read-only Oracle transactions.
      (In particular, the requirement that triggered this change was to allow
      Oracle read-only transactions to be released at the end of the current PEAK
      transaction.)  Also, got rid of the now-meaningless 'begin' command in n2.
   
    - The 'events.IEventSource' interface now returns a 'canceller' function from
      the 'addCallback()' method, allowing you to cancel a previously-scheduled
      callback.  This fixes a memory leak and performance problem with
      'events.AnyOf()', which previously could accumulate unneeded callbacks on
      the sources it was monitoring.  Note that if you have developed any custom
      event sources with 'addCallback()' methods, you must make sure that they
      return a canceller from now on.
   
    - Added 'ref:factory@addr1||addr2' URL scheme that maps to a corresponding
      'naming.Reference("factory",["addr1","addr2"])'.  'factory' can be either a
      dotted import string referencing a 'naming.IObjectFactory', or you can
      define a factory in the 'peak.naming.factories' property space.
   
    - Added a 'zconfig.schema' factory, so that 'ref:zconfig.schema@streamURL'
      will load a schema loader.  Schema loaders are themselves object factories,
      so you can do something like:
   
        [Named Services]
        peak.naming.factories.myschema = \
            naming.LinkRef('ref:zconfig.schema@pkgfile:mypkg/Schema.xml')
   
      in order to make URLs like 'ref:myschema@filename' work.  Note, by the way,
      that the above could also read:
   
        [Named Services]
        peak.naming.factories.myschema = \
            naming.Reference('zconfig.schema',['pkgfile:mypkg/Schema.xml'])
   
      which runs somewhat faster at lookup time.  Similarly, one can also use
      'naming.Reference("myschema",["somefile"])' in place of a
      'naming.LinkRef("ref:myschema@filename")'.  As well as being faster, for
      some use cases it's easier to 'Reference' directly than to glue together
      a 'ref:' URL string.
   
  * The API reference docs in the source distribution has been moved from  
    the 'doc' directory to 'docs/html/reference'.  
   
  * Added 'CHANGES.txt' file.  


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

cvs-admin@eby-sarna.com

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help