Commit a5aafcff authored by Takhir Fakhrutdinov's avatar Takhir Fakhrutdinov

Отладка meteo

parent 1f27784a
...@@ -6,7 +6,6 @@ import re ...@@ -6,7 +6,6 @@ import re
import io import io
from datetime import datetime,timedelta from datetime import datetime,timedelta
logger = logging.getLogger('') logger = logging.getLogger('')
class meteoBaseFile(baseFile): class meteoBaseFile(baseFile):
...@@ -80,7 +79,7 @@ class meteoBaseFile(baseFile): ...@@ -80,7 +79,7 @@ class meteoBaseFile(baseFile):
raise RuntimeError(f"Не удалось идентифицировать метеостанцию {telno}.") raise RuntimeError(f"Не удалось идентифицировать метеостанцию {telno}.")
return dev return dev
async def get_pkeys(self,dev): async def get_atypes(self,dev):
""" Метод. Определение списка метеопараметров """ Метод. Определение списка метеопараметров
Return: Return:
...@@ -93,7 +92,7 @@ class meteoBaseFile(baseFile): ...@@ -93,7 +92,7 @@ class meteoBaseFile(baseFile):
:caption: get_device :caption: get_device
""" """
keys = await self.fetchval(""" keys = await self.fetchval("""
select json_object_agg(v,atype) select json_object_agg(v,atype order by atype)
from main.t_devattr from main.t_devattr
join main.t_attrtypes using(atype) join main.t_attrtypes using(atype)
where dev = $1 where dev = $1
...@@ -109,7 +108,7 @@ class meteoEopFile(meteoBaseFile): ...@@ -109,7 +108,7 @@ class meteoEopFile(meteoBaseFile):
""" """
def prepare_csv(self,f,dev,data,keys): def prepare_csv(self,f,dev,data,atypes):
""" Метод. Запись данных в csv файл """ Метод. Запись данных в csv файл
Return: Return:
...@@ -121,13 +120,14 @@ class meteoEopFile(meteoBaseFile): ...@@ -121,13 +120,14 @@ class meteoEopFile(meteoBaseFile):
:linenos: :linenos:
:caption: get_device :caption: get_device
""" """
_cnv = lambda x: str(x) if not x else 'null'
for d in data: for d in data:
tm = self.round_time(datetime.fromisoformat(d['Date'])).replace() tm = self.round_time(datetime.fromisoformat(d['Date'])).replace()
if tm not in self.times: if tm not in self.times:
self.times.add(tm) self.times.add(tm)
self.tbeg, self.tend = min(self.tbeg,tm), max(self.tend,tm) self.tbeg, self.tend = min(self.tbeg,tm), max(self.tend,tm)
for k,atype in keys.items(): row = '{{{}}}'.format(','.join(map(_cnv,[d[k] for k in atypes.keys()])))
self.write(f,(tm,dev,atype,d[k])) self.write(f,(tm,dev,row))
async def load(self,fd,args): async def load(self,fd,args):
""" Метод. Загрузка файла. """ Метод. Загрузка файла.
...@@ -145,10 +145,10 @@ class meteoEopFile(meteoBaseFile): ...@@ -145,10 +145,10 @@ class meteoEopFile(meteoBaseFile):
await self.check_priv_device(dev) await self.check_priv_device(dev)
self.fileattr['dev'] = dev self.fileattr['dev'] = dev
pkeys = await self.get_pkeys(dev) atypes = await self.get_atypes(dev)
fo = io.BytesIO() fo = io.BytesIO()
data = json.load(fd)[self.model] data = json.load(fd)[self.model]
self.prepare_csv(fo,dev,data,pkeys) self.prepare_csv(fo,dev,data,atypes)
self.fid = await self.getfid() self.fid = await self.getfid()
fo.seek(0) fo.seek(0)
...@@ -217,6 +217,8 @@ class eop2mFile(meteoBaseFile): ...@@ -217,6 +217,8 @@ class eop2mFile(meteoBaseFile):
:linenos: :linenos:
:caption: load_data :caption: load_data
""" """
_cnv = lambda x: str(x) if not x else 'null'
logger.info('Загрузка файла...') logger.info('Загрузка файла...')
await super().load(fd,args) await super().load(fd,args)
data = json.load(fd) data = json.load(fd)
...@@ -230,13 +232,12 @@ class eop2mFile(meteoBaseFile): ...@@ -230,13 +232,12 @@ class eop2mFile(meteoBaseFile):
await self.check_priv_device(dev) await self.check_priv_device(dev)
if dev not in devs: if dev not in devs:
devs.add(dev) devs.add(dev)
pkeys = await self.get_pkeys(dev) atypes = await self.get_atypes(dev)
tm = datetime.fromisoformat(r['data']['date']).replace(microsecond=0) tm = datetime.fromisoformat(r['data']['date']).replace(microsecond=0)
self.tbeg, self.tend = min(self.tbeg,tm), max(self.tend,tm) self.tbeg, self.tend = min(self.tbeg,tm), max(self.tend,tm)
d = r['data'] d = r['data']
rec = [ (tm,dev,atype,d[k],) for k,atype in pkeys.items() if k in d and d.get(k) is not None ] row = '{{{}}}'.format(','.join(map(_cnv,[d[k] for k in atypes.keys()])))
for l in rec: self.write(f,(tm,dev,row))
self.write(fo,l)
self.fid = await self.getfid() self.fid = await self.getfid()
self.fileattr = dict(devs=list(devs)) self.fileattr = dict(devs=list(devs))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment