class IChange(Interface): """I introduce a change to the configuration. If the change is an alteration of an existing setting, oldSetting holds a reference to just that setting, and newSetting holds the new version of the setting. Both including- and excludingContainer are None. If the change removes a setting, newSetting is None, and oldSetting points out the setting to be removed. Since a setting can only belong to a single container, there is no need to point out witch container the setting should be removed from, therefor both including- and excludingContainer are None. If the change introduces a new setting, oldSetting is None and newSetting holds the new setting, and includingContainer references the container that will hold the setting. If the change is to exclude a setting from a container, old- and newSetting refers to the same setting, and excludingContainer holds a reference to the container from which the setting should be excluded. If the change is to include a setting into a container, old- and newSetting refers to the same setting, and includingContainer holds a reference to the container that currently excludes the setting. A usecase: An ExcludeRecord exist for setting S and container C. To remove it, the following change should be needed: IChange(oldSetting=S, newSetting=S, includingContainer=C) """ oldSetting = Attribute("Old setting") newSetting = Attribute("New setting") includingContainer = Attribute("Container to include setting") excludingContainer = Attribute("Container to exclude setting")