Statistics
| Branch: | Tag: | Revision:

root / ncclient / rpc.py @ 589b23e4

History | View | Annotate | Download (1.9 kB)

1 589b23e4 Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 589b23e4 Shikhar Bhushan
#
3 589b23e4 Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 589b23e4 Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 589b23e4 Shikhar Bhushan
# You may obtain a copy of the License at
6 589b23e4 Shikhar Bhushan
#
7 589b23e4 Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 589b23e4 Shikhar Bhushan
#
9 589b23e4 Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 589b23e4 Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 589b23e4 Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 589b23e4 Shikhar Bhushan
# See the License for the specific language governing permissions and
13 589b23e4 Shikhar Bhushan
# limitations under the License.
14 589b23e4 Shikhar Bhushan
15 589b23e4 Shikhar Bhushan
from threading import Event
16 589b23e4 Shikhar Bhushan
17 589b23e4 Shikhar Bhushan
from listener import Listener
18 589b23e4 Shikhar Bhushan
19 589b23e4 Shikhar Bhushan
from content import MessageIDParser
20 589b23e4 Shikhar Bhushan
21 589b23e4 Shikhar Bhushan
class RPC:
22 589b23e4 Shikhar Bhushan
    
23 589b23e4 Shikhar Bhushan
    cur_id = {}
24 589b23e4 Shikhar Bhushan
25 589b23e4 Shikhar Bhushan
    def __init__(self, session=None, async=False):
26 589b23e4 Shikhar Bhushan
        self._session = None
27 589b23e4 Shikhar Bhushan
        self._async = None
28 589b23e4 Shikhar Bhushan
        self._reply = None
29 589b23e4 Shikhar Bhushan
        self._event = Event()
30 589b23e4 Shikhar Bhushan
    
31 589b23e4 Shikhar Bhushan
    def get_reply(self, timeout=2.0):
32 589b23e4 Shikhar Bhushan
        self._event.wait(timeout)
33 589b23e4 Shikhar Bhushan
        if self._event.isSet():
34 589b23e4 Shikhar Bhushan
            return self._reply
35 589b23e4 Shikhar Bhushan
    
36 589b23e4 Shikhar Bhushan
    def do(self, session, async=False):
37 589b23e4 Shikhar Bhushan
        self._async = async
38 589b23e4 Shikhar Bhushan
    
39 589b23e4 Shikhar Bhushan
    def deliver(self, reply):
40 589b23e4 Shikhar Bhushan
        self._reply = reply
41 589b23e4 Shikhar Bhushan
        self._event.set()
42 589b23e4 Shikhar Bhushan
43 589b23e4 Shikhar Bhushan
    @property
44 589b23e4 Shikhar Bhushan
    def has_reply(self): return self._event.isSet()
45 589b23e4 Shikhar Bhushan
    
46 589b23e4 Shikhar Bhushan
    @property
47 589b23e4 Shikhar Bhushan
    def async(self): return self._async
48 589b23e4 Shikhar Bhushan
    
49 589b23e4 Shikhar Bhushan
    @property
50 589b23e4 Shikhar Bhushan
    def listener(self): return self._listener
51 589b23e4 Shikhar Bhushan
    
52 589b23e4 Shikhar Bhushan
    def _next_id(self):
53 589b23e4 Shikhar Bhushan
        cur_id[self._sid] = cur_id.get(self._sid, 0) + 1
54 589b23e4 Shikhar Bhushan
        return cur_id[self._sid]
55 589b23e4 Shikhar Bhushan
    
56 589b23e4 Shikhar Bhushan
class RPCReply:
57 589b23e4 Shikhar Bhushan
    
58 589b23e4 Shikhar Bhushan
    def __init__(self, raw):
59 589b23e4 Shikhar Bhushan
        self._raw = raw
60 589b23e4 Shikhar Bhushan
    
61 589b23e4 Shikhar Bhushan
    def get_id(self):
62 589b23e4 Shikhar Bhushan
        return content.rpc.parse_msg_id(raw)
63 589b23e4 Shikhar Bhushan
64 589b23e4 Shikhar Bhushan
class RPCError(NETCONFError):
65 589b23e4 Shikhar Bhushan
    
66 589b23e4 Shikhar Bhushan
    pass
67 589b23e4 Shikhar Bhushan
68 589b23e4 Shikhar Bhushan
class ReplyListener(Listener):
69 589b23e4 Shikhar Bhushan
    
70 589b23e4 Shikhar Bhushan
    def __init__(self):
71 589b23e4 Shikhar Bhushan
        self._id2rpc = {}
72 589b23e4 Shikhar Bhushan
    
73 589b23e4 Shikhar Bhushan
    def reply(self, msg):
74 589b23e4 Shikhar Bhushan
        reply = RPCReply(msg)
75 589b23e4 Shikhar Bhushan
        id2rpc[reply.get_id()].deliver(reply)
76 589b23e4 Shikhar Bhushan
    
77 589b23e4 Shikhar Bhushan
    def error(self, buf):
78 589b23e4 Shikhar Bhushan
        pass