from sqlalchemy import func from pyramid.csrf import get_csrf_token from pyramid.view import view_config from pyramid.httpexceptions import HTTPFound from .. import events, models, services @view_config( context="ordr3:resources.VendorList", permission="view", request_method="GET", renderer="ordr3:templates/vendors/list.jinja2", ) def vendor_list(context, request): vendors = ( request.repo.session.query(models.Vendor.name) .distinct(models.Vendor.name) .order_by(func.lower(models.Vendor.name)) .all() ) return {"vendors": vendors} @view_config( context="ordr3:resources.Vendor", permission="edit", request_method="GET", renderer="ordr3:templates/vendors/edit.jinja2", ) def vendor_edit_form(context, request): return {"form_error": False, "csrf_token": get_csrf_token(request)} @view_config( context="ordr3:resources.Vendor", permission="edit", request_method="POST", renderer="ordr3:templates/vendors/edit.jinja2", ) def vendor_edit(context, request): if "change" not in request.POST: return HTTPFound(request.resource_url(context.__parent__)) vendor = request.POST.get("vendor", "").strip() terms = request.POST.get("terms", "").strip() if vendor and terms: terms = set(terms.lower().splitlines()) canonical_name = services.canonical_vendor_name(vendor) terms.add(canonical_name.lower()) request.repo.update_vendors(context.model, vendor, terms) request.emit( events.FlashMessage.info( f"The autocorrect for {vendor} was updated." ) ) return HTTPFound(request.resource_url(context.__parent__)) return {"form_error": True, "csrf_token": get_csrf_token(request)}