def get(self): user = users.get_current_user() if user is None: login_url = users.create_login_url('/welcome') self.response.write('<html><body>{}</body></html>'.format('<a href="' + login_url + '">Sign in</a>')) return residence = Residence.get_residence_by_user(user) inventory = Inventory.get_inventory_by_user(user) other_homes = Residence.query(Residence.own==residence.own).fetch() logging.error(other_homes) rooms = [] for home in other_homes: rooms += Room.query(ancestor=home.key).filter(Room.name!="miscellaneous").fetch() room_count = {} for room in rooms: name = room.name if name in room_count: room_count[name] += 1 continue room_count[name] = 1 room_count_final = {} for room in room_count: my_count = Room.query(ancestor=residence.key).filter(Room.name==room).count() if my_count == 0: room_count_final[str(room)] = ("", room_count[room] / max(len(other_homes), 1)) else: up_count = str(my_count + 1) my_tail = "" if up_count[-1:] in ["0", "4", "5", "6", "7", "8", "9"]: my_tail = "th" elif up_count[-1:] in ["2"]: my_tail = "nd" elif up_count[-1:] in ["1"]: my_tail = "st" elif up_count[-1:] in ["3"]: my_tail = "rd" room_count_final[str(room)] = (" (" + up_count + my_tail + ")", room_count[room] / max(len(other_homes), 1) - 2 * my_count) room_count_final = sorted(room_count_final.items(), key=lambda x: x[1][1], reverse=True) template = JINJA_ENVIRONMENT.get_template('tourRoomPage.html') template_data = {'rooms': room_count_final} self.response.write(template.render(template_data))
def get(self): items = Item.query().fetch() rooms = Room.query().fetch() relations = ItemRoomRelation.query().fetch() item_dicts = [] for item in items: item_data = {} item_data["name"] = item.name item_data["category"] = item.category item_data["price"] = item.price item_data["encoded"] = urllib.quote(item.name) item_dicts.append(item_data) room_dicts = [] for room in rooms: room_data = {} room_data["name"] = room.name room_dicts.append(room_data) template_data = {} template_data['items'] = item_dicts template_data['rooms'] = room_dicts template_data['relations'] = relations template = JINJA_ENVIRONMENT.get_template('admin.html') self.response.write(template.render(template_data))
def get(self): rooms = Room.query() names = [] for room in rooms.fetch(): names.append(str(room.name)) logging.debug(names) self.response.write(json.dumps(names))
def post(self): user = users.get_current_user() if user is None: login_url = users.create_login_url('/home') template_data = {} template_data['login_url'] = login_url template = JINJA_ENVIRONMENT.get_template('login.html') self.response.write(template.render(template_data)) return residence = Residence.get_residence_by_user(user) category = self.request.get('category') name = self.request.get('name') price = self.request.get('price') room_name = self.request.get("room") if name.strip() == '' or category.strip() == '': if room_name == "miscellaneous": self.redirect("home") else: self.redirect("/room-tour?room=" + urllib.quote(room_name)) return price = float(price) inventory = Inventory.get_inventory_by_user(user) item = Item(category=category, name=name, price=price, parent=inventory.key) item.put() residence = Residence.get_residence_by_user(user) room = Room.query(ancestor=residence.key).filter(Room.name==room_name).get() if room is None: room = Room(name=room_name, parent=residence.key) room.put() relation = ItemRoomRelation(item=item.key, room=room.key, parent=inventory.key) relation.put() if room_name == "miscellaneous": self.redirect("/home") return self.redirect("/room-tour?room=" + urllib.quote(room_name))
def get(self): name = self.request.get("name") if name is '': self.response.write("no room name given") return room = Room.query(Room.name==name).get() room.popularity += 1 room.put() self.response.write(json.dumps(room.item_categories)) return
def get(self, obj_id=None): """ Gets room(s). Returns all rooms if no obj_id is passed --- tags: - rooms parameters: - in: path name: obj_id definitions: - schema: id: Room required: - number optional: - is_booked properties: number: type: string description: the room's number responses: 200: description: Returns the specified room or a list of rooms $ref: '#/definitions/Room' """ if not obj_id: query = Room.query().fetch() output = self.output_fields output.update(self.resource_fields) resp = { 'results': marshal(query, output), 'count': len(query) } return resp, 200 try: room = Room.get_by_id(int(obj_id)) if not room: abort(404, message="Room with key ({}) not found".format(obj_id)) output = self.output_fields output.update(self.resource_fields) return marshal(room, output), 200 except Exception: abort(404, message="Room with key ({}) not found".format(obj_id))
def validate(self): """ raises a Validation Error if a room with form request data 'number' already exists :return: """ val = Form.validate(self) if not val: return False room = Room.query(Room.number == self.room_number.data).get() if room.is_booked: self.room_number.errors.append( 'Room with number - {} already booked'.format( self.room_number.data)) return False self.room = room return True
def post(self, obj_id=None): """ Create a new booking/ Update a booking --- tags: - bookings parameters: - in: path name: obj_id - in: body name: body schema: id: Booking required: - room_number - customerID optional: - is_active properties: customerID: type: string description: customer id room_number: type: integer description: room number is_active: type: boolean description: room booked responses: 201: description: Booking created """ data = self.prepare_data() if obj_id: form = UpdateBookingForm(data, csrf_enabled=False) if form.validate(): booking = Booking.get_by_id(int(obj_id)) if not booking: abort(404, message="Booking with key ({}) not found".format(obj_id)) booking.is_active = form.is_active.data booking.put() room = Room.query(Room.number == booking.room_number).get() room.is_booked = True if booking.is_active is True else False room.put() output = self.output_fields output.update(self.resource_fields) return marshal(booking, output), 200 error_data = self.prepare_errors(form.errors) raise CustomException(code=400, name='Validation Failed', data=error_data) else: form = BookingForm(data, csrf_enabled=False) if form.validate(): booking = Booking(customerID=form.customerID.data, room_number=int(form.room_number.data), is_active=True) booking.put() booking.id = str(booking.key.id()) booking.put() room = Room.query(Room.number == booking.room_number).get() room.is_booked = True if booking.is_active is True else False room.put() output = self.output_fields output.update(self.resource_fields) return marshal(booking, output), 201 error_data = self.prepare_errors(form.errors) raise CustomException(code=400, name='Validation Failed', data=error_data)
def get(self): user = users.get_current_user() if user is None: login_url = users.create_login_url('/welcome') self.response.write('<html><body>{}</body></html>'.format('<a href="' + login_url + '">Sign in</a>')) return name = self.request.get("room") if name is '': self.response.write("no room specified") ResidenceTourHandler residence = Residence.get_residence_by_user(user) room = Room.query(ancestor=residence.key).filter(Room.name==name).get() if room is None: room = Room(name=name, parent=residence.key) room.put() other_rooms = Room.query(Room.name==name).fetch() relations = [] for other_room in other_rooms: relations += ItemRoomRelation.query(ItemRoomRelation.room==other_room.key).fetch() item_count = {} for relation in relations: category = relation.item.get().category if category in item_count: item_count[category] += 1 continue item_count[category] = 1 logging.error(item_count) inventory = Inventory.get_inventory_by_user(user) item_count_final = {} for item in item_count: my_count = Item.query(ancestor=inventory.key).filter(Item.category==item).count() if my_count == 0: item_count_final[str(item)] = ("", item_count[item] / max(len(other_rooms), 1)) else: up_count = str(my_count + 1) my_tail = "" if up_count[-1:] in ["0", "4", "5", "6", "7", "8", "9"]: my_tail = "th" elif up_count[-1:] in ["2"]: my_tail = "nd" elif up_count[-1:] in ["1"]: my_tail = "st" elif up_count[-1:] in ["3"]: my_tail = "rd" logging.error( "(" + up_count + my_tail + ")") item_count_final[str(item)] = ("(" + up_count + my_tail + ")", item_count[item] / max(len(other_rooms), 1) - 2 * my_count) item_count_final = sorted(item_count_final.items(), key=lambda x: x[1][1], reverse=True) logging.error(item_count_final) template = JINJA_ENVIRONMENT.get_template('tourItemPage.html') template_data = {} template_data['items'] = item_count_final template_data['room'] = room.name self.response.write(template.render(template_data))