Statistics
| Branch: | Tag: | Revision:

root / ncclient / subject.py @ a4850088

History | View | Annotate | Download (1.5 kB)

1 35ad9d81 Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 35ad9d81 Shikhar Bhushan
#
3 35ad9d81 Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 35ad9d81 Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 35ad9d81 Shikhar Bhushan
# You may obtain a copy of the License at
6 35ad9d81 Shikhar Bhushan
#
7 35ad9d81 Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 35ad9d81 Shikhar Bhushan
#
9 35ad9d81 Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 35ad9d81 Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 35ad9d81 Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 35ad9d81 Shikhar Bhushan
# See the License for the specific language governing permissions and
13 35ad9d81 Shikhar Bhushan
# limitations under the License.
14 35ad9d81 Shikhar Bhushan
15 35ad9d81 Shikhar Bhushan
from threading import Lock
16 35ad9d81 Shikhar Bhushan
17 35ad9d81 Shikhar Bhushan
import logging
18 35ad9d81 Shikhar Bhushan
19 efc6b445 Shikhar Bhushan
logger = logging.getLogger('ncclient.subject')
20 35ad9d81 Shikhar Bhushan
21 35ad9d81 Shikhar Bhushan
class Subject:
22 35ad9d81 Shikhar Bhushan
        
23 35ad9d81 Shikhar Bhushan
    def __init__(self, listeners=[]):
24 35ad9d81 Shikhar Bhushan
        self._listeners = listeners
25 35ad9d81 Shikhar Bhushan
        self._lock = Lock()
26 35ad9d81 Shikhar Bhushan
    
27 35ad9d81 Shikhar Bhushan
    def has_listener(self, listener):
28 35ad9d81 Shikhar Bhushan
        with self._lock:
29 35ad9d81 Shikhar Bhushan
            return (listener in self._listeners)
30 35ad9d81 Shikhar Bhushan
    
31 35ad9d81 Shikhar Bhushan
    def add_listener(self, listener):
32 35ad9d81 Shikhar Bhushan
        with self._lock:
33 35ad9d81 Shikhar Bhushan
            self._listeners.append(listener)
34 35ad9d81 Shikhar Bhushan
    
35 35ad9d81 Shikhar Bhushan
    def remove_listener(self, listener):
36 35ad9d81 Shikhar Bhushan
        with self._lock:
37 35ad9d81 Shikhar Bhushan
            try:
38 35ad9d81 Shikhar Bhushan
                self._listeners.remove(listener)
39 35ad9d81 Shikhar Bhushan
            except ValueError:
40 35ad9d81 Shikhar Bhushan
                pass
41 35ad9d81 Shikhar Bhushan
    
42 35ad9d81 Shikhar Bhushan
    def dispatch(self, event, *args, **kwds):
43 35ad9d81 Shikhar Bhushan
        with self._lock:
44 35ad9d81 Shikhar Bhushan
            listeners = list(self._listeners)
45 35ad9d81 Shikhar Bhushan
        for l in listeners:
46 35ad9d81 Shikhar Bhushan
            logger.debug('dispatching [%s] to [%s]' % (event, l.__class__))
47 35ad9d81 Shikhar Bhushan
            try:
48 35ad9d81 Shikhar Bhushan
                getattr(l, event)(*args, **kwds)
49 35ad9d81 Shikhar Bhushan
            except Exception as e:
50 a4850088 Shikhar Bhushan
                logger.warning(e)