Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / util.py @ 6a2dfeb4

History | View | Annotate | Download (2.3 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
        #if loc == 'candidate':
41
        #    capcheck(':candidate')
42
        #elif loc == 'startup':
43
        #    capcheck(':startup')
44
        #elif loc == 'running' and wha == 'target':
45
        #    capcheck(':writable-running')
46
        node['subtree']['tag'] = loc
47
    return node
48

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