Statistics
| Branch: | Tag: | Revision:

root / ncclient / transport / hello.py @ 4de03d63

History | View | Annotate | Download (2.1 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 c35cebbf Shikhar Bhushan
                'children': # 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