Ejemplo n.º 1
0
def create_visitor(request):
    v = Visitor()
    #get params
    try:
        v.referer = request.META.get('HTTP_REFERER')
    except KeyError, msg:
        logging.error(msg,
                      exc_info=sys.exc_info(),
                      extra={'url': request.build_absolute_uri()})
Ejemplo n.º 2
0
 def get(self):
     if Visitor.query(Visitor.plays > 0).get():
         newVisitor = Visitor.query(Visitor.plays > 0).get()
         newVisitor.plays += 1
         newVisitor.put()
     else:
         Visitor(plays = 1).put()
     self.response.headers['Content-Type'] = 'text/html'
     template_vars = {"username": self.request.get("username")}
     template = jinja_current_directory.get_template('flappypotato.html')
     self.response.write(template.render(template_vars))
Ejemplo n.º 3
0
def visit():
    """
        Create user if not exists
        Increment user visits otherwise
    """
    ip = request.remote_addr
    visitor = models.storage.get_by_ip(ip)
    if visitor is None:
        visitor = Visitor()
        setattr(visitor, "ip", ip)
        models.storage.new(visitor)
        models.storage.save()
    setattr(visitor, "visits", visitor.visits + 1)
    return jsonify(visitor.to_dict())
Ejemplo n.º 4
0
def create_visit_request(user, visiting_point, company, data):
    try:
        visitor = user.visitor
    except User.DoesNotExist:
        visitor = Visitor(user=user, phone=data['phone'])
        visitor.save()
    vr = VisitRequest(company=company,
                      visitor=visitor,
                      visiting_point=visiting_point)
    vr.save()
    for k, v in data.items():
        if k[0:3] == 'sf_':
            va = VisitAttributes(visit_request=vr, attr_id=int(k[3:]), val=v)
            va.save()
    return vr
Ejemplo n.º 5
0
def create_new_visitor():
    request_body = request.get_json()
    print(request_body)

    visitor1 = Visitor(
        first_name=request_body["first_name"],
        last_name=request_body["last_name"],
        age=request_body["age"],
        address=request_body["address"],
        phone_number=request_body["phone_number"],
        email=request_body["email"],
    )
    db.session.add(visitor1)
    db.session.commit()
    return jsonify(visitor1.serialize()), 200
Ejemplo n.º 6
0
def logbud():
    form = VisitorSignInForm()

    # TODO:
    # implement
    if request.method == 'POST':
        if form.validate_on_submit():
            firstname = form.firstname.data.lower()
            lastname = form.lastname.data.lower()
            visiting = form.visiting.data.lower()
            purpose = form.purpose.data.lower()

            # Check if visitor is new
            returning_visitor = Visitor.query.filter_by(
                firstname=firstname, lastname=lastname).first()
            if not returning_visitor:
                new_visitor = Visitor(firstname=firstname, lastname=lastname)
                db.session.add(new_visitor)
                db.session.commit()

                new_visitor = Visitor.query.filter_by(
                    firstname=firstname, lastname=lastname).first()

                new_visit = Visit(visitor_id=new_visitor.id,
                                  visiting=visiting,
                                  purpose=purpose)
                db.session.add(new_visit)
                db.session.commit()

                return redirect('/log')

            # Returning visitor should not have active visit
            for visit in returning_visitor.visits:
                if visit.is_active():
                    flash('Visitor is already logged in!')
                    return redirect('/log/' + str(returning_visitor.id))

            # Log visitor
            new_visit = Visit(visitor_id=returning_visitor.id,
                              visiting=visiting,
                              purpose=purpose)
            db.session.add(new_visit)
            db.session.commit()
            return redirect('/log')

        flash("Form errors!")

    return render_template('logbud.html', form=form)
Ejemplo n.º 7
0
    def get(self):
        me = users.get_current_user()
        print "hi"
        jinja_values = {}
        start_template = jinja_env.get_template("templates/main.html")
        if not me:
            jinja_values = {'signin_page_url': users.create_login_url('/')}
            #self.response.write(start_template.render(jinja_values))
        else:
            my_key = ndb.Key('Visitor', me.user_id())
            my_visitor = my_key.get()
            if not my_visitor:
                my_visitor = Visitor(key=my_key,
                                     name=me.nickname(),
                                     email=me.email(),
                                     id=me.user_id())
            jinja_values["signout_page_url"] = users.create_logout_url('/')
            my_visitor.put()

        self.response.write(start_template.render(jinja_values))
