7540b11d2a1f4fbd257d1b585deb2355faa60370
[ncclient] / ncclient / operations / retrieve.py
1 # Copyright 2009 Shikhar Bhushan
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #    http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 from copy import deepcopy
16
17 from ncclient.rpc import RPC
18
19 def build_filter(spec, type, criteria):
20     filter = {
21         'tag': 'filter',
22         'attributes': {'type': type}
23     }
24     if type=='subtree':
25         if isinstance(criteria, dict):
26             filter['children'] = [criteria]
27         else:
28             filter['text'] = criteria
29     elif type=='xpath':
30         filter['attributes']['select'] = criteria
31
32 class Get(RPC):
33     
34     SPEC = {
35         'tag': 'get',
36         'children': []
37     }
38     
39     def request(self, filter=None):
40         spec = deepcopy(SPEC)
41         if filter is not None:
42             spec['children'].append(build_filter(*filter))
43         return self._request(spec)
44
45
46 class GetConfig(RPC):
47     
48     SPEC = {
49         'tag': 'get-config',
50         'children': [ { 'tag': 'source', 'children': {'tag': None } } ]
51     }
52     
53     def request(self, source='running', filter=None):
54         spec = deepcopy(SPEC)
55         spec['children'][0]['children']['tag'] = source
56         if filter is not None:
57             spec['children'].append(build_filter(*filter))
58         return self._request(spec)