def add_bike(): """ Takes bike object from BikeIndex API and adds bike info to db""" bike_JSON= request.form.get("bike") # Get JSON bike object from ajax ({bike: bikedata}) bike = json.loads(bike_JSON) # JSON string --> Python dictionary if bike["stolen"]: return "Stolen bike! Do not add." # Create new bike instance for bike table new_bike = Bike() # Populate bike attributes new_bike.id = bike["id"] new_bike.user_id = g.user new_bike.serial = bike["serial"] new_bike.size = bike["frame_size"] new_bike.manufacturer = bike["manufacturer_name"] new_bike.rear_tire_narrow = bike["rear_tire_narrow"] new_bike.type_of_cycle = bike["type_of_cycle"] new_bike.bikeindex_url = bike["url"] new_bike.photo = bike["photo"] new_bike.thumb = bike["thumb"] new_bike.title = bike["manufacturer_name"] + " " + bike["frame_model"] new_bike.frame_model = bike["frame_model"] new_bike.year = bike["year"] new_bike.paint_description = bike["paint_description"] new_bike.front_tire_narrow = bike["front_tire_narrow"] # list of valid size categories valid_sizes = ['xs','s','m','l','xl'] # normalizing frame size measurements if len(new_bike.size) > 0 and new_bike.size not in valid_sizes: if new_bike.size.endswith('in'): # converting inches to centimeters size_convert = float(new_bike.size[:-2]) * 2.54 elif new_bike.size.endswith('cm'): # floating the cm size_convert = float(new_bike.size[:-2]) else: size_convert = "no need to convert" new_bike.size_category = new_bike.size # putting sizes into categories if type(size_convert) is float: if size_convert < 50: new_bike.size_category = "xs" elif size_convert >= 50 and size_convert <= 53: new_bike.size_category = "s" elif size_convert > 53 and size_convert <= 56: new_bike.size_category = "m" elif size_convert > 56 and size_convert <= 59: new_bike.size_category = "l" elif size_convert > 59: new_bike.size_category = "xl" # changing size abbrevation for display size_to_display = {"xs": "Extra Small", "s":"Small", "m":"Medium", "l":"Large", "xl": "Extra Lsarge" } if new_bike.size in valid_sizes: new_bike.size = size_to_display[new_bike.size] # breaking frame colors out of list format new_bike.frame_colors = "" for color in bike["frame_colors"]: new_bike.frame_colors += color if bike["handlebar_type"] != None: new_bike.handlebar_type = bike["handlebar_type"].get("name", None) if bike["frame_material"] != None: new_bike.frame_material = bike["frame_material"].get("name", None) if bike["rear_wheel_size"] != None: new_bike.rear_wheel_size = bike["rear_wheel_size"].get("name", None) new_bike.rear_wheel_size_iso_bsd = bike["rear_wheel_size"].get("iso_bsd", None) if bike["front_wheel_size"] != None: new_bike.front_wheel_size = bike["front_wheel_size"].get("name", None) new_bike.front_wheel_size_iso_bsd = bike["front_wheel_size"].get("iso_bsd", None) if bike["front_gear_type"] != None: new_bike.front_gear_type = bike["front_gear_type"].get("name", None) if bike["rear_gear_type"] != None: new_bike.rear_gear_type = bike["rear_gear_type"].get("name", None) # Add bike to session and commit changes db.session.add(new_bike) db.session.commit() # Store bike id in flask session (to remember it for listing) flask_session["bike"] = bike["id"] return "Added bike to database"