Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / rpc.py @ 8b4b9936

History | View | Annotate | Download (2 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 a956ef07 Shikhar Bhushan
'Remote Procedure Call'
16 a956ef07 Shikhar Bhushan
17 38a9b062 Shikhar Bhushan
from threading import Event, Lock
18 38a9b062 Shikhar Bhushan
from uuid import uuid1
19 38a9b062 Shikhar Bhushan
20 8b4b9936 Shikhar Bhushan
from listener import get_listener
21 8b4b9936 Shikhar Bhushan
from ncclient.content.builders import RPCBuilder
22 ee4bb099 Shikhar Bhushan
23 589b23e4 Shikhar Bhushan
class RPC:
24 589b23e4 Shikhar Bhushan
    
25 ee4bb099 Shikhar Bhushan
    def __init__(self, session, async=False, parse=True):
26 38a9b062 Shikhar Bhushan
        self._session = session
27 38a9b062 Shikhar Bhushan
        self._async = async
28 ee4bb099 Shikhar Bhushan
        self._id = uuid1().urn
29 589b23e4 Shikhar Bhushan
        self._reply = None
30 38a9b062 Shikhar Bhushan
        self._reply_event = Event()
31 a956ef07 Shikhar Bhushan
        self.listener.register(self._id, self)
32 a956ef07 Shikhar Bhushan
        session.add_listener(self.listener)
33 8b4b9936 Shikhar Bhushan
    
34 ee4bb099 Shikhar Bhushan
    def _response_cb(self, reply):
35 ee4bb099 Shikhar Bhushan
        self._reply = reply
36 589b23e4 Shikhar Bhushan
        self._event.set()
37 38a9b062 Shikhar Bhushan
    
38 8b4b9936 Shikhar Bhushan
    def _do_request(self, op):
39 8b4b9936 Shikhar Bhushan
        self._session.send(RPCBuilder.build(self._id, op))
40 ee4bb099 Shikhar Bhushan
        if not self._async:
41 ee4bb099 Shikhar Bhushan
            self._reply_event.wait()
42 ee4bb099 Shikhar Bhushan
        return self._reply
43 ee4bb099 Shikhar Bhushan
    
44 ee4bb099 Shikhar Bhushan
    def request(self):
45 ee4bb099 Shikhar Bhushan
        raise NotImplementedError
46 ee4bb099 Shikhar Bhushan
    
47 ee4bb099 Shikhar Bhushan
    def wait_for_reply(self, timeout=None):
48 ee4bb099 Shikhar Bhushan
        self._reply_event.wait(timeout)
49 ee4bb099 Shikhar Bhushan
    
50 589b23e4 Shikhar Bhushan
    @property
51 35ad9d81 Shikhar Bhushan
    def has_reply(self):
52 38a9b062 Shikhar Bhushan
        return self._reply_event.isSet()
53 38a9b062 Shikhar Bhushan
    
54 589b23e4 Shikhar Bhushan
    @property
55 35ad9d81 Shikhar Bhushan
    def is_async(self):
56 35ad9d81 Shikhar Bhushan
        return self._async
57 589b23e4 Shikhar Bhushan
    
58 589b23e4 Shikhar Bhushan
    @property
59 ee4bb099 Shikhar Bhushan
    def reply(self):
60 ee4bb099 Shikhar Bhushan
        return self._reply
61 ee4bb099 Shikhar Bhushan
    
62 ee4bb099 Shikhar Bhushan
    @property
63 38a9b062 Shikhar Bhushan
    def id(self):
64 ee4bb099 Shikhar Bhushan
        return self._id
65 ee4bb099 Shikhar Bhushan
    
66 ee4bb099 Shikhar Bhushan
    @property
67 a956ef07 Shikhar Bhushan
    def listener(self):
68 a956ef07 Shikhar Bhushan
        listener = get_listener(self._session)
69 a956ef07 Shikhar Bhushan
70 a956ef07 Shikhar Bhushan
    @property
71 ee4bb099 Shikhar Bhushan
    def session(self):
72 ee4bb099 Shikhar Bhushan
        return self._session
73 ee4bb099 Shikhar Bhushan
74 ee4bb099 Shikhar Bhushan
class RPCReply:
75 2acc860a Shikhar Bhushan
    
76 2acc860a Shikhar Bhushan
    class RPCError:
77 2acc860a Shikhar Bhushan
        
78 a956ef07 Shikhar Bhushan
        pass
79 a956ef07 Shikhar Bhushan