Changes in 0.7.0 (Oct 14 2013)
New Features:
    - All plugins now have a --timeout=58 seconds
    - New option to plugins: --extra-opts
    - More thread safety in Model
    - New method: ObjectDefinition.move() to move definition to a new file
    - Plugins new threshold syntax can now fail back on the old syntax

Bug Fixes:
    - python 2.4 compatibility in unittests
    - Removed deprecated overload of Contact.get_description()

Changes in 0.6.1 (Aug 30 2013)
Bug Fixes:
    - Disable unittesting on rhel5 (stops build because of unittest2)

Changes in 0.6.0 (Aug 28 2013)
New Features:
    - Support line continuations with \ at end of line in config files
    - Fix traceback in ParserError initilization
    - Better error messages when invalid livestatus syntax has been used
    - Utils.grep() new keywords __notstartswith and __notendswith
    - Model.ObjectDefinition now supports "in" operator
    - Multiple performance tweaks for parsing 
    - Plugins.PluginHelper.add_option() wrapper created 
    - Performance tweaks in Utils.grep()
    - Thread-safety in  Parsing/Saving methods in Model and Parser
    - "in" operator implemented for Object Definitions
    - delete() methods now more clever for {host,service,contact}s and groups
    - Incremental performance updates on parsing
    - New method: ObjectDefinition.attribute_is_empty()
    - Massive refactor/rewrites in parsing logic

Bug Fixes:
    - Fix traceback on search when searching for shortname in invalid configs
    - pynag.Utils.GitRepo better handles file renames now
    - pynag.Plugins.PluginHelper - no more crashing if parse_arguments was not called
    - Fix parsing when multiple objects have conflicting names
    - Support relative paths for cfg_dir and cfg_file


Changes in 0.5.0 (Jun 26 2013)
New Features:
    - pynag cli - new action "unset" to remove attributes when updating
    - PluginHelper - New option --pnp-compatible-perfdata
    - TCP Support for mk-livestatus
    - ObjectDefinitions now have new method: set_macro()
    - Vast improvements to unit testing
    - Fix unhandled tracebacks if invalid templates are defined
    - Utils.GitRepo has new method: show()
    - Vast performance improvement in parsing
    - ObjectDefinition now iterable
    - New Utility Class pynag.Utils.PluginOutput
    - ObjectDefinition: magic fields like shortname are now part of keys()
    - mk_livestatus new utility methods: get_servicegroups,hostgroups,etc

Noteworthy bug fixes:
    - tracis-ci and coveralls.io support
    - Macroresolving when ARG1 contains other macros
    - get_suggested_filename() no longer returns filenames with invalid characters
    - check_range(): Always return True on invalid range_format
    - check_range(): raise exception on invalid input thresholds


Changes in 0.4.9 (Apr 30 2013)

New Features:
    - pynag cli now has livestatus subcommand
    - pynag cli multiple changes to make it more friendly to bash scripts
    - --quiet option
    - --seperator option
    - pynag cli has acknowledge and downtime subcommands
    - pynag.Model.*.delete() now are more context aware and remove references
      from other objects
    - More features in pynag.Utils.GitRepo
    - Parser for retention.dat created
    - pynag.utils.grep_to_livestatus() to convert from pynag style filters to
      livestatus style filters
    - add_to_contactgroup() created for pynag.Model.Services, Hosts, and
      Contacts
    - New functions pynag.Utils.grep(). Model filter() will use this in the
      future.
    - pynag.Model - object definitions now implement sort()
    - pynag.Parsers.Logfiles added to parse nagios log files
    
Bugfixes:
    - Multiple doctest and unittest fixes and improvements to code quality
    - send_nsca - revert back to tabs instead of spaces
    - Fix unhandled traceback with pynag copy
    - Fix bug where directories with ending .cfg were parsed as files
    - PluginHelper fixed in accordance to 
      http://nagiosplugins.org/rfc/new_threshold_syntax


Changes in 0.4.8 (Dec 10 2012)

New Features:
    - MK Livestatus integration in pynag.Parsers.mk_livestatus
    - Testing framework for plugins in scripts/plugintest
    - Control.Command now uses livestatus if available.
    - pynag.Plugins.PluginHelper() prototype
    - Support for Nagios plugins new threshold format

Bugfixes:
    - New Service() objects with no host_name are not saved in None/service_description anymore.
    - GitEventHandler could not list files with spaces
    - pynag.Plugins.simple.check_range was very broken, fixed and added testing framework
      for pynag.Plugins
    - Fix for correctly returning exit codes in Control.daemon()
    - Static file parser now skips line not in format of key=value
    - pynag.Parsers.status.get_hoststatus() and pynag.Parsers.status.get_servicestatus() should raise a ValueError rather than return it.
    - timeperiod_name and alias were incorrectly saved 
    - Unhandled exception in contact.get_effective_services()

Changes in 0.4.7 (Oct 26 2012)

New Features:
    - pynag cli: new parameter --debug
    - pynag cli: new parameter --version
    - Parsers.config.get_cfg_value() implemented
    - Parsers.config.get_pid() implemented
    - New Module: pynag.Control.Command for interactions with command_pipe
    - Parsers.config.get_pid() implemented

Bugfixes:
    - Discrepancy in CLI where filters between list and delete
    - CLI now prints nice error message instead of stacktrace on errors
    - ObjectFetcher.filter(): parameters ending in __isnot were always treated as an OR condition.
    - "pynag execute" now works with services that define hostgroups instead of host_name
    - Fixed macro resolving issues for services with hostgroups defined instead of host_name
    - Fixed Default initilization of ObjectRelations.hostgroup_subgroups
    - Bugfix: Nagios needs_reload() always returns false
    - Bugfix: pynag.Parsers.config.needs_reload() always returns false
    - Bugfix: Inverted conditions on pynag.Plugins.simple.check_range()
    - Bugfix: Unhandled exception in pynag.Plugins.simple where must_thresholds=False


