Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / listener.py @ a956ef07

History | View | Annotate | Download (1.2 kB)

1
#!/usr/bin/env python
2

    
3
_listeners = WeakValueDictionary()
4

    
5
def get_listener(session):
6
    try:
7
        return _listeners[session]
8
    except KeyError:
9
        _listeners[session] = MessageListener()
10
        return _listeners[session]
11

    
12
class MessageListener:
13
    
14
    def __init__(self):
15
        # {message-id: RPC}
16
        self._rpc = WeakValueDictionary()
17
        # if the session gets closed by remote endpoint,
18
        # need to know if it is an error event or was requested through
19
        # a NETCONF operation i.e. CloseSession
20
        self._expecting_close = False
21
        # other recognized names and behavior on receiving them
22
        self._recognized = []
23
    
24
    def __str__(self):
25
        return 'MessageListener'
26
    
27
    def expect_close(self):
28
        self._expecting_close = True
29
    
30
    def register(self, id, op):
31
        self._id2rpc[id] = op
32
    
33
    ### Events
34
    
35
    def reply(self, raw):
36
        pass
37
    
38
    def error(self, err):
39
        from ncclient.session.session import SessionCloseError
40
        if err is SessionCloseError:
41
            logger.debug('session closed by remote endpoint, expecting_close=%s' %
42
                         self._expecting_close)
43
            if not self._expecting_close:
44
                raise err