Example #1
0
	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))
Example #2
0
    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))
Example #3
0
	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)
Example #4
0
    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
Example #5
0
    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)
Example #6
0
	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
Example #7
0
    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')
Example #8
0
	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!')
Example #9
0
	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))
Example #10
0
    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))
Example #11
0
	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)
Example #12
0
    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)
Example #13
0
	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)
Example #14
0
	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!')
Example #15
0
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
Example #16
0
    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)
Example #17
0
    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)
Example #18
0
	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)
Example #19
0
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
Example #20
0
    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)
Example #21
0
	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)
Example #22
0
    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)
Example #23
0
    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)
Example #24
0
	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')
Example #25
0
    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')
Example #26
0
	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')
Example #27
0
	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.')
Example #28
0
    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)
Example #29
0
	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
Example #30
0
	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)
Example #31
0
    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.')
Example #32
0
    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
Example #33
0
	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)
Example #34
0
	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))
Example #35
0
	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)