Statistics
| Branch: | Tag: | Revision:

root / ncclient / rpc.py @ 2acc860a

History | View | Annotate | Download (2.1 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 2acc860a Shikhar Bhushan
    metadata = {
24 2acc860a Shikhar Bhushan
        'tag': 'rpc',
25 2acc860a Shikhar Bhushan
        'xmlns': 'urn:ietf:params:xml:ns:netconf:base:1.0',
26 2acc860a Shikhar Bhushan
        }
27 2acc860a Shikhar Bhushan
    
28 ee4bb099 Shikhar Bhushan
    def __init__(self, session, async=False, parse=True):
29 38a9b062 Shikhar Bhushan
        self._session = session
30 38a9b062 Shikhar Bhushan
        self._async = async
31 ee4bb099 Shikhar Bhushan
        self._id = uuid1().urn
32 e3e257b4 Shikhar Bhushan
        listener = session_listener_factory(self._session)
33 ee4bb099 Shikhar Bhushan
        listener.register(self._id, self)
34 e3e257b4 Shikhar Bhushan
        session.add_listener(listener)
35 589b23e4 Shikhar Bhushan
        self._reply = None
36 38a9b062 Shikhar Bhushan
        self._reply_event = Event()
37 38a9b062 Shikhar Bhushan
38 ee4bb099 Shikhar Bhushan
    def _response_cb(self, reply):
39 ee4bb099 Shikhar Bhushan
        self._reply = reply
40 589b23e4 Shikhar Bhushan
        self._event.set()
41 38a9b062 Shikhar Bhushan
    
42 ee4bb099 Shikhar Bhushan
    def _do_request(self, op):
43 ee4bb099 Shikhar Bhushan
        self._session.send(content.make_rpc(self._id, op))
44 2acc860a Shikhar Bhushan
        # content.make(RPC, attrs={'message-id': self._id}, children=(op,))
45 ee4bb099 Shikhar Bhushan
        if not self._async:
46 ee4bb099 Shikhar Bhushan
            self._reply_event.wait()
47 ee4bb099 Shikhar Bhushan
        return self._reply
48 ee4bb099 Shikhar Bhushan
    
49 ee4bb099 Shikhar Bhushan
    def request(self):
50 ee4bb099 Shikhar Bhushan
        raise NotImplementedError
51 ee4bb099 Shikhar Bhushan
    
52 ee4bb099 Shikhar Bhushan
    def wait_for_reply(self, timeout=None):
53 ee4bb099 Shikhar Bhushan
        self._reply_event.wait(timeout)
54 ee4bb099 Shikhar Bhushan
    
55 589b23e4 Shikhar Bhushan
    @property
56 35ad9d81 Shikhar Bhushan
    def has_reply(self):
57 38a9b062 Shikhar Bhushan
        return self._reply_event.isSet()
58 38a9b062 Shikhar Bhushan
    
59 589b23e4 Shikhar Bhushan
    @property
60 35ad9d81 Shikhar Bhushan
    def is_async(self):
61 35ad9d81 Shikhar Bhushan
        return self._async
62 589b23e4 Shikhar Bhushan
    
63 589b23e4 Shikhar Bhushan
    @property
64 ee4bb099 Shikhar Bhushan
    def reply(self):
65 ee4bb099 Shikhar Bhushan
        return self._reply
66 ee4bb099 Shikhar Bhushan
    
67 ee4bb099 Shikhar Bhushan
    @property
68 38a9b062 Shikhar Bhushan
    def id(self):
69 ee4bb099 Shikhar Bhushan
        return self._id
70 ee4bb099 Shikhar Bhushan
    
71 ee4bb099 Shikhar Bhushan
    @property
72 ee4bb099 Shikhar Bhushan
    def session(self):
73 ee4bb099 Shikhar Bhushan
        return self._session
74 ee4bb099 Shikhar Bhushan
75 ee4bb099 Shikhar Bhushan
class RPCReply:
76 2acc860a Shikhar Bhushan
    
77 2acc860a Shikhar Bhushan
    class RPCError:
78 2acc860a Shikhar Bhushan
        
79 2acc860a Shikhar Bhushan
        pass