Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (2 kB)

1
# Copyright 2009 Shikhar Bhushan
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License");
4
# you may not use this file except in compliance with the License.
5
# You may obtain a copy of the License at
6
#
7
#    http://www.apache.org/licenses/LICENSE-2.0
8
#
9
# Unless required by applicable law or agreed to in writing, software
10
# distributed under the License is distributed on an "AS IS" BASIS,
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
# See the License for the specific language governing permissions and
13
# limitations under the License.
14

    
15
'Remote Procedure Call'
16

    
17
from threading import Event, Lock
18
from uuid import uuid1
19

    
20
from listener import get_listener
21
from ncclient.content.builders import RPCBuilder
22

    
23
class RPC:
24
    
25
    def __init__(self, session, async=False, parse=True):
26
        self._session = session
27
        self._async = async
28
        self._id = uuid1().urn
29
        self._reply = None
30
        self._reply_event = Event()
31
        self.listener.register(self._id, self)
32
        session.add_listener(self.listener)
33
    
34
    def _response_cb(self, reply):
35
        self._reply = reply
36
        self._event.set()
37
    
38
    def _do_request(self, op):
39
        self._session.send(RPCBuilder.build(self._id, op))
40
        if not self._async:
41
            self._reply_event.wait()
42
        return self._reply
43
    
44
    def request(self):
45
        raise NotImplementedError
46
    
47
    def wait_for_reply(self, timeout=None):
48
        self._reply_event.wait(timeout)
49
    
50
    @property
51
    def has_reply(self):
52
        return self._reply_event.isSet()
53
    
54
    @property
55
    def is_async(self):
56
        return self._async
57
    
58
    @property
59
    def reply(self):
60
        return self._reply
61
    
62
    @property
63
    def id(self):
64
        return self._id
65
    
66
    @property
67
    def listener(self):
68
        listener = get_listener(self._session)
69

    
70
    @property
71
    def session(self):
72
        return self._session
73

    
74
class RPCReply:
75
    
76
    class RPCError:
77
        
78
        pass
79
    
80