doorUpdater: Do hashing on output csvs instead of MembershipWorks input

This commit is contained in:
Adam Goldsmith 2018-06-02 14:37:53 -04:00
parent 3df228afd5
commit 71d3f9ecea

View File

@ -56,14 +56,7 @@ def getMembershipworksData():
print(r.text) print(r.text)
sys.exit(1) sys.exit(1)
newHash = md5(bytes(r.text, 'utf8')).hexdigest() return r.text
if os.path.exists('/tmp/doorUpdaterLastHash'):
with open('/tmp/doorUpdaterLastHash', 'r') as f:
if newHash == f.read():
print("hashes are the same, not updating")
sys.exit(0)
return r.text, newHash
def makeMember(member, doorAuth): def makeMember(member, doorAuth):
"""Create an output CSV row for the member""" """Create an output CSV row for the member"""
@ -92,7 +85,7 @@ def makeMember(member, doorAuth):
return out return out
def makeDoor(doorName, doorData, members): def makeDoor(doorName, doorData, members, prevHash):
"""Create a CSV for the given door""" """Create a CSV for the given door"""
outString = StringIO() outString = StringIO()
writer = csv.DictWriter(outString, fieldnames) writer = csv.DictWriter(outString, fieldnames)
@ -105,21 +98,33 @@ def makeDoor(doorName, doorData, members):
print(outString.getvalue()) print(outString.getvalue())
outString.seek(0) outString.seek(0)
doCSVImport(doorData["ip"], outString) doorHash = md5(bytes(outString.getvalue(), 'utf8')).hexdigest()
pass if doorHash == prevHash:
print("Door", doorName, "not changed, not updating")
else:
doCSVImport(doorData["ip"], outString)
return doorHash
def main(): def main():
data, newHash = getMembershipworksData() data = getMembershipworksData()
reader = csv.DictReader(StringIO(data)) reader = csv.DictReader(StringIO(data))
members = list(reader) members = list(reader)
if os.path.exists('/tmp/doorUpdaterLastHash'):
with open('/tmp/doorUpdaterLastHash', 'r') as f:
hashes = json.load(f)
else:
hashes = {}
for doorName, doorData in config["doors"].items(): for doorName, doorData in config["doors"].items():
print(doorName, doorData) print(doorName, doorData)
makeDoor(doorName, doorData, members) hashes[doorName] = makeDoor(doorName, doorData, members,
hashes.get(doorName, ""))
# write out hash if we sucessfully got here # write out hash if we sucessfully got here
with open('/tmp/doorUpdaterLastHash', 'w') as f: with open('/tmp/doorUpdaterLastHash', 'w') as f:
f.write(newHash) json.dump(hashes, f)
if __name__ == '__main__': if __name__ == '__main__':
main() main()