Statistics
| Branch: | Tag: | Revision:

root / ncclient / manager.py @ d6688264

History | View | Annotate | Download (2.1 kB)

1 94803aaf Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 94803aaf Shikhar Bhushan
#
3 94803aaf Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 94803aaf Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 94803aaf Shikhar Bhushan
# You may obtain a copy of the License at
6 94803aaf Shikhar Bhushan
#
7 94803aaf Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 94803aaf Shikhar Bhushan
#
9 94803aaf Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 94803aaf Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 94803aaf Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 94803aaf Shikhar Bhushan
# See the License for the specific language governing permissions and
13 94803aaf Shikhar Bhushan
# limitations under the License.
14 94803aaf Shikhar Bhushan
15 94803aaf Shikhar Bhushan
import capabilities
16 94803aaf Shikhar Bhushan
import operations
17 94803aaf Shikhar Bhushan
import transport
18 94803aaf Shikhar Bhushan
19 94803aaf Shikhar Bhushan
SESSION_TYPES = {
20 94803aaf Shikhar Bhushan
    'ssh': transport.SSHSession
21 94803aaf Shikhar Bhushan
}
22 94803aaf Shikhar Bhushan
23 94803aaf Shikhar Bhushan
OPERATIONS = {
24 94803aaf Shikhar Bhushan
    'get': operations.Get,
25 94803aaf Shikhar Bhushan
    'get-config': operations.GetConfig,
26 94803aaf Shikhar Bhushan
    'edit-config': operations.EditConfig,
27 94803aaf Shikhar Bhushan
    'copy-config': operations.CopyConfig,
28 94803aaf Shikhar Bhushan
    'validate': operations.Validate,
29 94803aaf Shikhar Bhushan
    'commit': operations.Commit,
30 94803aaf Shikhar Bhushan
    'discard-changes': operations.DiscardChanges,
31 94803aaf Shikhar Bhushan
    'delete-config': operations.DeleteConfig,
32 94803aaf Shikhar Bhushan
    'lock': operations.Lock,
33 94803aaf Shikhar Bhushan
    'unlock': operations.Unlock,
34 94803aaf Shikhar Bhushan
    'close_session': operations.CloseSession,
35 94803aaf Shikhar Bhushan
    'kill-session': operations.KillSession,
36 94803aaf Shikhar Bhushan
}
37 94803aaf Shikhar Bhushan
38 94803aaf Shikhar Bhushan
class Manager(type):
39 94803aaf Shikhar Bhushan
    
40 94803aaf Shikhar Bhushan
    'Facade for the API'
41 94803aaf Shikhar Bhushan
    
42 94803aaf Shikhar Bhushan
    def connect(self, session_type, *args, **kwds):
43 94803aaf Shikhar Bhushan
        self._session = SESSION_TYPES[session_type](capabilities.CAPABILITIES)
44 94803aaf Shikhar Bhushan
        self._session.connect(*args, **kwds)
45 94803aaf Shikhar Bhushan
    
46 94803aaf Shikhar Bhushan
    def __getattr__(self, name):
47 d6688264 Shikhar Bhushan
        name = name.replace('_', '-')
48 94803aaf Shikhar Bhushan
        if name in OPERATIONS:
49 94803aaf Shikhar Bhushan
            return OPERATIONS[name](self._session).request
50 94803aaf Shikhar Bhushan
        else:
51 94803aaf Shikhar Bhushan
            raise AttributeError
52 d6688264 Shikhar Bhushan
    
53 d6688264 Shikhar Bhushan
    def get(self, *args, **kwds):
54 d6688264 Shikhar Bhushan
        g = operations.Get(self._session)
55 d6688264 Shikhar Bhushan
        reply = g.request(*args, **kwds)
56 d6688264 Shikhar Bhushan
        if reply.errors:
57 d6688264 Shikhar Bhushan
            raise RPCError(reply.errors)
58 d6688264 Shikhar Bhushan
        else:
59 d6688264 Shikhar Bhushan
            return reply.data
60 d6688264 Shikhar Bhushan
    
61 d6688264 Shikhar Bhushan
    def get_config(self, *args, **kwds):
62 d6688264 Shikhar Bhushan
        gc = operations.GetConfig(self._session)
63 d6688264 Shikhar Bhushan
        reply = gc.request(*args, **kwds)
64 d6688264 Shikhar Bhushan
        if reply.errors:
65 d6688264 Shikhar Bhushan
            raise RPCError(reply.errors)
66 d6688264 Shikhar Bhushan
        else:
67 d6688264 Shikhar Bhushan
            return reply.data
68 d6688264 Shikhar Bhushan
69 d6688264 Shikhar Bhushan
    def locked(self, target='running'):
70 d6688264 Shikhar Bhushan
        return LockContext(self._session, target)