コード例 #1
0
ファイル: main.py プロジェクト: alexweaver/tdp-hackathon-2016
	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))
コード例 #2
0
ファイル: main.py プロジェクト: alexweaver/tdp-hackathon-2016
	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))
コード例 #3
0
ファイル: main.py プロジェクト: alexweaver/tdp-hackathon-2016
	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))
コード例 #4
0
ファイル: main.py プロジェクト: alexweaver/tdp-hackathon-2016
	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))
コード例 #5
0
ファイル: main.py プロジェクト: alexweaver/tdp-hackathon-2016
	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
コード例 #6
0
    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))
コード例 #7
0
    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
コード例 #8
0
    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)
コード例 #9
0
ファイル: main.py プロジェクト: alexweaver/tdp-hackathon-2016
	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))