script udpate regarding awaits removed from context
This commit is contained in:
parent
e5a139c4e6
commit
f68a5db293
|
@ -1,19 +1,25 @@
|
|||
from System import Guid
|
||||
from datetime import datetime, timedelta, time
|
||||
from threading import Timer
|
||||
import json
|
||||
from json import dumps
|
||||
import csv
|
||||
import os
|
||||
import clr
|
||||
clr.AddReference("NLog")
|
||||
from NLog import LogManager
|
||||
|
||||
|
||||
# CONFIGURATION >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
ACCESS_LEVELS = {"Breakfast": ["07:00:00", "08:00:00"],
|
||||
"Lunch": ["12:01:00", "14:00:00"],
|
||||
"Dinner": ["21:00:00", "22:00:00"]
|
||||
ACCESS_LEVELS = {"Breakfast": ["04:30:00", "08:00:00"],
|
||||
"Lunch": ["11:40:00", "14:00:00"],
|
||||
"Dinner": ["17:00:00", "22:00:00"]
|
||||
}
|
||||
MONITORED_DOORS = ['Room']
|
||||
ACCESS_LEVELS_RESET_TIME = time(hour=11, minute=2, second=0)
|
||||
MONITORED_DOORS = ['CANTEEN-DOOR-L-TUR-1 Ent','CANTEEN-DOOR-L-TUR-2 Ent','CANTEEN-DOOR-R-TUR-1 Ent','CANTEEN-DOOR-R-TUR-2 Ent']
|
||||
ACCESS_LEVELS_RESET_TIME = time(hour=23, minute=23, second=0)
|
||||
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
||||
ACCESSGRANTED = Guid("891adc81-6991-44c2-8aa4-f7a0792f77f5")
|
||||
logger = LogManager.GetCurrentClassLogger()
|
||||
|
||||
class AccessLevel(object):
|
||||
def __init__(self, name, schedule):
|
||||
|
@ -46,20 +52,19 @@ class DeletedAccessLevelsContainer(object):
|
|||
|
||||
def get_users_accessLevels(self):
|
||||
result = [{"UserId": key, "AccessLevelsIds": value} for key, value in self.deletedAccessLevelsList.iteritems()]
|
||||
return json.dumps(result)
|
||||
return result
|
||||
|
||||
def add_device(self, deviceId):
|
||||
if deviceId not in self.devices["ids"]:
|
||||
self.devices["ids"].append(deviceId)
|
||||
|
||||
def add_deleted_access_level(self, userId, access_level_id, device_id):
|
||||
def add_deleted_access_level(self, userId, access_level_id, device_id, currentTime):
|
||||
if userId not in self.deletedAccessLevelsList:
|
||||
self.deletedAccessLevelsList[userId] = []
|
||||
if access_level_id not in self.deletedAccessLevelsList[userId]:
|
||||
self.deletedAccessLevelsList[userId].append(access_level_id)
|
||||
if device_id is not None:
|
||||
fileHandler.write_file(userId, access_level_id, device_id)
|
||||
|
||||
fileHandler.write_file(userId, access_level_id, device_id, currentTime)
|
||||
|
||||
|
||||
deletedAccessLevels = DeletedAccessLevelsContainer()
|
||||
|
@ -73,42 +78,48 @@ class FileHandler(object):
|
|||
with open("deletedUsers.csv", "r") as csvFile:
|
||||
reader = csv.reader(csvFile, delimiter=';')
|
||||
for row in reader:
|
||||
self.instance.add_deleted_access_level(int(row[0]), int(row[1]), None)
|
||||
self.instance.add_deleted_access_level(row[0], row[1], None, None)
|
||||
if row[2] not in deletedAccessLevels.devices["ids"]:
|
||||
deletedAccessLevels.add_device(int(row[2]))
|
||||
csvFile.close()
|
||||
print "History read success"
|
||||
except Exception as e:
|
||||
print e
|
||||
logger.Info(str(e))
|
||||
|
||||
def write_file(self, userID, accessLevelId,deviceId):
|
||||
with open("deletedUsers.csv", "a+") as csvFile:
|
||||
writer = csv.writer(csvFile, delimiter=';', lineterminator='\n')
|
||||
writer.writerow((userID, accessLevelId, deviceId))
|
||||
csvFile.close()
|
||||
def write_file(self, userID, accessLevelId, deviceId, currentDate):
|
||||
try:
|
||||
with open("deletedUsers.csv", "a+") as csvFile:
|
||||
writer = csv.writer(csvFile, delimiter=';', lineterminator='\n')
|
||||
writer.writerow((userID, accessLevelId, deviceId, currentDate))
|
||||
csvFile.close()
|
||||
except Exception as e:
|
||||
logger.Warn(str(e))
|
||||
|
||||
|
||||
accessLevelContainer = AccessLevelsContainer()
|
||||
|
||||
fileHandler = FileHandler(deletedAccessLevels)
|
||||
|
||||
|
||||
def chunks(lst):
|
||||
for i in xrange(0, len(lst), 100):
|
||||
yield lst[i:i + 100]
|
||||
|
||||
|
||||
def reset_access_levels():
|
||||
print "Access level reset executed"
|
||||
|
||||
result = context.add_users_access_levels(deletedAccessLevels.get_users_accessLevels())
|
||||
for item in chunks(deletedAccessLevels.get_users_accessLevels()):
|
||||
result = context.add_users_access_levels(dumps(item))
|
||||
if result is False:
|
||||
logger.Info("Access levels restore failed for {}".format(item))
|
||||
logger.Info("Access level reset executed")
|
||||
|
||||
if not result.Result:
|
||||
print "USER access levels update FAILED"
|
||||
context.synchronize_devices(dumps(deletedAccessLevels.devices))
|
||||
logger.Info("Devices {} synchronization started".format(deletedAccessLevels.devices))
|
||||
|
||||
for device in deletedAccessLevels.devices["ids"]:
|
||||
context.synchronize_device(device)
|
||||
# context.synchronize_devices(json.dumps(deletedAccessLevels.devices))
|
||||
print "Devices sync executed"
|
||||
deletedAccessLevels.deletedAccessLevelsList.clear()
|
||||
deletedAccessLevels.devices["ids"] = []
|
||||
os.remove("./deletedUsers.csv")
|
||||
print "Access level history file removed"
|
||||
os.remove("deletedUsers.csv")
|
||||
logger.Info("File 'deletedUsers.csv' deleted")
|
||||
|
||||
reset_scheduler()
|
||||
|
||||
|
||||
|
@ -120,7 +131,7 @@ def reset_scheduler():
|
|||
nextDay += timedelta(days=1)
|
||||
delta_t = nextDay - currentDay
|
||||
secs = delta_t.total_seconds()
|
||||
print "Reset will start at ", nextDay
|
||||
logger.Info("Reset will start at {}".format(nextDay))
|
||||
t = Timer(secs, reset_access_levels)
|
||||
t.start()
|
||||
|
||||
|
@ -131,23 +142,35 @@ def on_init():
|
|||
|
||||
|
||||
def on_event(event):
|
||||
|
||||
currentDateTime = datetime.now()
|
||||
currentTime = (currentDateTime.strftime("%H:%M:%S"))
|
||||
accessGranted = Guid("891adc81-6991-44c2-8aa4-f7a0792f77f5")
|
||||
if event.typeUid != accessGranted or (event.sourceDoorName not in MONITORED_DOORS):
|
||||
print event.typeUid
|
||||
|
||||
if event.typeUid != ACCESSGRANTED:
|
||||
return
|
||||
user = context.get_user_access_levels(event.userId)
|
||||
elif event.sourceDoorName not in MONITORED_DOORS:
|
||||
logger.Info("Door '{}' is not set to be monitored".format(event.sourceDoorName))
|
||||
return
|
||||
elif event.userId == None:
|
||||
logger.Info("UserId doesn't exist")
|
||||
return
|
||||
else:
|
||||
pass
|
||||
|
||||
for accessLevel in accessLevelContainer.accessLevelsList:
|
||||
if accessLevel.schedule[0] <= currentTime <= accessLevel.schedule[1]:
|
||||
for userAccessLevel in user.Result:
|
||||
if userAccessLevel.Name == accessLevel.name:
|
||||
accessLevelId = userAccessLevel.AccessLevelId
|
||||
deletedAccessLevel = DeletedAccessLevel(event.userId, event.deviceId, userAccessLevel)
|
||||
deletedAccessLevels.add_deleted_access_level(deletedAccessLevel.userId, accessLevelId, event.deviceId)
|
||||
deletedAccessLevels.add_device(event.deviceId)
|
||||
result = context.delete_user_access_level(userAccessLevel.Id, event.userId)
|
||||
print "User {} access level removed".format(event.userId)
|
||||
userAccessLevels = context.get_user_access_levels(event.userId)
|
||||
try:
|
||||
for accessLevel in accessLevelContainer.accessLevelsList:
|
||||
if accessLevel.schedule[0] <= currentTime <= accessLevel.schedule[1]:
|
||||
for userAccessLevel in userAccessLevels:
|
||||
if userAccessLevel.name == accessLevel.name:
|
||||
accessLevelId = userAccessLevel.accessLevelId
|
||||
deletedAccessLevel = DeletedAccessLevel(event.userId, event.deviceId, userAccessLevel)
|
||||
deletedAccessLevels.add_deleted_access_level(deletedAccessLevel.userId, accessLevelId,
|
||||
event.deviceId, currentTime)
|
||||
deletedAccessLevels.add_device(event.deviceId)
|
||||
context.delete_user_access_level(userAccessLevel.id, event.userId)
|
||||
logger.Info("User {} access level removed".format(event.userId))
|
||||
break
|
||||
except Exception as e:
|
||||
logger.Warn(str(e))
|
||||
|
||||
break
|
||||
|
|
Loading…
Reference in New Issue