Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / lock.py @ 6e571704

History | View | Annotate | Download (2 kB)

1 179b00d4 Shikhar Bhushan
# Copyright 2h009 Shikhar Bhushan
2 3043ae4a Shikhar Bhushan
#
3 3043ae4a Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 3043ae4a Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 3043ae4a Shikhar Bhushan
# You may obtain a copy of the License at
6 3043ae4a Shikhar Bhushan
#
7 3043ae4a Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 3043ae4a Shikhar Bhushan
#
9 3043ae4a Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 3043ae4a Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 3043ae4a Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 3043ae4a Shikhar Bhushan
# See the License for the specific language governing permissions and
13 3043ae4a Shikhar Bhushan
# limitations under the License.
14 3043ae4a Shikhar Bhushan
15 19e7c7f6 Shikhar Bhushan
"Locking-related NETCONF operations"
16 3043ae4a Shikhar Bhushan
17 9667bcb2 Shikhar Bhushan
from ncclient.xml_ import *
18 ce5fb329 Shikhar Bhushan
19 19e7c7f6 Shikhar Bhushan
from rpc import RaiseMode, RPC
20 6a2dfeb4 Shikhar Bhushan
21 19e7c7f6 Shikhar Bhushan
# TODO: parse session-id from a lock-denied error, and raise a tailored exception?
22 94803aaf Shikhar Bhushan
23 a6c00291 Shikhar Bhushan
class Lock(RPC):
24 a7cb58ce Shikhar Bhushan
25 19e7c7f6 Shikhar Bhushan
    "`lock` RPC"
26 9667bcb2 Shikhar Bhushan
    
27 216bb34c Shikhar Bhushan
    def request(self, target):
28 19e7c7f6 Shikhar Bhushan
        """Allows the client to lock the configuration system of a device.
29 19e7c7f6 Shikhar Bhushan

30 19e7c7f6 Shikhar Bhushan
        *target* is the name of the configuration datastore to lock
31 19e7c7f6 Shikhar Bhushan
        """
32 9667bcb2 Shikhar Bhushan
        node = new_ele("lock")
33 b2d60e49 Shikhar Bhushan
        sub_ele(sub_ele(node, "target"), target)
34 9667bcb2 Shikhar Bhushan
        return self._request(node)
35 6c1f8a66 Shikhar Bhushan
36 6625258b Shikhar Bhushan
37 a6c00291 Shikhar Bhushan
class Unlock(RPC):
38 a7cb58ce Shikhar Bhushan
39 19e7c7f6 Shikhar Bhushan
    "`unlock` RPC"
40 9667bcb2 Shikhar Bhushan
    
41 216bb34c Shikhar Bhushan
    def request(self, target):
42 19e7c7f6 Shikhar Bhushan
        """Release a configuration lock, previously obtained with the lock operation.
43 19e7c7f6 Shikhar Bhushan

44 19e7c7f6 Shikhar Bhushan
        *target* is the name of the configuration datastore to unlock
45 19e7c7f6 Shikhar Bhushan
        """
46 de2c572c Shikhar Bhushan
        node = new_ele("unlock")
47 b2d60e49 Shikhar Bhushan
        sub_ele(sub_ele(node, "target"), target)
48 9667bcb2 Shikhar Bhushan
        return self._request(node)
49 d6688264 Shikhar Bhushan
50 d6688264 Shikhar Bhushan
51 d6688264 Shikhar Bhushan
class LockContext:
52 a7cb58ce Shikhar Bhushan
53 19e7c7f6 Shikhar Bhushan
    """A context manager for the :class:`Lock` / :class:`Unlock` pair of RPC's.
54 19e7c7f6 Shikhar Bhushan

55 19e7c7f6 Shikhar Bhushan
    Any `rpc-error` will be raised as an exception.
56 19e7c7f6 Shikhar Bhushan

57 19e7c7f6 Shikhar Bhushan
    Initialise with (:class:`Session <ncclient.transport.Session>`) instance and lock target.
58 216bb34c Shikhar Bhushan
    """
59 216bb34c Shikhar Bhushan
60 179b00d4 Shikhar Bhushan
    def __init__(self, session, target):
61 d6688264 Shikhar Bhushan
        self.session = session
62 d6688264 Shikhar Bhushan
        self.target = target
63 a7cb58ce Shikhar Bhushan
64 d6688264 Shikhar Bhushan
    def __enter__(self):
65 19e7c7f6 Shikhar Bhushan
        Lock(self.session, raise_mode=RaiseMode.ERRORS).request(self.target)
66 9667bcb2 Shikhar Bhushan
        return self
67 a7cb58ce Shikhar Bhushan
68 179b00d4 Shikhar Bhushan
    def __exit__(self, *args):
69 19e7c7f6 Shikhar Bhushan
        Unlock(self.session, raise_mode=RaiseMode.ERRORS).request(self.target)
70 d6688264 Shikhar Bhushan
        return False