Changes in 0.4.6 (Sep 16 2012)

New Features:
    - CLI Improvements
    - manpage for pynag CLI updated
    - New module Utils created
    - Experimental new get_status() for ObjectDefinition
    - Reworked GitEventHandler
    - new function, Control.daemon.status()
    - Experimental Perfdata analysis support

Bugfixes:
    - Various bugfixes for get_effective_*groups()
    - Various bugfixes in Parsers.config._edit_static_file()
    - needs_reload() now compares timestamps with object_cache_file instead of lockfile
    - Removed unneeded error handling from Control.daemon class
    - Model filter, bugfix in __isnot= parameter

Changes in 0.4.5 (Aug 21 2012)

Bugfixes:
    - popen2 import moved to send_nsca() to hide deprecationwarning
    - pynag.Model no longer depends on defaultdict to work (for python 2.4)
    - Removed dependency on defaultdict (does not exist on python 2.4)
    - When permission problems occur for reading status.dat, exception is
      now thrown in parse() rather than init()
    - Version number is now correct
    - debian subdir moved to debian.upstream for packaging



Changes in 0.4.4 (Aug 20 2012)

New Features:
    - Host.copy(recursive=True) now recursively copies services
    - README moved to markdown format (palli@opensource.is)
    - Parsers.status class reworked. Now support get_servicestatus()
    - filter() now supports __exists suffix for as a search condition
    - Major rework og object relations and object cache (palli@opensource.is)
Bugfixes:
    - get_all_macros returns empty hash map on non-existant check_command
    - New get_effective_* functions i.e. Host.get_effective_contacts()
    - ObjectDefinition.get_id() changed from md5sum to built-in __hash__()
    - Fixes to get_effective_command_line() where macro within another macro was
      not properly solved. (palli@opensource.is)
    - GitEventHandler changed to use subprocess module instead of GitPython

    - Support for nagios's ambigious Timeperiod format.
    - check_thresholds() added (Issue 22) (palli@opensource.is)
    - check_range() conditions now inverted (Fixes issue 22)
    - /usr/local/nagios/etc/ added to paths where nagios.cfg might be found (Thanks
      Abhinav Upadhyay)
    - pycharm code inspection cleanup (palli@opensource.is)

Changes in 0.4.3 (Jul 13 2012)

Bugfixes:
    - Model: Objectdefinition.delete() cascade parameter renamed to recursive.
    Recursive implemented for host.

    - Various fixes where nagios.cfg is not located in /etc/nagios/
    
    - Improvements to build process 

    - Parsers: Exception handling loosened to not catch kill signals

    - Model: calling filter() with __has_field now works on items seperated by ", "      

Changes in 0.4.2

New features:
    - new command-line tool pynag introduced (deprecated pynag-maincfg, etc).
    pynag utility offers an easy way to create/update/delete configuration
    objects from the command line. (palli@opensource.is)

    - Model: ObjectDefinition.attributes are now defined according to
    documentation, no longer dynamically created in order to ensure consistency
    (palli@opensource.is)

    - Model: run_check_command() available for hosts and services
    (palli@opensource.is)

    - Parsers: Working with comma seperated attribute values now easier
    via new AttributeList class (palli@opensource.is)

    - Model: copy() feature added to ObjectDefinitions.
    (palli@opensource.is)

Bugs fixed:
    - Model, ObjectDefinition.copy() now returns a copy of the newly created object

    - Parsers, Appending cfg_dir to nagios maincfg and pathnames dont match
    exactly what is in config before (for example double slashes would cause a
    duplicate)

    - Parsers: Cache is no longer reloaded as often (improves performance)
    (palli@opensource.is)

    - Parsers: Properly raise ParserError if unexpected '}' is encountered
    while Parsing (palli@opensource.is)

    - Parsers: ParserError class now has cleaner more detailed output
    (palli@opensource.is)

    - Model: get_all_macros() now returns custom macros (palli@opensource.is)

    - Fixed key errors where data is not present (tommi@tommi.org)

    - Parsers: improvements to reload_cache() to fix memory leak in save()

    - Code cleanup ala Eclipse python analyser. Unused variables etc removed.

Changes in 0.4.1

    Plugins
    Fix to check_range which now support multiple status lines
    Modifications for python-2.3 support

    Scripts
    Added pynag-maincfg which allows for editing nagios.cfg
    Added pynag-addservice for easy addition of services

    Model
    Ability to set filename for new objects
    save() now works on when changing 'use'
    Modifications for python-2.3 support

    Parsers
    typo fixed in edit_service 
    Memory leak fix
    Added servicedependency and hostdependency support

    EventHandlers
    Added GitEventHandler which automaticly commits to git



Changes in 0.4.0

Features added:
        - Model, New module that turns configuration into python objects
        - Parsers, major refactoring


Changes in 0.3.1

Bugs Fixed:
        - Plugin, Fixed joinallstr, wasn't being added between severity levels.

Features added:
        - Plugin, Add must_threshold variable for programs that do not need classic -w or -c
        - Plugin, allow add_arg to be specified multiple times if multiple=True specified
        - Plugin, removed space character between severity and colon, "OK:" instead of "OK :"




Changes in 0.3

Bugs Fixed:


Features added:
        - Plugin add_messages() and check_messages()
        - new build system for easier RPM creation


Misc Changes:


New Contributors:

    Tomas Ewdardsson, Pall Sigurdsson
