Make executable, clean up style, and rename new door updater

This commit is contained in:
Adam Goldsmith 2019-11-08 16:07:26 -05:00
parent 21a9aa5b5c
commit 2b894d3cc9

21
new_xml_based.py → doorUpdater.py Normal file → Executable file
View File

@ -1,11 +1,10 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import requests
from lxml import etree
from common import doors, getMembershipworksData, memberLevels from common import doors, getMembershipworksData, memberLevels
from hid.DoorController import E, ROOT from hid.DoorController import E, ROOT
from hid.Credential import Credential from hid.Credential import Credential
class Member(): class Member():
def __init__(self, forename, surname, membershipWorksID, def __init__(self, forename, surname, membershipWorksID,
middleName="", email="", phone="", middleName="", email="", phone="",
@ -129,9 +128,10 @@ def update_door(door, members):
allCredentials = set(Credential(hex=c.attrib['rawCardNumber']) allCredentials = set(Credential(hex=c.attrib['rawCardNumber'])
for c in door.get_credentials()) for c in door.get_credentials())
for member in members:
# TODO: can I combine requests? # TODO: can I combine requests?
if member.membershipWorksID in cardholders: # cardholder exists, compare contents for member in members:
# cardholder exists, compare contents
if member.membershipWorksID in cardholders:
ch = cardholders.pop(member.membershipWorksID) ch = cardholders.pop(member.membershipWorksID)
member.cardholderID = ch.cardholderID member.cardholderID = ch.cardholderID
if member.attribs() != ch.attribs(): # update cardholder attributes if member.attribs() != ch.attribs(): # update cardholder attributes
@ -179,25 +179,28 @@ def update_door(door, members):
door.doXMLRequest(ROOT(member.make_credentials( door.doXMLRequest(ROOT(member.make_credentials(
newCards - allCredentials, cardFormats))) newCards - allCredentials, cardFormats)))
if member.schedulesForDoor(door) != ch.schedules: if member.schedulesForDoor(door) != ch.schedules:
print("- Updating schedule for" + print("- Updating schedule for" +
f" {member.forename} {member.surname}:" + f" {member.forename} {member.surname}:" +
f" {ch.schedules} -> {member.schedulesForDoor(door)}") f" {ch.schedules} -> {member.schedulesForDoor(door)}")
door.doXMLRequest(ROOT(member.make_schedules(door, schedulesMap))) door.doXMLRequest(ROOT(
member.make_schedules(door, schedulesMap)))
else: # cardholder did not exist, so add them else: # cardholder did not exist, so add them
print(f"- Adding Member:") print(f"- Adding Member:")
print(member) print(member)
resp = door.doXMLRequest(ROOT( resp = door.doXMLRequest(ROOT(
E.Cardholders({"action": "AD"}, E.Cardholders(
{"action": "AD"},
E.Cardholder(member.attribs())))) E.Cardholder(member.attribs()))))
member.cardholderID = resp.find('{*}Cardholders/{*}Cardholder') \ member.cardholderID = resp.find('{*}Cardholders/{*}Cardholder') \
.attrib["cardholderID"] .attrib["cardholderID"]
door.doXMLRequest(ROOT(member.make_credentials(member.credentials, cardFormats), door.doXMLRequest(ROOT(
member.make_credentials(member.credentials, cardFormats),
member.make_schedules(door, schedulesMap))) member.make_schedules(door, schedulesMap)))
# TODO: delete cardholders that are no longer members? # TODO: delete cardholders that are no longer members?
def main(): def main():
memberData = getMembershipworksData( memberData = getMembershipworksData(
['members', 'staff', 'misc'], ['members', 'staff', 'misc'],
@ -209,4 +212,6 @@ def main():
print(door.name, door.ip) print(door.name, door.ip)
update_door(door, members) update_door(door, members)
if __name__ == '__main__':
main() main()