File indexing completed on 2026-04-10 08:39:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 """
0012 Job specific info provider mainly used to customize Queue, Site, etc data of Information Service
0013 with details fetched directly from Job instance
0014
0015 :author: Alexey Anisenkov
0016 :contact: anisyonk@cern.ch
0017 :date: January 2018
0018 """
0019
0020 import logging
0021 logger = logging.getLogger(__name__)
0022
0023
0024 class JobInfoProvider(object):
0025 """
0026 Job info provider which is used to extract settings specific for given Job
0027 and overwrite general configuration used by Information Service
0028 """
0029
0030 job = None
0031
0032 def __init__(self, job):
0033 self.job = job
0034
0035 def resolve_schedconf_sources(self):
0036 """
0037 Resolve Job specific prioritized list of source names to be used for SchedConfig data load
0038 :return: prioritized list of source names
0039 """
0040
0041
0042
0043
0044
0045
0046
0047 return None
0048
0049 def resolve_queuedata(self, pandaqueue, **kwargs):
0050 """
0051 Resolve Job specific settings for queue data (overwriteQueueData)
0052 :return: dict of settings for given PandaQueue as a key
0053 """
0054
0055
0056
0057
0058 keys = [('platform', 'cmtconfig')]
0059
0060 data = {}
0061 for key in keys:
0062 if not isinstance(key, (list, tuple)):
0063 key = [key, key]
0064 ikey = key[0]
0065 okey = key[1] if len(key) > 1 else key[0]
0066 val = getattr(self.job, ikey)
0067 if val:
0068 data[okey] = val
0069
0070 data.update(self.job.overwrite_queuedata)
0071
0072 logger.info('queuedata: following keys will be overwritten by Job values: %s' % data)
0073
0074 return {pandaqueue: data}
0075
0076 def resolve_storage_data(self, ddmendpoints=[], **kwargs):
0077 """
0078 Resolve Job specific settings for storage data (including data passed via --overwriteStorageData)
0079 :return: dict of settings for requested DDMEndpoints with ddmendpoin as a key
0080 """
0081
0082 data = {}
0083
0084
0085 master_data = self.job.overwrite_storagedata or {}
0086 try:
0087 data.update((k, v) for k, v in master_data.iteritems() if k in set(ddmendpoints or master_data) & set(master_data))
0088 except Exception:
0089 data.update((k, v) for k, v in list(master_data.items()) if k in set(ddmendpoints or master_data) & set(master_data))
0090
0091 if data:
0092 logger.info('storagedata: following data extracted from Job definition will be used: %s' % data)
0093
0094 return data