Statistics
| Branch: | Tag: | Revision:

root / ncclient / rpc.py @ ee4bb099

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