agregado uid en attendance record

This commit is contained in:
Arturo Hernandez 2017-12-28 12:01:12 -04:00
parent 2adf1d3e1b
commit 949ec91447
2 changed files with 35 additions and 39 deletions

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
class Attendance(object): class Attendance(object):
def __init__(self, user_id, timestamp, status): def __init__(self, uid, user_id, timestamp, status):
self.uid = uid
self.user_id = user_id self.user_id = user_id
self.timestamp = timestamp self.timestamp = timestamp
self.status = status self.status = status

View File

@ -438,36 +438,36 @@ class ZK(object):
cmd_response = self.__send_command(command, command_string, checksum, session_id, reply_id, response_size) cmd_response = self.__send_command(command, command_string, checksum, session_id, reply_id, response_size)
users = [] users = []
pac = 0
if cmd_response.get('status'): if cmd_response.get('status'):
if cmd_response.get('code') == const.CMD_PREPARE_DATA: if cmd_response.get('code') == const.CMD_PREPARE_DATA:
bytes = self.__get_data_size() bytes = self.__get_data_size()
print "user size is %s" % bytes
userdata = [] userdata = []
while bytes > 0: while True:
data_recv = self.__sock.recv(1032) data_recv = self.__sock.recv(1032)
response = unpack('HHHH', data_recv[:8])[0] response = unpack('HHHH', data_recv[:8])[0]
print "this packet response is: %s" % response if response == const.CMD_DATA:
userdata.append(data_recv) pac += 1
bytes -= 1024 userdata.append(data_recv[8:]) #header turncated
print "user still needs %s" % bytes bytes -= 1024
elif response == const.CMD_ACK_OK:
break #without problem.
else:
#truncado! continuar?
print "broken! with %s" % response
print "user still needs %s" % bytes
break
data_recv = self.__sock.recv(8)
response = unpack('HHHH', data_recv[:8])[0]
if response == const.CMD_ACK_OK: if response == const.CMD_ACK_OK:
if userdata: if userdata:
# The first 4 bytes don't seem to be related to the user # The first 4 bytes don't seem to be related to the user
for x in xrange(len(userdata)):
if x > 0:
userdata[x] = userdata[x][8:]
userdata = ''.join(userdata) userdata = ''.join(userdata)
userdata = userdata[12:] userdata = userdata[4:]
while len(userdata) >= 72: while len(userdata) >= 72:
uid, privilege, password, name, sparator, group_id, user_id = unpack('2sc8s28sc7sx24s', userdata.ljust(72)[:72]) uid, privilege, password, name, sparator, group_id, user_id = unpack('hc8s28sc7sx24s', userdata.ljust(72)[:72])
u1 = int(uid[0].encode("hex"), 16) #u1 = int(uid[0].encode("hex"), 16)
u2 = int(uid[1].encode("hex"), 16) #u2 = int(uid[1].encode("hex"), 16)
#uid = u1 + (u2 * 256)
uid = u1 + (u2 * 256)
privilege = int(privilege.encode("hex"), 16) privilege = int(privilege.encode("hex"), 16)
password = unicode(password.split('\x00')[0], errors='ignore') password = unicode(password.split('\x00')[0], errors='ignore')
name = unicode(name.split('\x00')[0], errors='ignore') name = unicode(name.split('\x00')[0], errors='ignore')
@ -546,41 +546,36 @@ class ZK(object):
if cmd_response.get('status'): if cmd_response.get('status'):
if cmd_response.get('code') == const.CMD_PREPARE_DATA: if cmd_response.get('code') == const.CMD_PREPARE_DATA:
bytes = self.__get_data_size() bytes = self.__get_data_size()
print "size is %s" % bytes
attendance_data = [] attendance_data = []
pac = 1 pac = 1
while bytes > 0: while True: #limitado por respuesta no por tamaño
data_recv = self.__sock.recv(1032) data_recv = self.__sock.recv(1032)
response = unpack('HHHH', data_recv[:8])[0] response = unpack('HHHH', data_recv[:8])[0]
print "# %s packet response is: %s" % (pac, response) #print "# %s packet response is: %s" % (pac, response)
if response == const.CMD_ACK_OK: if response == const.CMD_DATA:
pac += 1
attendance_data.append(data_recv[8:]) #header turncated
bytes -= 1024
elif response == const.CMD_ACK_OK:
break #without problem.
else:
#truncado! continuar? #truncado! continuar?
print "broken!" print "broken!"
break break
pac += 1
attendance_data.append(data_recv)
bytes -= 1024
#print "still needs %s" % bytes #print "still needs %s" % bytes
data_recv = self.__sock.recv(8)
response = unpack('HHHH', data_recv[:8])[0]
if response == const.CMD_ACK_OK: if response == const.CMD_ACK_OK:
if attendance_data: if attendance_data:
# The first 4 bytes don't seem to be related to the user
for x in xrange(len(attendance_data)):
if x > 0:
attendance_data[x] = attendance_data[x][8:]
attendance_data = ''.join(attendance_data) attendance_data = ''.join(attendance_data)
attendance_data = attendance_data[14:] attendance_data = attendance_data[4:]
while len(attendance_data) >= 38: while len(attendance_data) >= 40:
user_id, sparator, timestamp, status, space = unpack('24sc4sc10s', attendance_data.ljust(40)[:40]) uid, user_id, sparator, timestamp, status, space = unpack('h24sc4sc8s', attendance_data.ljust(40)[:40])
user_id = user_id.split('\x00')[0] user_id = user_id.split('\x00')[0]
timestamp = self.__decode_time(timestamp) timestamp = self.__decode_time(timestamp)
status = int(status.encode("hex"), 16) status = int(status.encode("hex"), 16)
attendance = Attendance(user_id, timestamp, status) attendance = Attendance(uid, user_id, timestamp, status)
attendances.append(attendance) attendances.append(attendance)
attendance_data = attendance_data[40:] attendance_data = attendance_data[40:]