Revision 35ad9d81 ncclient/rpc.py

b/ncclient/rpc.py
12 12
# See the License for the specific language governing permissions and
13 13
# limitations under the License.
14 14

  
15
from threading import Event
15
import content
16 16

  
17
from listener import Listener
17
from threading import Event
18 18

  
19
from content import MessageIDParser
19
from listener import RPCReplyListener
20 20

  
21 21
class RPC:
22 22
    
23
    cur_id = {}
23
    current_id = {}
24
    listeners = {}
24 25

  
25 26
    def __init__(self, session=None, async=False):
26 27
        self._session = None
......
33 34
        if self._event.isSet():
34 35
            return self._reply
35 36
    
36
    def do(self, session, async=False):
37
    def do(self, async=False):
37 38
        self._async = async
38 39
    
39
    def deliver(self, reply):
40
    def _deliver(self, reply):
40 41
        self._reply = reply
41 42
        self._event.set()
42 43

  
43 44
    @property
44
    def has_reply(self): return self._event.isSet()
45
    def has_reply(self):
46
        return self._event.isSet()
45 47
    
46 48
    @property
47
    def async(self): return self._async
49
    def is_async(self):
50
        return self._async
48 51
    
49 52
    @property
50
    def listener(self): return self._listener
53
    def listener(self):
54
        if RPC.listeners[self._sid] is None:
55
            RPC.listeners[self.sid] = listener.RPCReplyListener()
56
        return RPC.listeners[self._sid]
57
    
58
    @property
59
    def ok(self):
60
        pass
51 61
    
52 62
    def _next_id(self):
53
        cur_id[self._sid] = cur_id.get(self._sid, 0) + 1
54
        return cur_id[self._sid]
63
        RPC.current_id[self._session.id] = RPC.current_id.get(self._session.id, 0) + 1
64
        return RPC.current_id[self._sid]
55 65
    
56 66
class RPCReply:
57 67
    
58
    def __init__(self, raw):
68
    def __init__(self, id, raw):
69
        self._id = id
59 70
        self._raw = raw
60 71
    
61
    def get_id(self):
62
        return content.rpc.parse_msg_id(raw)
63

  
64
class RPCError(NETCONFError):
72
    @property
73
    def id(self):
74
        return self._id
65 75
    
76
class RPCError(NETCONFError):
66 77
    pass
67

  
68
class ReplyListener(Listener):
69
    
70
    def __init__(self):
71
        self._id2rpc = {}
72
    
73
    def reply(self, msg):
74
        reply = RPCReply(msg)
75
        id2rpc[reply.get_id()].deliver(reply)
76
    
77
    def error(self, buf):
78
        pass

Also available in: Unified diff