memberPlumbing/common.py

79 lines
3.0 KiB
Python
Raw Permalink Normal View History

import csv
2019-12-20 18:42:06 -05:00
from ruamel.yaml import YAML
import urllib3
2018-08-13 15:46:00 -04:00
import os
2018-06-03 14:26:58 -04:00
import sys
from io import StringIO
import requests
2018-08-16 14:01:42 -04:00
from hid.DoorController import DoorController
2019-12-20 18:42:06 -05:00
from passwords import (DOOR_USERNAME, DOOR_PASSWORD,
MEMBERSHIPWORKS_USERNAME, MEMBERSHIPWORKS_PASSWORD)
# it's fine, ssl certs are for losers anyway
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
2018-08-16 12:52:25 -04:00
try:
2019-12-20 18:42:06 -05:00
with open(os.path.dirname(os.path.abspath(__file__)) + "/config.yaml") as f:
config = YAML().load(f)
2018-08-16 12:52:25 -04:00
except NameError:
2019-12-20 18:42:06 -05:00
with open("config.yaml") as f:
config = YAML().load(f)
2018-08-16 14:01:42 -04:00
doors = {doorName: DoorController(doorData['ip'],
DOOR_USERNAME, DOOR_PASSWORD,
name=doorName, access=doorData['access'])
for doorName, doorData in config["doors"].items()}
2019-12-20 18:42:06 -05:00
memberLevels = config['memberLevels']
doorSpecificSchedules = config['doorSpecificSchedules']
def getMembershipworksData(folders, columns):
""" Pull the members csv from the membershipworks api
folders: a list of the names of the folders to get
(see folder_map in this function for mapping to ids)
columns: which columns to get"""
BASE_URL = "https://api.membershipworks.com/v1/"
folder_map = {'members': '5ae37979f033bfe8534f8799',
'staff': '5771675edcdf126302a2f6b9',
'misc': '5b69ee9bf033bf8e7346c434'}
# login
r = requests.post(BASE_URL + 'usr',
data={"_st": "all",
"eml": MEMBERSHIPWORKS_USERNAME,
"org": "10000",
"pwd": MEMBERSHIPWORKS_PASSWORD})
if r.status_code != 200 or 'SF' not in r.json():
print("MembershipWorks Login Error: ", r.status_code, r.reason)
print(r.text)
sys.exit(1)
login_data = r.json()
# get list of member/staff IDs
r = requests.get(BASE_URL + "ylp",
params={"SF": login_data['SF'],
"lbl": ",".join([folder_map[f] for f in folders]),
"org": login_data['org'],
"var": "_id,nam,ctc"})
if r.status_code != 200 or 'usr' not in r.json():
print("MembershipWorks User Listing Error: ", r.status_code, r.reason)
print(r.text)
sys.exit(1)
ids = [user['uid'] for user in r.json()['usr']]
# get members CSV
# TODO: maybe can just use previous get instead? would return JSON
r = requests.post(BASE_URL + "csv",
params={"SF": login_data['SF']},
data={"_rt": "946702800", # unknown
"mux": "", # unknown
"tid": ",".join(ids), # ids of members to get
"var": columns})
if r.status_code != 200:
print("MembershipWorks CSV Generation Error: ", r.status_code, r.reason)
print(r.text)
sys.exit(1)
return list(csv.DictReader(StringIO(r.text)))