Statistics
| Branch: | Tag: | Revision:

root / ncclient / transport / session.py @ 68006767

History | View | Annotate | Download (2.5 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 68006767 Shikhar Bhushan
from threading import Thread, Event
16 4ba5e843 Shikhar Bhushan
from ncclient.capabilities import Capabilities, CAPABILITIES
17 d095a59e Shikhar Bhushan
18 68006767 Shikhar Bhushan
import hello
19 68006767 Shikhar Bhushan
from . import logger
20 68006767 Shikhar Bhushan
from ncclient.glue import Subject
21 d095a59e Shikhar Bhushan
22 d095a59e Shikhar Bhushan
class Session(Thread, Subject):
23 d095a59e Shikhar Bhushan
    
24 68006767 Shikhar Bhushan
    "TODO: docstring"
25 68006767 Shikhar Bhushan
    
26 d095a59e Shikhar Bhushan
    def __init__(self):
27 68006767 Shikhar Bhushan
        "TODO: docstring"
28 d095a59e Shikhar Bhushan
        Subject.__init__(self)
29 68006767 Shikhar Bhushan
        Thread.__init__(self, name='session')
30 68006767 Shikhar Bhushan
        self.setDaemon(True)
31 d095a59e Shikhar Bhushan
        self._client_capabilities = CAPABILITIES
32 d095a59e Shikhar Bhushan
        self._server_capabilities = None # yet
33 d095a59e Shikhar Bhushan
        self._id = None # session-id
34 d095a59e Shikhar Bhushan
        self._connected = False # to be set/cleared by subclass implementation
35 d095a59e Shikhar Bhushan
    
36 d095a59e Shikhar Bhushan
    def _post_connect(self):
37 68006767 Shikhar Bhushan
        "TODO: docstring"
38 68006767 Shikhar Bhushan
        self.send(hello.build(self._client_capabilities))
39 d095a59e Shikhar Bhushan
        error = None
40 d095a59e Shikhar Bhushan
        init_event = Event()
41 94265508 Shikhar Bhushan
        # callbacks
42 d095a59e Shikhar Bhushan
        def ok_cb(id, capabilities):
43 94265508 Shikhar Bhushan
            self._id, self._server_capabilities = id, Capabilities(capabilities)
44 d095a59e Shikhar Bhushan
            init_event.set()
45 d095a59e Shikhar Bhushan
        def err_cb(err):
46 d095a59e Shikhar Bhushan
            error = err
47 d095a59e Shikhar Bhushan
            init_event.set()
48 68006767 Shikhar Bhushan
        listener = hello.HelloListener(ok_cb, err_cb)
49 d095a59e Shikhar Bhushan
        self.add_listener(listener)
50 d095a59e Shikhar Bhushan
        # start the subclass' main loop
51 94265508 Shikhar Bhushan
        self.start()
52 d095a59e Shikhar Bhushan
        # we expect server's hello message
53 d095a59e Shikhar Bhushan
        init_event.wait()
54 d095a59e Shikhar Bhushan
        # received hello message or an error happened
55 d095a59e Shikhar Bhushan
        self.remove_listener(listener)
56 d095a59e Shikhar Bhushan
        if error:
57 d095a59e Shikhar Bhushan
            raise error
58 94265508 Shikhar Bhushan
        logger.info('initialized: session-id=%s | server_capabilities=%s' %
59 94265508 Shikhar Bhushan
                     (self.id, self.server_capabilities))
60 d095a59e Shikhar Bhushan
    
61 6625258b Shikhar Bhushan
    def connect(self, *args, **kwds):
62 68006767 Shikhar Bhushan
        "TODO: docstring"
63 d095a59e Shikhar Bhushan
        raise NotImplementedError
64 d095a59e Shikhar Bhushan
65 d095a59e Shikhar Bhushan
    def run(self):
66 d095a59e Shikhar Bhushan
        raise NotImplementedError
67 d095a59e Shikhar Bhushan
    
68 d095a59e Shikhar Bhushan
    ### Properties
69 d095a59e Shikhar Bhushan
    
70 d095a59e Shikhar Bhushan
    @property
71 d095a59e Shikhar Bhushan
    def client_capabilities(self):
72 d095a59e Shikhar Bhushan
        return self._client_capabilities
73 d095a59e Shikhar Bhushan
    
74 d095a59e Shikhar Bhushan
    @property
75 d095a59e Shikhar Bhushan
    def server_capabilities(self):
76 d095a59e Shikhar Bhushan
        return self._server_capabilities
77 d095a59e Shikhar Bhushan
    
78 d095a59e Shikhar Bhushan
    @property
79 d095a59e Shikhar Bhushan
    def connected(self):
80 d095a59e Shikhar Bhushan
        return self._connected
81 d095a59e Shikhar Bhushan
    
82 d095a59e Shikhar Bhushan
    @property
83 d095a59e Shikhar Bhushan
    def id(self):
84 d095a59e Shikhar Bhushan
        return self._id