Source code for controllers.stores

"""
This module handles the routes corresponding to the :class:`models.store.Store` model.

Attributes
----------
logger : logging.Logger
    The logger used to log information of module.

"""
import json
import logging

from flask import Blueprint, render_template, request, redirect, url_for
from werkzeug.wrappers import Response
from typing import Union
from models.store import Store
from models.user import requires_login, requires_admin

logger = logging.getLogger("pricing-service.controllers.stores")

store_blueprint = Blueprint('stores', __name__)


[docs]@store_blueprint.route('/') def index() -> Union[str, Response]: """ Handles the RESTful INDEX route. Returns ------- str The INDEX template. """ stores = Store.all() return render_template('stores/index.html', stores=stores)
[docs]@store_blueprint.route('/new', methods=['GET', 'POST']) @requires_admin def new() -> Union[str, Response]: """ Handles the RESTful NEW (GET method) and CREATE (POST method) routes. Returns ------- str The INDEX template if POST method, NEW template otherwise. """ if request.method == 'POST': name = request.form['name'] url_prefix = request.form['url_prefix'] tag_name = request.form['tag_name'] query = json.loads(request.form['query']) store = Store(name, url_prefix, tag_name, query) logger.debug(f"store: {store}") store.save_to_mongo() return redirect(url_for('.index')) return render_template('stores/new.html')
[docs]@store_blueprint.route('/edit/<string:store_id>', methods=['GET', 'POST']) @requires_admin def edit(store_id: str) -> Union[str, Response]: """ Handles the RESTful EDIT (GET method) and UPDATE (POST method) routes. Parameters ---------- store_id : str The :class:`models.store.Store` id Returns ------- str The INDEX template if POST method, EDIT template otherwise. """ store = Store.get_by_id(store_id) if request.method == 'POST': name = request.form['name'] url_prefix = request.form['url_prefix'] tag_name = request.form['tag_name'] query = json.loads(request.form['query']) store.name = name store.url_prefix = url_prefix store.tag_name = tag_name store.query = query logger.debug(f"store: {store}") store.save_to_mongo() return redirect(url_for('.index')) return render_template('stores/edit.html', store=store)
[docs]@store_blueprint.route('/delete/<string:store_id>') @requires_admin def delete(store_id: str) -> Union[str, Response]: """ Handles the RESTful DESTROY route. Parameters ---------- store_id : str The :class:`models.store.Store` id Returns ------- str The INDEX template. """ store = Store.get_by_id(store_id) logger.debug(f"deleting store: {store}") store.remove_from_mongo() return redirect(url_for('.index'))