1# Lint as: python2, python3 2# Copyright 2021 The Chromium OS Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5"""Simple observer base class.""" 6 7from __future__ import absolute_import 8from __future__ import division 9from __future__ import print_function 10 11import logging 12 13class ObserverBase: 14 """Simple observer base class that provides the observer pattern.""" 15 def __init__(self): 16 self.observers = {} 17 18 def add_observer(self, name, observer): 19 """Add named observer if it doesn't already exist. 20 21 @param name: Unique name for the observer. 22 @param observer: Object that implements the observer callbacks. 23 24 @return True if observer was added. 25 """ 26 if name not in self.observers: 27 self.observers[name] = observer 28 return True 29 30 logging.warn('Observer {} already exists, not adding'.format(name)) 31 return False 32 33 def remove_observer(self, name, observer): 34 """Remove named observer.""" 35 if name in self.observers: 36 del self.observers[name] 37