def run(self, user_id): self.user = User.get_by_id(user_id) if not self.user.verify_user(): # not really much we can do about this... log.info("Missing tokens for user %r", self.user) self.set_status(0, 0, "You need to log out and log back in again.") return self.fk = flickr.FlickrAPI(self.user.flickr_token) self.fb_user = fb.GraphUser(access_token=self.user.fb_access_token) photosets = self.fk.photosets_getList()[0] self.synced_photos = 0 self.total_photos = sum(int(pset.get('photos')) for pset in photosets) self.set_status( self.synced_photos, self.total_photos, "syncing Flickr photos to Facebook") settings = UserSetting.multiget( user_id=user_id, settings=[UserSettingConst.FB_PRIVACY, UserSettingConst.FLICKR_SET_SYNCING]) self.fb_privacy = settings.get(UserSettingConst.FB_PRIVACY, 'FB_DEFAULT') self.flickr_settings = settings.get(UserSettingConst.FLICKR_SET_SYNCING, {}) select_sets = self.flickr_settings.get('select_sets', False) selected_sets = self.flickr_settings.get('selected_sets', []) for photoset in photosets: if not select_sets or photoset.get('id') in selected_sets: self.sync_photoset(photoset) log.info("Finished job %r for user %r", self.job.jid, self.user.id) # once we are all done, let's submit the task to rerun in an hour. self.resubmit(delay=60*60)
def run(self, user_id): self.user = User.get_by_id(user_id) if not self.user.verify_user(): # not really much we can do about this... log.info("Missing tokens for user %r", self.user) self.set_status(0, 0, "You need to log out and log back in again.") return self.fk = flickr.FlickrAPI(self.user.flickr_token) self.fb_user = fb.GraphUser(access_token=self.user.fb_access_token) photosets = self.fk.photosets_getList()[0] self.synced_photos = 0 self.total_photos = sum(int(pset.get("photos")) for pset in photosets) self.set_status(self.synced_photos, self.total_photos, "syncing Flickr photos to Facebook") settings = UserSetting.multiget( user_id=user_id, settings=[UserSettingConst.FB_PRIVACY, UserSettingConst.FLICKR_SET_SYNCING] ) self.fb_privacy = settings.get(UserSettingConst.FB_PRIVACY, "FB_DEFAULT") self.flickr_settings = settings.get(UserSettingConst.FLICKR_SET_SYNCING, {}) select_sets = self.flickr_settings.get("select_sets", False) selected_sets = self.flickr_settings.get("selected_sets", []) for photoset in photosets: if not select_sets or photoset.get("id") in selected_sets: self.sync_photoset(photoset) log.info("Finished job %r for user %r", self.job.jid, self.user.id) # once we are all done, let's submit the task to rerun in an hour. self.resubmit(delay=60 * 60)
def index(self): code = request.GET.getone('code') nexturl = request.GET.get('nexturl') if nexturl: # we are acting only as an auth server. # redirect to the server that wants the auth code redirect(nexturl + '?code=%s' % code) return token = fb.get_access_token(code) if not token: #lame... this failed for some reason h.flash("The login process failed :(") redirect(url('index')) return fbuser = fb.GraphUser(access_token=token) if session.get('user_id'): # a user is already logged in user = Session.query(User).filter_by( id=session.get('user_id')).first() else: # the user is not already logged in, let's see if they have # already created an account before user = Session.query(User).filter_by(fb_uid=fbuser.id).first() if user: # the user does have an account, let's update their auth token user.fb_uid = fbuser.id user.fb_access_token = token Session.commit() else: # the user does not have an account. We need to create a new one # for them. for attempt in xrange(3): user = User(fb_uid=fbuser.id, fb_access_token=token) Session.add(user) Session.commit() user = Session.query(User).filter_by(fb_uid=fbuser.id).first() if user: break log.error("Failed to create user with fb_uid=%r attempt %r", fbuser.id, attempt) if not user: log.error( "Trying to log in, but couldn't get a user object. " "user=%r code=%r token=%r fbuser=%r", user, code, token, fbuser) session['user_id'] = user.id session['fb_access_token'] = token session.save() log.info("Logged in user %s %s: %s", fbuser.first_name, fbuser.last_name, user) redirect(url('index'))
def __init__(self, token=None): if not token: if 'user_id' in session: from photosync.model import User user = User.get_current_user() if user and user.flickr_token: token = user.flickr_token if not token and 'flickr_token' in session: token = session.get('flickr_token') super(FlickrAPI, self).__init__(g.FLICKR_API_KEY, g.FLICKR_API_SECRET, token=token, store_token=False)
def index(self): gd_client = gdata.photos.service.PhotosService() #token = request.GET.getone('token') parameters = cgi.FieldStorage() token = parameters['token'] gd_client.auth_token = token gd_client.UpgradeToSessionToken() session['picasa_token'] = token session.save() if session.get('user_id'): # a user is already logged in user = Session.query(User).filter_by( id=session.get('user_id')).first() else: # the user is not already logged in, let's see if they have # already created an account before user = Session.query(User).filter_by(picasa_token=token).first() if user: user.picasa_token = token Session.commit() else: # the user does not have an account. We need to create a new one # for them. user = User(picasa_token=token) Session.add(user) Session.commit() user = Session.query(User).filter_by( picasa_token=picasa_token).first() session['user_id'] = user.id session['picasa_token'] = token session.save() log.info("Logged in user %s", user) redirect(url('index'))
def index(self): flickr = FlickrAPI() token = flickr.get_token(request.GET.getone('frob')) session['flickr_token'] = token session.save() flickr = FlickrAPI(token) result = flickr.auth_checkToken() nsid = result[0][2].get('nsid') if session.get('user_id'): # a user is already logged in user = Session.query(User).filter_by( id=session.get('user_id')).first() else: # the user is not already logged in, let's see if they have # already created an account before user = Session.query(User).filter_by(flickr_nsid=nsid).first() if user: user.flickr_nsid = nsid user.flickr_token = token Session.commit() else: # the user does not have an account. We need to create a new one # for them. user = User(flickr_nsid=nsid, flickr_token=token) Session.add(user) Session.commit() user = Session.query(User).filter_by(flickr_nsid=nsid).first() session['user_id'] = user.id session['flickr_token'] = token session.save() log.info("Logged in user %s", user) redirect(url('index'))
def stats(self): c.user_count = Session.query(User).count() c.sync_count = Session.query(SyncRecord).count() c.async_tasks_count = Session.query(AsyncTask).count() data = Session.query(SyncRecord.user_id, func.count(1), func.sum(SyncRecord.transfer_in), func.sum(SyncRecord.transfer_out))\ .filter(SyncRecord.type == SyncRecord.TYPE_PHOTO)\ .group_by(SyncRecord.user_id).all() c.user_stats = [] c.total_count = 0 c.total_cost = 0 c.total_tin = 0 c.total_tout = 0 for user_id, count, tin, tout in data: tin = tin or 0 tout = tout or 0 bandwidth_cost = cost.get_bandwidth_cost(tin, tout) c.total_cost += bandwidth_cost c.total_tout += int(tout) c.total_tin += int(tin) c.total_count += count c.user_stats.append([ User.get_by_id(user_id), count, round(tin / 1024 / 1024, 2), round(tout / 1024 / 1024, 2), bandwidth_cost ]) c.total_tout = round(c.total_tout / 1024. / 1024, 2) c.total_tin = round(c.total_tin / 1024. / 1024, 2) order_by = int(request.GET.get('order_by', 4)) c.user_stats.sort(key=lambda d: d[order_by], reverse=True) return render('/admin/stats.mako')
def stats(self): c.user_count = Session.query(User).count() c.sync_count = Session.query(SyncRecord).count() c.async_tasks_count = Session.query(AsyncTask).count() data = Session.query(SyncRecord.user_id, func.count(1), func.sum(SyncRecord.transfer_in), func.sum(SyncRecord.transfer_out))\ .filter(SyncRecord.type == SyncRecord.TYPE_PHOTO)\ .group_by(SyncRecord.user_id).all() c.user_stats = [] c.total_count = 0 c.total_cost = 0 c.total_tin = 0 c.total_tout = 0 for user_id, count, tin, tout in data: tin = tin or 0 tout = tout or 0 bandwidth_cost = cost.get_bandwidth_cost(tin,tout) c.total_cost += bandwidth_cost c.total_tout += int(tout) c.total_tin += int(tin) c.total_count += count c.user_stats.append([User.get_by_id(user_id), count, round(tin/1024/1024, 2), round(tout/1024/1024, 2), bandwidth_cost]) c.total_tout = round(c.total_tout/1024./1024, 2) c.total_tin = round(c.total_tin/1024./1024, 2) order_by = int(request.GET.get('order_by', 4)) c.user_stats.sort(key=lambda d: d[order_by], reverse=True) return render('/admin/stats.mako')
def logged_in_user(self): return User.get_current_user()