File indexing completed on 2026-04-09 07:58:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 """
0013 operations related to Health.
0014 """
0015
0016 import datetime
0017 import re
0018
0019 from sqlalchemy.exc import DatabaseError, IntegrityError
0020
0021 from idds.common import exceptions
0022 from idds.common.constants import MetaStatus
0023 from idds.orm.base import models
0024 from idds.orm.base.session import read_session, transactional_session
0025
0026
0027 @transactional_session
0028 def add_meta_item(name, status=MetaStatus.Active, description=None, meta_info=None, session=None):
0029 """
0030 Add a meta item.
0031
0032 :param name: The meta name.
0033 :param status: The meta status.
0034 :param description: The meta description.
0035 :param meta_info: The metadata.
0036 :param session: The database session.
0037 """
0038
0039 try:
0040 to_update = {'updated_at': datetime.datetime.utcnow()}
0041 if status:
0042 to_update['status'] = status
0043 if description:
0044 to_update['description'] = description
0045 if meta_info:
0046 to_update['meta_info'] = meta_info
0047 counts = session.query(models.MetaInfo)\
0048 .filter(models.MetaInfo.name == name)\
0049 .update(to_update)
0050 if not counts:
0051 new_item = models.MetaInfo(name=name, status=status, description=description, meta_info=meta_info)
0052 new_item.save(session=session)
0053 except IntegrityError as e:
0054 if re.match('.*ORA-00001.*', e.args[0]) or re.match('.*unique constraint.*', e.args[0]):
0055 print("unique constraintviolated: %s" % str(e))
0056 except DatabaseError as e:
0057 raise exceptions.DatabaseException('Could not persist meta info: %s' % str(e))
0058
0059
0060 @read_session
0061 def get_meta_item(name, session=None):
0062 """
0063 Retrieve meta item.
0064
0065 :param name: The meta name.
0066 :param session: The database session.
0067
0068 :returns metainfo: dictionary of meta info
0069 """
0070 try:
0071 query = session.query(models.MetaInfo)
0072 query = query.filter(models.MetaInfo.name == name)
0073
0074 ret = query.first()
0075 if not ret:
0076 return None
0077 else:
0078 return ret.to_dict()
0079 except IntegrityError as e:
0080 raise exceptions.DatabaseException(e.args)
0081
0082
0083 @read_session
0084 def get_meta_items(session=None):
0085 """
0086 Retrieve meta items.
0087
0088 :param session: The database session.
0089
0090 :returns metainfo: List of dictionaries
0091 """
0092 items = []
0093 try:
0094 query = session.query(models.MetaInfo)
0095
0096 tmp = query.all()
0097 if tmp:
0098 for t in tmp:
0099 items.append(t.to_dict())
0100 return items
0101 except IntegrityError as e:
0102 raise exceptions.DatabaseException(e.args)