forked from alexaorrico/AirBnB_clone_v2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplaces_amenities.py
72 lines (60 loc) · 2.41 KB
/
places_amenities.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/python3
'''Contains the places_amenities view for the API.'''
from flask import abort, jsonify, make_response
from api.v1.views import app_views
from models import storage
from models import amenity
from models.amenity import Amenity
from models.place import Place
from os import getenv
@app_views.route('/places/<place_id>/amenities',
methods=['GET'], strict_slashes=False)
def place_amenities(place_id):
"""Retrieves the list of all Amenity objects of a Place"""
obj_place = storage.get(Place, place_id)
if not obj_place:
abort(404)
if getenv('HBNB_TYPE_STORAGE') == 'db':
obj = [amenity.to_dict() for amenity in obj_place.amenities]
else:
obj = [storage.get(Amenity, amenity_id).to_dict()
for amenity_id in obj_place.amenity_ids]
return jsonify(obj)
@app_views.route('/places/<place_id>/amenities/<amenity_id>',
methods=['DELETE'], strict_slashes=False)
def del_place_amenity(place_id, amenity_id):
"""Returns an empty dictionary with the status code 200"""
obj_place = storage.get(Place, place_id)
if not obj_place:
abort(404)
obj_amenity = storage.get(Amenity, amenity_id)
if not obj_amenity:
abort(404)
for elem in obj_place.amenities:
if elem.id == obj_amenity.id:
if getenv('HBNB_TYPE_STORAGE') == 'db':
obj_place.amenities.remove(obj_amenity)
else:
obj_place.amenity_ids.remove(obj_amenity)
storage.save()
return make_response(jsonify({}), 200)
@app_views.route('/places/<place_id>/amenities/<amenity_id>',
methods=['POST'], strict_slashes=False)
def link_place_amenity(place_id, amenity_id):
"""Returns the Amenity with the status code 201"""
obj_place = storage.get(Place, place_id)
if not obj_place:
abort(404)
obj_amenity = storage.get(Amenity, amenity_id)
if not obj_amenity:
abort(404)
if getenv('HBNB_TYPE_STORAGE') == 'db':
if obj_amenity in obj_place.amenities:
return make_response(jsonify(obj_amenity.to_dict()), 200)
obj_place.amenities.append(obj_amenity)
else:
if amenity_id in obj_place.amenity_ids:
return make_response(jsonify(obj_amenity.to_dict()), 200)
obj_place.amenity_ids.append(amenity_id)
storage.save()
return make_response(jsonify(obj_amenity.to_dict()), 201)