xref: /aosp_15_r20/external/autotest/client/cros/bluetooth/floss/observer_base.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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