
ChangeLog
==============================================================================

All bugs/feature details can be found at: 

   https://github.com/cement/cement/issues/XXXXX


Where XXXXX is the 'Issue #' referenced below.  Additionally, this change log
is available online at:

    http://builtoncement.com/2.0/changes.html

.. raw:: html

    <BR><BR>

2.0.2 - Thu Aug 23, 2012
------------------------------------------------------------------------------

Bugs:

    * :issue:`162` - Unable to set log 'level' by config
    * :issue:`167` - Non-stacked controllers not listed in --help
    
Features:

    * :issue:`161` - Ability to override `usage`
    * :issue:`165` - Allow utils.fs.backup() to support a suffix kwarg
    * :issue:`166` - Ability to set the 'app' for CementTestCase.make_app()

Incompatible Changes:
    
    * :issue:`167` - Listed above, in order to fix this issue as well as 
      restrict future issues we implemented a hard requirement that all 
      base controllers have the label 'base'.  This should not be a major
      change for anyone using Cement 2.0.x as it is a simple 1 line change
      in any one application.  As all documentation encourages the use of the
      label 'base' it should not be a wide spread incompatibility.
    
    
2.0.0 - Fri Aug 03, 2012
------------------------------------------------------------------------------

This is the initial stable release of the 2.0.x branch.  Future releases of 
this branch will include bug/security fixes and minor feature updates.  
Forward moving feature development will continue out of the 2.1.x branch.

Bugs:

    * :issue:`143` - Incorrect doc regarding logging.  The LoggingLogHandler
      now supports an optional 'namespace' argument allowing the developer
      to override the log prefix.
    * :issue:`150` - foundation.CementApp.Meta.argv now defaults to None,
      but is overridden in __init__() with sys.argv if no other argv is 
      passed as meta.
    
Features:
    
    * :issue:`138` - Added 'shell' argument to utils.shell.exec_cmd() and
      utils.shell.exec_cmd2().
    * :issue:`140` - Included ~/.myapp/config in default config search
    * :issue:`144` - Added a note on Contributing, as well as a CONTRIBUTORS
      file.
    * :issue:`152` - Added 'argument_formatter' to ControllerBaseClass.Meta.
    * :issue:`153` - Added spawn_process() and spawn_thread() to utils.shell.

Incompatible Changes:

    * :issue:`100` - Interfaces audit.
        * ILog.level() redefined as ILog.get_level()
        * IPlugin.loaded_plugins attribute redefined as 
          IPlugin.get_loaded_plugins()
        * IPlugin.enable_plugins attribute redefined as 
          IPlugin.get_enabled_plugins()
        * IPlugin.disabled_plugins attribute redefined as 
          IPlugin.get_disabled_plugins()
    * :issue:`145` - The IArgument interface no longer specifies that the 
      `parsed_args` be maintained by the handler implementation.  This means
      that `app.args.parsed_args` is no longer available, however 
      `app.pargs` functions just the same as it points to 
      `app._parsed_args`.
    * :issue:`148` - The CementExtensionHandler.loaded_extensions property is
        now a callable at CementExtensionHandler.get_loaded_extensions().
    * :issue:`151` - Removed all previously deprecated code including:
        * Removed CementApp.Meta.defaults, and CementBaseHandler.Meta.defaults.  
          Now use `config_defaults` instead.
        * Removed cement.foundation.lay_cement().  Now use CementApp directly.
        * Removed cement.handler.enabled().  Now use `handler.registered()` 
          instead.
    * :issue:`154` - Validate for handler config_defaults and config_section
      by default.  Only incompatible if not previously sub-classing from
      handler.CementBaseHandler.        
    * :issue:`157` - CementRuntimeError renamed as FrameworkError
    * :issue:`158` - CementSignalError renamed as CaughtSignal
    * :issue:`159` - CementInterfaceError renamed as InterfaceError

Misc:

    * :issue:`155` - Removed unused CementArgumentError, and 
      CementConfigError.  These types of exceptions should be defined at
      the application level.

1.9.14 - Sun Jul 16, 2012
------------------------------------------------------------------------------

Bugs:

    * :issue:`127` - Inherited positional arguments listed multiple times

Feature Enhancements:

    * :issue:`131` - Controller aliases
    * :issue:`126` - Add a 'bootstrap' importer to CementApp    
    * Added cement.utils.test.CementTestCase for improved testing.
    
Incompatible Changes:

    * :issue:`129` - Simplify extensions/plugins/hooks/etc.
        * Hooks renamed from 'cement_xxx_hook' to just 'xxx'.  For example, the
          'cement_pre_setup_hook' is now simply 'pre_setup'.  Additionally, the
          'cement_on_close_hook' is now broken out into 'pre_close', and 
          'post_close'.
        * The cement.core.hooks.register decorator was replaced with a  simple 
          function of the same name.  New usage is:
          register('hook_name', hook_func).
        * Plugins, extensions, and the application bootstrap now attempt to
          call a 'load()' function, meaning library code and loading code can
          live in the same file (i.e. hooks won't be registered just because
          you imported an extension to sub-class a handler, etc).
    * cement.utils.test_helper moved to cement.utils.test.
    * By default, command line arguments no longer override config settings.
      This is now configurable by the CementApp.Meta.arguments_override_config
      boolean.  Related: :issue:`136`.
      

