def get(self, filename): image = Image.get_by_filename(filename) if not image: return self.abort(404) # Gather the information we take from the user. identifier = self.request.get('identifier', '') ip_address = self.request.remote_addr referrer = self.request.referrer user_agent = self.request.headers.get('User-Agent', '') visitor_uuid = self.request.cookies.get('VISITOR_UUID', '') # If they're not in our database, create a new entity to track them. visitor = Visitor.get_by_uuid(visitor_uuid) if visitor is None: visitor = Visitor() visitor.put() visit = Visit(identifier=identifier, ip_address=ip_address, user_agent=user_agent, referrer=referrer, image=image.key, visitor=visitor.key) visit.put() # Dispatch a task to send the visit to keen.io for analysis. visit_key = visit.key.urlsafe() logging.info('Dispatching task to process {visit_key}' .format(visit_key=visit_key)) taskqueue.add(url=self.uri_for('analytics'), params={'visit_key': visit_key}) self.response.content_type = str(image.content_type) self.response.set_cookie(key='VISITOR_UUID', value=visitor.uuid) self.response.out.write(image.data)
def test_get_tracking_image(self): image = Image( filename=self.DEFAULT_FILENAME, content_type=self.DEFAULT_CONTENT_TYPE) image.put() response = self.app.get( self.uri_for('tracking_image', filename=image.filename)) self.assertOk(response) self.assertEqual(image.content_type, response.content_type) self.assertLength(1, Visit.query()) self.assertLength(1, Visitor.query()) visit = Visit.query().get() visitor = Visitor.query().get() self.assertEqual(image.key, visit.image) self.assertEqual(visitor.key, visit.visitor)
def add(): form = request.form u = current_user() if u is None: u = Visitor.singleton() t = Reply.new(form, user_id=u.id) return redirect(url_for('topic.detail', id=t.topic_id))
def __init__(self, request=None, response=None): super(BasePageHandler, self).__init__(request, response) self.LogInOutURL = users.create_logout_url('/') self.template_values = {} self.application_user = None self.google_user = None self.logged_in = None self.redirected = False google_user = users.get_current_user() if google_user is not None: try: Visitor.add_or_get_current_user_as_visitor() except: # Simply ignore failures to add the google_user object as a Visitor to our model for now: pass self.google_user = google_user self.logged_in = True google_user_id = google_user.user_id() application_user = User.get_user_by_google_user_id(google_user_id) if application_user is not None: self.application_user = application_user display_user_name = application_user.first_name + ' ' + application_user.last_name self.template_values['display_user_name'] = display_user_name user_profile = Profile.get_profile_by_application_user_id(application_user.application_user_id) user_page_url = self.request.application_url if not re.match(r"^.*/$", user_page_url): user_page_url += '/' if user_profile is not None: user_page_url += urllib.quote(str(user_profile.profile_unique_display_name), safe='') else: user_page_url += str(application_user.application_user_id) self.template_values['user_page_url'] = user_page_url else: if google_user.email(): display_user_name = google_user.email() elif google_user.nickname(): display_user_name = google_user.nickname() else: display_user_name = 'Sweet Vision User' self.template_values['display_user_name'] = display_user_name else: self.logged_in = False self.LogInOutURL = users.create_login_url('/') self.template_values['LogInOutURL'] = self.LogInOutURL
def test_duplicate_visitors_not_made(self): image = Image( filename=self.DEFAULT_FILENAME, content_type=self.DEFAULT_CONTENT_TYPE) image.put() response = self.app.get( self.uri_for('tracking_image', filename=image.filename)) self.assertOk(response) self.assertLength(1, Visit.query()) self.assertLength(1, Visitor.query()) response = self.app.get( self.uri_for('tracking_image', filename=image.filename)) self.assertOk(response) self.assertLength(2, Visit.query()) self.assertLength(1, Visitor.query()) visit1, visit2 = Visit.query() visitor = Visitor.query().get() self.assertEqual(visitor.key, visit1.visitor, visit2.visitor) self.assertEqual(image.key, visit1.image, visit2.image)
def get_visitor_by_id(visitor_id): try: client = MongoClient(Constant.DB_CONNECTION_URL) document = client[Constant.DB_NAME][VisitorDB.COLLECTION_NAME] visitor_object = document.find_one({'_id': ObjectId(visitor_id)}) visitor = Visitor(visitor_id, visitor_object['name'], visitor_object['address'], visitor_object['phoneNumber']) client.close() return visitor except Exception as e: print('unable to get visitor: ' + str(e)) raise Exception('Could not get visitor from DB')
def get(self): # Only let an admin user retrieve the information about visitors: if not users.is_current_user_admin(): self.response.headers['Content-Type'] = 'application/json' self.response.status = '401 Unauthorized' self.response.write(json.dumps({'status': 401, 'error': 'Unauthorized'})) return visitors_from_datastore = Visitor.get_visitors() visitors = [] for visitor_instance in visitors_from_datastore: visitor = dict() visitor['google_user_id'] = None if visitor_instance.google_user_id is not None: visitor['google_user_id'] = str(visitor_instance.google_user_id) visitor['email'] = None if visitor_instance.email is not None: visitor['email'] = str(visitor_instance.email) visitor['auth_domain'] = None if visitor_instance.auth_domain is not None: visitor['auth_domain'] = str(visitor_instance.auth_domain) visitor['nickname'] = None if visitor_instance.nickname is not None: visitor['nickname'] = str(visitor_instance.nickname) if visitor_instance.is_admin: visitor['is_admin'] = True else: visitor['is_admin'] = False visitor['google_user_object'] = None if visitor_instance.google_user_object is not None: visitor['google_user_object'] = str(visitor_instance.google_user_object) visitors.append(visitor) visitor['created_at'] = None if visitor_instance.created_at is not None: created_at_epoch_time = time.mktime(visitor_instance.created_at.timetuple()) visitor['created_at'] = created_at_epoch_time self.response.headers['Content-Type'] = 'application/json' self.response.write(json.dumps({'visitors': visitors}))
def user(self): if self.user_id == '0': u = Visitor.singleton() else: u = User.find(self.user_id) return u
def test_get_by_uuid(self): visitor = Visitor() visitor.put() self.assertIsNotNone(Visitor.get_by_uuid(visitor.uuid)) self.assertIsNone(Visitor.get_by_uuid(''))
def test_put(self): visitor = Visitor() visitor.put() self.assertIsNotNone(visitor.uuid)
def get_visitor(self, badge_id): visitor_data = self.db.get_visitor(badge_id) if not visitor_data: return None return Visitor(**visitor_data)
def create_visitor(self, badge_id, name, associated_employee): visitor = Visitor(badge_id=badge_id, name=name, associated_employee=associated_employee) return self.db.put_visitor(visitor)