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