예제 #1
0
파일: views.py 프로젝트: NZDIS/TobaccoFree
def prepare_stats_per_city():
    citynames =  Observation.objects.distinct('loc_city')
    cities = []
    for c in citynames:
        obs = Observation.objects(loc_city = c)
        city = prepare_stats_for_observations(obs)
        city['city_name'] = c
        cities.append(city)
    return sorted(cities, key=lambda c: c['city_name'].lower())
예제 #2
0
파일: views.py 프로젝트: NZDIS/TobaccoFree
def prepare_stats_per_country():
    countrynames =  Observation.objects.distinct('loc_country')
    countries = []
    for c in countrynames:
        obs = Observation.objects(loc_country = c)
        country = prepare_stats_for_observations(obs)
        country['country_name'] = c
        countries.append(country)
    return sorted(countries, key=lambda c: c['country_name'].lower())
예제 #3
0
def prepare_stats_per_city():
    citynames = Observation.objects.distinct('loc_city')
    cities = []
    for c in citynames:
        obs = Observation.objects(loc_city=c)
        city = prepare_stats_for_observations(obs)
        city['city_name'] = c
        cities.append(city)
    return sorted(cities, key=lambda c: c['city_name'].lower())
예제 #4
0
def prepare_stats_per_country():
    countrynames = Observation.objects.distinct('loc_country')
    countries = []
    for c in countrynames:
        obs = Observation.objects(loc_country=c)
        country = prepare_stats_for_observations(obs)
        country['country_name'] = c
        countries.append(country)
    return sorted(countries, key=lambda c: c['country_name'].lower())
예제 #5
0
파일: views.py 프로젝트: NZDIS/TobaccoFree
def prepareStatistics():
    b = {}
    b['number_of_registered_observers'] = RegisteredObserver.objects.count()
    b['number_of_active_observers'] = len(Observation.objects().distinct("user"))
    number_of_observations = Observation.objects.count()
    b['number_of_observations'] = number_of_observations
    number_of_iphone_observations = Observation.objects(device_type__icontains='iphone').count()
    b['number_of_iphone_observations'] = number_of_iphone_observations
    b['number_of_android_observations'] = number_of_observations - number_of_iphone_observations
    
    (total_cars, total_non_smokers) = get_cars_and_nonsmokers(Observation.objects)
    
    b['number_of_cars'] = total_cars
    prob_non_smoke = float(float(total_non_smokers) / float(total_cars))
    b['ratio_of_smokers'] = (1.0 - prob_non_smoke) * 100.0
    b['ratio_of_smokers_interval'] = CI_interval(prob_non_smoke, total_cars)
    
    b['countries'] = prepare_stats_per_country()
    b['cities'] = prepare_stats_per_city()
    return b
예제 #6
0
def prepareStatistics():
    b = {}
    b['number_of_registered_observers'] = RegisteredObserver.objects.count()
    b['number_of_active_observers'] = len(
        Observation.objects().distinct("user"))
    number_of_observations = Observation.objects.count()
    b['number_of_observations'] = number_of_observations
    number_of_iphone_observations = Observation.objects(
        device_type__icontains='iphone').count()
    b['number_of_iphone_observations'] = number_of_iphone_observations
    b['number_of_android_observations'] = number_of_observations - number_of_iphone_observations

    (total_cars,
     total_non_smokers) = get_cars_and_nonsmokers(Observation.objects)

    b['number_of_cars'] = total_cars
    prob_non_smoke = float(float(total_non_smokers) / float(total_cars))
    b['ratio_of_smokers'] = (1.0 - prob_non_smoke) * 100.0
    b['ratio_of_smokers_interval'] = CI_interval(prob_non_smoke, total_cars)

    b['countries'] = prepare_stats_per_country()
    b['cities'] = prepare_stats_per_city()
    return b
예제 #7
0
파일: views.py 프로젝트: NZDIS/TobaccoFree
def do_list(request):
    print Observation.objects.distinct('loc_city')
    
    observer = RegisteredObserver.objects.get(user=request.user)
    obs = Observation.objects(user=observer)
    obs_conv = []
    for o in obs:
        sec = o.duration / 1000
        minute = sec / 60
        sec = sec - (minute * 60)
        o.duration = '%dmin %dsec' % (minute, sec)
        obs_conv.append(o) 
    return render_to_response('observation/list.html',
                                        {'observer': observer,
                                         'observations': obs_conv},
                                        context_instance=RequestContext(request))
