Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / util.py @ 9667bcb2

History | View | Annotate | Download (2.2 kB)

1 c2a5b930 Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 c2a5b930 Shikhar Bhushan
#
3 c2a5b930 Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 c2a5b930 Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 c2a5b930 Shikhar Bhushan
# You may obtain a copy of the License at
6 c2a5b930 Shikhar Bhushan
#
7 c2a5b930 Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 c2a5b930 Shikhar Bhushan
#
9 c2a5b930 Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 c2a5b930 Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 c2a5b930 Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 c2a5b930 Shikhar Bhushan
# See the License for the specific language governing permissions and
13 c2a5b930 Shikhar Bhushan
# limitations under the License.
14 d6688264 Shikhar Bhushan
15 cc9af1c3 Shikhar Bhushan
'Boilerplate ugliness'
16 d6688264 Shikhar Bhushan
17 9667bcb2 Shikhar Bhushan
from ncclient.xml_ import *
18 d6688264 Shikhar Bhushan
19 d771dffc Shikhar Bhushan
from errors import OperationError, MissingCapabilityError
20 d6688264 Shikhar Bhushan
21 179b00d4 Shikhar Bhushan
def one_of(*args):
22 9667bcb2 Shikhar Bhushan
    "Verifies that only one of the arguments is not None"
23 d6688264 Shikhar Bhushan
    for i, arg in enumerate(args):
24 d6688264 Shikhar Bhushan
        if arg is not None:
25 d6688264 Shikhar Bhushan
            for argh in args[i+1:]:
26 d6688264 Shikhar Bhushan
                if argh is not None:
27 9667bcb2 Shikhar Bhushan
                    raise OperationError("Too many parameters")
28 d6688264 Shikhar Bhushan
            else:
29 d6688264 Shikhar Bhushan
                return
30 9667bcb2 Shikhar Bhushan
    raise OperationError("Insufficient parameters")
31 d6688264 Shikhar Bhushan
32 9667bcb2 Shikhar Bhushan
def datastore_or_url(wha, loc, capcheck=None):
33 9667bcb2 Shikhar Bhushan
    node = new_ele(wha)
34 9667bcb2 Shikhar Bhushan
    if "://" in loc: # e.g. http://, file://, ftp://
35 ebf2bbc6 Shikhar Bhushan
        if capcheck is not None:
36 9667bcb2 Shikhar Bhushan
            capcheck(":url") # url schema check at some point!
37 9667bcb2 Shikhar Bhushan
            sub_ele(node, "url").text = loc
38 d771dffc Shikhar Bhushan
    else:
39 6a2dfeb4 Shikhar Bhushan
        #if loc == 'candidate':
40 6a2dfeb4 Shikhar Bhushan
        #    capcheck(':candidate')
41 6a2dfeb4 Shikhar Bhushan
        #elif loc == 'startup':
42 6a2dfeb4 Shikhar Bhushan
        #    capcheck(':startup')
43 6a2dfeb4 Shikhar Bhushan
        #elif loc == 'running' and wha == 'target':
44 6a2dfeb4 Shikhar Bhushan
        #    capcheck(':writable-running')
45 9667bcb2 Shikhar Bhushan
        sub_ele(node, loc)
46 d6688264 Shikhar Bhushan
    return node
47 a6c00291 Shikhar Bhushan
48 ebf2bbc6 Shikhar Bhushan
def build_filter(spec, capcheck=None):
49 ebf2bbc6 Shikhar Bhushan
    type = None
50 ebf2bbc6 Shikhar Bhushan
    if isinstance(spec, tuple):
51 408abf6d Shikhar Bhushan
        type, criteria = spec
52 9667bcb2 Shikhar Bhushan
        rep = new_ele("filter", type=type)
53 9667bcb2 Shikhar Bhushan
        if type == "xpath":
54 9667bcb2 Shikhar Bhushan
            rep.attrib["select"] = criteria
55 9667bcb2 Shikhar Bhushan
        elif type == "subtree":
56 9667bcb2 Shikhar Bhushan
            rep.append(to_ele(criteria))
57 188649fa Shikhar Bhushan
        else:
58 188649fa Shikhar Bhushan
            raise OperationError("Invalid filter type")
59 ebf2bbc6 Shikhar Bhushan
    else:
60 9667bcb2 Shikhar Bhushan
        rep = validated_element(spec, ("filter", qualify("filter")),
61 9667bcb2 Shikhar Bhushan
                                        attrs=("type",))
62 9667bcb2 Shikhar Bhushan
        # TODO set type var here, check if select attr present in case of xpath..
63 9667bcb2 Shikhar Bhushan
    if type == "xpath" and capcheck is not None:
64 9667bcb2 Shikhar Bhushan
        capcheck(":xpath")
65 ebf2bbc6 Shikhar Bhushan
    return rep