def setup_user(cls, request_key): from dropbox.client import DropboxClient request_token = OAuthRequestToken.get(request_key) session = cls.get_session() session.obtain_access_token(request_token) client = DropboxClient(session) account_info = client.account_info() uid = str(account_info['uid']) q = DropboxUser.all().filter('uid = ', uid) if q.count() == 0: user = DropboxUser(uid=uid, email=account_info['email'], display_name=account_info['display_name'], access_key=session.token.key, access_secret=session.token.secret, country=account_info['country']) else: user = q.get() user.email = account_info['email'] user.display_name = account_info['display_name'] user.access_key = session.token.key user.access_secret = session.token.secret user.put_pending_away(_save=False) user.country = account_info['country'] user.put() OAuthRequestToken.delete(request_key) return user
def sync_all(request): from netprintbox.data import DropboxUser for user in DropboxUser.all(): if not user.is_pending: # XXX check the need to sync? taskqueue.add(url=request.route_path('sync_for_user'), params={'key': user.key()}, countdown=random.randint(0, SLEEP_WAIT)) return request.response
def test_new_user(self): from netprintbox.data import DropboxUser service = self._getOUT() service.setup_user(self.key) q = DropboxUser.all() self.assertEqual(q.count(), 1) user = q.get() self.assertEqual(user.uid, self.uid) self.assertEqual(user.access_key, 'access_key') self.assertEqual(user.access_secret, 'access_secret')
def test_existing_user(self): from netprintbox.data import DropboxUser from netprintbox.exceptions import BecomePendingUser user = create_user() with self.assertRaises(BecomePendingUser): user.put_pending(notify=False) service = self._getOUT() service.setup_user(self.key) q = DropboxUser.all() self.assertEqual(q.count(), 1) queried_user = q.get() self.assertEqual(user.uid, queried_user.uid) self.assertFalse(queried_user.is_pending)