Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / util.py @ 188649fa

History | View | Annotate | Download (2 kB)

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
'Boilerplate ugliness'
16

    
17
from ncclient import content
18

    
19
from errors import OperationError, MissingCapabilityError
20

    
21
def one_of(*args):
22
    'Verifies that only one of the arguments is not None'
23
    for i, arg in enumerate(args):
24
        if arg is not None:
25
            for argh in args[i+1:]:
26
                if argh is not None:
27
                    raise OperationError('Too many parameters')
28
            else:
29
                return
30
    raise OperationError('Insufficient parameters')
31

    
32
def store_or_url(wha, loc, capcheck=None):
33
    node = { 'tag': wha, 'subtree': {} }
34
    if '://' in loc: # e.g. http://, file://, ftp://
35
        if capcheck is not None:
36
            capcheck(':url') # url schema check at some point!
37
        node['subtree']['tag'] = 'url'
38
        node['subtree']['text'] = loc
39
    else:
40
        node['subtree']['tag'] = loc
41
    return node
42

    
43
def build_filter(spec, capcheck=None):
44
    type = None
45
    if isinstance(spec, tuple):
46
        type, criteria = spec
47
        rep = {'tag': 'filter', 'attrib': {'type': type}}
48
        if type == 'xpath':
49
            rep['attrib']['select'] = criteria
50
        elif type == 'subtree':
51
            rep['subtree'] = criteria
52
        else:
53
            raise OperationError("Invalid filter type")
54
    else:
55
        rep = content.validated_element(spec, ['filter', content.qualify('filter')],
56
                                        attrs=[('type', content.qualify('type'))])
57
    if type == 'xpath' and capcheck is not None:
58
        capcheck(':xpath')
59
    return rep