Ejemplo n.º 8
0
    def get(self):
        user = users.get_current_user()
        if not user:  #User is not signed in
            info = jinja_env.get_template('templates/info.html')
            jinja_values = {'log_url': users.create_login_url('/')}
            self.response.write(info.render(jinja_values))
        else:  #User is signed in
            my_visitor = get_visitor()
            #Check data store, do we already have the users data?
            # if not: Create new entry in datastore for user
            if not my_visitor:
                my_visitor = Visitor(
                    #key = my_key,
                    id=user.user_id(),
                    name=user.nickname(),
                    email=user.email())

                my_visitor.put()

            userhome = jinja_env.get_template('templates/home.html')

            #Outfits query
            #Need to add filter
            query = Outfit.query(
                Outfit.User_ID == user.user_id()).order(-Outfit.Date)
            outfitslist = query.fetch()
            #Query end

            jinja_values = {
                'name': user.nickname(),
                'email_addr': user.email(),
                'user_id': user.user_id(),
                'log_url': users.create_logout_url('/'),
                'month': datetime.datetime.now().strftime("%A, %B %d, %Y"),
                'outfits': outfitslist
            }
            # if my_visitor.image:
            #     jinja_values["img"] = base64.b64encode(my_visitor.image)

            self.response.write(userhome.render(jinja_values))
Ejemplo n.º 9
0
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        if (form.usertype.data == 'visitor'):
            user = User(Username=form.username.data,
                        password=form.password.data,
                        Email=form.email.data,
                        UserType=form.usertype.data)
            visitorname = Visitor(user_visitor=username)
            db.session.add_all([user, visitorname])
            db.session.commit()
        if (form.usertype.data == 'staff'):
            user = User(Username=form.username.data,
                        password=form.password.data,
                        Email=form.email.data,
                        UserType=form.usertype.data)
            staffname = Staff(user_staff=user)
            db.session.add_all([user, staffname])
            db.session.commit()
        flash('You can now login.')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)
Ejemplo n.º 10
0
    def get(self):
        me = users.get_current_user()
        if not me:
            # No user is logged in, send them to the welcome page.
            start_template = jinja_current_dir.get_template("templates/welcome.html")
            jinja_values = {
                'signin_page_url': users.create_login_url('/')
            }
            self.response.write(start_template.render(jinja_values))
        else:
            # A user is logged in
            my_visitor = get_visitor()
            if not my_visitor:
                # If we don't have an entry in DataStore for this user, add one.
                my_visitor = Visitor(
                    key = get_key(me),
                    id = me.user_id(),
                    name = me.nickname(),
                    email = me.email(),
                )
                # We only save if we're creating a new one because we don't
                # modify existing Visitor objects.
                my_visitor.put()

            withuser_template = jinja_current_dir.get_template("templates/withuser.html")
            jinja_values = {
                'name': me.nickname(),
                'email_addr': me.email(),
                'user_id': me.user_id(),
                'signout_page_url': users.create_logout_url('/'),
            }
            if my_visitor.image:
                # base64.b64encode converts the BlobProperty image
                # into a string the browser knows how to show as an image.
                # See withuser.html for the <img> code needed to show a string
                # as an image.
                jinja_values['img'] = base64.b64encode(my_visitor.image)

            self.response.write(withuser_template.render(jinja_values))
Ejemplo n.º 11
0
def incoming_click(request, category):
    '''Every page load creates a new visitor object.
    This visitor object is updated with a random site and offerset (combination of 2 offers), 
    then redirected to the page template.'''
    #To do: Use publisher component to send messages to any consumer... SendMessage(visitor)
    v = Visitor()
    #get params
    (v.referer, v.user_agent, v.domain, v.category) = (
        request.META.get('HTTP_REFERER'),
        request.META.get('HTTP_USER_AGENT'),
        request.META.get('SERVER_NAME'),
        category,
    )
    #get url params
    (v.adsource, v.account, v.ad, v.agegroup, v.image, v.channel, v.testing,
     v.safeview) = (
         request.GET.get('adsource', 'missing'),
         request.GET.get('account', 'missing'),
         request.GET.get('ad', 'missing'),
         request.GET.get('agegroup', 'missing'),
         request.GET.get('image', 'missing'),
         request.GET.get('channel', 'missing'),
         request.GET.get('testing', 'missing'),
         request.GET.get('safeview', 'missing'),
     )
    if category not in category_list:
        v.category = 'Error'
        v.save()
        return HttpResponse("Category %s was not found" % category)

    site = get_site(category)
    v.site = site
    v.offerset_id, offer_list = get_offerset(site)

    v.save()
    name, link = _get_display_name_and_link(v, offer_list)
    return render_to_response('%s/%s' % (v.category, site.page1_template),
                              locals())
