Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (2.7 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 ce5fb329 Shikhar Bhushan
from copy import deepcopy
18 ce5fb329 Shikhar Bhushan
19 6a2dfeb4 Shikhar Bhushan
from rpc import RPC, RPCReply, RPCError
20 6a2dfeb4 Shikhar Bhushan
21 6a2dfeb4 Shikhar Bhushan
#class LockReply(RPCReply):
22 6a2dfeb4 Shikhar Bhushan
#
23 6a2dfeb4 Shikhar Bhushan
#    ERROR_CLS = LockDeniedError
24 6a2dfeb4 Shikhar Bhushan
#
25 6a2dfeb4 Shikhar Bhushan
#class LockDeniedError(RPCError):
26 6a2dfeb4 Shikhar Bhushan
#
27 6a2dfeb4 Shikhar Bhushan
#    def __new__(cls, err_dict):
28 6a2dfeb4 Shikhar Bhushan
#        if rpcerr['tag'] != 'lock-denied':
29 6a2dfeb4 Shikhar Bhushan
#            return RPCError(err_dict)
30 6a2dfeb4 Shikhar Bhushan
#        else:
31 6a2dfeb4 Shikhar Bhushan
#            return object.__new__(LockDeniedError)
32 6a2dfeb4 Shikhar Bhushan
#
33 6a2dfeb4 Shikhar Bhushan
#    def __init__(self, err_dict):
34 6a2dfeb4 Shikhar Bhushan
#        RPCError.__init__(self, err_dict)
35 94803aaf Shikhar Bhushan
36 a6c00291 Shikhar Bhushan
class Lock(RPC):
37 a7cb58ce Shikhar Bhushan
38 0b7d3b31 Shikhar Bhushan
    # TESTED
39 0b7d3b31 Shikhar Bhushan
40 216bb34c Shikhar Bhushan
    "*<lock>* RPC"
41 216bb34c Shikhar Bhushan
42 1fca349b Shikhar Bhushan
    SPEC = {
43 1fca349b Shikhar Bhushan
        'tag': 'lock',
44 179b00d4 Shikhar Bhushan
        'subtree': {
45 1fca349b Shikhar Bhushan
            'tag': 'target',
46 179b00d4 Shikhar Bhushan
            'subtree': {'tag': None }
47 1fca349b Shikhar Bhushan
        }
48 1fca349b Shikhar Bhushan
    }
49 a7cb58ce Shikhar Bhushan
50 6a2dfeb4 Shikhar Bhushan
    #REPLY_CLS = LockReply
51 6a2dfeb4 Shikhar Bhushan
52 216bb34c Shikhar Bhushan
    def request(self, target):
53 216bb34c Shikhar Bhushan
        """
54 216bb34c Shikhar Bhushan
        :arg target: see :ref:`source_target`
55 216bb34c Shikhar Bhushan
        :type target: string
56 216bb34c Shikhar Bhushan

57 216bb34c Shikhar Bhushan
        :rtype: :ref:`return`
58 216bb34c Shikhar Bhushan
        """
59 ce5fb329 Shikhar Bhushan
        spec = deepcopy(Lock.SPEC)
60 179b00d4 Shikhar Bhushan
        spec['subtree']['subtree']['tag'] = target
61 216bb34c Shikhar Bhushan
        return self._request(spec)
62 6c1f8a66 Shikhar Bhushan
63 6625258b Shikhar Bhushan
64 a6c00291 Shikhar Bhushan
class Unlock(RPC):
65 a7cb58ce Shikhar Bhushan
66 0b7d3b31 Shikhar Bhushan
    # TESTED
67 0b7d3b31 Shikhar Bhushan
68 216bb34c Shikhar Bhushan
    "*<unlock>* RPC"
69 216bb34c Shikhar Bhushan
70 1fca349b Shikhar Bhushan
    SPEC = {
71 1fca349b Shikhar Bhushan
        'tag': 'unlock',
72 179b00d4 Shikhar Bhushan
        'subtree': {
73 1fca349b Shikhar Bhushan
            'tag': 'target',
74 179b00d4 Shikhar Bhushan
            'subtree': {'tag': None }
75 1fca349b Shikhar Bhushan
        }
76 1fca349b Shikhar Bhushan
    }
77 a7cb58ce Shikhar Bhushan
78 216bb34c Shikhar Bhushan
    def request(self, target):
79 216bb34c Shikhar Bhushan
        """
80 216bb34c Shikhar Bhushan
        :arg target: see :ref:`source_target`
81 216bb34c Shikhar Bhushan
        :type target: string
82 216bb34c Shikhar Bhushan

83 216bb34c Shikhar Bhushan
        :rtype: :ref:`return`
84 216bb34c Shikhar Bhushan
        """
85 ce5fb329 Shikhar Bhushan
        spec = deepcopy(Unlock.SPEC)
86 179b00d4 Shikhar Bhushan
        spec['subtree']['subtree']['tag'] = target
87 216bb34c Shikhar Bhushan
        return self._request(spec)
88 d6688264 Shikhar Bhushan
89 d6688264 Shikhar Bhushan
90 d6688264 Shikhar Bhushan
class LockContext:
91 a7cb58ce Shikhar Bhushan
92 0b7d3b31 Shikhar Bhushan
    # TESTED
93 0b7d3b31 Shikhar Bhushan
94 216bb34c Shikhar Bhushan
    """
95 216bb34c Shikhar Bhushan
    A context manager for the :class:`Lock` / :class:`Unlock` pair of RPC's.
96 216bb34c Shikhar Bhushan

97 216bb34c Shikhar Bhushan
    Initialise with session instance (:class:`Session
98 216bb34c Shikhar Bhushan
    <ncclient.transport.Session>`) and lock target (:ref:`source_target`)
99 216bb34c Shikhar Bhushan
    """
100 216bb34c Shikhar Bhushan
101 179b00d4 Shikhar Bhushan
    def __init__(self, session, target):
102 d6688264 Shikhar Bhushan
        self.session = session
103 d6688264 Shikhar Bhushan
        self.target = target
104 a7cb58ce Shikhar Bhushan
105 d6688264 Shikhar Bhushan
    def __enter__(self):
106 179b00d4 Shikhar Bhushan
        reply = Lock(self.session).request(self.target)
107 179b00d4 Shikhar Bhushan
        if not reply.ok:
108 179b00d4 Shikhar Bhushan
            raise reply.error
109 179b00d4 Shikhar Bhushan
        else:
110 179b00d4 Shikhar Bhushan
            return self
111 a7cb58ce Shikhar Bhushan
112 179b00d4 Shikhar Bhushan
    def __exit__(self, *args):
113 0b7d3b31 Shikhar Bhushan
        reply = Unlock(self.session).request(self.target)
114 179b00d4 Shikhar Bhushan
        if not reply.ok:
115 179b00d4 Shikhar Bhushan
            raise reply.error
116 d6688264 Shikhar Bhushan
        return False