#!/usr/bin/env python3 import http import re from flask import Flask, render_template, request from common import doors, membershipworks app = Flask(__name__) def parse_list(member, regex): data_list = [] for key, value in member.items(): match = re.match(regex, key) if match is not None and value != "": data_list.append(match.group(1)) return ", ".join(data_list) def parse_members(members): data = [] for member in members: props = { "Name": member["Account Name"], "Renewal Date": member["Renewal Date"], "Card Number": member["Access Card Facility Code"] + "-" + member["Access Card Number"], "Account on Hold": "Yes" if member["Account on Hold"] != "" else "No", } props["Certifications"] = parse_list(member, "Certified: (.*)") props["Door Access"] = parse_list(member, "Access (.*)\?") props["Memebership Level"] = parse_list(member, "CMS (.*)") data.append(props) return data @app.route("/") def main(): # maybe not now: membership agreement signed # TODO: renewal date check term = request.args.get("term", "") if len(term) < 3: return render_template( "members.html", error="Enter at least 3 characters to search" ) data = membershipworks.get_members( ["members", "staff"], "lvl,xws,xms,xsc,xas,xfd,xac,phn,eml,lbl,xcf,nam,end" ) members = parse_members(data) members = [member for member in members if term.lower() in member["Name"].lower()] headers = [ "Name", "Certifications", "Door Access", "Memebership Level", "Card Number", "Renewal Date", "Account on Hold", ] if len(members) > 4: return render_template( "members.html", error="Too many results, please be more specific." ) return render_template("members.html", headers=headers, members=members) @app.route("/frontDoor/", methods=["POST"]) def unlockLockDoor(lock): doors["Front Door"].lockOrUnlockDoor(lock != "unlock") return ("", http.HTTPStatus.NO_CONTENT) if __name__ == "__main__": app.run(debug=True, host="0.0.0.0")