예제 #8
0
def do_list(request):
    print Observation.objects.distinct('loc_city')

    observer = RegisteredObserver.objects.get(user=request.user)
    obs = Observation.objects(user=observer)
    obs_conv = []
    for o in obs:
        sec = o.duration / 1000
        minute = sec / 60
        sec = sec - (minute * 60)
        o.duration = '%dmin %dsec' % (minute, sec)
        obs_conv.append(o)
    return render_to_response('observation/list.html', {
        'observer': observer,
        'observations': obs_conv
    },
                              context_instance=RequestContext(request))
예제 #9
0
def add(request):
    '''
    Processes a POST request with Observation data, and puts new record into a DB.
    '''
    #   logger.debug("Got a request.POST: {0}".format(request.POST))
    json_str = request.POST.get('Observation')
    #   logger.debug(u"Got a request.POST.Observation string: {0}".format(json_str))
    json
    if request.method == "POST":
        #       logger.debug('parsing...')
        try:
            new_ob = json.loads(json_str)
        except:
            try:
                #               logger.debug('Workaround missing closing } in json stream')
                new_ob = json.loads(json_str + '}')
            except:
                #               logger.debug("Json malformed")
                return HttpResponseBadRequest(
                    "Data malformed, cannot complete the upload.")
        logger.debug(u"new_ob after parsing: {0}".format(new_ob))
        email_str = new_ob.get('user_email')
        try:
            userId = User.objects.get(username=email_str)
            u = RegisteredObserver.objects.get(user=userId)
        except:
            logger.debug("User doesn't exist")
            return HttpResponseForbidden("No user with this email address.")
        data_pass_hash = new_ob.get('pass_hash')
        alongitude = float(new_ob.get('longitude'))
        alatitude = float(new_ob.get('latitude'))
        astart = new_ob.get('start')
        afinish = new_ob.get('finish')
        version = int(new_ob.get('version', '1'))
        if (u.password_hash == data_pass_hash) and u.registration_confirmed:
            if version == 1:
                o = Observation(observation_hash=new_ob.get('hash'),
                                latitude=alatitude,
                                longitude=alongitude,
                                loc=[alongitude, alatitude],
                                start=datetime.fromtimestamp(astart / 1000.0),
                                finish=datetime.fromtimestamp(afinish /
                                                              1000.0),
                                duration=(afinish - astart),
                                no_smoking=int(new_ob.get('lone_adult')),
                                other_adults=int(new_ob.get('child')),
                                lone_adult=int(new_ob.get('other_adults')),
                                child=0,
                                device_id=new_ob.get('device'),
                                upload_timestamp=datetime.now(),
                                user=u)
            elif version == 2:
                o = Observation(observation_hash=new_ob.get('hash'),
                                latitude=alatitude,
                                longitude=alongitude,
                                loc=[alongitude, alatitude],
                                start=datetime.fromtimestamp(astart / 1000.0),
                                finish=datetime.fromtimestamp(afinish /
                                                              1000.0),
                                duration=(afinish - astart),
                                no_smoking=int(new_ob.get('no_smoking')),
                                other_adults=int(new_ob.get('other_adults')),
                                lone_adult=int(new_ob.get('lone_adult')),
                                child=int(new_ob.get('child')),
                                device_id=new_ob.get('device'),
                                upload_timestamp=datetime.now(),
                                user=u)
            else:
                #version 3, we have details!
                #version 4, we have phone type!
                o = Observation(observation_hash=new_ob.get('hash'),
                                latitude=alatitude,
                                longitude=alongitude,
                                loc=[alongitude, alatitude],
                                start=datetime.fromtimestamp(astart / 1000.0),
                                finish=datetime.fromtimestamp(afinish /
                                                              1000.0),
                                duration=(afinish - astart),
                                no_smoking=int(new_ob.get('no_smoking')),
                                other_adults=int(new_ob.get('other_adults')),
                                lone_adult=int(new_ob.get('lone_adult')),
                                child=int(new_ob.get('child')),
                                device_id=new_ob.get('device'),
                                upload_timestamp=datetime.now(),
                                user=u)
                details = new_ob.get('details')
                for d in details:
                    tmp_detail = Detail()
                    tmp_detail.timestamp = datetime.fromtimestamp(
                        d.get('timestamp') / 1000.0)
                    tmp_detail.smoking_id = int(d.get('smoking_id'))
                    o.details.append(tmp_detail)
                # version 4, device type check:
                device_type = new_ob.get('device_type')
                if (device_type != None and device_type != ''):
                    o.device_type = device_type

            (city, country) = geocode(o.latitude, o.longitude)
            o.loc_city = city
            o.loc_country = country
            o.save(safe=True)
            print "Adding observation", o
            logger.debug("New instance of an Observation has been saved!")
            return HttpResponse("Observation was added. Success.")
        else:
            logger.debug("User provided wrong password")
            return HttpResponseForbidden("Bad credentials.")
    else:
        logger.debug("got GET instead of POST")
        return HttpResponse('Go back <a href="/">to TobaccoFree home</a>.')
