amda.py
67 lines
| 2.4 KiB
| text/x-python
|
PythonLexer
r1429 | import sys | |||
sys.path.append("/home/jeandet/Documents/prog/build-SciQLop-Desktop-Debug/core") | ||||
r1431 | import traceback | |||
r1429 | import os | |||
r1431 | from datetime import datetime, timedelta, timezone | |||
r1429 | import PythonProviders | |||
import pysciqlopcore | ||||
import numpy as np | ||||
import pandas as pds | ||||
import requests | ||||
r1432 | import copy | |||
r1430 | from spwc.amda import AMDA | |||
r1429 | ||||
r1430 | amda = AMDA() | |||
def get_sample(metadata,start,stop): | ||||
ts_type = pysciqlopcore.ScalarTimeSerie | ||||
r1433 | default_ctor_args = 1 | |||
r1429 | try: | |||
r1430 | param_id = None | |||
for key,value in metadata: | ||||
if key == 'xml:id': | ||||
param_id = value | ||||
elif key == 'type': | ||||
if value == 'vector': | ||||
ts_type = pysciqlopcore.VectorTimeSerie | ||||
r1432 | elif value == 'multicomponent': | |||
ts_type = pysciqlopcore.MultiComponentTimeSerie | ||||
r1433 | default_ctor_args = (0,2) | |||
r1432 | tstart=datetime.datetime.fromtimestamp(start, tz=timezone.utc) | |||
tend=datetime.datetime.fromtimestamp(stop, tz=timezone.utc) | ||||
r1433 | df = amda.get_parameter(start_time=tstart, stop_time=tend, parameter_id=param_id, method="REST") | |||
r1431 | t = np.array([d.timestamp() for d in df.index]) | |||
r1429 | values = df.values | |||
r1434 | return ts_type(t,values) | |||
r1429 | except Exception as e: | |||
r1431 | print(traceback.format_exc()) | |||
r1430 | print("Error in amda.py ",str(e)) | |||
r1433 | return ts_type(default_ctor_args) | |||
r1430 | ||||
if len(amda.component) is 0: | ||||
amda.update_inventory() | ||||
r1432 | parameters = copy.deepcopy(amda.parameter) | |||
r1430 | for name,component in amda.component.items(): | |||
if 'components' in parameters[component['parameter']]: | ||||
parameters[component['parameter']]['components'].append(component) | ||||
else: | ||||
parameters[component['parameter']]['components']=[component] | ||||
products = [] | ||||
for key,parameter in parameters.items(): | ||||
path = f"/AMDA/{parameter['mission']}/{parameter['instrument']}/{parameter['dataset']}/{parameter['name']}" | ||||
components = [component['name'] for component in parameter.get('components',[])] | ||||
metadata = [ (key,item) for key,item in parameter.items() if key is not 'components' ] | ||||
r1432 | n_components = parameter.get('size',0) | |||
if n_components is '3': | ||||
r1430 | metadata.append(("type","vector")) | |||
r1432 | elif n_components !=0: | |||
metadata.append(("type","multicomponent")) | ||||
r1430 | else: | |||
metadata.append(("type","scalar")) | ||||
products.append( (path, components, metadata)) | ||||
r1429 | ||||
r1430 | PythonProviders.register_product(products, get_sample) | |||
r1429 | ||||