diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py index 5dde670906bbff92def1d51b2cb0597477d53f2d..117c3432725bad89fa71e412f635a585a0bb5d9b 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py @@ -3,7 +3,7 @@ import logging from tango import DeviceProxy, AttributeProxy, DevState, DevFailed -from toolkit.archiver_util import get_db_config, attribute_name_from_url, device_name_url +from tangostationcontrol.toolkit.archiver_util import get_db_config, attribute_name_from_url, device_name_url, attribute_name_url import time import json @@ -277,7 +277,7 @@ class Archiver(): # search returns all matches in which attribute_name is part of the name, # so check whether an exact match is included. - return attribute_name_from_url(attribute_name) in attributes + return any(attribute_name.lower() in a for a in attributes) def update_archiving_attribute(self, attribute_name: str, polling_period: int, event_period: int, strategy: str = 'RUN'): """ diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver_base_ts.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver_base_ts.py index 71ffc52d4f51bbd8a5f5ac211b4ab561cfa1281b..96d91146f43f447f5bc71fa1fa9cb267dafcd230 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/archiver_base_ts.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/archiver_base_ts.py @@ -24,52 +24,65 @@ class Lofar_Scalar_Attribute(Base): data_time = Column(TIMESTAMP, primary_key=True) device = Column(String, primary_key=True) name = Column(String, primary_key=True) - value = Column(FLOAT) def __repr__(self): return f"<Attribute(device='{self.device}', name='{self.name}', data_time='{self.data_time}',value='{self.value}'>" class Lofar_Scalar_Boolean(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_boolean' + value = Column(Boolean) class Lofar_Scalar_Double(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_double' + value = Column(FLOAT) class Lofar_Scalar_Encoded(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_encoded' + value = Column(BYTEA) class Lofar_Scalar_Enum(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_enum' + value = Column(INTEGER) class Lofar_Scalar_Float(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_float' + value = Column(FLOAT) class Lofar_Scalar_Long(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_long' + value = Column(INT4RANGE) class Lofar_Scalar_Long64(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_long64' + value = Column(INT8RANGE) class Lofar_Scalar_Short(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_short' + value = Column(INTEGER) class Lofar_Scalar_State(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_state' + value = Column(INTEGER) class Lofar_Scalar_String(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_string' + value = Column(TEXT) class Lofar_Scalar_Uchar(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_uchar' + value = Column(INTEGER) class Lofar_Scalar_Ulong(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_ulong' + value = Column(INTEGER) class Lofar_Scalar_Ulong64(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_ulong64' + value = Column(INTEGER) class Lofar_Scalar_Ushort(Lofar_Scalar_Attribute): __tablename__ = 'lofar_scalar_ushort' + value = Column(INTEGER) class Lofar_Array_Attribute(Base): """ @@ -82,52 +95,65 @@ class Lofar_Array_Attribute(Base): device = Column(String, primary_key=True) name = Column(String, primary_key=True) x = Column(INTEGER, primary_key=True) - value = Column(FLOAT) def __repr__(self): return f"<Attribute(device='{self.device}', name='{self.name}', data_time='{self.data_time}',index='{self.x}',value='{self.value}'>" class Lofar_Array_Boolean(Lofar_Array_Attribute): __tablename__ = 'lofar_array_boolean' + value = Column(Boolean) class Lofar_Array_Double(Lofar_Array_Attribute): __tablename__ = 'lofar_array_double' + value = Column(FLOAT) class Lofar_Array_Encoded(Lofar_Array_Attribute): __tablename__ = 'lofar_array_encoded' + value = Column(BYTEA) class Lofar_Array_Enum(Lofar_Array_Attribute): __tablename__ = 'lofar_array_enum' + value = Column(INTEGER) class Lofar_Array_Float(Lofar_Array_Attribute): __tablename__ = 'lofar_array_float' + value = Column(FLOAT) class Lofar_Array_Long(Lofar_Array_Attribute): __tablename__ = 'lofar_array_long' + value = Column(INT4RANGE) class Lofar_Array_Long64(Lofar_Array_Attribute): __tablename__ = 'lofar_array_long64' + value = Column(INT8RANGE) class Lofar_Array_Short(Lofar_Array_Attribute): __tablename__ = 'lofar_array_short' + value = Column(INTEGER) class Lofar_Array_State(Lofar_Array_Attribute): __tablename__ = 'lofar_array_state' + value = Column(INTEGER) class Lofar_Array_String(Lofar_Array_Attribute): __tablename__ = 'lofar_array_string' + value = Column(TEXT) class Lofar_Array_Uchar(Lofar_Array_Attribute): __tablename__ = 'lofar_array_uchar' + value = Column(INTEGER) class Lofar_Array_Ulong(Lofar_Array_Attribute): __tablename__ = 'lofar_array_ulong' + value = Column(INTEGER) class Lofar_Array_Ulong64(Lofar_Array_Attribute): __tablename__ = 'lofar_array_ulong64' + value = Column(INTEGER) class Lofar_Array_Ushort(Lofar_Array_Attribute): __tablename__ = 'lofar_array_ushort' + value = Column(INTEGER) # ----------------- ----------------- ----------------- # class Attribute(Base): diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py index 058594f1b420995e7b773ccbaaf222899d6ede8c..7d808edc3e0fbe030b9bb4728a81abf93e56d73c 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py @@ -44,6 +44,19 @@ def device_name_url(device_name:str, tango_host:str = 'databaseds:10000'): return f"tango://{tango_host}/{device_name}" +def attribute_name_url(attribute_name:str, tango_host:str = 'databaseds:10000'): + """ + For some operations Tango devices must be transformed from the form 'domain/family/name/attribute' + to 'tango://db:port/domain/family/name/attribute' + """ + if attribute_name.startswith('tango://'): + return attribute_name + + if len(attribute_name.split('/')) != 4: + raise ValueError(f"Expected attribute name of format 'domain/family/name/attribute', got {attribute_name}") + + return f"tango://{tango_host}/{attribute_name}" + def split_tango_name(tango_fqname:str, tango_type:str): """ Helper function to split device or attribute Tango full qualified names diff --git a/tangostationcontrol/tangostationcontrol/toolkit/retriever.py b/tangostationcontrol/tangostationcontrol/toolkit/retriever.py index bedd970d117c52a3986c400d2ff68fb35f0c66b6..5c7426dbe41faf4ecd6d2498c809097335d107d5 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/retriever.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/retriever.py @@ -1,6 +1,6 @@ #! /usr/bin/env python3 -from toolkit.archiver_util import get_db_config, split_tango_name +from tangostationcontrol.toolkit.archiver_util import get_db_config, split_tango_name from abc import ABC, abstractmethod from datetime import datetime, timedelta