=========================
 pyutilib.misc CHANGELOG
=========================

-------------------------------------------------------------------------------
 Version 4.6
-------------------------------------------------------------------------------

- Under development.

-------------------------------------------------------------------------------
 Version 4.5.3
-------------------------------------------------------------------------------

- A slightly more robust importer. If the filename ends with '.py', then
  don't try to import it. For example, it interprets "file.py" as package
  "file" followed by module "py". But this is rarely the case.

-------------------------------------------------------------------------------
 Version 4.5.2
-------------------------------------------------------------------------------

- Fixing the logic to compute estimated downloads for packages that
  are release just before the specified start time.

-------------------------------------------------------------------------------
 Version 4.5.1
-------------------------------------------------------------------------------

- Install scripts with entry points.

-------------------------------------------------------------------------------
 Version 4.5
-------------------------------------------------------------------------------

- Changed tests to eliminate the use of deprecated 'fail*' syntax.

- Fixed bug in the SparseMapping getitem logic.

- Overhaul of the LogHandler:
    * now takes an optional "verbosity" keyword argument. If present,
      it is assumed to be a function that returns a boolean indicating
      whether or not to output the file/function/line as part of the
      log output. Defaults to "True" for backwards compatibility
    * now indents all lines in the provided message with a tab (instead of
      just indenting the first line).  correctly handle newlines for
      messages
    * print lines for multiline messages in the right order 
    * changed output to use stdout rather than stderr

- Cleanup of the StreamIndenter.

- Adding a utility (PauseGC) for cleanly pausing the Python garbage
  collector.

-------------------------------------------------------------------------------
 Version 4.4
-------------------------------------------------------------------------------

- Added the SparseMapping object, which provides a default value for
  keys that are not defined in the dictionary, a specified domain for keys,
  and a specified value that mappings are within.

- Adding the pyutilib.misc.indent_io.StreamIndenter? class for indenting
  or prefacing every line of output sent to a file-like object (resolves
  #92).

- Adding output of YAML comparison diagnostic when exception is thrown
  when comparing sub-list elements (baseline versus output). The previous
  version silently let errors go by, significantly complicating diagnostics.

- Added LogHandler, which was adapted from coopr.pyomo

-------------------------------------------------------------------------------
 Version 4.3
-------------------------------------------------------------------------------

- If we catch an exception while loading a module, include the message
  from the caught exception as part of the "Failed to load python module"
  exception we throw.

- Adding support for importing unexported symbols through import_file().
  Also refining the import name parsing to explicitly look for .py or .pyc
  extension, and raising an exception for '.' in the file name.

-------------------------------------------------------------------------------
 Version 4.2
-------------------------------------------------------------------------------

- Adding a 'validate' option to the search_file function.

-------------------------------------------------------------------------------
 Version 4.1.2
-------------------------------------------------------------------------------

- Changing test to purposely fail. The 'cd' command actualy exists
  on Macs!

-------------------------------------------------------------------------------
 Version 4.1.1
-------------------------------------------------------------------------------

- Removing a limitation on the # of packages downloaded.

-------------------------------------------------------------------------------
 Version 4.1
-------------------------------------------------------------------------------

- Changing format of exceptions to print YAML data structure
  using pprint.

- Introduced conditional for runpy2.  If runpy is not available, then
  try to execute using runpy2.

- Add a deepcopy method that annotates a class.  This is used if
  running Python 2.4.

- Adding diagnostic output to pyutilib.misc import_file method to add name of 
  the Python module that it failed to load. Fixes the issue of the pyomo script 
  not reporting the file name (instead just: Failed to open file).

- For projects that split their code into multiple files, assume that
  all their files are relative to their directory. Note that after
  the import is done, that directory is removed, so no permanent
  changing of the environment.

- Add @deprecated decorator.  With this decorator, we can now start to 
  actively mark/remind ourselves of deprecated functions in use. Will also 
  perhaps be good for unawares users. Example use:

  @deprecated
  def some_func ( ):
    pass

-------------------------------------------------------------------------------
 Version 4.0
-------------------------------------------------------------------------------

- Adding pypi_downloads script.

- Adding module for YAML utilities, including tools for comparing
  YAML data (repn, strings, files).

- Adding utility to fix strings so they can be printed in YAML output.

- Added associated tests for these YAML utilities.

-------------------------------------------------------------------------------
 Version 3.4.1
-------------------------------------------------------------------------------

- Update to package README files to point to the new PyUtilib mailing lists. 

-------------------------------------------------------------------------------
 Version 3.4
-------------------------------------------------------------------------------

- Adding the rmtree() method developed in pyutilib.virtualenv 

-------------------------------------------------------------------------------
 Version 3.3.1
-------------------------------------------------------------------------------

- Rework of unit tests to (a) import pyutilib.th as 'unittest' and
  (b) employ test skipping.

-------------------------------------------------------------------------------
 Version 3.3
-------------------------------------------------------------------------------

- Misc fix to handle '_' attributes separately in Container objects, so 
  they don't show up in the dictionary keys.

- Adding the ability to name Container objects.

- Created the Options class, which is an alias for Container.

-------------------------------------------------------------------------------
 Version 3.2
-------------------------------------------------------------------------------

- Adding a Container class, which generalizes Bunch.  If an attribute
  does not exist, then the getattr() function returns None unless the
  attribute name startes with '_'.  In that case, getattr() raises
  AttributeError.  This allows Container objects to simplify
  access to attribute values;  attribute initialization can be
  assessed by comparing the attribute value to None.

- Adding a coroutine decorator.

-------------------------------------------------------------------------------
 Version 3.1
-------------------------------------------------------------------------------

- Bug fix for tracing when '__file__' is not in frame.f_globals

-------------------------------------------------------------------------------
 Version 3.0
-------------------------------------------------------------------------------

- Initial release PyUtilib to create the pyutilib.misc package.

- See pyutilib.dist for previous ChangeLog information related to PyUtilib.

