37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
# 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]
|