Ejemplo n.º 1
0
	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)
Ejemplo n.º 2
0
	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
Ejemplo n.º 3
0
	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
Ejemplo n.º 4
0
	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)
Ejemplo n.º 5
0
	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('/')
Ejemplo n.º 6
0
	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('/')
Ejemplo n.º 7
0
	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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
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)


Ejemplo n.º 10
0
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)