def login(self, username, password): ''' Login to server and receive session token. Based on user preferences, we will invalidate session token when needed. If for some reason the server does not respond (times out), we can login offline. However, we will be severely limited in what actions we can perform. We also need to make sure our own (stale) session token is dead. ''' auth_handler = Authentication(username, password) user = User(self.db.users, username) try: token = auth_handler.signin() self.user = user.set_token(token) except InvalidCredentials as e: print("Something wrong with username/password") raise except ServerTimeout: self.user = user.signin(password)