|
@@
-591,25
+591,26
class Reader(object):
|
|
591
|
def setNextFile(self):
|
|
591
|
def setNextFile(self):
|
|
592
|
"""Set the next file to be readed open it and parse de file header"""
|
|
592
|
"""Set the next file to be readed open it and parse de file header"""
|
|
593
|
|
|
593
|
|
|
594
|
if self.fp != None:
|
|
594
|
while True:
|
|
595
|
self.fp.close()
|
|
595
|
if self.fp != None:
|
|
|
|
|
596
|
self.fp.close()
|
|
596
|
|
|
597
|
|
|
597
|
if self.online:
|
|
|
|
|
598
|
newFile = self.setNextFileOnline()
|
|
|
|
|
599
|
else:
|
|
|
|
|
600
|
newFile = self.setNextFileOffline()
|
|
|
|
|
601
|
|
|
|
|
|
602
|
if not(newFile):
|
|
|
|
|
603
|
if self.online:
|
|
598
|
if self.online:
|
|
604
|
raise schainpy.admin.SchainError('Time to wait for new files reach')
|
|
599
|
newFile = self.setNextFileOnline()
|
|
605
|
else:
|
|
600
|
else:
|
|
606
|
if self.fileIndex == -1:
|
|
601
|
newFile = self.setNextFileOffline()
|
|
607
|
raise schainpy.admin.SchainWarning('No files found in the given path')
|
|
602
|
|
|
|
|
|
603
|
if not(newFile):
|
|
|
|
|
604
|
if self.online:
|
|
|
|
|
605
|
raise schainpy.admin.SchainError('Time to wait for new files reach')
|
|
608
|
else:
|
|
606
|
else:
|
|
609
|
raise schainpy.admin.SchainWarning('No more files to read')
|
|
607
|
if self.fileIndex == -1:
|
|
610
|
|
|
608
|
raise schainpy.admin.SchainWarning('No files found in the given path')
|
|
611
|
if not(self.verifyFile(self.filename)):
|
|
609
|
else:
|
|
612
|
self.setNextFile()
|
|
610
|
raise schainpy.admin.SchainWarning('No more files to read')
|
|
|
|
|
611
|
|
|
|
|
|
612
|
if self.verifyFile(self.filename):
|
|
|
|
|
613
|
break
|
|
613
|
|
|
614
|
|
|
614
|
log.log('Opening file: %s' % self.filename, self.name)
|
|
615
|
log.log('Opening file: %s' % self.filename, self.name)
|
|
615
|
|
|
616
|
|
|
@@
-683,6
+684,15
class Reader(object):
|
|
683
|
|
|
684
|
|
|
684
|
return 1
|
|
685
|
return 1
|
|
685
|
|
|
686
|
|
|
|
|
|
687
|
@staticmethod
|
|
|
|
|
688
|
def isDateTimeInRange(dt, startDate, endDate, startTime, endTime):
|
|
|
|
|
689
|
"""Check if the given datetime is in range"""
|
|
|
|
|
690
|
|
|
|
|
|
691
|
if startDate <= dt.date() <= endDate:
|
|
|
|
|
692
|
if startTime <= dt.time() <= endTime:
|
|
|
|
|
693
|
return True
|
|
|
|
|
694
|
return False
|
|
|
|
|
695
|
|
|
686
|
def verifyFile(self, filename):
|
|
696
|
def verifyFile(self, filename):
|
|
687
|
"""Check for a valid file
|
|
697
|
"""Check for a valid file
|
|
688
|
|
|
698
|
|
|
@@
-893,7
+903,8
class JRODataReader(Reader):
|
|
893
|
return 0
|
|
903
|
return 0
|
|
894
|
|
|
904
|
|
|
895
|
self.getBasicHeader()
|
|
905
|
self.getBasicHeader()
|
|
896
|
if (self.dataOut.datatime < datetime.datetime.combine(self.startDate, self.startTime)) or (self.dataOut.datatime > datetime.datetime.combine(self.endDate, self.endTime)):
|
|
906
|
|
|
|
|
|
907
|
if not self.isDateTimeInRange(self.dataOut.datatime, self.startDate, self.endDate, self.startTime, self.endTime):
|
|
897
|
print("[Reading] Block No. %d/%d -> %s [Skipping]" % (self.nReadBlocks,
|
|
908
|
print("[Reading] Block No. %d/%d -> %s [Skipping]" % (self.nReadBlocks,
|
|
898
|
self.processingHeaderObj.dataBlocksPerFile,
|
|
909
|
self.processingHeaderObj.dataBlocksPerFile,
|
|
899
|
self.dataOut.datatime.ctime()))
|
|
910
|
self.dataOut.datatime.ctime()))
|
|
@@
-953,11
+964,8
class JRODataReader(Reader):
|
|
953
|
print("[Reading] File %s can't be opened" % (filename))
|
|
964
|
print("[Reading] File %s can't be opened" % (filename))
|
|
954
|
|
|
965
|
|
|
955
|
return False
|
|
966
|
return False
|
|
956
|
|
|
967
|
|
|
957
|
currentPosition = fp.tell()
|
|
968
|
if self.waitDataBlock(0):
|
|
958
|
neededSize = self.processingHeaderObj.blockSize + self.firstHeaderSize
|
|
|
|
|
959
|
|
|
|
|
|
960
|
if neededSize == 0:
|
|
|
|
|
961
|
basicHeaderObj = BasicHeader(LOCALTIME)
|
|
969
|
basicHeaderObj = BasicHeader(LOCALTIME)
|
|
962
|
systemHeaderObj = SystemHeader()
|
|
970
|
systemHeaderObj = SystemHeader()
|
|
963
|
radarControllerHeaderObj = RadarControllerHeader()
|
|
971
|
radarControllerHeaderObj = RadarControllerHeader()
|
|
@@
-977,22
+985,21
class JRODataReader(Reader):
|
|
977
|
|
|
985
|
|
|
978
|
if not(processingHeaderObj.read(fp)):
|
|
986
|
if not(processingHeaderObj.read(fp)):
|
|
979
|
fp.close()
|
|
987
|
fp.close()
|
|
980
|
return False
|
|
988
|
return False
|
|
981
|
|
|
989
|
|
|
982
|
neededSize = processingHeaderObj.blockSize + basicHeaderObj.size
|
|
990
|
if not self.online:
|
|
983
|
else:
|
|
991
|
dt1 = basicHeaderObj.datatime
|
|
984
|
msg = "[Reading] Skipping the file %s due to it hasn't enough data" % filename
|
|
992
|
fp.seek(self.fileSize-processingHeaderObj.blockSize-24)
|
|
|
|
|
993
|
if not(basicHeaderObj.read(fp)):
|
|
|
|
|
994
|
fp.close()
|
|
|
|
|
995
|
return False
|
|
|
|
|
996
|
dt2 = basicHeaderObj.datatime
|
|
|
|
|
997
|
if not self.isDateTimeInRange(dt1, self.startDate, self.endDate, self.startTime, self.endTime) and not \
|
|
|
|
|
998
|
self.isDateTimeInRange(dt2, self.startDate, self.endDate, self.startTime, self.endTime):
|
|
|
|
|
999
|
return False
|
|
985
|
|
|
1000
|
|
|
986
|
fp.close()
|
|
1001
|
fp.close()
|
|
987
|
|
|
1002
|
|
|
988
|
fileSize = os.path.getsize(filename)
|
|
|
|
|
989
|
currentSize = fileSize - currentPosition
|
|
|
|
|
990
|
|
|
|
|
|
991
|
if currentSize < neededSize:
|
|
|
|
|
992
|
if msgFlag and (msg != None):
|
|
|
|
|
993
|
print(msg)
|
|
|
|
|
994
|
return False
|
|
|
|
|
995
|
|
|
|
|
|
996
|
return True
|
|
1003
|
return True
|
|
997
|
|
|
1004
|
|
|
998
|
def findDatafiles(self, path, startDate=None, endDate=None, expLabel='', ext='.r', walk=True, include_path=False):
|
|
1005
|
def findDatafiles(self, path, startDate=None, endDate=None, expLabel='', ext='.r', walk=True, include_path=False):
|