Ejemplo n.º 12
0
    def process_request(self, request):
        # Don't process AJAX request
        if request.is_ajax(): return

        # Create some useful variables:
        ip_address = utils.get_ip(request)
        user_agent = unicode(request.META.get('HTTP_USER_AGENT', '')[:255],
                             errors='ignore')

        # Retrieve untracked user agents from cache
        ua_key = '_tracking_untracked_uas'
        untracked = cache.get(ua_key)
        if untracked is None:
            log.info("Updating untracked user agent cache")
            untracked = UntrackedUserAgent.objects.all()
            cache.set(ua_key, untracked, 3600)

        # See if the user agent is not supposed to be tracked.
        ACTIVITY = True
        for ua in untracked:
            # if the keyword is found in the user agent, stop tracking
            if user_agent.find(ua.keyword) != -1:
                if not ua.activity:
                    log.debug('Not tracking UA "%s" because of keyword: %s' %
                              (user_agent, ua.keyword))
                    return
                else:
                    ACTIVITY = False

        if hasattr(request, 'session') and request.session.session_key:
            # Use the current session key if we can
            session_key = request.session.session_key
        else:
            # Otherwise just fake a session key
            session_key = '%s:%s' % (ip_address, user_agent)
            session_key = session_key[:40]

        # Ensure that the request.path does not begin with any of the prefixes
        for prefix in self.prefixes:
            if request.path.startswith(prefix):
                log.debug('Not tracking request to: %s' % request.path)
                return

        # If we get here, the URL needs to be tracked
        # determine what time it is
        now = datetime.now()

        attrs = {'session_key': session_key, 'ip_address': ip_address}

        # For some reason, Vistors.objects.get_or_create is not working here
        try:
            visitor = Visitor.objects.get(**attrs)
        except Visitor.DoesNotExist:
            # See if there's a visitor with the same IP and user agent
            # within the last 5 minutes
            cutoff = now - timedelta(minutes=5)
            visitors = Visitor.objects.filter(ip_address=ip_address,
                                              user_agent=user_agent,
                                              last_update__gte=cutoff)

            if len(visitors):
                visitor = visitors[0]
                visitor.session_key = session_key
                log.debug('Using existing visitor for IP %s / UA %s: %s' %
                          (ip_address, user_agent, visitor.id))
            else:
                # It's probably safe to assume that the visitor is brand new
                visitor = Visitor(**attrs)
                log.debug('Created a new visitor: %s' % attrs)

        except:
            return

        # Determine whether or not the user is logged in
        user = request.user
        if isinstance(user, AnonymousUser):
            user = None

        # Update the tracking information:
        visitor.user = user
        visitor.user_agent = user_agent

        # If the visitor record is new, or the visitor hasn't been here for
        # at least an hour, update their referrer URL.
        one_hour_ago = now - timedelta(hours=1)
        if not visitor.last_update or visitor.last_update <= one_hour_ago:
            visitor.referrer = utils.u_clean(
                request.META.get('HTTP_REFERER', 'unknown')[:255])

            # Reset the number of pages they've been to
            visitor.page_views = 0
            visitor.session_start = now

        visitor.url = request.path

        visitor.last_update = now

        # Tracking
        #time_on_site = 0
        #if visitor.start_time:
        #    time_on_site = (now - visitor.start_time).seconds
        #print("time_on_site %s (%s)" % (time_on_site, visitor.time_on_site))
        #visitor.time_on_site = time_on_site

        SAVE_ACTIVITY = False
        if TRACK_ACTIVITIES and ACTIVITY:
            # Match against `path_info` to not include the SCRIPT_NAME
            path = request.path_info.lstrip('/')
            for url in TRACK_IGNORE_URLS:
                if url.match(path):
                    break
            else:
                SAVE_ACTIVITY = True

                visitor.page_views += 1
        else:
            path = request.path_info.lstrip('/')
            for url in TRACK_IGNORE_URLS:
                if url.match(path):
                    break
            else:
                visitor.page_views += 1

        try:
            visitor.save()
        except DatabaseError:
            log.error(
                'There was a problem saving visitor information:\n%s\n\n%s' %
                (traceback.format_exc(), locals()))

        if SAVE_ACTIVITY:
            activity = Activity(visitor=visitor,
                                url=request.path,
                                view_time=now)
            activity.save()
Ejemplo n.º 13
0
 def test_update_with_data(self):
     v1 = Visitor(self.customer, 'demo-id')
     v2 = v1.update_with_data(dict())
     self.assertIsInstance(v2, Visitor)
     self.assertEqual(v1.id, v2.id)
Ejemplo n.º 14
0
 def test_data(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertIsInstance(v.data(), dict)
Ejemplo n.º 15
0
 def test_components(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertIsInstance(v.components(), list)
Ejemplo n.º 16
0
 def test_constructor(self):
     v = Visitor(self.customer, 'demo-id')
     self.assertEqual(v.id, "demo-id")
Ejemplo n.º 17
0
    ]
    for i in range(len(usernames)):
        if (types[i] == 'staff'):
            username = User(Username=usernames[i],
                            password=passwords[i],
                            Email=emails[i],
                            UserType=types[i])
            staffname = Staff(user_staff=username)
            db.session.add_all([username, staffname])
            db.session.commit()
        if (types[i] == 'visitor'):
            username = User(Username=usernames[i],
                            password=passwords[i],
                            Email=emails[i],
                            UserType=types[i])
            visitorname = Visitor(user_visitor=username)
            db.session.add_all([username, visitorname])
            db.session.commit()
        if (types[i] == 'admin'):
            username = User(Username=usernames[i],
                            password=passwords[i],
                            Email=emails[i],
                            UserType=types[i])
            adminname = Admin(user_admin=username)
            db.session.add_all([username, adminname])
            db.session.commit()

    ##insert exhibit data
    exhibitnames = ['Pacific', 'Jungle', 'Sahara', 'Mountainous', 'Birds']
    WaterFeatures = ['Yes', 'No', 'No', 'No', 'Yes']
    sizes = [850, 600, 1000, 1200, 1000]