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_defaults(self): visit = Visit() visit.put() self.assertIsNone(visit.ip_address) self.assertIsNone(visit.identifier) self.assertIsNone(visit.image) self.assertIsNone(visit.referrer) self.assertIsNone(visit.visitor) self.assertIsNone(visit.user_agent) self.assertAlmostEqual(datetime.datetime.now(), visit.timestamp, delta=datetime.timedelta(seconds=5))
def post(self): if get_current_user(): return self.redirect('/') token = self.request.get('session') if token: session = SignupSession.getSignupSession(token) if not session: return self.redirect('/auth/login') fb_id = session.fb_id g_user = None else: if not GOOGLE_USERS: return self.redirect('/auth/login') fb_id = None g_user = users.get_current_user() if not g_user: return self.redirect('/auth/login') name = cgi.escape(self.request.get('name')) email = cgi.escape(self.request.get('email')) if not name or not email: template = jinja_environment.get_template('templates/signup.html') values = {'name':name,'email':email,'session':token,'errormsg':'Please supply a name and email address'} self.response.out.write(template.render(values)) return user = User(name=name,email=email,google_user=g_user,fb_id=fb_id) user.put() pubs = Pub.all().run() for pub in pubs: v = Visit(parent=user,pub=pub) v.put() rand_string=base64.urlsafe_b64encode(os.urandom(32)) session = Session() session.user_id = user.key().id() session.token = rand_string session.save() self.response.set_cookie("session",rand_string,expires=datetime.datetime.now()+datetime.timedelta(days=30)); self.redirect('/')
def post(self): name = self.request.get('name') p = Pub.all().filter('name =', name).get(keys_only=True) if p: self.response.out.write('already exists') return nlat = None nlong = None lat = self.request.get('lat') long = self.request.get('long') if lat: nlat = float(lat) if long: nlong = float(long) p = Pub(name=name, latitude=nlat, longitude=nlong) p.put() users = User.all().run() for u in users: v = Visit(parent=u, pub=p) v.put() self.response.out.write('added ' + name)
def test_get_by_ip_address(self): visit = Visit(ip_address=self.DEFAULT_IP) visit.put() self.assertLength(1, Visit.get_by_ip_address(self.DEFAULT_IP)) self.assertLength(0, Visit.get_by_ip_address('1.1.1.1'))
def test_get_by_identifier(self): visit = Visit(identifier=self.DEFAULT_IDENTIFIER) visit.put() self.assertLength(1, Visit.get_by_identifier(self.DEFAULT_IDENTIFIER)) self.assertLength(0, Visit.get_by_identifier('*****@*****.**'))