Commit 54c7c2c8 authored by Takhir Fakhrutdinov's avatar Takhir Fakhrutdinov

Добавили просмотренные локальные зоны

parent 197b3184
This diff is collapsed.
......@@ -186,6 +186,10 @@ def _create_tleFile():
from .tleFile import tleFile
return tleFile
def _create_lczFile():
from .lczFile import lczFile
return lczFile
factory = Factory_t()
factory.register_file('TC', _create_tcFile, pattern=re.compile(r"^TC(MSM|12406)\.\d+",re.U))
......@@ -342,3 +346,68 @@ req = {
"required": ["TaskNum","Id","Directive"]
}
factory.register_file('RQ', _create_reqFile, schema=req)
frame = {
"type": "array",
"items": {
"allOf": [
{
"type": "object",
"required": ["header","frames"],
"properties": {
"header": {
"type": "object",
"required": ["originator","message_type","message_id"],
"properties": {
"originator": {"type": "string"},
"message_type": {"type": "string","enum":["frames"]},
"message_id": {"type": "string"}
}
},
"frames": {
"type": "array",
"items": {
"allOf":[
{
"type": "object",
"required": [
"siteid","nightid","filename","exp_num","obstime","crops",
"ast_ra_j2000","ast_dec_j2000","ast_rms_ra","ast_rms_dec","ast_orientation",
"limmag","limmag_error","phot_zero_error",
"phot_zero","sky_level","seeing"
],
"properties": {
"siteid": { "$ref": "#/$defs/integer"},
"nightid": {"$ref": "#/$defs/integer"},
"filename": {"type": "string"},
"exp_num": {"type": "integer"},
"obstime": {"$ref": "#/$defs/datetime"},
"crops": {"$ref": "#/$defs/base64"},
"ast_ra_j2000": {"$ref": "#/$defs/number"},
"ast_dec_j2000": {"$ref": "#/$defs/number"},
"ast_rms_ra": {"$ref": "#/$defs/number"},
"ast_rms_dec": {"$ref": "#/$defs/number"},
"ast_orientation": {"$ref": "#/$defs/number"},
"limmag": {"$ref": "#/$defs/number"},
"limmag_error": {"$ref": "#/$defs/number"},
"phot_zero_error": {"$ref": "#/$defs/number"},
"phot_zero": {"$ref": "#/$defs/number"},
"sky_level": {"$ref": "#/$defs/number"},
"seeing": {"$ref": "#/$defs/number"}
}
}
]
}
}
}
}
]
},
"$defs": {
"datetime": {"type":"string","pattern":"^\\d{2}\\/\\d{2}\\/\\d{4}\\s\\d{2}\\:\\d{2}\\:\\d{2}(\\.\\d+)?$"},
"integer": {"type":"string","pattern":"^[-+]?\\d+$"},
"number": {"type":"string","pattern":"^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$"},
"base64": {"type":"string","pattern":"^(?=(.{4})*$)[A-Za-z0-9+\\/]*={0,2}$"}
}
}
factory.register_file('LCZ', _create_lczFile, schema=frame)
# -*- coding: utf-8 -*-
from .xFile import baseFile
import logging
import json
import io
logger = logging.getLogger('')
class lczFile(baseFile):
""" Загрузка файла просмотра локальных зон.
"""
def __init__(self,*args,**kwargs):
""" Конструктор.
.. literalinclude:: ../../../../fte/lib/libpy/reqFile.py
:language: python
:lines: 13,22-28
:linenos:
:caption: __init__
"""
super().__init__(*args,**kwargs)
self.dbtype = 'lcz'
self.tbeg, self.tend, self.log = datetime.max, datetime.min, io.StringIO()
async def process_data(self,data):
import base64
from datetime import datetime
from collections import namedtuple
real = lambda x: round(float(x),6)
nighttime = lambda x: datetime.strptime(x,'%Y%m%d')
timestamp = lambda x: datetime.strptime(x,'%d/%m/%Y %H:%M:%S.%f')
rec_list = { "siteid":int,"nightid":nighttime,"filename":str,"obstime":timestamp,"crops":str,}
frame_list = {
"ast_ra_j2000":real,"ast_dec_j2000":real,"ast_rms_ra":real,"ast_rms_dec":real,"ast_orientation":real,
"limmag":real,"limmag_error":real,"phot_zero_error":real,
"phot_zero":real,"sky_level":real,"seeing":real,"exp_num":int,
}
devs,tb,te,nights = set(),datetime.max,datetime.min,set()
for ms in data:
for r in ms['frames']:
frame = {k:f(r[k]) for k,f in frame_list.items() if k in r and r.get(k) is not None}
_ = {k:f(r[k]) for k,f in rec_list.items() if k in r}
rec = namedtuple('rec_t',_.keys())(**_)
crops = r'\x%s' % base64.b64decode(rec.crops).hex()
if rec.night not in nights:
await self.execute("select * from template.partition_table('xd.t_localzone'::regclass,$1)",rec.night)
nights.add(rec.night)
dev = await self.fetchval("""
insert into xd.t_localzone(night,dev,fn,fid,tm,frame,crops)
values ($1,main.devget_devid($2,$1::date),$3,$4,$5,$6,$7)
on conflict(dev,night,fn) do update
set (fid,tm,frame,crops) = (excluded.fid,excluded.tm,excluded.frame,excluded.crops)
returning dev
""",rec.night,rec.siteid,rec.filename,self.fid,rec.osbtime,json.dumps(frame),crops)
devs.add(dev)
tb,te = max(tb,rec.osbtime),min(te,rec.osbtime)
self.devs,self.tbeg,self.tend =list(devs),tb,te
async def load(self,fd,args):
""" Метод. Загрузка файла.
.. literalinclude:: ../../../../fte/lib/libpy/weaFile.py
:language: python
:lines: 27,36-
:linenos:
:caption: load_data
"""
logger.info('Загрузка файла...')
await super().load(fd,args)
data = json.load(fd)
self.fid = await self.getfid()
async with self.transaction():
await self.process_data(data)
await self.create_doc()
......@@ -56,7 +56,7 @@ class msFile(measFile):
# сохраняем имена файлов
async with self.transaction():
await self.execute("""
insert into xd.t_nfstank(dev,night,fn)
insert into xd.t_localzone(dev,night,fn)
select $1,$2,fn
from unnest($3::text[]) fn
on conflict do nothing
......@@ -68,7 +68,7 @@ class msFile(measFile):
from unnest($3::text[]) with ordinality v(fn,rn)
)
select array_agg(foid order by rn)
from xd.t_nfstank join sf using(dev,night,fn)
from xd.t_localzone join sf using(dev,night,fn)
""",dev,night,t.files)
_ = list()
......
......@@ -258,8 +258,8 @@ class measFile(baseFile):
await self.execute("select * from template.partition_table('xd.t_binds'::regclass,$1)",self.tend)
await self.execute("select * from template.partition_table('xd.t_trackextra'::regclass,$1)",self.tbeg)
await self.execute("select * from template.partition_table('xd.t_trackextra'::regclass,$1)",self.tend)
await self.execute("select * from template.partition_table('xd.t_nfstank'::regclass,$1)",self.tbeg)
await self.execute("select * from template.partition_table('xd.t_nfstank'::regclass,$1)",self.tend)
await self.execute("select * from template.partition_table('xd.t_localzone'::regclass,$1)",self.tbeg)
await self.execute("select * from template.partition_table('xd.t_localzone'::regclass,$1)",self.tend)
async def get_db_tracks_crc(self,dev):
_crc = await self.fetchval("""
......
#!/opt/local/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import io
import logging
import jsonschema as js
import json
if __name__ == '__main__':
import logging.config
# load config from file
# logging.config.fileConfig('logging.ini', disable_existing_loggers=False)
# or, for dictConfig
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': False, # this fixes the problem
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)s:%(module)s:%(lineno)s: %(message)s',
'datefmt':'%Y-%m-%d %H:%M:%S'
},
},
'handlers': {
'default': {
'level':'DEBUG',
'formatter':'standard',
'class':'logging.StreamHandler',
},
},
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
}
}
})
logger = logging.getLogger('')
with open(sys.argv[1],'r') as f:
shema= json.load(f)
js.validate(json.load(sys.stdin),shema)
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