root / ncclient / listeners.py @ ee4bb099
History | View | Annotate | Download (2.3 kB)
1 | ee4bb099 | Shikhar Bhushan | # Copyright 2009 Shikhar Bhushan
|
---|---|---|---|
2 | 7101ce49 | Shikhar Bhushan | #
|
3 | 7101ce49 | Shikhar Bhushan | # Licensed under the Apache License, Version 2.0 (the "License");
|
4 | 7101ce49 | Shikhar Bhushan | # you may not use this file except in compliance with the License.
|
5 | 7101ce49 | Shikhar Bhushan | # You may obtain a copy of the License at
|
6 | 7101ce49 | Shikhar Bhushan | #
|
7 | 7101ce49 | Shikhar Bhushan | # http://www.apache.org/licenses/LICENSE-2.0
|
8 | 7101ce49 | Shikhar Bhushan | #
|
9 | 7101ce49 | Shikhar Bhushan | # Unless required by applicable law or agreed to in writing, software
|
10 | 7101ce49 | Shikhar Bhushan | # distributed under the License is distributed on an "AS IS" BASIS,
|
11 | 7101ce49 | Shikhar Bhushan | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12 | 7101ce49 | Shikhar Bhushan | # See the License for the specific language governing permissions and
|
13 | 7101ce49 | Shikhar Bhushan | # limitations under the License.
|
14 | 7101ce49 | Shikhar Bhushan | |
15 | 38a9b062 | Shikhar Bhushan | import logging |
16 | ee4bb099 | Shikhar Bhushan | from weakref import WeakValueDictionary |
17 | ee4bb099 | Shikhar Bhushan | |
18 | ee4bb099 | Shikhar Bhushan | import content |
19 | 38a9b062 | Shikhar Bhushan | |
20 | 38a9b062 | Shikhar Bhushan | logger = logging.getLogger('ncclient.listeners')
|
21 | 7101ce49 | Shikhar Bhushan | |
22 | ee4bb099 | Shikhar Bhushan | session_listeners = {} |
23 | ee4bb099 | Shikhar Bhushan | def session_listener_factory(session): |
24 | ee4bb099 | Shikhar Bhushan | try:
|
25 | ee4bb099 | Shikhar Bhushan | return session_listeners[session]
|
26 | ee4bb099 | Shikhar Bhushan | except KeyError: |
27 | ee4bb099 | Shikhar Bhushan | session_listeners[session] = SessionListener() |
28 | ee4bb099 | Shikhar Bhushan | return session_listeners[session]
|
29 | 7101ce49 | Shikhar Bhushan | |
30 | 38a9b062 | Shikhar Bhushan | class SessionListener(object): |
31 | 38a9b062 | Shikhar Bhushan | |
32 | ee4bb099 | Shikhar Bhushan | def __init__(self): |
33 | ee4bb099 | Shikhar Bhushan | self._id2rpc = WeakValueDictionary()
|
34 | ee4bb099 | Shikhar Bhushan | self._expecting_close = False |
35 | ee4bb099 | Shikhar Bhushan | self._subscription = None |
36 | 7101ce49 | Shikhar Bhushan | |
37 | 38a9b062 | Shikhar Bhushan | def __str__(self): |
38 | 38a9b062 | Shikhar Bhushan | return 'SessionListener' |
39 | 38a9b062 | Shikhar Bhushan | |
40 | ee4bb099 | Shikhar Bhushan | def set_subscription(self, id): |
41 | 35ad9d81 | Shikhar Bhushan | self._subscription = id |
42 | 7101ce49 | Shikhar Bhushan | |
43 | ee4bb099 | Shikhar Bhushan | def expect_close(self): |
44 | ee4bb099 | Shikhar Bhushan | self._expecting_close = True |
45 | ee4bb099 | Shikhar Bhushan | |
46 | efc6b445 | Shikhar Bhushan | def register(self, id, op): |
47 | efc6b445 | Shikhar Bhushan | self._id2rpc[id] = op |
48 | efc6b445 | Shikhar Bhushan | |
49 | efc6b445 | Shikhar Bhushan | ### Events
|
50 | efc6b445 | Shikhar Bhushan | |
51 | 35ad9d81 | Shikhar Bhushan | def reply(self, raw): |
52 | ee4bb099 | Shikhar Bhushan | try:
|
53 | ee4bb099 | Shikhar Bhushan | id = content.parse_message_root(raw) |
54 | ee4bb099 | Shikhar Bhushan | if id is None: |
55 | ee4bb099 | Shikhar Bhushan | pass
|
56 | ee4bb099 | Shikhar Bhushan | elif id == 'notification': |
57 | ee4bb099 | Shikhar Bhushan | self._id2rpc[self._sub_id]._notify(raw) |
58 | ee4bb099 | Shikhar Bhushan | else:
|
59 | ee4bb099 | Shikhar Bhushan | self._id2rpc[id]._response_cb(raw) |
60 | ee4bb099 | Shikhar Bhushan | except Exception as e: |
61 | ee4bb099 | Shikhar Bhushan | logger.warning(e) |
62 | 7101ce49 | Shikhar Bhushan | |
63 | ee4bb099 | Shikhar Bhushan | def error(self, err): |
64 | ee4bb099 | Shikhar Bhushan | from ssh import SessionCloseError |
65 | ee4bb099 | Shikhar Bhushan | if err is SessionCloseError: |
66 | ee4bb099 | Shikhar Bhushan | logger.debug('received session close, expecting_close=%s' %
|
67 | ee4bb099 | Shikhar Bhushan | self._expecting_close)
|
68 | ee4bb099 | Shikhar Bhushan | if not self._expecting_close: |
69 | ee4bb099 | Shikhar Bhushan | raise err
|
70 | 38a9b062 | Shikhar Bhushan | |
71 | 38a9b062 | Shikhar Bhushan | class DebugListener: |
72 | 38a9b062 | Shikhar Bhushan | |
73 | 38a9b062 | Shikhar Bhushan | def __str__(self): |
74 | 38a9b062 | Shikhar Bhushan | return 'DebugListener' |
75 | 38a9b062 | Shikhar Bhushan | |
76 | 38a9b062 | Shikhar Bhushan | def reply(self, raw): |
77 | ee4bb099 | Shikhar Bhushan | logger.debug('DebugListener:reply:\n%s' % raw)
|
78 | 38a9b062 | Shikhar Bhushan | |
79 | 38a9b062 | Shikhar Bhushan | def error(self, err): |
80 | ee4bb099 | Shikhar Bhushan | logger.debug('DebugListener:error:\n%s' % err) |