예제 #10
0
파일: views.py 프로젝트: NZDIS/TobaccoFree
def add(request):
    '''
    Processes a POST request with Observation data, and puts new record into a DB.
    '''
#   logger.debug("Got a request.POST: {0}".format(request.POST))
    json_str = request.POST.get('Observation')
#   logger.debug(u"Got a request.POST.Observation string: {0}".format(json_str))
    json
    if request.method == "POST":
#       logger.debug('parsing...')
        try:
            new_ob = json.loads(json_str)
        except:
            try:
#               logger.debug('Workaround missing closing } in json stream')
                new_ob = json.loads(json_str + '}')
            except:
#               logger.debug("Json malformed")
                return HttpResponseBadRequest("Data malformed, cannot complete the upload.")
        logger.debug(u"new_ob after parsing: {0}".format(new_ob))
        email_str = new_ob.get('user_email')
        try:
            userId = User.objects.get(username=email_str)
            u = RegisteredObserver.objects.get(user=userId)
        except:
            logger.debug("User doesn't exist")
            return HttpResponseForbidden("No user with this email address.")
        data_pass_hash = new_ob.get('pass_hash')
        alongitude = float(new_ob.get('longitude'))
        alatitude = float(new_ob.get('latitude'))
        astart = new_ob.get('start')
        afinish = new_ob.get('finish')
        version = int(new_ob.get('version', '1'))
        if (u.password_hash == data_pass_hash) and u.registration_confirmed:
            if version == 1:
                o = Observation(
                        observation_hash = new_ob.get('hash'),
                        latitude = alatitude,
                        longitude = alongitude,
                        loc = [alongitude, alatitude],
                        start = datetime.fromtimestamp(astart / 1000.0),
                        finish = datetime.fromtimestamp(afinish / 1000.0),
                        duration = (afinish - astart),
                        no_smoking = int(new_ob.get('lone_adult')),
                        other_adults = int(new_ob.get('child')),
                        lone_adult = int(new_ob.get('other_adults')),
                        child = 0,
                        device_id = new_ob.get('device'),
                        upload_timestamp = datetime.now(),
                        user = u)
            elif version == 2:
                o = Observation(
                        observation_hash = new_ob.get('hash'),
                        latitude = alatitude,
                        longitude = alongitude,
                        loc = [alongitude, alatitude],
                        start = datetime.fromtimestamp(astart / 1000.0),
                        finish = datetime.fromtimestamp(afinish / 1000.0),
                        duration = (afinish - astart),
                        no_smoking = int(new_ob.get('no_smoking')),
                        other_adults = int(new_ob.get('other_adults')),
                        lone_adult = int(new_ob.get('lone_adult')),
                        child = int(new_ob.get('child')),
                        device_id = new_ob.get('device'),
                        upload_timestamp = datetime.now(),
                        user = u)
            else:
                #version 3, we have details! 
                #version 4, we have phone type!
                o = Observation(
                        observation_hash = new_ob.get('hash'),
                        latitude = alatitude,
                        longitude = alongitude,
                        loc = [alongitude, alatitude],
                        start = datetime.fromtimestamp(astart / 1000.0),
                        finish = datetime.fromtimestamp(afinish / 1000.0),
                        duration = (afinish - astart),
                        no_smoking = int(new_ob.get('no_smoking')),
                        other_adults = int(new_ob.get('other_adults')),
                        lone_adult = int(new_ob.get('lone_adult')),
                        child = int(new_ob.get('child')),
                        device_id = new_ob.get('device'),
                        upload_timestamp = datetime.now(),
                        user = u)
                details = new_ob.get('details')
                for d in details :
                    tmp_detail = Detail()
                    tmp_detail.timestamp = datetime.fromtimestamp(d.get('timestamp') / 1000.0)
                    tmp_detail.smoking_id = int(d.get('smoking_id'))
                    o.details.append(tmp_detail)
                # version 4, device type check:
                device_type = new_ob.get('device_type')
                if (device_type != None and device_type != ''):
                    o.device_type = device_type
                
            (city, country) = geocode(o.latitude, o.longitude)
            o.loc_city = city
            o.loc_country = country
            o.save(safe=True)
            print "Adding observation", o
            logger.debug("New instance of an Observation has been saved!")
            return HttpResponse("Observation was added. Success.")
        else:
            logger.debug("User provided wrong password")
            return HttpResponseForbidden("Bad credentials.")
    else:
        logger.debug("got GET instead of POST")
        return HttpResponse('Go back <a href="/">to TobaccoFree home</a>.')