Statistics
| Branch: | Tag: | Revision:

root / ncclient / transport / session.py @ 1d540e60

History | View | Annotate | Download (2.7 kB)

1 d095a59e Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 d095a59e Shikhar Bhushan
#
3 d095a59e Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 d095a59e Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 d095a59e Shikhar Bhushan
# You may obtain a copy of the License at
6 d095a59e Shikhar Bhushan
#
7 d095a59e Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 d095a59e Shikhar Bhushan
#
9 d095a59e Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 d095a59e Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 d095a59e Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 d095a59e Shikhar Bhushan
# See the License for the specific language governing permissions and
13 d095a59e Shikhar Bhushan
# limitations under the License.
14 d095a59e Shikhar Bhushan
15 1d540e60 Shikhar Bhushan
from threading import Event
16 e91a5349 Shikhar Bhushan
17 4ba5e843 Shikhar Bhushan
from ncclient.capabilities import Capabilities, CAPABILITIES
18 e91a5349 Shikhar Bhushan
from ncclient.glue import Subject
19 d095a59e Shikhar Bhushan
20 c35cebbf Shikhar Bhushan
from . import logger
21 c35cebbf Shikhar Bhushan
from hello import HelloHandler
22 d095a59e Shikhar Bhushan
23 1d540e60 Shikhar Bhushan
class Session(Subject):
24 d095a59e Shikhar Bhushan
    
25 68006767 Shikhar Bhushan
    "TODO: docstring"
26 68006767 Shikhar Bhushan
    
27 d095a59e Shikhar Bhushan
    def __init__(self):
28 68006767 Shikhar Bhushan
        "TODO: docstring"
29 d095a59e Shikhar Bhushan
        Subject.__init__(self)
30 1d540e60 Shikhar Bhushan
        self.setName('session')
31 1d540e60 Shikhar Bhushan
        self.setDaemon(True) #hmm
32 d095a59e Shikhar Bhushan
        self._client_capabilities = CAPABILITIES
33 d095a59e Shikhar Bhushan
        self._server_capabilities = None # yet
34 d095a59e Shikhar Bhushan
        self._id = None # session-id
35 d095a59e Shikhar Bhushan
        self._connected = False # to be set/cleared by subclass implementation
36 1d540e60 Shikhar Bhushan
        logger.debug('[session object created] client_capabilities=%r' %
37 1d540e60 Shikhar Bhushan
                     self._client_capabilities)
38 d095a59e Shikhar Bhushan
    
39 d095a59e Shikhar Bhushan
    def _post_connect(self):
40 68006767 Shikhar Bhushan
        "TODO: docstring"
41 d095a59e Shikhar Bhushan
        init_event = Event()
42 1d540e60 Shikhar Bhushan
        error = [None] # so that err_cb can bind error[0]. just how it is.
43 94265508 Shikhar Bhushan
        # callbacks
44 d095a59e Shikhar Bhushan
        def ok_cb(id, capabilities):
45 1d540e60 Shikhar Bhushan
            self._id = id
46 1d540e60 Shikhar Bhushan
            self._server_capabilities = Capabilities(capabilities)
47 d095a59e Shikhar Bhushan
            init_event.set()
48 d095a59e Shikhar Bhushan
        def err_cb(err):
49 1d540e60 Shikhar Bhushan
            error[0] = err
50 d095a59e Shikhar Bhushan
            init_event.set()
51 c35cebbf Shikhar Bhushan
        listener = HelloHandler(ok_cb, err_cb)
52 d095a59e Shikhar Bhushan
        self.add_listener(listener)
53 1d540e60 Shikhar Bhushan
        self.send(HelloHandler.build(self._client_capabilities))
54 1d540e60 Shikhar Bhushan
        logger.debug('[starting main loop]')
55 94265508 Shikhar Bhushan
        self.start()
56 d095a59e Shikhar Bhushan
        # we expect server's hello message
57 d095a59e Shikhar Bhushan
        init_event.wait()
58 d095a59e Shikhar Bhushan
        # received hello message or an error happened
59 d095a59e Shikhar Bhushan
        self.remove_listener(listener)
60 1d540e60 Shikhar Bhushan
        if error[0]:
61 1d540e60 Shikhar Bhushan
            raise error[0]
62 94265508 Shikhar Bhushan
        logger.info('initialized: session-id=%s | server_capabilities=%s' %
63 1d540e60 Shikhar Bhushan
                     (self._id, self._server_capabilities))
64 d095a59e Shikhar Bhushan
    
65 6625258b Shikhar Bhushan
    def connect(self, *args, **kwds):
66 68006767 Shikhar Bhushan
        "TODO: docstring"
67 d095a59e Shikhar Bhushan
        raise NotImplementedError
68 d095a59e Shikhar Bhushan
69 d095a59e Shikhar Bhushan
    def run(self):
70 d095a59e Shikhar Bhushan
        raise NotImplementedError
71 d095a59e Shikhar Bhushan
    
72 d095a59e Shikhar Bhushan
    ### Properties
73 d095a59e Shikhar Bhushan
    
74 d095a59e Shikhar Bhushan
    @property
75 d095a59e Shikhar Bhushan
    def client_capabilities(self):
76 d095a59e Shikhar Bhushan
        return self._client_capabilities
77 d095a59e Shikhar Bhushan
    
78 d095a59e Shikhar Bhushan
    @property
79 d095a59e Shikhar Bhushan
    def server_capabilities(self):
80 d095a59e Shikhar Bhushan
        return self._server_capabilities
81 d095a59e Shikhar Bhushan
    
82 d095a59e Shikhar Bhushan
    @property
83 d095a59e Shikhar Bhushan
    def connected(self):
84 d095a59e Shikhar Bhushan
        return self._connected
85 d095a59e Shikhar Bhushan
    
86 d095a59e Shikhar Bhushan
    @property
87 d095a59e Shikhar Bhushan
    def id(self):
88 d095a59e Shikhar Bhushan
        return self._id