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 |