1.9.12 - Thu Jul 05, 2012
------------------------------------------------------------------------------

Bugs:

    * Fixed version mis-hap in setup.py


1.9.10 - Wed Jul 04, 2012
------------------------------------------------------------------------------

Feature Enhancements:

    * :issue:`118` - Added utils.fs.backup() to safely backup files/dirs.
    
Misc:

    * :issue:`111` - Use relative imports (makes cement more portable as it 
      can be included and distributed with 3rd party sources).
    * :issue:`120` - Use standard json rather than relying on jsonpickle

Incompatible Changes:

    * core.util.abspath moved to utils.fs.abspath
    * core.util.is_true moved to utils.misc.is_true
    * Namespace reverted from 'cement2' back to 'cement'.
    * The following extensions have been removed from the cement source tree, 
      and are now available externally (see: http://github.com/cement): daemon, 
      memcached, configobj, yaml, genshi.
    

1.9.8 - Thu May 3, 2012
------------------------------------------------------------------------------

Feature Enhancements:

    * :issue:`95` - Add a 'config_section' Meta default for all handlers.
      Required to parse config options for a handler.
    * :issue:`97` - Add a standard cache handler interface.
    * :issue:`105` - Add 'meta_override' and 'core_meta_override' list to 
      CementApp().Meta.  Also resolves :issue:`104`.
    * :issue:`108` - Add CementApp.extend() functionality.
    * :issue:`109` - Add cement.ext.memcached extension

Incompatible Changes:

    * :issue:`103` - plugin_bootstrap_module renamed as plugin_bootstrap.
    * :issue:`106` - Deprecate Meta.defaults in favor of Meta.config_defaults
    * :issue:`107` - Make the app name the default config section, not [base]

1.9.6 - Wed Apr 18, 2012
------------------------------------------------------------------------------

Bug Fixes:

    * :issue:`89` - Secondary controllers display under other controllers
    * :issue:`90` - Logging to file doesn't expand '~'
    * :issue:`91` - Logging to file doesn't create basedir
    
Feature Enhancements:

    * :issue:`88` - Add cement.ext.genshi extension, provides Genshi Text
      Templating Launguage support.
    * :issue:`93` - Add epilog support for CementBaseController.

Refactoring:

    * :issue:`87` - Refactor Meta handling
    
Incompatible Changes:

    * :issue:`96` - Move 'setup()' functions to '_setup()'
    * Moved CementBaseController.dispatch() to _dispatch()
    * Moved CementBaseController.usage_text to _usage_text()
    * Moved CementBaseController.help_text to _help_text()
    * backend.defaults() no longer accepts an app name as an argument.
    * foundation.lay_cement() is deprecated.  Use foundation.CementApp() 
      directly.
    * No longer pass anything but 'app' object to handlers _setup() functions.
    * handler.enabled() is deprecated.  Use handler.registered().
    
1.9.4 - Wed Dec 21, 2011
------------------------------------------------------------------------------

Bug Fixes:

    * :issue:`73` - Hooks broken in Python 3
    * :issue:`81` - Controller defaults should be processed before base 
      controller.setup()
      
Feature Enhancements:

    * :issue:`65` - Added 'daemon' extension.  Process is daemonized by 
      passing the '--daemon' option.  Handles switching the run user/group, as
      well as managing a pid file.
    * :issue:`72` - Added new framework hooks.
    * :issue:`76` - Added app.close() functionality including a 
      cement_on_close_hook() allowing plugins/extensions/etc to be able to
      cleanup on application exit.
    * :issue:`77` - Added default signal handler for SIGINT/SIGTERM as well as
      the cement_signal_hook which is called when any catch_signals are 
      encountered.
    * :issue:`78` - Added cement_pre_render_hook, and cement_post_render_hook
      allowing developers to control the data that is rendered to console.
    * :issue:`84` - Ability to run all tests from utils/run_tests.sh
    
Incompatible Changes:

    * :issue:`72` - The framework hooks 'cement_add_args_hook' and 
      'cement_validate_config' were removed in favor of the new pre/post setup 
      and run hooks.
    * :issue:`82` - Change 'meta' classes to Python-proper 'Meta', and 
      interfaces to use 'IMeta'.  Old functionality will be completely removed
      before Cement stable release.
    
    

1.9.2 - Wed Nov 02, 2011
------------------------------------------------------------------------------

This is an initial beta release of Cement, and therefore no bugs or features
are listed.  Future releases will detail all changes.
