memberPlumbing/membershipViewer.py

86 lines
2.2 KiB
Python
Raw Normal View History

#!/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/<lock>", 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")