Skip to content
Snippets Groups Projects
Commit 2478490c authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

MainServer: prev_data

parent dc91f7a6
Branches
No related tags found
No related merge requests found
...@@ -237,17 +237,17 @@ class MainServer(FuncCaller): ...@@ -237,17 +237,17 @@ class MainServer(FuncCaller):
self._download_server = download_server.DownloadServer(s) self._download_server = download_server.DownloadServer(s)
return self._download_server return self._download_server
async def _tree_walker(self, condition, worker): async def _tree_walker(self, condition, worker, reverse=False):
d = "data/realtime" d = "data/realtime"
for d_Y_m_d in sorted(os.listdir(d)): for d_Y_m_d in sorted(os.listdir(d), reverse=reverse):
path = d_Y_m_d path = d_Y_m_d
dt = path_to_dt(path) dt = path_to_dt(path)
if await condition(dt, datetime.timedelta(days=1)): if await condition(dt, datetime.timedelta(days=1)):
for d_H in sorted(os.listdir(d+"/"+path)): for d_H in sorted(os.listdir(d+"/"+path), reverse=reverse):
path = d_Y_m_d+"/"+d_H path = d_Y_m_d+"/"+d_H
dt = path_to_dt(path) dt = path_to_dt(path)
if await condition(dt, datetime.timedelta(hours=1)): if await condition(dt, datetime.timedelta(hours=1)):
for d_M_S in sorted(os.listdir(d+"/"+path)): for d_M_S in sorted(os.listdir(d+"/"+path), reverse=reverse):
path = d_Y_m_d+"/"+d_H+"/"+d_M_S path = d_Y_m_d+"/"+d_H+"/"+d_M_S
dt = path_to_dt(path) dt = path_to_dt(path)
await worker(dt) await worker(dt)
...@@ -278,6 +278,21 @@ class MainServer(FuncCaller): ...@@ -278,6 +278,21 @@ class MainServer(FuncCaller):
return r.val return r.val
return None return None
async def list_prev_realtime_data(self, dt_from: datetime):
class Return(Exception):
def __init__(self, val):
self.val = val
async def condition(dt, delta):
return dt_intersect(dt_minf, dt_from, dt, delta)
async def worker(dt):
if dt < dt_from:
raise Return(dt)
try:
await self._tree_walker(condition, worker, reverse=True)
except Return as r:
return r.val
return None
@server_exec() @server_exec()
async def get_data(self, dt: datetime.datetime): async def get_data(self, dt: datetime.datetime):
path = "data/realtime/"+dt_to_path(dt) path = "data/realtime/"+dt_to_path(dt)
...@@ -298,6 +313,14 @@ class MainServer(FuncCaller): ...@@ -298,6 +313,14 @@ class MainServer(FuncCaller):
else: else:
return next_dt, await self.get_data(dt) return next_dt, await self.get_data(dt)
@server_exec()
async def get_prev_data(self, dt: datetime.datetime):
prev_dt = await self.list_prev_realtime_data(dt)
if prev_dt is None:
return None
else:
return prev_dt, await self.get_data(dt)
@server_exec() @server_exec()
async def get_preprocessed_data(self, dt: datetime.datetime, route_id: str): async def get_preprocessed_data(self, dt: datetime.datetime, route_id: str):
assert all(i.isalnum() for i in route_id) assert all(i.isalnum() for i in route_id)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment