def create_alert(item_id): """create_alert(string id) -> returns redirect or render form object Takes an item id and creates a new alert for that item :parameter `item_id`: An item ID that allow the user to create an alert for that item """ item = Item.get_item_by_id(item_id=item_id) form = NewAlertForm() if item and form.validate_on_submit(): alert = Alert( price_limit=form.alert_limit.data, item_id=item_id, ) item.alert_added = True item.alert = alert.save() item.save() return redirect(url_for('alert_app.all_alerts', page=1)) return render_template('alerts/new_alert.html', form=form, item_id=item_id, item=item)
def delete_alert(item_id, alert_id): """delete_alert(string ID, string ID) -> returns redirect obj Allows the user to delete an alert for a given item. Note the item must already have alert. :parameter `item_id` : A string ID that represents a given item `alert_id`: A String ID that represents an alert for a given item """ Alert.delete_alert_by_id(item_id, alert_id) return redirect(url_for('.all_alerts', page=1))
def get_alert_page(alert_id=None): """get_alert_page(str ID default None) -> returns redirect obj or render template A permalink page that returns an alert for a given item :parameter `alert_id`: The alert ID for a given item """ alert = Alert.get_alert_by_id(alert_id) if not alert: return redirect(url_for('.alert_not_created_error')) return render_template('alerts/alert.html', alert=Alert.get_alert_by_id(alert_id))
def deactivate_alert(item_id, alert_id): """deactivate_alert(string ID, string ID) -> returns redirect obj Allows the user to deactivate an alert for a given item. Note the alert must be created and active :parameter `item_id` : A string ID that represents a given item `alert_id`: A String ID that represents an alert for a given item """ Alert.deactivate_alert(item_id, alert_id) if is_safe_url(request.referrer): return redirect(request.referrer) return redirect(url_for('.get_alert_page', alert_id=alert_id))
def edit_my_alert(alert_id): """edit_my_alert(string id) -> returns render template or redirect obj Allows the user to edit an active alert. :parameter `alert_id`: An string ID that represents a given alert """ alert, error = Alert.get_alert_by_id(alert_id), '' form = EditAlertForm() if request.method == 'POST' and form.validate_on_submit(): alert.update({'price_limit': form.alert_limit.data}) return redirect(url_for('user_app.user_alerts')) try: return render_template('alerts/edit_alert.html', form=form, alert=alert, alert_id=alert_id, error=error) except: return redirect(url_for('.alert_creation_error'))
def activate_alert(item_id, alert_id): """activate_alert(string ID, string ID) -> returns redirect obj Allows the user to activate an alert for a given item. Note the item must already have alert and it must be disabled. :parameter `item_id` : A string ID that represents a given item `alert_id`: A String ID that represents an alert for a given item """ Alert.activate_alert(item_id, alert_id) if is_safe_url(request.referrer): return redirect(request.referrer) return redirect(url_for('.get_alert_page', alert_id=alert_id))
def check_price_for_alert(alert_id): """check_price_for_alert(string ID) -> returns (redirect obj or render template) Checks whether the user's item has reached the given price that was set by the user :parameter `alert_id`: The alert ID for a given item """ try: alert = Alert.load_alert(alert_id) except ValueError: return redirect(url_for('.check_price_error')) else: alert.load_price(fetch_new=True) return redirect(url_for('.get_alert_page', alert_id=alert_id))
def all_alerts(page=1): """Returns all alerts set by the user""" return render_template('alerts/alerts.html', alerts=Alert.get_alerts(page))