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

"""
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