[Subversion] / PEAK / CHANGES.txt  

Diff of /PEAK/CHANGES.txt

Parent Directory | Revision Log

version 1573, Sun Dec 28 00:14:24 2003 UTC version 1585, Tue Jan 13 01:57:35 2004 UTC
Line 2 
Line 2 
   
  Changed, Enhanced, or Newly Deprecated Features   Changed, Enhanced, or Newly Deprecated Features
   
    - Added 'peak.events' package, supporting a simple event-driven programming
      microkernel, including event-driven "ultralight" threads powered by
      generators.
   
    - "Global" services defined by '[Component Factories]' sections now live in
      the closest "service area" to the component that requests them.  A "service
      area" is a parent component that implements 'config.IServiceArea', such as
      a configuration root returned by 'config.makeRoot()'.  Applications loaded
      by the 'peak runIni' command are now created in their own service area,
      which means that settings in the .ini file being run will apply to services
      the application uses.  (Because the application will have its own,
      application-specific service instances, and they will use the configuration
      loaded into the service area.)
   
      If you need to create your own service area, you can do so by mixing in
      'config.ServiceArea' to your component class.  However, you should *not* do
      this unless you know exactly what "outside" services you may need to use
      from "inside" the newly created service area, so that you can explicitly
      connect them "into" the service area.  (In short, if you don't know *why*
      you're creating a service area, don't do it.)
   
    - 'config.Namespace()' objects now have a 'keys()' method that can be used
      when the namespace is bound to a context component.  It returns a list of
      strings that may be used as keys for that namespace.  Example usage::
   
       >>> from peak.api import *
       >>> r=config.makeRoot()
       >>> ns=config.Namespace('peak.naming.schemes',r)
       >>> ns.keys()
       ['https', 'smtp', 'logfile', 'psycopg', 'pkgfile', 'unix.dg', 'win32.dde',
       'sybase', 'timer', 'lockfile', 'pgsql', 'fd.socket', 'uuid', 'tcp', 'file',
       'gadfly', 'http', 'logger', 'icb', 'cxoracle', 'udp', 'winflockfile',
       'import', 'logging.logger', 'nulllockfile', 'nis', 'shlockfile',
       'zconfig.schema', 'flockfile', 'shellcmd', 'dcoracle2', 'config', 'ftp',
       'unix', 'ldap', 'sqlite', 'mockdb']
       >>> ns['ldap']
       'peak.storage.LDAP:ldapURL'
   
    - Log events don't use a positional 'message' argument any more, and
      loggers aren't responsible for interpolating message arguments any more.
      The new signature is 'Event(parent, msg=msg, args=args, ...)'.  Loggers
      also now tell events what logger name they are, via the 'ident' keyword.
   
    - The logging system now uses a property namespace, 'peak.logging.levels', to
      obtain log level names and values.  The various 'logs.LEVEL' constants are
      now DEPRECATED.  Please use the 'getLevelFor()' method of the nearest
      'logs.ILoggingService' instead.  Also note that URL schemes such as
      'logfile:' no longer convert their level names to numbers, since the
      level names are only meaningful in the context of a logging service.
   
    - Support for integration with the Python 2.3/PEP 282 logging module has been
      scaled back.  There are too many globalisms and dependencies there.  When we
      add plugin-based log configuration, it should be possible to use the logging
      package's handlers and formatters with the PEAK logging services.  At that
      point, you'll be able to replace 'logging.getLogger' and
      'logging.getLevelName' with the corresponding methods of a PEAK logging
      service, if you need to force non-PEAK packages to use PEAK's logging.
   
    - Logs are now accessed via a 'logs.ILoggingService' instance.  The 'logger:'
      URL scheme automatically accesses the nearest such service.  For backward
      compatibility, the old 'peak.logs' namespace is still used to supply the
      actual loggers.  This will be gradually replaced with a plugin-based
      mechanism.
   
    - Added 'binding.PluginKeys' and 'binding.PluginsFor'.  These are component
      keys that can be used to 'Obtain' plugins registered within a property
      namespace.  'PluginKeys' obtains a list of the plugins' configuration keys,
      while 'PluginsFor' obtains a list of the actual plugins.
   
    - Replaced 'peak.config.registries.EigenRegistry' with
      'peak.config.registries.ImmutableConfig'.  The only use we had for
      'EigenRegistry' was to keep track of 'offerAs' settings within classes, and
      it didn't need all the extra complexity of eigenstate management.  The new,
      more-specialized class is shorter, simpler, and easier to use.
   
  - Added 'config.iterKeys()' which iterates over all available configuration   - Added 'config.iterKeys()' which iterates over all available configuration
    keys in a given namespace (just property names for now).  The 'config:'     keys in a given namespace (just property names for now).  The 'config:'
    namespace is now a 'naming.IReadContext', so you can navigate it with the     namespace is now a 'naming.IReadContext', so you can navigate it with the


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

cvs-admin@eby-sarna.com

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help