def post(self): if self.has_submitted_recently(): self.redirect('whoops') return errors = dict() level = self.request.get('level') loc_string = self.request.get('location') try: level = int(level) except ValueError: errors['level'] = "You must choose a level." if not loc_string: errors['location'] = "You can't leave your location blank." if errors: self.render('comfort/index', errors=errors) else: c = Comfort.create(level, loc_string) if c: self.record_comfort(c) else: errors = { 'location': loc_string + ' is not a valid location.' } self.render('comfort/index', errors=errors)
def comforts_by_location(self, location): """Gets the comfort records for a location. Looks for a location in the format '<building>-<floor>-<room>', '<building>-<floor>', or '<building>' and pulls the specified records from the database. If no location is specified, pulls all records""" if location and not valid.location(location): self.error_code = errors.INVALID_LOCATION_FORMAT return [] if not location: comforts = [comfort for comfort in Comfort.all()] else: location_identifiers = tuple(location.split(DELIMITER)) if len(location_identifiers) == 3: comforts = Comfort.by_room(*location_identifiers) elif len(location_identifiers) == 2: comforts = Comfort.by_floor(*location_identifiers) else: comforts = Comfort.by_building(*location_identifiers) return comforts
def get(self): if not self.admin: self.redirect('/') return building = self.request.get('building', '') key = MC_GRAPH_DATA_KEY + building graph_data = memcache.get(key) if not graph_data: def build_graph_data(comfort_data, building=None): def get_location_data(comfort_data): location_data = dict() for comfort in comfort_data: location = comfort.loc_room if building else comfort.loc_building if not location_data.get(location): location_data[location] = [] x = int(comfort.timestamp.strftime("%s")) y = comfort.level data_point = { 'x': x, 'y': y } location_data[location].append(data_point) return location_data location_data = get_location_data(comfort_data) graph_data = [] for i, location in enumerate(location_data): data = location_data[location] sorted_data = sorted(data, key=lambda dp: dp['x']) color = GraphAPI.COLORS[i % len(GraphAPI.COLORS)] data_point = { 'color': color, 'name': capitalize(location), 'data': sorted_data } graph_data.append(data_point) return graph_data #one_month_ago = datetime.utcnow() - timedelta(weeks = 4) one_year_ago = datetime.utcnow() - timedelta(weeks = 52) comforts_since_last_year = Comfort.since(one_year_ago) data = [c for c in comforts_since_last_year] if building: data = filter(lambda c: c.loc_building == building, data) graph_data = build_graph_data(data, building) memcache.set(key, graph_data, time=GRAPH_REFRESH*60) self.render_json(graph_data)
def get(self, loc_key, level): l = Location.get_by_key_name(loc_key) if not l: self.redirect('/') elif self.has_submitted_recently(): self.redirect('/whoops') else: if not level: self.render('comfort/index', location=str(l)) else: try: level_int = int(level) c = Comfort.create(level_int, str(l)) if c: self.record_comfort(c) except ValueError: self.redirect('/')
def post(self): rooms_to_delete = json.loads(self.request.body) if not rooms_to_delete: self.redirect('/rooms') return locations = [Location.get_by_key_name(room) for room in rooms_to_delete] comforts = [c for c in Comfort.all()] for location in locations: comforts_to_remove = filter(lambda c: c.loc_building == location.building and \ c.loc_floor == location.floor and \ c.loc_room == location.room, comforts) db.delete(comforts_to_remove) db.delete(location) memcache.delete(MC_LOCATIONS_KEY)
def post(self): rooms_to_delete = json.loads(self.request.body) if not rooms_to_delete: self.redirect('/rooms') return locations = [ Location.get_by_key_name(room) for room in rooms_to_delete ] comforts = [c for c in Comfort.all()] for location in locations: comforts_to_remove = filter(lambda c: c.loc_building == location.building and \ c.loc_floor == location.floor and \ c.loc_room == location.room, comforts) db.delete(comforts_to_remove) db.delete(location) memcache.delete(MC_LOCATIONS_KEY)
print 'ADMINS:' for a in Admin.all(): print a.display, a.name, a.passhash, a.created import json def from_utc(utcTime,fmt="%Y-%m-%dT%H:%M:%S"): """ Convert UTC time string to time.struct_time """ # change datetime.datetime to time, return time.struct_time type return datetime.datetime.strptime(utcTime, fmt) for loc in json.load(open(sys.argv[1])): l = Location( building = string.capitalize(loc['building']), floor = loc['floor'], room = loc['room']) l.put() print (l) for comf in json.load(open(sys.argv[2])): c = Comfort(loc_building = string.capitalize(comf['loc_building']), loc_floor = comf['loc_floor'], loc_room = comf['loc_room'], level = comf['level'], timestamp = from_utc(comf['timestamp'])) c.put() print (c)
print 'ADMINS:' for a in Admin.all(): print a.display, a.name, a.passhash, a.created import json def from_utc(utcTime, fmt="%Y-%m-%dT%H:%M:%S"): """ Convert UTC time string to time.struct_time """ # change datetime.datetime to time, return time.struct_time type return datetime.datetime.strptime(utcTime, fmt) for loc in json.load(open(sys.argv[1])): l = Location(building=string.capitalize(loc['building']), floor=loc['floor'], room=loc['room']) l.put() print(l) for comf in json.load(open(sys.argv[2])): c = Comfort(loc_building=string.capitalize(comf['loc_building']), loc_floor=comf['loc_floor'], loc_room=comf['loc_room'], level=comf['level'], timestamp=from_utc(comf['timestamp'])) c.put() print(c)