# Lint as: python2, python3 # Copyright 2021 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Simple observer base class.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import logging class ObserverBase: """Simple observer base class that provides the observer pattern.""" def __init__(self): self.observers = {} def add_observer(self, name, observer): """Add named observer if it doesn't already exist. @param name: Unique name for the observer. @param observer: Object that implements the observer callbacks. @return True if observer was added. """ if name not in self.observers: self.observers[name] = observer return True logging.warn('Observer {} already exists, not adding'.format(name)) return False def remove_observer(self, name, observer): """Remove named observer.""" if name in self.observers: del self.observers[name]