72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
import re
|
|
import http
|
|
|
|
from flask import Flask, render_template, request
|
|
|
|
app = Flask(__name__)
|
|
|
|
from common import *
|
|
from doorUtil import lockOrUnlockDoor
|
|
|
|
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 = getMembershipworksData(
|
|
['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):
|
|
lockOrUnlockDoor(config['doors']['Front Door']['ip'], lock != 'unlock')
|
|
return ('', http.HTTPStatus.NO_CONTENT)
|
|
|
|
if __name__ == "__main__":
|
|
app.run(debug=True, host='0.0.0.0')
|