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())
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())
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())
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())
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
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
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))
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))
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>.')
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>.')