[Subversion] / PEAK / CHANGES.txt  

Diff of /PEAK/CHANGES.txt

Parent Directory | Revision Log

version 383, Fri Apr 5 00:38:34 2002 UTC version 1078, Sat May 3 22:11:56 2003 UTC
Line 1 
Line 1 
 New Features and Bug Fixes since v0.2, preview 1  Fixes and Enhancements since Version 0.5 alpha 1
   
  * Added 'TWX' package for extensions; added 'TWX.Diagrams.GraphViz'   - Removed 'LOG_XYZ' convenience functions from 'peak.api', and refactored
    diagramming utility module.  Very hacky and first-draft, with no unit     'peak.running.logs' to use a PEP 282-like interface, 'running.ILogger'.
    tests, but I've manually verified most of the functionality so far.     Under the new scheme, messages must be sent to a specific entry point
      (e.g. 'self.logger.warning("foo")').  Components can bind an attribute
  * Added support for pickling instances of nested classes; this required     directly to a logger object, or via configuration properties or utilities.
    changing all uses of '__name__' which needed an unqualified class name.     PEAK components that do logging all define a 'logger' attribute, bound
    Notably, one should use 'feature.attrName' instead of 'feature.__name__'     to a configuration property in the 'peak.logs' property namespace.  By
    in verb definitions.     a default in 'peak.ini', 'peak.logs.*' is configured to output messages
      of 'WARNING' priority or higher to 'sys.stderr'.
  * SEF.DynamicBinding is now SEF.AutoCreated, and all AutoCreatable  
    classes like SEF.App and SEF.Service must now have an '__init__' method     For compatibility with the PEP 282 logging package, a 'logging.logger:'
    that accepts their SEF parent component.  This lets such objects have     URL scheme has been added; looking up the URL '"logging.logger:foo.bar"'
    access to the SEF hierarchy during initialization.  (Note that this     is equivalent to 'logging.getLogger("foo.bar")', unless the 'logging'
    means any '__init__' methods of such classes must be revised to take     package is not available, in which case the configuration property
    this into consideration.  See TW.Database.DataModel.Database for an     'peak.logs.foo.bar' will be looked up in the target context of the
    example of such a revision.)     lookup.  Optionally, you can configure the 'logging.logger' URL scheme so
      that it only uses PEAK loggers, and never uses the PEP 282 loggers.
    Also, I dropped the unused SEF.StaticBinding class.  
    - Added 'binding.metamethod()' wrapper for metaclass methods that might
  * 'setupModule()' and 'adviseModule()' will now issue warnings for most     not be accessible from their instances if the instances (classes) also
    questionable code structures and variable redefinitions that might not     defined the method for *their* instances.  You must now use this wrapper
    work the way you'd expect or intend under module inheritance.     on any such metaclass-defined methods, as PEAK no longer works around
      this via the 'x.__class__.foo(x,...)' trick that was used previously.
  * Added tests and documentation for 'adviseModule()' API     In particular, if you have metaclass definitions of 'getParentComponent',
      '_getConfigData', 'getComponentName', or 'notifyUponAssembly', you need
  * Added a 'test' command to 'setup.py' that installs and then tests all of     to wrap them with 'binding.metamethod' now.
    TransWarp.  (It saves me time running the unit tests while I'm writing  
    new code.)   - Fixed 'mof2py' generator script not working
   
  * Added warnings for detectable module-level modifications of mutables   - Fixed model.Element not getting parent component set when passed as a
    in modules which are used for inheritances or advice.  Added an API     constructor argument.
    function, 'configure(object, attr1=val, attr2=val,...)' to safely  
    set attributes of mutables that might have been defined in a derived   - Fixed property/utility lookups not working correctly on model.*
    module.     objects.
   
  * Removed 'Meta.ClassInit' and '__class_init__' support.  Use metaclass   - Fixed IndentedStream generating all-whitespace lines
    '__init__' methods instead; see 'TW.Database.DataModel.RecordTypeMC'  
    for one example of the conversion.   - Made 'NOT_GIVEN' and 'NOT_FOUND' recognizable by humans (they 'repr'
      and 'str' to their names) and by Python (they can be pickled, and
  * Added 'SEF.bindToParent()', 'SEF.bindToNames()', and 'SEF.bindToSelf()'     when restored they come back as the same object).
    descriptors, to allow more flexible component parameter bindings.  
   
  * Improved key integrity checks in DataModel: Record objects now disallow  
    modification of key fields unless the old value is None, and cache  
    collisions between records with supposedly unique keys will result in an  
    AssertionError.  
   
  * Added 'SET' method (ala WarpCORE's set_X procedures) to  
    TW.Utils.MiniTable.  
   
  * Added more docs to TW.Utils.Code, and removed 'iterFromEnd()' method  
    from code objects.  Added experimental 'nextSplit' index to codeIndex  
    objects that does top-level block analysis to allow splitting a code  
    object into smaller routines.  
   
  * Fixed the "reference to rebound class within another class" problem  
    with module inheritance, as reported by (who else?) Ulrich Eck.  :)  
   
  * Rewrote SEF "features" to use 'element.verbFeature()' style methods  
    instead of 'element.feature.verb()' style.  UML/XMI/Querying code  
    still uses the old-style SEF framework, which is still available from  
    'TW.SEF.FeatureObjects'.  See the docs of 'TW.SEF.Basic.FeatureMC'  
    and 'TW.API.Meta.MethodExporter' for details on how new-style methods  
    work.  
   
  * Fixed misc. bugs in 'DataModel', 'LDAPModel', 'Connections', and  
    'TW.Caching' found by Ulrich Eck.  Thanks Ulrich!  Also, added a fix  
    to ensure that non-existent records are invalidated by  
    'RecordType.getItem()'.  
   
  * Added basic Specialist implementation to 'TW.SEF.Basic', and reverted  
    naming from 'TypeService' and 'ITypeService' to 'Specialist' and  
    'ISpecialist'.  Updated 'TW.SEF.Interfaces' to reflect "self"-less  
    convention for documenting methods.  
   
  * Dropped obsolete 'TW.Database.Records' module.  
   
  * Fixed the base class "rebind by name" bugs in module inheritance, and  
    updated the documentation to more clearly reflect what it is that  
    metaclass generation and module inheritance does and does not do.  Added  
    test cases to prevent regression of the rebind-by-name problem.  
   
  * The 'setup.py' script features a new command, 'happy', which can be used  
    to generate the API reference docs, and this command runs as part of the  
    'sdist' command to build source distributions.  
   
  * 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.383  
changed lines
  Added in v.1078

cvs-admin@eby-sarna.com

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help