Statistics
| Branch: | Tag: | Revision:

root / ncclient / transport / hello.py @ e52e8478

History | View | Annotate | Download (2.3 kB)

1 68006767 Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 68006767 Shikhar Bhushan
#
3 68006767 Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 68006767 Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 68006767 Shikhar Bhushan
# You may obtain a copy of the License at
6 68006767 Shikhar Bhushan
#
7 68006767 Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 68006767 Shikhar Bhushan
#
9 68006767 Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 68006767 Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 68006767 Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 68006767 Shikhar Bhushan
# See the License for the specific language governing permissions and
13 68006767 Shikhar Bhushan
# limitations under the License.
14 68006767 Shikhar Bhushan
15 68006767 Shikhar Bhushan
"All to do with NETCONF <hello> messages"
16 68006767 Shikhar Bhushan
17 a14c36f9 Shikhar Bhushan
from ncclient import content
18 68006767 Shikhar Bhushan
19 d771dffc Shikhar Bhushan
class HelloHandler:
20 68006767 Shikhar Bhushan
    
21 68006767 Shikhar Bhushan
    def __init__(self, init_cb, error_cb):
22 41e2ed46 Shikhar Bhushan
        self._init_cb = init_cb
23 41e2ed46 Shikhar Bhushan
        self._error_cb = error_cb
24 68006767 Shikhar Bhushan
    
25 68006767 Shikhar Bhushan
    def callback(self, root, raw):
26 a14c36f9 Shikhar Bhushan
        if content.unqualify(root[0]) == 'hello':
27 68006767 Shikhar Bhushan
            try:
28 1d540e60 Shikhar Bhushan
                id, capabilities = HelloHandler.parse(raw)
29 68006767 Shikhar Bhushan
            except Exception as e:
30 68006767 Shikhar Bhushan
                self._error_cb(e)
31 68006767 Shikhar Bhushan
            else:
32 68006767 Shikhar Bhushan
                self._init_cb(id, capabilities)
33 68006767 Shikhar Bhushan
    
34 68006767 Shikhar Bhushan
    def errback(self, err):
35 68006767 Shikhar Bhushan
        self._error_cb(err)
36 c35cebbf Shikhar Bhushan
    
37 c35cebbf Shikhar Bhushan
    @staticmethod
38 2f8bc438 Shikhar Bhushan
    def build(capabilities):
39 c35cebbf Shikhar Bhushan
        "Given a list of capability URI's returns encoded <hello> message"
40 c35cebbf Shikhar Bhushan
        spec = {
41 a14c36f9 Shikhar Bhushan
            'tag': content.qualify('hello'),
42 65c6a607 Shikhar Bhushan
            'subtree': [{
43 c35cebbf Shikhar Bhushan
                'tag': 'capabilities',
44 e52e8478 Shikhar Bhushan
                'subtree': # this is fun :-)
45 65c6a607 Shikhar Bhushan
                    [{'tag': 'capability', 'text': uri} for uri in capabilities]
46 c35cebbf Shikhar Bhushan
                }]
47 c35cebbf Shikhar Bhushan
            }
48 4de03d63 Shikhar Bhushan
        return content.dtree2xml(spec)
49 c35cebbf Shikhar Bhushan
    
50 c35cebbf Shikhar Bhushan
    @staticmethod
51 c35cebbf Shikhar Bhushan
    def parse(raw):
52 c35cebbf Shikhar Bhushan
        "Returns tuple of ('session-id', ['capability_uri', ...])"
53 c35cebbf Shikhar Bhushan
        sid, capabilities = 0, []
54 65c6a607 Shikhar Bhushan
        root = content.xml2ele(raw)
55 65c6a607 Shikhar Bhushan
        for child in root.getchildren():
56 4de03d63 Shikhar Bhushan
            tag = content.unqualify(child.tag)
57 a14c36f9 Shikhar Bhushan
            if tag == 'session-id':
58 65c6a607 Shikhar Bhushan
                sid = child.text
59 a14c36f9 Shikhar Bhushan
            elif tag == 'capabilities':
60 65c6a607 Shikhar Bhushan
                for cap in child.getchildren():
61 65c6a607 Shikhar Bhushan
                    if content.unqualify(cap.tag) == 'capability':
62 65c6a607 Shikhar Bhushan
                        capabilities.append(cap.text)
63 c35cebbf Shikhar Bhushan
        return sid, capabilities
64 e52e8478 Shikhar Bhushan
65 e52e8478 Shikhar Bhushan
'''
66 e52e8478 Shikhar Bhushan
from ncclient.capabilities import CAPABILITIES
67 e52e8478 Shikhar Bhushan
from ncclient.transport.hello import HelloHandler
68 e52e8478 Shikhar Bhushan

69 e52e8478 Shikhar Bhushan
print HelloHandler.build(CAPABILITIES)
70 e52e8478 Shikhar Bhushan
'''