def get(self): self.response.headers['Content-Type'] = 'text/plain' user = levr.Customer.all().filter('email','*****@*****.**').get() deal = levr.Deal.all().ancestor(user).get() assert user, 'No user' assert deal, 'No deal' self.response.out.write('Deal key: {}'.format(str(deal.key()))) super(TestPromotionsHandler,self).__initialize__(deal,user) self.response.out.write(levr.log_model_props(self.deal)) self.tags = ['one','tags2','tag3','butt'] promotions = [key for key in promo.PROMOTIONS] # run all the promotions for promotion_id in promotions: self.run_promotion(promotion_id,tags=self.tags,auto_put=False) self.put() self.response.out.write(levr.log_model_props(self.deal)) receipt = 'hi' # confirm all the promotions for promotion_id in promotions: self.confirm_promotion(promotion_id, receipt) notifications = levr.Notification.all().fetch(None) for n in notifications: self.response.out.write('\n'+promotion_id+'\n') self.response.out.write(levr.log_model_props(n))
def get(self): self.response.headers['Content-Type'] = 'text/plain' user = levr.Customer.all().filter('email', '*****@*****.**').get() deal = levr.Deal.all().ancestor(user).get() assert user, 'No user' assert deal, 'No deal' self.response.out.write('Deal key: {}'.format(str(deal.key()))) super(TestPromotionsHandler, self).__initialize__(deal, user) self.response.out.write(levr.log_model_props(self.deal)) self.tags = ['one', 'tags2', 'tag3', 'butt'] promotions = [key for key in promo.PROMOTIONS] # run all the promotions for promotion_id in promotions: self.run_promotion(promotion_id, tags=self.tags, auto_put=False) self.put() self.response.out.write(levr.log_model_props(self.deal)) receipt = 'hi' # confirm all the promotions for promotion_id in promotions: self.confirm_promotion(promotion_id, receipt) notifications = levr.Notification.all().fetch(None) for n in notifications: self.response.out.write('\n' + promotion_id + '\n') self.response.out.write(levr.log_model_props(n))
def post(self,*args,**kwargs): try: #RESTRICTED user = kwargs.get('actor',None) facebook_token = kwargs.get('remoteToken',None) user = social.Facebook(user,'verbose') try: user, new_user_details, new_friends = user.first_time_connect( facebook_token = facebook_token, ) except Exception,e: levr.log_error() assert False, 'Could not connect with facebook.' logging.debug(levr.log_model_props(user)) logging.debug(str(new_user_details)) #return the user response = { 'user':api_utils.package_user(user,True), 'new_friends' : [enc.encrypt_key(f) for f in new_friends], 'new_user_details' : new_user_details } api_utils.send_response(self,response,user)
def first_time_connect(self, auto_put=True, *args, **kwargs): ''' User is just connecting to levr via a social service for the first time Updates a users login credentials, their personal information, and their friend linkage Returns: User entity Options: auto_put (default: False) automatically puts the user entity back before returning. Still returns the user entity ''' logging.debug('\n\n FISRT TIME CONNECT \n\n') #update access credentials self.update_credentials(*args, **kwargs) #update user info new_user_details = self.update_user_details() #pull user friends new_friends = self.update_friends() if auto_put: #put the user before returnsing logging.info(levr.log_model_props(self.user)) user = self.put() else: user = self.return_user() return user, new_user_details, new_friends
def post(self, *args, **kwargs): try: #RESTRICTED user = kwargs.get('actor', None) facebook_token = kwargs.get('remoteToken', None) user = social.Facebook(user, 'verbose') try: user, new_user_details, new_friends = user.first_time_connect( facebook_token=facebook_token, ) except Exception, e: levr.log_error() assert False, 'Could not connect with facebook.' logging.debug(levr.log_model_props(user)) logging.debug(str(new_user_details)) #return the user response = { 'user': api_utils.package_user(user, True), 'new_friends': [enc.encrypt_key(f) for f in new_friends], 'new_user_details': new_user_details } api_utils.send_response(self, response, user)
def get(self, *args, **kwargs): ''' Input: uid ''' try: logging.debug("REPORT\n\n\n") logging.debug(kwargs) user = kwargs.get('actor') deal = kwargs.get('deal') uid = user.key() dealID = deal.key() #create report Entity levr.ReportedDeal(uid=uid, dealID=dealID).put() #is it a foursquare deal that got reported? if deal.origin == 'foursquare': #get the business business = levr.Business.get(deal.businessID) #get the business' foursquare ID foursquare_id = business.foursquare_id #is the user a foursquare user? if user.foursquare_token > '': token = user.foursquare_token else: token = 'random' #fire off a task to review the foursquare deals for this business task_params = { 'foursquare_id': foursquare_id, 'token': token, 'deal_id': str(deal.key()), 'uid': str(user.key()), 'deal_status': deal.deal_status } taskqueue.add(url='/tasks/foursquareDealUpdateTask', payload=json.dumps(task_params)) #send notification via email message = mail.EmailMessage( sender="LEVR AUTOMATED <*****@*****.**>", subject="New Reported Deal", to="*****@*****.**") logging.debug(message) body = 'New Reported Deal\n\n' body += levr.log_model_props(user, ['email', 'display_name', '']) body += str(user.email) + ' is reporting ' + str(deal.deal_text) message.body = body logging.debug(message.body) message.send() api_utils.send_response(self, {}, user) except: levr.log_error() api_utils.send_error(self, 'Server Error')
def get(self): ''' Grabs all of the deals at a business, and sets all of the deals to the same ninja owner ''' assert False, 'You shouldnt be here. this handler is dangerous unless used wisely' self.response.headers['Content-Type'] = 'text/plain' # change ownership of rednecks roast beef deals deals = levr.Deal.all( ).filter('businessID','ahRkZXZ-bGV2ci1kZXZlbG9wbWVudHIPCxIIQnVzaW5lc3MY2AIM' # test - berklee boloco # ).filter('businessID','ahFzfmxldnItcHJvZHVjdGlvbnIQCxIIQnVzaW5lc3MY2-wKDA' # Rednecks ).filter('deal_status','test' ).fetch(None) for deal in deals: self.response.out.write(levr.log_model_props(deal,['deal_text','deal_status'])) self.response.out.write(deal.parent_key()) levr.Deal.properties() ninja = api_utils.get_random_dead_ninja() self.response.out.write('\n\n'+str(ninja.key())) # ahRkZXZ-bGV2ci1kZXZlbG9wbWVudHIPCxIIQ3VzdG9tZXIY8wEM new_deals = [] for deal in deals: new_deal = levr.Deal(parent=ninja) for prop in deal.properties(): if prop[0] != '_': val = getattr(deal, prop) setattr(new_deal, prop, val) new_deals.append(new_deal) # expire the old deal # self.response.out.write(levr.log_model_props(new_deal)) self.response.out.write('\n') self.response.out.write(levr.log_model_props(deal) == levr.log_model_props(new_deal)) self.response.out.write('\n') deal.expire() # compile into one list deals.extend(new_deals) db.put(deals) for deal in deals: self.response.out.write(levr.log_model_props(deal,['deal_text','deal_status'])) self.response.out.write(deal.parent_key()) self.response.out.write('\n\ndone!')
def get(self,*args,**kwargs): #@UnusedVariable try: self.response.headers['Content-Type'] = 'text/plain' deal = kwargs.get('deal') deal.been_reviewed = True deal.put() self.response.out.write('Yeah. What it do?') self.response.out.write(levr.log_model_props(deal, ['deal_text','deal_status','been_reviewed'])) except Exception,e: levr.log_error(e) self.response.out.write('Error approving: '+str(e))
def get(self, *args, **kwargs): #@UnusedVariable try: self.response.headers['Content-Type'] = 'text/plain' deal = kwargs.get('deal') deal.been_reviewed = True deal.put() self.response.out.write('Yeah. What it do?') self.response.out.write( levr.log_model_props( deal, ['deal_text', 'deal_status', 'been_reviewed'])) except Exception, e: levr.log_error(e) self.response.out.write('Error approving: ' + str(e))
def get(self,*args,**kwargs): #@UnusedVariable try: self.response.headers['Content-Type'] = 'text/plain' deal = kwargs.get('deal') assert deal.been_reviewed == False, 'Deal has already been reviewed.' # remove the deal from the memcache try: levr.remove_memcache_key_by_deal(deal) except: levr.log_error('Could not remove key from memcache') deal.deal_status = 'rejected' deal.been_reviewed = True deal.put() self.response.out.write('And the Lord said unto his children, "It has been done."\n\n') self.response.out.write(levr.log_model_props(deal, ['deal_text','deal_status','been_reviewed'])) except AssertionError,e: self.response.out.write(e)
def __init__(self, user=None, *args, **kwargs): ''' Foursquare ''' logging.debug('\n\n\n \t\t\t INIT FOURSQUARE \n\n\n') #set the foursquare api version self.version = '20121007' #the foursquare api version if 'debug' in args: foursquare_token = kwargs.get('foursquare_token') self.foursquare_token = foursquare_token if not user: #user was not passed, check to make sure that the user does not already exist # if the user exists, pass it to SocialClass.__init__ # otherwise, create a new user and pass it that foursquare_token = kwargs.get('foursquare_token') #make sure foursquare token was passed assert foursquare_token, 'Did not pass a user, so must pass foursquare_token as kwarg' #assign the foursquare_token so that self.fetch will work self.foursquare_token = foursquare_token #fetch the user info response = self.fetch('') logging.debug(levr.log_dict(response)) #get the user id foursquare_id = int(response['response']['user']['id']) #search for the user by that id user = levr.Customer.all().filter('foursquare_id', foursquare_id).get() # logging.debug('\n\n\n\n \t\t\t\t USER \n\n\n\n') logging.debug(user) logging.debug(levr.log_model_props(user)) if not user: logging.debug('user doesnt exist') #user does not exist in database - create a new one! user = levr.create_new_user() else: logging.debug('user exists') # else: user was found and we will init with that user #init all dat social stuff! SocialClass.__init__(self, user, *args, **kwargs)
def __init__(self, user=None, *args, **kwargs): ''' Foursquare ''' logging.debug('\n\n\n \t\t\t INIT FOURSQUARE \n\n\n') #set the foursquare api version self.version = '20121007' #the foursquare api version if 'debug' in args: foursquare_token = kwargs.get('foursquare_token') self.foursquare_token = foursquare_token if not user: #user was not passed, check to make sure that the user does not already exist # if the user exists, pass it to SocialClass.__init__ # otherwise, create a new user and pass it that foursquare_token = kwargs.get('foursquare_token') #make sure foursquare token was passed assert foursquare_token, 'Did not pass a user, so must pass foursquare_token as kwarg' #assign the foursquare_token so that self.fetch will work self.foursquare_token = foursquare_token #fetch the user info response = self.fetch('') logging.debug(levr.log_dict(response)) #get the user id foursquare_id = int(response['response']['user']['id']) #search for the user by that id user = levr.Customer.all().filter('foursquare_id',foursquare_id).get() # logging.debug('\n\n\n\n \t\t\t\t USER \n\n\n\n') logging.debug(user) logging.debug(levr.log_model_props(user)) if not user: logging.debug('user doesnt exist') #user does not exist in database - create a new one! user = levr.create_new_user() else: logging.debug('user exists') # else: user was found and we will init with that user #init all dat social stuff! SocialClass.__init__(self, user, *args, **kwargs)
def get(self): self.response.headers['Content-Type'] = 'text/plain' deals = levr.Deal.all( ).filter('deal_status','active' ).fetch(None) deals = filter(lambda x: x.origin=='levr',deals) dates = [deal.date_created for deal in deals] toop = zip(dates,deals) toop = sorted(toop,reverse=True) dates,deals = zip(*toop) self.response.out.write(str(deals.__len__())+'\n\n') for deal in deals: self.response.out.write(levr.log_model_props(deal, ['deal_text','date_created'])) business_ids = list(set([deal.businessID for deal in deals])) self.response.out.write('\n\n'+str(business_ids.__len__())) self.response.out.write('\n\n Done!')
def create_deal(deal,business,owner): '''deal: a deal object merchant: the merchant to be set as the owner of the deal''' # TODO: remove this. Deals are being created in too many places and some are missing info #init tags tags = [] #add tags from the merchant tags.extend(business.create_tags()) logging.info(tags) #add tags from deal stuff tags.extend(levr.tagger(deal.deal_text)) logging.info(tags) tags.extend(levr.tagger(deal.description)) logging.info(tags) deal.tags = tags #add some other miscellaneous information deal.origin = 'merchant' deal.pin_color = 'green' #copy info over from business deal.business_name = business.business_name deal.businessID = str(business.key()) deal.business = business deal.geo_point = business.geo_point deal.geo_hash = business.geo_hash deal.deal_status='active' deal.date_end = None deal.put() logging.info(levr.log_model_props(deal)) #fire off a task to do the image rotation stuff task_params = { 'blob_key' : str(deal.img.key()) } taskqueue.add(url='/tasks/checkImageRotationTask',payload=json.dumps(task_params)) return deal
def get(self, *args, **kwargs): #@UnusedVariable try: self.response.headers['Content-Type'] = 'text/plain' deal = kwargs.get('deal') assert deal.been_reviewed == False, 'Deal has already been reviewed.' # remove the deal from the memcache try: levr.remove_memcache_key_by_deal(deal) except: levr.log_error('Could not remove key from memcache') deal.deal_status = 'rejected' deal.been_reviewed = True deal.put() self.response.out.write( 'And the Lord said unto his children, "It has been done."\n\n') self.response.out.write( levr.log_model_props( deal, ['deal_text', 'deal_status', 'been_reviewed'])) except AssertionError, e: self.response.out.write(e)
def __init__(self, user=None, *args, **kwargs): ''' Twitter ''' logging.debug('\n\n\n \t\t\t INIT Twitter \n\n\n') self.set_noise_level(*args) # if user is not passed, then check if a user exists with the identity specified. if they do not exist, then create a new one if not user: #user was not passed, check to make sure that the user does not already exist # if the user exists, pass it to SocialClass.__init__ # otherwise, create a new user and pass it that twitter_id = int(kwargs.get('twitter_id')) # twitter_token = kwargs.get('twitter_token') # twitter_token_secret = kwargs.get('twitter_token_secret') #make sure necessary credentials were passed assert twitter_id, 'Did not pass a user, so must pass twitter_id as kwarg' # assert twitter_token, 'Did not pass a user, so must pass twitter_token as kwarg' # assert twitter_token_secret, 'Did not pass a user, so must pass twitter_token_secret as kwarg' #search for the user by that id user = levr.Customer.all().filter('twitter_id', twitter_id).get() # #fetch the user info # response = self.fetch('user') # logging.debug(levr.log_dict(response)) # logging.debug(levr.log_model_props(user)) if not user: logging.debug('user doesnt exist') #user does not exist in database - create a new one! user = levr.create_new_user() else: logging.debug('user exists') # else: user was found and we will init with that user #init all dat social stuff! assert user, 'User is not passed, and it is not being created' SocialClass.__init__(self, user, *args, **kwargs)
def __init__(self, user=None, *args, **kwargs): ''' Twitter ''' logging.debug('\n\n\n \t\t\t INIT Twitter \n\n\n') self.set_noise_level(*args) # if user is not passed, then check if a user exists with the identity specified. if they do not exist, then create a new one if not user: #user was not passed, check to make sure that the user does not already exist # if the user exists, pass it to SocialClass.__init__ # otherwise, create a new user and pass it that twitter_id = int(kwargs.get('twitter_id')) # twitter_token = kwargs.get('twitter_token') # twitter_token_secret = kwargs.get('twitter_token_secret') #make sure necessary credentials were passed assert twitter_id, 'Did not pass a user, so must pass twitter_id as kwarg' # assert twitter_token, 'Did not pass a user, so must pass twitter_token as kwarg' # assert twitter_token_secret, 'Did not pass a user, so must pass twitter_token_secret as kwarg' #search for the user by that id user = levr.Customer.all().filter('twitter_id',twitter_id).get() # #fetch the user info # response = self.fetch('user') # logging.debug(levr.log_dict(response)) # logging.debug(levr.log_model_props(user)) if not user: logging.debug('user doesnt exist') #user does not exist in database - create a new one! user = levr.create_new_user() else: logging.debug('user exists') # else: user was found and we will init with that user #init all dat social stuff! assert user, 'User is not passed, and it is not being created' SocialClass.__init__(self, user, *args, **kwargs)
def create_deal(deal, business, owner): '''deal: a deal object merchant: the merchant to be set as the owner of the deal''' # TODO: remove this. Deals are being created in too many places and some are missing info #init tags tags = [] #add tags from the merchant tags.extend(business.create_tags()) logging.info(tags) #add tags from deal stuff tags.extend(levr.tagger(deal.deal_text)) logging.info(tags) tags.extend(levr.tagger(deal.description)) logging.info(tags) deal.tags = tags #add some other miscellaneous information deal.origin = 'merchant' deal.pin_color = 'green' #copy info over from business deal.business_name = business.business_name deal.businessID = str(business.key()) deal.business = business deal.geo_point = business.geo_point deal.geo_hash = business.geo_hash deal.deal_status = 'active' deal.date_end = None deal.put() logging.info(levr.log_model_props(deal)) #fire off a task to do the image rotation stuff task_params = {'blob_key': str(deal.img.key())} taskqueue.add(url='/tasks/checkImageRotationTask', payload=json.dumps(task_params)) return deal
def __init__(self, user=None, *args, **kwargs): ''' Facebook ''' logging.debug('\n\n\n \t\t\t INIT FACEBOOK \n\n\n') self.set_noise_level(*args) # if user is not passed, then check if a user exists with the identity specified. if they do not exist, then create a new one if not user: #user was not passed, check to make sure that the user does not already exist # if the user exists, pass it to SocialClass.__init__ # otherwise, create a new user and pass it that facebook_token = kwargs.get('facebook_token') #make sure foursquare token was passed assert facebook_token, 'Did not pass a user, so must pass facebook_token as kwarg' #assign the foursquare_token so that self.fetch will work self.facebook_token = facebook_token #fetch the user info from facebook response = self.fetch('user') logging.debug(levr.log_dict(response)) #get the user id from the remote api call facebook_id = int(response['id']) #search for the user in our db by that id user = levr.Customer.all().filter('facebook_id', facebook_id).get() # logging.debug('\n\n\n\n \t\t\t\t USER \n\n\n\n') logging.debug(user) logging.debug(levr.log_model_props(user)) if not user: logging.debug('user doesnt exist') #user does not exist in database - create a new one! user = levr.create_new_user() else: logging.debug('user exists') # else: user was found and we will init with that user logging.debug(user) #init all dat social stuff! SocialClass.__init__(self, user, *args, **kwargs)
def __init__(self, user=None, *args, **kwargs): ''' Facebook ''' logging.debug('\n\n\n \t\t\t INIT FACEBOOK \n\n\n') self.set_noise_level(*args) # if user is not passed, then check if a user exists with the identity specified. if they do not exist, then create a new one if not user: #user was not passed, check to make sure that the user does not already exist # if the user exists, pass it to SocialClass.__init__ # otherwise, create a new user and pass it that facebook_token = kwargs.get('facebook_token') #make sure foursquare token was passed assert facebook_token, 'Did not pass a user, so must pass facebook_token as kwarg' #assign the foursquare_token so that self.fetch will work self.facebook_token = facebook_token #fetch the user info from facebook response = self.fetch('user') logging.debug(levr.log_dict(response)) #get the user id from the remote api call facebook_id = int(response['id']) #search for the user in our db by that id user = levr.Customer.all().filter('facebook_id',facebook_id).get() # logging.debug('\n\n\n\n \t\t\t\t USER \n\n\n\n') logging.debug(user) logging.debug(levr.log_model_props(user)) if not user: logging.debug('user doesnt exist') #user does not exist in database - create a new one! user = levr.create_new_user() else: logging.debug('user exists') # else: user was found and we will init with that user logging.debug(user) #init all dat social stuff! SocialClass.__init__(self, user, *args, **kwargs)
def get(self, dealID, *args, **kwargs): try: logging.debug('UPVOTE\n\n\n') logging.debug(kwargs) user = kwargs.get('actor') uid = user.key() deal = kwargs.get('deal') dealID = deal.key() #=================================================================== # Note, if this code changes, you should also change the code in /cronjobs/undeadActivity because it was copied and pasted... #=================================================================== #favorite logging.debug( levr.log_model_props(user, ['upvotes', 'downvotes', 'favorites'])) logging.debug(levr.log_model_props(deal, ['upvotes', 'downvotes'])) if dealID in user.upvotes: logging.debug('flag deal in upvotes') #user is removing the upvote #remove the offending deal from the user upvotes user.upvotes.remove(dealID) #decrement the deal upvotes deal.upvotes -= 1 #do not change the karma of the user who uploaded it #do not remove from favorites #do not remove notification db.put([user, deal]) elif dealID in user.downvotes: logging.debug('flag deal is in downvotes') #remove deal from downvotes user.downvotes.remove(dealID) #decrement the deals downvotes deal.downvotes -= 1 #add deal to upvotes user.upvotes.append(dealID) #increment the number of upvotes deal.upvotes += 1 #add deal to favorites if dealID not in user.favorites: user.favorites.append(dealID) #do not change the karma of the user who uploaded #do not add notification for the ninja db.put([user, deal]) pass else: logging.debug('flag deal not in upvotes or downvotes') # If the deal is in the users favorites, then they upvoted the deal at one point and then # removed that upvote either via another upvote or a downvote, and they are trying to upvote again # At this point, the deal should get its upvote back, but the ninja gets no karma because they do not # lose a karma point when the deal is downloaded if dealID not in user.favorites: #get owner of the deal ninja = levr.Customer.get(deal.key().parent()) #check owner. if the owner is a dummy owner left over from an account transfer, grab the real owner. if ninja.email == '*****@*****.**': logging.debug( '\n\n\n \t\t\t DUMMY NINJA! REDIRECTING REFERENCE TO THE REAL ONE!!! \n\n\n' ) ninja = levr.Customer.get(ninja.pw) #compare owner to user doing the voting if ninja.key() == user.key(): #ninja is upvoting his own deal #increase that users karma! reward for uploading a deal! user.karma += 1 #level check! levr.level_check(user) else: #increase the ninjas karma ninja.karma += 1 #level check! levr.level_check(ninja) #replace ninja. we dont want him anymore ninja.put() #add to upvote list user.upvotes.append(dealID) # #increase the deal upvotes deal.upvotes += 1 #add to users favorites list if not there already if dealID not in user.favorites: user.favorites.append(dealID) #create favorite notification for the ninja that uploaded levr.create_notification('favorite', ninja.key(), uid, dealID) db.put([user, deal]) #put actor and ninja and deal back assert deal, 'Deal was not found' response = {'deal': api_utils.package_deal(deal)} api_utils.send_response(self, response, user) except AssertionError, e: levr.log_error(e) api_utils.send_error(self, e.message)
def get(self, dealID, *args, **kwargs): try: logging.debug('DOWNVOTE\n\n\n') logging.debug(kwargs) user = kwargs.get('actor') # uid = user.key() deal = kwargs.get('deal') dealID = deal.key() #favorite logging.debug(levr.log_model_props(user)) if dealID in user.downvotes: logging.debug('flag deal is in downvotes') user.downvotes.remove(dealID) #decrement the deal downvotes deal.downvotes -= 1 #do not change the karma of the user who uploaded it #do not add to favorites #do not create notification db.put([user, deal]) elif dealID in user.upvotes: logging.debug('flag deal is in downvotes') #remove from user upvotes user.upvotes.remove(dealID) #decrement deal upvotes deal.upvotes -= 1 #add to user downvotes user.downvotes.append(dealID) #increment deal downvotes deal.downvotes += 1 #replace entities db.put([user, deal]) else: logging.debug('Flag deal not in upvotes or downvotes') #add to user downvotes user.downvotes.append(dealID) #downvote deal deal.downvotes += 1 #replace entities db.put([user, deal]) assert deal, 'Deal could not be found' response = {'deal': api_utils.package_deal(deal)} api_utils.send_response(self, response, user) except AssertionError, e: levr.log_error() api_utils.send_error(self, e.message)
def get(self,*args,**kwargs): ''' Input: uid ''' try: logging.debug("REPORT\n\n\n") logging.debug(kwargs) user = kwargs.get('actor') deal = kwargs.get('deal') uid = user.key() dealID = deal.key() #create report Entity levr.ReportedDeal( uid = uid, dealID = dealID ).put() #is it a foursquare deal that got reported? if deal.origin == 'foursquare': #get the business business = levr.Business.get(deal.businessID) #get the business' foursquare ID foursquare_id = business.foursquare_id #is the user a foursquare user? if user.foursquare_token > '': token = user.foursquare_token else: token = 'random' #fire off a task to review the foursquare deals for this business task_params = { 'foursquare_id' : foursquare_id, 'token' : token, 'deal_id' : str(deal.key()), 'uid' : str(user.key()), 'deal_status' : deal.deal_status } taskqueue.add(url='/tasks/foursquareDealUpdateTask',payload=json.dumps(task_params)) #send notification via email message = mail.EmailMessage( sender ="LEVR AUTOMATED <*****@*****.**>", subject ="New Reported Deal", to ="*****@*****.**") logging.debug(message) body = 'New Reported Deal\n\n' body += levr.log_model_props(user, ['email','display_name','']) body += str(user.email) +' is reporting '+str(deal.deal_text) message.body = body logging.debug(message.body) message.send() api_utils.send_response(self,{},user) except: levr.log_error() api_utils.send_error(self,'Server Error')
def get(self): try: logging.debug('Hit the Authorize Complete Handler') client_id = facebook_auth['client_id'] client_secret = facebook_auth['client_secret'] #======================================================================= # Fetch access_token from facebook #======================================================================= #check for error error = self.request.get('error', None) assert error == None, 'User denied request' state = self.request.get('state', None) code = self.request.get('code', None) logging.debug(state) logging.debug(code) redirect_uri = 'http://levr-production.appspot.com/facebook/authorize/complete' url = 'https://graph.facebook.com/oauth/access_token?client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}&code={code}'.format( client_id=client_id, redirect_uri=redirect_uri, client_secret=client_secret, code=code) # Fetch the access token from facebook result = urlfetch.fetch(url=url) logging.debug(result.content) logging.debug(type(result.content)) logging.debug(levr.log_dir(result.content)) facebook_token = result.content.split('&')[0].split('=')[1] logging.debug(facebook_token) #======================================================================= # Create User and connect them with levr #======================================================================= #wrap the user in the social class - creates new user if user doesnt exist user = social.Facebook(facebook_token=facebook_token) user, new_details, new_friends = user.first_time_connect( facebook_token=facebook_token) logging.debug(levr.log_model_props(user)) logging.debug(levr.log_dict(new_details)) logging.debug(levr.log_dict(new_friends)) try: logging.debug(user.display_name) logging.debug(user.first_name) logging.debug(user.last_name) logging.debug(user.facebook_id) except: levr.log_error() #send the founders a text levr.text_notify(user.first_name + ' ' + user.last_name + ' from facebook') #set up the jinja template and echo out # template = jinja_environment.get_template('templates/deal.html') # self.response.out.write(template.render(template_values)) self.response.out.write('Hooray! you are connected with levr!') logging.debug(levr.log_dict(user)) except: levr.log_error() self.response.out.write('Could not connect with Facebook')
def get(self): try: logging.debug('Hit the Authorize Complete Handler') client_id = facebook_auth['client_id'] client_secret = facebook_auth['client_secret'] #======================================================================= # Fetch access_token from facebook #======================================================================= #check for error error = self.request.get('error',None) assert error == None, 'User denied request' state = self.request.get('state',None) code = self.request.get('code',None) logging.debug(state) logging.debug(code) redirect_uri = 'http://levr-production.appspot.com/facebook/authorize/complete' url = 'https://graph.facebook.com/oauth/access_token?client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}&code={code}'.format( client_id= client_id, redirect_uri= redirect_uri, client_secret= client_secret, code= code) # Fetch the access token from facebook result = urlfetch.fetch(url=url) logging.debug(result.content) logging.debug(type(result.content)) logging.debug(levr.log_dir(result.content)) facebook_token = result.content.split('&')[0].split('=')[1] logging.debug(facebook_token) #======================================================================= # Create User and connect them with levr #======================================================================= #wrap the user in the social class - creates new user if user doesnt exist user = social.Facebook(facebook_token=facebook_token) user,new_details,new_friends = user.first_time_connect(facebook_token=facebook_token) logging.debug(levr.log_model_props(user)) logging.debug(levr.log_dict(new_details)) logging.debug(levr.log_dict(new_friends)) try: logging.debug(user.display_name) logging.debug(user.first_name) logging.debug(user.last_name) logging.debug(user.facebook_id) except: levr.log_error() #send the founders a text levr.text_notify(user.first_name + ' ' + user.last_name + ' from facebook') #set up the jinja template and echo out # template = jinja_environment.get_template('templates/deal.html') # self.response.out.write(template.render(template_values)) self.response.out.write('Hooray! you are connected with levr!') logging.debug(levr.log_dict(user)) except: levr.log_error() self.response.out.write('Could not connect with Facebook')
def get(self): try: logging.debug('Hit the Authorize Complete Handler') client_id = 'UNHLIF5EYXSKLX50DASZ2PQBGE2HDOIK5GXBWCIRC55NMQ4C' secret = 'VLKDNIT0XSA5FK3XIO05DAWVDVOXTSUHPE4H4WOHNIZV14G3' redirect = 'https://levr-production.appspot.com/foursquare/authorize/complete' try: logging.info(levr.log_dir(self.request)) except: logging.info(self.request) code = self.request.get('code',None) #if no code was passed, then the authorization is happening through the phone. NO_CODE_MESSAGE = 'Code was not passed. Authorization is happening on phone.' assert code, NO_CODE_MESSAGE logging.info(code) #make request for token url = "https://foursquare.com/oauth2/access_token?client_id="+client_id+"&client_secret="+secret+"&grant_type=authorization_code&redirect_uri="+redirect+"&code="+code result = urlfetch.fetch(url=url) logging.debug(result.content) foursquare_token = json.loads(result.content)['access_token'] logging.info(foursquare_token) # #grab more user details # url = 'https://api.foursquare.com/v2/users/self?v=20120920&oauth_token='+token # result = urlfetch.fetch(url=url) # response_dict = json.loads(result.content) # # logging.debug(levr.log_dict(response_dict)) #let the foursquare parsing code do its thing user = social.Foursquare(foursquare_token=foursquare_token) user,new_details,new_friends = user.first_time_connect( foursquare_token = foursquare_token ) # user.connect_with_content(response_dict,True,foursquare_token=token) logging.debug(levr.log_model_props(user)) logging.debug(levr.log_dict(new_details)) logging.debug(levr.log_dict(new_friends)) #send the founders a text levr.text_notify(user.first_name + ' ' + user.last_name + ' from foursquare') #launch the jinja environment jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__))) #set up the jinja template and echo out template = jinja_environment.get_template('templates/landing.html') self.response.out.write(template.render()) logging.debug(levr.log_dict(user)) except AssertionError,e: if e.message == NO_CODE_MESSAGE: #this is an expected case. Authorization is happening on the phone self.response.out.write('Please wait...') else: levr.log_error(e) self.response.out.write('Could not connect with Foursquare.')
def post(self, *args, **kwargs): #@UnusedVariable ''' Checks for existing account with that business If the account exists, return true @attention: Only handles the case where a single account is tied to no more than one business @keyword email: required @keyword password: required @keyword business_name: required @keyword vicinity: required @keyword geo_point: required @keyword types: require @keyword development: optional @return: packaged_user with levrToken, packaged_business ''' # for invalid credential responses user_doesnt_own_business_message = 'User does not own that business' # for packaging private = True followers = False # input values email = kwargs.get('email') password = kwargs.get('pw') business_name = kwargs.get('businessName') vicinity = kwargs.get('vicinity') geo_point = kwargs.get('geoPoint') types = kwargs.get('types') development = kwargs.get( 'development', False ) # TODO: switch this to False by default when changing to live phone_number = kwargs.get('phoneNumber', '') try: # Convert input data password = enc.encrypt_password(password) types = types.split(',') logging.debug('{}\n{}\n{}\n{}'.format(repr(business_name), repr(vicinity), geo_point, repr(types))) # check for existing entities user = levr.Customer.all().filter('email', email).get() requested_business = levr.Business.all().filter( 'business_name', business_name).filter('vicinity', vicinity).get() if user: logging.info('User exists') # check password assert user.pw == password, 'Password does not match username' # user should have a business try: business = user.businesses.get() # if the user has a business, it should be the business that was requested assert business, 'User does not own any businesses yet' except: logging.debug( 'user does not have a business yet - create one') # if the user does not have a business yet, add this one. business = levr.create_new_business(business_name, vicinity, geo_point, types, phone_number, owner=user) # assert False, user_doesnt_own_business_message else: logging.debug('User owns a business') # logging.debug(levr.log_model_props(business.owner)) # logging.debug(levr.log_model_props(requested_business.owner)) # if requested_business: # assert business.key() == requested_business.key(), user_doesnt_own_business_message else: logging.debug('User does not exist. Create a new one!!') # Create an account for the user with that business user = levr.create_new_user( tester=development, pw=password, email=email, display_name=business_name, ) logging.debug(business_name) logging.debug(levr.log_model_props(user)) if not requested_business: logging.debug('requested business was not found') business = levr.create_new_business(business_name, vicinity, geo_point, types, phone_number, owner=user) else: logging.debug('requested business was found') business = requested_business # business.owner = user business.put() logging.debug('business: ' + repr(business)) #=================================================================== # # Send message to the founders that someone has signed up for the app #=================================================================== if not development: try: from google.appengine.api import mail message = mail.AdminEmailMessage( sender='*****@*****.**', subject='New Merchant', ) message.body = levr.log_model_props( user, [ 'email', 'display_name', ]) message.body += levr.log_model_props( business, ['business_name', 'vicinity']) message.check_initialized() message.send() except: levr.log_error() #=================================================================== # # package and send #=================================================================== packaged_user = api_utils.package_user(user, private, followers, send_token=True) packaged_business = api_utils.package_business(business) response = {'user': packaged_user, 'business': packaged_business} self.send_response(response) # TODO: Merchant connect - handle all cases - new and existing accounts except AssertionError, e: levr.log_error() self.send_error(e)
def update_user_details(self,content=None): ''' Foursqaure Grabs the users personal information from foursquare and updates the user if content is passed, it should be the user dict responded by foursquare ''' logging.debug('\n\n FOURSQUARE UPDATE USER DETAILS PREFETCH \n\n') #get foursquare details if not content: logging.debug('USER CONTENT WAS NOT PASSED... fetch data') foursquare_response = self.fetch('') content = foursquare_response['response']['user'] else: logging.debug('USER CONTENT WAS PASSED... do not fetch data') pass logging.debug('\n\n FOURSQUARE UPDATE USER DETAILS POSTFETCH \n\n') # logging.debug(foursquare_response) logging.debug(levr.log_dict(content)) logging.debug(type(content)) #give preference to facebook and twitter info over foursquare info #grab stuff updated = {} #update the users foursquare_id foursquare_id = int(content.get('id',None)) assert foursquare_id, "foursquare_id was not retrieved" if not self.user.foursquare_id: self.user.foursquare_id = foursquare_id updated['foursquare_id']= foursquare_id #update the rest of the users properties if not self.user.facebook_connected and not self.user.twitter_connected: # vals = { # 'first_name' : content['firstName'], # 'last_name' : content['lastName'], # 'display_name' : self.build_display_name(first_name, last_name), # 'photo' : content['photo']['prefix'] + '500x500' + content['photo']['suffix'], # 'email' : content['contact']['email'], # 'foursquare_id' : int(content['id']) # # } first_name = content.get('firstName','') #content['firstName'] last_name = content.get('lastName','') #content['lastName'] display_name = self.build_display_name(first_name, last_name) photo = content.get('photo',None) if photo: photo = photo.get('prefix','')+'500x500'+photo.get('suffix','') # photo = content['photo']['prefix'] + '500x500' + content['photo']['suffix'] contact = content.get('contact',None) if contact: email = contact.get('email') # email = content['contact']['email'] if not self.user.first_name: self.user.first_name = first_name updated['first_name'] = first_name if not self.user.last_name: self.user.last_name = last_name updated['last_name'] = last_name if not self.user.display_name: self.user.display_name = display_name updated['display_name'] = display_name # if not self.user.photo: #keep photo up to date self.user.photo = photo updated['photo'] = photo #grab email if not self.user.email: self.user.email = email updated['email'] = email logging.debug(levr.log_model_props(self.user)) else: # raise Exception('user has already connected with facebook or twitter') logging.info('user has already connected with facebook or twitter') return updated
def post(self,*args,**kwargs): #@UnusedVariable ''' Checks for existing account with that business If the account exists, return true @attention: Only handles the case where a single account is tied to no more than one business @keyword email: required @keyword password: required @keyword business_name: required @keyword vicinity: required @keyword geo_point: required @keyword types: require @keyword development: optional @return: packaged_user with levrToken, packaged_business ''' # for invalid credential responses user_doesnt_own_business_message = 'User does not own that business' # for packaging private = True followers = False # input values email = kwargs.get('email') password = kwargs.get('pw') business_name = kwargs.get('businessName') vicinity = kwargs.get('vicinity') geo_point = kwargs.get('geoPoint') types = kwargs.get('types') development = kwargs.get('development',False) # TODO: switch this to False by default when changing to live phone_number = kwargs.get('phoneNumber','') try: # Convert input data password = enc.encrypt_password(password) types = types.split(',') logging.debug('{}\n{}\n{}\n{}'.format(repr(business_name),repr(vicinity),geo_point,repr(types))) # check for existing entities user = levr.Customer.all().filter('email',email).get() requested_business = levr.Business.all().filter('business_name',business_name).filter('vicinity',vicinity).get() if user: logging.info('User exists') # check password assert user.pw == password, 'Password does not match username' # user should have a business try: business = user.businesses.get() # if the user has a business, it should be the business that was requested assert business, 'User does not own any businesses yet' except: logging.debug('user does not have a business yet - create one') # if the user does not have a business yet, add this one. business = levr.create_new_business(business_name,vicinity,geo_point,types,phone_number, owner=user ) # assert False, user_doesnt_own_business_message else: logging.debug('User owns a business') # logging.debug(levr.log_model_props(business.owner)) # logging.debug(levr.log_model_props(requested_business.owner)) # if requested_business: # assert business.key() == requested_business.key(), user_doesnt_own_business_message else: logging.debug('User does not exist. Create a new one!!') # Create an account for the user with that business user = levr.create_new_user( tester=development, pw=password, email=email, display_name=business_name, ) logging.debug(business_name) logging.debug(levr.log_model_props(user)) if not requested_business: logging.debug('requested business was not found') business = levr.create_new_business(business_name,vicinity,geo_point,types,phone_number, owner=user ) else: logging.debug('requested business was found') business = requested_business # business.owner = user business.put() logging.debug('business: '+repr(business)) #=================================================================== # # Send message to the founders that someone has signed up for the app #=================================================================== if not development: try: from google.appengine.api import mail message = mail.AdminEmailMessage( sender = '*****@*****.**', subject = 'New Merchant', ) message.body = levr.log_model_props(user,['email','display_name',]) message.body += levr.log_model_props(business,['business_name','vicinity']) message.check_initialized() message.send() except: levr.log_error() #=================================================================== # # package and send #=================================================================== packaged_user = api_utils.package_user(user, private, followers,send_token=True) packaged_business = api_utils.package_business(business) response = { 'user' : packaged_user, 'business' : packaged_business } self.send_response(response) # TODO: Merchant connect - handle all cases - new and existing accounts except AssertionError,e: levr.log_error() self.send_error(e)
def get(self): try: logging.debug('Hit the Authorize Complete Handler') client_id = 'UNHLIF5EYXSKLX50DASZ2PQBGE2HDOIK5GXBWCIRC55NMQ4C' secret = 'VLKDNIT0XSA5FK3XIO05DAWVDVOXTSUHPE4H4WOHNIZV14G3' redirect = 'https://levr-production.appspot.com/foursquare/authorize/complete' try: logging.info(levr.log_dir(self.request)) except: logging.info(self.request) code = self.request.get('code', None) #if no code was passed, then the authorization is happening through the phone. NO_CODE_MESSAGE = 'Code was not passed. Authorization is happening on phone.' assert code, NO_CODE_MESSAGE logging.info(code) #make request for token url = "https://foursquare.com/oauth2/access_token?client_id=" + client_id + "&client_secret=" + secret + "&grant_type=authorization_code&redirect_uri=" + redirect + "&code=" + code result = urlfetch.fetch(url=url) logging.debug(result.content) foursquare_token = json.loads(result.content)['access_token'] logging.info(foursquare_token) # #grab more user details # url = 'https://api.foursquare.com/v2/users/self?v=20120920&oauth_token='+token # result = urlfetch.fetch(url=url) # response_dict = json.loads(result.content) # # logging.debug(levr.log_dict(response_dict)) #let the foursquare parsing code do its thing user = social.Foursquare(foursquare_token=foursquare_token) user, new_details, new_friends = user.first_time_connect( foursquare_token=foursquare_token) # user.connect_with_content(response_dict,True,foursquare_token=token) logging.debug(levr.log_model_props(user)) logging.debug(levr.log_dict(new_details)) logging.debug(levr.log_dict(new_friends)) #send the founders a text levr.text_notify(user.first_name + ' ' + user.last_name + ' from foursquare') #launch the jinja environment jinja_environment = jinja2.Environment( loader=jinja2.FileSystemLoader(os.path.dirname(__file__))) #set up the jinja template and echo out template = jinja_environment.get_template('templates/landing.html') self.response.out.write(template.render()) logging.debug(levr.log_dict(user)) except AssertionError, e: if e.message == NO_CODE_MESSAGE: #this is an expected case. Authorization is happening on the phone self.response.out.write('Please wait...') else: levr.log_error(e) self.response.out.write('Could not connect with Foursquare.')
def update_user_details(self, content=None): ''' Foursqaure Grabs the users personal information from foursquare and updates the user if content is passed, it should be the user dict responded by foursquare ''' logging.debug('\n\n FOURSQUARE UPDATE USER DETAILS PREFETCH \n\n') #get foursquare details if not content: logging.debug('USER CONTENT WAS NOT PASSED... fetch data') foursquare_response = self.fetch('') content = foursquare_response['response']['user'] else: logging.debug('USER CONTENT WAS PASSED... do not fetch data') pass logging.debug('\n\n FOURSQUARE UPDATE USER DETAILS POSTFETCH \n\n') # logging.debug(foursquare_response) logging.debug(levr.log_dict(content)) logging.debug(type(content)) #give preference to facebook and twitter info over foursquare info #grab stuff updated = {} #update the users foursquare_id foursquare_id = int(content.get('id', None)) assert foursquare_id, "foursquare_id was not retrieved" if not self.user.foursquare_id: self.user.foursquare_id = foursquare_id updated['foursquare_id'] = foursquare_id #update the rest of the users properties if not self.user.facebook_connected and not self.user.twitter_connected: # vals = { # 'first_name' : content['firstName'], # 'last_name' : content['lastName'], # 'display_name' : self.build_display_name(first_name, last_name), # 'photo' : content['photo']['prefix'] + '500x500' + content['photo']['suffix'], # 'email' : content['contact']['email'], # 'foursquare_id' : int(content['id']) # # } first_name = content.get('firstName', '') #content['firstName'] last_name = content.get('lastName', '') #content['lastName'] display_name = self.build_display_name(first_name, last_name) photo = content.get('photo', None) if photo: photo = photo.get('prefix', '') + '500x500' + photo.get( 'suffix', '') # photo = content['photo']['prefix'] + '500x500' + content['photo']['suffix'] contact = content.get('contact', None) if contact: email = contact.get('email') # email = content['contact']['email'] if not self.user.first_name: self.user.first_name = first_name updated['first_name'] = first_name if not self.user.last_name: self.user.last_name = last_name updated['last_name'] = last_name if not self.user.display_name: self.user.display_name = display_name updated['display_name'] = display_name # if not self.user.photo: #keep photo up to date self.user.photo = photo updated['photo'] = photo #grab email if not self.user.email: self.user.email = email updated['email'] = email logging.debug(levr.log_model_props(self.user)) else: # raise Exception('user has already connected with facebook or twitter') logging.info('user has already connected with facebook or twitter') return updated
def get(self,dealID,*args,**kwargs): try: logging.debug('UPVOTE\n\n\n') logging.debug(kwargs) user = kwargs.get('actor') uid = user.key() deal = kwargs.get('deal') dealID = deal.key() #=================================================================== # Note, if this code changes, you should also change the code in /cronjobs/undeadActivity because it was copied and pasted... #=================================================================== #favorite logging.debug(levr.log_model_props(user,['upvotes','downvotes','favorites'])) logging.debug(levr.log_model_props(deal,['upvotes','downvotes'])) if dealID in user.upvotes: logging.debug('flag deal in upvotes') #user is removing the upvote #remove the offending deal from the user upvotes user.upvotes.remove(dealID) #decrement the deal upvotes deal.upvotes -= 1 #do not change the karma of the user who uploaded it #do not remove from favorites #do not remove notification db.put([user,deal]) elif dealID in user.downvotes: logging.debug('flag deal is in downvotes') #remove deal from downvotes user.downvotes.remove(dealID) #decrement the deals downvotes deal.downvotes -= 1 #add deal to upvotes user.upvotes.append(dealID) #increment the number of upvotes deal.upvotes += 1 #add deal to favorites if dealID not in user.favorites: user.favorites.append(dealID) #do not change the karma of the user who uploaded #do not add notification for the ninja db.put([user,deal]) pass else: logging.debug('flag deal not in upvotes or downvotes') # If the deal is in the users favorites, then they upvoted the deal at one point and then # removed that upvote either via another upvote or a downvote, and they are trying to upvote again # At this point, the deal should get its upvote back, but the ninja gets no karma because they do not # lose a karma point when the deal is downloaded if dealID not in user.favorites: #get owner of the deal ninja = levr.Customer.get(deal.key().parent()) #check owner. if the owner is a dummy owner left over from an account transfer, grab the real owner. if ninja.email == '*****@*****.**': logging.debug('\n\n\n \t\t\t DUMMY NINJA! REDIRECTING REFERENCE TO THE REAL ONE!!! \n\n\n') ninja = levr.Customer.get(ninja.pw) #compare owner to user doing the voting if ninja.key() == user.key(): #ninja is upvoting his own deal #increase that users karma! reward for uploading a deal! user.karma += 1 #level check! levr.level_check(user) else: #increase the ninjas karma ninja.karma += 1 #level check! levr.level_check(ninja) #replace ninja. we dont want him anymore ninja.put() #add to upvote list user.upvotes.append(dealID) # #increase the deal upvotes deal.upvotes += 1 #add to users favorites list if not there already if dealID not in user.favorites: user.favorites.append(dealID) #create favorite notification for the ninja that uploaded levr.create_notification('favorite',ninja.key(),uid,dealID) db.put([user,deal]) #put actor and ninja and deal back assert deal, 'Deal was not found' response = { 'deal':api_utils.package_deal(deal) } api_utils.send_response(self,response,user) except AssertionError,e: levr.log_error(e) api_utils.send_error(self,e.message)
def get(self): e = levr.Customer.all().filter('email','*****@*****.**').get() ethan = enc.encrypt_key(e.key()) p = levr.Customer.all().filter('email','*****@*****.**').get() pat = enc.encrypt_key(p.key()) a = levr.Customer.all().filter('email','*****@*****.**').get() alonso = enc.encrypt_key(a.key()) n = levr.Customer.all().filter('email','*****@*****.**').get() ninja = enc.encrypt_key(n.key()) url = '\'http://0.0.0.0:8080/api' ethan_url = url+'/user/'+ethan+'\' | python -mjson.tool' pat_url = url+'/user/'+pat+'\' | python -mjson.tool' alonso_url = url+'/user/'+alonso+'\' | python -mjson.tool' ninja_url = url+'/user/'+ninja+'\' | python -mjson.tool' levr_token = db.get(enc.decrypt_key(ethan)).levr_token self.response.out.headers['Content-Type'] = 'text/plain' self.response.out.write('LEVR TOKEN:\n\n') self.response.out.write(levr_token) self.response.out.write('\n\n\nFor ethan:\n\n') self.response.out.write(ethan) self.response.out.write('\n\n') self.response.out.write('curl '+ethan_url) self.response.out.write('\n\n\nFor pat:\n\n') self.response.out.write(pat) self.response.out.write('\n\n') self.response.out.write('curl '+pat_url) self.response.out.write('\n\n\n<b>For alonso: </b>\n\n') self.response.out.write(alonso) self.response.out.write('\n\n') self.response.out.write('curl '+alonso_url) self.response.out.write('\n\n\n<b>For ninja: </b>\n\n') self.response.out.write(ninja) self.response.out.write('\n\n') self.response.out.write('curl '+ninja_url) d = levr.Deal.all().ancestor(db.Key(enc.decrypt_key(ethan))).get() if d: deal = enc.encrypt_key(d.key()) deal_url = url+'/deal/'+deal+'\' | python -mjson.tool' self.response.out.write('\n\n\n<b>For deal stuff: </b>\n\n') self.response.out.write(deal) self.response.out.write('\n\n') # self.response.out.write('\n\n') self.response.out.write('curl '+deal_url) # projection = None projection = [ 'alias', 'new_notifications', 'first_name', 'last_name', 'karma', 'level', 'display_name', 'followers', 'foursquare_id', 'foursquare_token', 'foursquare_connected', 'foursquare_friends', 'twitter_id', 'twitter_token', 'twitter_token_secret', 'twitter_screen_name', 'twitter_connected', 'twitter_friends_by_sn', 'twitter_friends_by_id', 'facebook_connected', 'facebook_token', 'facebook_id', 'facebook_friends', 'email_friends', 'favorites', 'upvotes', 'downvotes', ] deal_projection = [ 'upvotes', 'downvotes', 'karma', 'geo_point', 'geo_hash' ] self.response.out.write('\n\n\n Ethan') self.response.out.write(levr.log_model_props(e,projection)) self.response.out.write('\n PAT') self.response.out.write(levr.log_model_props(p,projection)) self.response.out.write('\n ALONSO') self.response.out.write(levr.log_model_props(a,projection)) self.response.out.write('\nDEAL') if d: self.response.out.write(levr.log_model_props(d,deal_projection)) self.response.out.write('\n\n') notifications = levr.Notification.all().fetch(None) for n in notifications: self.response.out.write(levr.log_model_props(n))
def get(self,dealID,*args,**kwargs): try: logging.debug('DOWNVOTE\n\n\n') logging.debug(kwargs) user = kwargs.get('actor') # uid = user.key() deal = kwargs.get('deal') dealID = deal.key() #favorite logging.debug(levr.log_model_props(user)) if dealID in user.downvotes: logging.debug('flag deal is in downvotes') user.downvotes.remove(dealID) #decrement the deal downvotes deal.downvotes -= 1 #do not change the karma of the user who uploaded it #do not add to favorites #do not create notification db.put([user,deal]) elif dealID in user.upvotes: logging.debug('flag deal is in downvotes') #remove from user upvotes user.upvotes.remove(dealID) #decrement deal upvotes deal.upvotes -= 1 #add to user downvotes user.downvotes.append(dealID) #increment deal downvotes deal.downvotes += 1 #replace entities db.put([user,deal]) else: logging.debug('Flag deal not in upvotes or downvotes') #add to user downvotes user.downvotes.append(dealID) #downvote deal deal.downvotes += 1 #replace entities db.put([user,deal]) assert deal,'Deal could not be found' response = { 'deal':api_utils.package_deal(deal) } api_utils.send_response(self,response,user) except AssertionError,e: levr.log_error() api_utils.send_error(self,e.message)