Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / lock.py @ 0b7d3b31

History | View | Annotate | Download (2.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 3043ae4a Shikhar Bhushan
'Locking-related NETCONF operations'
16 3043ae4a Shikhar Bhushan
17 ebf2bbc6 Shikhar Bhushan
from rpc import RPC
18 94803aaf Shikhar Bhushan
19 a6c00291 Shikhar Bhushan
class Lock(RPC):
20 a7cb58ce Shikhar Bhushan
21 0b7d3b31 Shikhar Bhushan
    # TESTED
22 0b7d3b31 Shikhar Bhushan
23 216bb34c Shikhar Bhushan
    "*<lock>* RPC"
24 216bb34c Shikhar Bhushan
25 1fca349b Shikhar Bhushan
    SPEC = {
26 1fca349b Shikhar Bhushan
        'tag': 'lock',
27 179b00d4 Shikhar Bhushan
        'subtree': {
28 1fca349b Shikhar Bhushan
            'tag': 'target',
29 179b00d4 Shikhar Bhushan
            'subtree': {'tag': None }
30 1fca349b Shikhar Bhushan
        }
31 1fca349b Shikhar Bhushan
    }
32 a7cb58ce Shikhar Bhushan
33 216bb34c Shikhar Bhushan
    def request(self, target):
34 216bb34c Shikhar Bhushan
        """
35 216bb34c Shikhar Bhushan
        :arg target: see :ref:`source_target`
36 216bb34c Shikhar Bhushan
        :type target: string
37 216bb34c Shikhar Bhushan

38 216bb34c Shikhar Bhushan
        :rtype: :ref:`return`
39 216bb34c Shikhar Bhushan
        """
40 a6c00291 Shikhar Bhushan
        spec = Lock.SPEC.copy()
41 179b00d4 Shikhar Bhushan
        spec['subtree']['subtree']['tag'] = target
42 216bb34c Shikhar Bhushan
        return self._request(spec)
43 6c1f8a66 Shikhar Bhushan
44 6625258b Shikhar Bhushan
45 a6c00291 Shikhar Bhushan
class Unlock(RPC):
46 a7cb58ce Shikhar Bhushan
47 0b7d3b31 Shikhar Bhushan
    # TESTED
48 0b7d3b31 Shikhar Bhushan
49 216bb34c Shikhar Bhushan
    "*<unlock>* RPC"
50 216bb34c Shikhar Bhushan
51 1fca349b Shikhar Bhushan
    SPEC = {
52 1fca349b Shikhar Bhushan
        'tag': 'unlock',
53 179b00d4 Shikhar Bhushan
        'subtree': {
54 1fca349b Shikhar Bhushan
            'tag': 'target',
55 179b00d4 Shikhar Bhushan
            'subtree': {'tag': None }
56 1fca349b Shikhar Bhushan
        }
57 1fca349b Shikhar Bhushan
    }
58 a7cb58ce Shikhar Bhushan
59 216bb34c Shikhar Bhushan
    def request(self, target):
60 216bb34c Shikhar Bhushan
        """
61 216bb34c Shikhar Bhushan
        :arg target: see :ref:`source_target`
62 216bb34c Shikhar Bhushan
        :type target: string
63 216bb34c Shikhar Bhushan

64 216bb34c Shikhar Bhushan
        :rtype: :ref:`return`
65 216bb34c Shikhar Bhushan
        """
66 a6c00291 Shikhar Bhushan
        spec = Unlock.SPEC.copy()
67 179b00d4 Shikhar Bhushan
        spec['subtree']['subtree']['tag'] = target
68 216bb34c Shikhar Bhushan
        return self._request(spec)
69 d6688264 Shikhar Bhushan
70 d6688264 Shikhar Bhushan
71 d6688264 Shikhar Bhushan
class LockContext:
72 a7cb58ce Shikhar Bhushan
73 0b7d3b31 Shikhar Bhushan
    # TESTED
74 0b7d3b31 Shikhar Bhushan
75 216bb34c Shikhar Bhushan
    """
76 216bb34c Shikhar Bhushan
    A context manager for the :class:`Lock` / :class:`Unlock` pair of RPC's.
77 216bb34c Shikhar Bhushan

78 216bb34c Shikhar Bhushan
    Initialise with session instance (:class:`Session
79 216bb34c Shikhar Bhushan
    <ncclient.transport.Session>`) and lock target (:ref:`source_target`)
80 216bb34c Shikhar Bhushan
    """
81 216bb34c Shikhar Bhushan
82 179b00d4 Shikhar Bhushan
    def __init__(self, session, target):
83 d6688264 Shikhar Bhushan
        self.session = session
84 d6688264 Shikhar Bhushan
        self.target = target
85 a7cb58ce Shikhar Bhushan
86 d6688264 Shikhar Bhushan
    def __enter__(self):
87 179b00d4 Shikhar Bhushan
        reply = Lock(self.session).request(self.target)
88 179b00d4 Shikhar Bhushan
        if not reply.ok:
89 179b00d4 Shikhar Bhushan
            raise reply.error
90 179b00d4 Shikhar Bhushan
        else:
91 179b00d4 Shikhar Bhushan
            return self
92 a7cb58ce Shikhar Bhushan
93 179b00d4 Shikhar Bhushan
    def __exit__(self, *args):
94 0b7d3b31 Shikhar Bhushan
        reply = Unlock(self.session).request(self.target)
95 179b00d4 Shikhar Bhushan
        if not reply.ok:
96 179b00d4 Shikhar Bhushan
            raise reply.error
97 d6688264 Shikhar Bhushan
        return False