Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / util.py @ 4f650d54

History | View | Annotate | Download (1.9 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 = tuple
47
        rep = {
48
            'tag': 'filter',
49
            'attrib': {'type': type},
50
            'subtree': criteria
51
        }
52
    else:
53
        rep = content.validated_element(spec, 'filter', 'type')
54
        try:
55
            type = rep['type']
56
        except KeyError:
57
            type = ele[content.qualify('type')]
58
    if type == 'xpath' and capcheck is not None:
59
        capcheck(':xpath')
60
    return rep