You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.4 KiB
Python
152 lines
4.4 KiB
Python
"""
|
|
Module holding conversion definitions
|
|
"""
|
|
from datetime import datetime
|
|
from System import DateTime
|
|
from . deftypes import TimeZone, TimeSlot, AccessLevel
|
|
|
|
|
|
def date_time_to_py(val):
|
|
"""Convert dotnet date time format to python presentation
|
|
|
|
Returns python datetime object.
|
|
"""
|
|
return datetime(
|
|
year=val.Year, month=val.Month, day=val.Day,
|
|
hour=val.Hour, minute=val.Minute, second=val.Second)
|
|
|
|
|
|
def date_time_to_net(val):
|
|
"""Convert python to dotnet date time presentation
|
|
|
|
Returns dotnet DateTime object.
|
|
"""
|
|
return DateTime(
|
|
val.year, val.month, val.day,
|
|
val.hour, val.minute, val.second)
|
|
|
|
|
|
def flex_date_time_to_net(val):
|
|
"""Convert python to dotnet date time presentation when required
|
|
|
|
Returns dotnet DateTime object or None.
|
|
"""
|
|
if val is None:
|
|
return val
|
|
|
|
if type(val) is datetime:
|
|
return date_time_to_net(val)
|
|
|
|
if not type(val) is DateTime:
|
|
raise TypeError(
|
|
("The time value supplied (%s), " +
|
|
"can not be interpreted as a dotnet DateTime object") %
|
|
(str(val)))
|
|
return val
|
|
|
|
|
|
def time_zones_to_py(dataset):
|
|
"""Convert Net2 time zones dataset to a python presentation
|
|
|
|
Returns array of TimeZone objects.
|
|
"""
|
|
if not dataset or dataset.Tables.Count != 2:
|
|
raise Exception('Timezone dataset is invalid')
|
|
|
|
result = []
|
|
|
|
for tz_row in dataset.Tables[0].Rows:
|
|
time_zone = TimeZone(
|
|
id=tz_row.TimezoneID,
|
|
name=tz_row.Name)
|
|
|
|
ts_rows = dataset.Tables[1].Select('TimezoneID=%d' % time_zone.id)
|
|
for ts_row in ts_rows:
|
|
time_slot = TimeSlot(
|
|
id=ts_row.SlotID,
|
|
day=ts_row.Day,
|
|
start_time=date_time_to_py(ts_row.StartTime),
|
|
end_time=date_time_to_py(ts_row.EndTime))
|
|
time_zone.slots.append(time_slot)
|
|
|
|
result.append(time_zone)
|
|
return result
|
|
|
|
|
|
def access_levels_to_py(dataset):
|
|
"""Convert Net2 access_level dataset to a python presentation
|
|
|
|
Returns array of AccessLevel objects.
|
|
"""
|
|
if not dataset or dataset.Tables.Count != 1:
|
|
raise Exception('AccessLevel dataset is invalid')
|
|
|
|
result = []
|
|
|
|
for al_row in dataset.Tables[0].Rows:
|
|
access_level = AccessLevel(
|
|
id=al_row.get_Item("AccessLevelID"),
|
|
name=al_row.get_Item("AccessLevelName"))
|
|
result.append(access_level)
|
|
|
|
return result
|
|
|
|
|
|
def access_level_detail_to_py(access_level, dataset):
|
|
"""Convert Net2 access_level detail dataset
|
|
time_zones is a net2-id key based lookup dict.
|
|
"""
|
|
if not dataset or dataset.Tables.Count != 1:
|
|
raise Exception('AccessLevelDetail dataset is invalid')
|
|
|
|
# Clear existing
|
|
access_level.details = []
|
|
# Add details
|
|
for ald_row in dataset.Tables[0].Rows:
|
|
time_zone_id = ald_row.get_Item("TimezoneID")
|
|
area_id = ald_row.get_Item("AreaID")
|
|
access_level.details.append((time_zone_id, area_id))
|
|
|
|
|
|
def user_view_to_py(user_view):
|
|
"""Convert a Net2 UserView object (partially) to a dict
|
|
"""
|
|
res = {}
|
|
res["user_id"] = user_view.UserId
|
|
res["access_level_id"] = user_view.AccessLevelId
|
|
res["department_id"] = user_view.DepartmentId
|
|
res["anti_passback_user"] = user_view.AntiPassbackUser
|
|
res["alarm_user"] = user_view.AlarmUser
|
|
res["first_name"] = user_view.FirstName
|
|
res["middle_name"] = user_view.MiddleName
|
|
res["sur_name"] = user_view.Surname
|
|
res["telephone"] = user_view.Telephone
|
|
res["extension"] = user_view.Extension
|
|
res["pin"] = user_view.PIN
|
|
res["activation_date"] = date_time_to_py(user_view.ActivationDate)
|
|
res["active"] = user_view.Active
|
|
res["fax"] = user_view.Fax
|
|
res["expiry_date"] = date_time_to_py(user_view.ExpiryDate)
|
|
res["custom_fields"] = [
|
|
None,
|
|
user_view.Field1_100,
|
|
user_view.Field2_100,
|
|
user_view.Field3_50,
|
|
user_view.Field4_50,
|
|
user_view.Field5_50,
|
|
user_view.Field6_50,
|
|
user_view.Field7_50,
|
|
user_view.Field8_50,
|
|
user_view.Field9_50,
|
|
user_view.Field10_50,
|
|
user_view.Field11_50,
|
|
user_view.Field12_50,
|
|
user_view.Field13_Memo,
|
|
user_view.Field14_50]
|
|
res["user_guid"] = user_view.UserGuid.ToString()
|
|
res["last_area_id"] = user_view.LastAreaId
|
|
res["last_access_time"] = date_time_to_py(user_view.LastAccessTime)
|
|
res["last_updated"] = date_time_to_py(user_view.LastUpdated)
|
|
|
|
return res
|