Statistics
| Branch: | Tag: | Revision:

root / ncclient / content.py @ a4850088

History | View | Annotate | Download (1.9 kB)

1 a4850088 Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 a4850088 Shikhar Bhushan
#
3 a4850088 Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 a4850088 Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 a4850088 Shikhar Bhushan
# You may obtain a copy of the License at
6 a4850088 Shikhar Bhushan
#
7 a4850088 Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 a4850088 Shikhar Bhushan
#
9 a4850088 Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 a4850088 Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 a4850088 Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 a4850088 Shikhar Bhushan
# See the License for the specific language governing permissions and
13 a4850088 Shikhar Bhushan
# limitations under the License.
14 a4850088 Shikhar Bhushan
15 a4850088 Shikhar Bhushan
NAMESPACE = 'urn:ietf:params:xml:ns:netconf:base:1.0'
16 a4850088 Shikhar Bhushan
17 a4850088 Shikhar Bhushan
def qualify(tag, ns=NAMESPACE):
18 a4850088 Shikhar Bhushan
    return '{%s}%s' % (ns, tag)
19 a4850088 Shikhar Bhushan
20 a4850088 Shikhar Bhushan
_ = qualify
21 a4850088 Shikhar Bhushan
22 a4850088 Shikhar Bhushan
def make_hello(capabilities):
23 a4850088 Shikhar Bhushan
    return '<hello xmlns="%s">%s</hello>' % (NAMESPACE, capabilities)
24 a4850088 Shikhar Bhushan
25 a4850088 Shikhar Bhushan
def make_rpc(id, op):
26 a4850088 Shikhar Bhushan
    return '<rpc message-id="%s" xmlns="%s">%s</rpc>' % (id, NAMESPACE, op)
27 a4850088 Shikhar Bhushan
28 a4850088 Shikhar Bhushan
def parse_hello(raw):
29 a4850088 Shikhar Bhushan
    from capability import Capabilities
30 a4850088 Shikhar Bhushan
    id, capabilities = 0, Capabilities()
31 a4850088 Shikhar Bhushan
    root = ElementTree.fromstring(raw)
32 a4850088 Shikhar Bhushan
    if root.tag == _('hello'):
33 a4850088 Shikhar Bhushan
        for child in hello.getchildren():
34 a4850088 Shikhar Bhushan
            if child.tag == _('session-id'):
35 a4850088 Shikhar Bhushan
                id = int(child.text)
36 a4850088 Shikhar Bhushan
            elif child.tag == _('capabilities'):
37 a4850088 Shikhar Bhushan
                for cap in child.getiterator(_('capability')):
38 a4850088 Shikhar Bhushan
                    capabilities.add(cap.text)
39 a4850088 Shikhar Bhushan
    return id, capabilities
40 a4850088 Shikhar Bhushan
41 a4850088 Shikhar Bhushan
def parse_message_type(raw):
42 a4850088 Shikhar Bhushan
    'returns 0 if notification, message-id if rpc-reply'
43 a4850088 Shikhar Bhushan
    
44 a4850088 Shikhar Bhushan
    class RootElementParser:
45 a4850088 Shikhar Bhushan
        
46 a4850088 Shikhar Bhushan
        def __init__(self):
47 a4850088 Shikhar Bhushan
            self.id = None
48 a4850088 Shikhar Bhushan
            
49 a4850088 Shikhar Bhushan
        def start(self, tag, attrib):
50 a4850088 Shikhar Bhushan
            if tag == _('rpc'):
51 a4850088 Shikhar Bhushan
                self.id = int(attrib['message-id'])
52 a4850088 Shikhar Bhushan
            elif tag == _('notification'):
53 a4850088 Shikhar Bhushan
                self.id = 0
54 a4850088 Shikhar Bhushan
    
55 a4850088 Shikhar Bhushan
    target = RootElementParser()
56 a4850088 Shikhar Bhushan
    parser = ElementTree.XMLTreeBuilder(target=target)
57 a4850088 Shikhar Bhushan
    parser.feed(raw)
58 a4850088 Shikhar Bhushan
    return target.id