Slowly transforming things into the shape needed to be ready to get things working
[theonering] / src / gvoice / session.py
1 #!/usr/bin/env python
2
3 import logging
4
5 import backend
6 import addressbook
7
8
9 _moduleLogger = logging.getLogger("gvoice.session")
10
11
12 class Session(object):
13
14         def __init__(self, cookiePath):
15                 self._cookiePath = cookiePath
16                 self._username = None
17                 self._password = None
18                 self._backend = None
19                 self._addressbook = None
20
21         def login(self, username, password):
22                 self._username = username
23                 self._password = password
24                 self._backend = backend.GVoiceBackend(self._cookiePath)
25                 if not self._backend.is_authed():
26                         self._backend.login(self._username, self._password)
27
28         def logout(self):
29                 self._username = None
30                 self._password = None
31                 self._backend = None
32                 self._addressbook = None
33
34         def is_logged_in(self):
35                 if self._backend is None:
36                         return False
37                 elif self._backend.is_authed():
38                         return True
39                 else:
40                         try:
41                                 loggedIn = self._backend.login(self._username, self._password)
42                         except RuntimeError:
43                                 loggedIn = False
44                         if loggedIn:
45                                 return True
46                         else:
47                                 self.logout()
48                                 return False
49
50         @property
51         def backend(self):
52                 """
53                 Login enforcing backend
54                 """
55                 assert self.is_logged_in(), "User not logged in"
56                 return self._backend
57
58         @property
59         def addressbook(self):
60                 """
61                 Delay initialized addressbook
62                 """
63                 if self._addressbook is None:
64                         _moduleLogger.info("Initializing addressbook")
65                         self._addressbook = addressbook.Addressbook(self.backend)
66                         self._addressbook.update()
67                 return self._addressbook