Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:58:20

0001 #!/usr/bin/env python
0002 #
0003 # Licensed under the Apache License, Version 2.0 (the "License");
0004 # You may not use this file except in compliance with the License.
0005 # You may obtain a copy of the License at
0006 # http://www.apache.org/licenses/LICENSE-2.0OA
0007 #
0008 # Authors:
0009 # - Wen Guan, <wen.guan@cern.ch>, 2024
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)