|
@@ -5,11 +5,13 @@ import h5py
|
|
|
from enum import IntEnum
|
|
|
import threading
|
|
|
|
|
|
-__all__ = ['DataWriteStream', 'DataReadStream', 'day_stamp', 'EMchPosmap', 'EChPosmap', 'ENetPosmap', 'open_hdf5','time_border']
|
|
|
+__all__ = ['DataWriteStream', 'DataReadStream', 'day_stamp', 'EMchPosmap', 'EChPosmap', 'ENetPosmap', 'open_hdf5', 'time_border']
|
|
|
|
|
|
import logging
|
|
|
+
|
|
|
logger = logging.getLogger('stream')
|
|
|
|
|
|
+
|
|
|
def day_stamp(stamp):
|
|
|
import time as stime
|
|
|
|
|
@@ -40,7 +42,8 @@ def time_border(interval, time_stamp, lt):
|
|
|
|
|
|
return pos + day
|
|
|
|
|
|
-def calc_interval(start,end):
|
|
|
+
|
|
|
+def calc_interval(start, end):
|
|
|
period = end - start
|
|
|
segment = int(period / 24)
|
|
|
if segment == 0:
|
|
@@ -53,7 +56,7 @@ def calc_interval(start,end):
|
|
|
pass
|
|
|
|
|
|
|
|
|
-def span_days(start_time,end_time):
|
|
|
+def span_days(start_time, end_time):
|
|
|
start_day = day_stamp(start_time)
|
|
|
end_day = day_stamp(end_time)
|
|
|
|
|
@@ -93,8 +96,10 @@ class DataWriteStream(metaclass=ABCMeta):
|
|
|
self._hfive.close()
|
|
|
self._hfive = None
|
|
|
self._lock.release()
|
|
|
+
|
|
|
pass
|
|
|
|
|
|
+
|
|
|
class DataReadStream(metaclass=ABCMeta):
|
|
|
_version = 20200618
|
|
|
_days = list()
|
|
@@ -104,7 +109,6 @@ class DataReadStream(metaclass=ABCMeta):
|
|
|
self._days = self._getdays()
|
|
|
logger.debug(self._days)
|
|
|
|
|
|
-
|
|
|
def __del__(self):
|
|
|
pass
|
|
|
|
|
@@ -126,7 +130,7 @@ class DataReadStream(metaclass=ABCMeta):
|
|
|
self._hfive.close()
|
|
|
self._hfive = None
|
|
|
|
|
|
- def _root_path(self,day_stamp = None):
|
|
|
+ def _root_path(self, day_stamp=None):
|
|
|
if day_stamp is None:
|
|
|
return f'/{self._version}/'
|
|
|
else:
|
|
@@ -144,9 +148,12 @@ class DataReadStream(metaclass=ABCMeta):
|
|
|
|
|
|
try:
|
|
|
path = self._root_path(day_stamp)
|
|
|
- group = self.file.require_group(path)
|
|
|
- days = dir(group)
|
|
|
- return days
|
|
|
+ if path in self.file:
|
|
|
+ group = self.file.require_group(path)
|
|
|
+ days = dir(group)
|
|
|
+ return days
|
|
|
+ else:
|
|
|
+ return []
|
|
|
except Exception as ex:
|
|
|
logger.error(ex)
|
|
|
return []
|
|
@@ -174,27 +181,17 @@ class DataReadStream(metaclass=ABCMeta):
|
|
|
logger.error(ex)
|
|
|
return []
|
|
|
|
|
|
- def near_stamp(self,time_stamp,left = True):
|
|
|
+ def near_stamp(self, time_stamp, left=True):
|
|
|
if len(self._days) == 0:
|
|
|
return None
|
|
|
|
|
|
- day = day_stamp(time_stamp)
|
|
|
- pos = time_stamp - day
|
|
|
if left:
|
|
|
- while True:
|
|
|
- if day >= self._days[0]:
|
|
|
- break
|
|
|
- else:
|
|
|
- day += 86400
|
|
|
+ min = self._days[0]
|
|
|
+ time_stamp = min if time_stamp < min else time_stamp
|
|
|
else:
|
|
|
- while True:
|
|
|
- if day <= self._days[-1]:
|
|
|
- break
|
|
|
- else:
|
|
|
- day -= 86400
|
|
|
-
|
|
|
- return pos + day
|
|
|
-
|
|
|
+ max = self._days[-1] + 86400 - 1
|
|
|
+ time_stamp = max if time_stamp > max else time_stamp
|
|
|
+ return time_stamp
|
|
|
|
|
|
|
|
|
class EMchPosmap(IntEnum):
|