def _readBlockFromConfig(self, ds_config, datasetExpr, datasetNick, datasetID):
		metadata_keys = parseJSON(ds_config.get('metadata', '[]', onChange = None))
		common_metadata = parseJSON(ds_config.get('metadata common', '[]', onChange = None))
		if len(common_metadata) > len(metadata_keys):
			raise DatasetError('Unable to set %d common metadata items with %d metadata keys' % (len(common_metadata), len(metadata_keys)))
		common_prefix = ds_config.get('prefix', '', onChange = None)
		file_list = []
		has_events = False
		has_se_list = False
		for url in ds_config.getOptions():
			if url == 'se list':
				has_se_list = True
			elif url == 'events':
				has_events = True
			elif url not in ['dataset hash', 'id', 'metadata', 'metadata common', 'nickname', 'prefix']:
				file_list.append(self._readFileFromConfig(ds_config, url, metadata_keys, common_metadata, common_prefix))
		if not file_list:
			raise DatasetError('There are no dataset files specified for dataset %r' % datasetExpr)

		result = {
			DataProvider.Nickname: ds_config.get('nickname', datasetNick, onChange = None),
			DataProvider.DatasetID: ds_config.getInt('id', datasetID, onChange = None),
			DataProvider.Dataset: datasetExpr,
			DataProvider.FileList: sorted(file_list, key = lambda fi: fi[DataProvider.URL]),
		}
		if metadata_keys:
			result[DataProvider.Metadata] = metadata_keys
		if has_events:
			result[DataProvider.NEntries] = ds_config.getInt('events', -1, onChange = None)
		if has_se_list:
			result[DataProvider.Locations] = parseList(ds_config.get('se list', '', onChange = None), ',')
		return result
	def __init__(self, config, datasetExpr, datasetNick = None, datasetID = 0):
		DataProvider.__init__(self, config, datasetExpr, datasetNick, datasetID)

		(self._path, self._events, selist) = utils.optSplit(datasetExpr, '|@')
		self._selist = parseList(selist, ',') or None
		if not (self._path and self._events):
			raise ConfigError('Invalid dataset expression!\nCorrect: /local/path/to/file|events[@SE1,SE2]')
示例#3
0
	def __init__(self, config, datasetExpr, datasetNick = None):
		DataProvider.__init__(self, config, datasetExpr, datasetNick)

		(self._path, self._events, selist) = utils.optSplit(datasetExpr, '|@')
		self._selist = parseList(selist, ',') or None
		if not (self._path and self._events):
			raise ConfigError('Invalid dataset expression!\nCorrect: /local/path/to/file|events[@SE1,SE2]')
	def _readBlockFromConfig(self, config, datasetExpr, datasetNick, datasetID):
		common_metadata = parseJSON(config.get('metadata common', '[]', onChange = None))
		common_prefix = config.get('prefix', '', onChange = None)
		file_list = []
		has_events = False
		has_se_list = False
		for url in config.getOptions():
			if url == 'se list':
				has_se_list = True
			elif url == 'events':
				has_events = True
			elif url not in ['dataset hash', 'id', 'metadata', 'metadata common', 'nickname', 'prefix']:
				info = config.get(url, onChange = None)
				tmp = info.split(' ', 1)
				fi = {DataProvider.URL: common_prefix + url, DataProvider.NEntries: int(tmp[0])}
				if common_metadata:
					fi[DataProvider.Metadata] = common_metadata
				if len(tmp) == 2:
					fi[DataProvider.Metadata] = fi.get(DataProvider.Metadata, []) + parseJSON(tmp[1])
				file_list.append(fi)
		if not file_list:
			raise DatasetError('There are no dataset files specified for dataset %r' % datasetExpr)

		result = {
			DataProvider.Nickname: config.get('nickname', datasetNick, onChange = None),
			DataProvider.DatasetID: config.getInt('id', datasetID, onChange = None),
			DataProvider.Dataset: datasetExpr,
			DataProvider.Metadata: parseJSON(config.get('metadata', '[]', onChange = None)),
			DataProvider.FileList: sorted(file_list, key = lambda fi: fi[DataProvider.URL]),
		}
		if has_events:
			result[DataProvider.NEntries] = config.getInt('events', -1, onChange = None)
		if has_se_list:
			result[DataProvider.Locations] = parseList(config.get('se list', '', onChange = None), ',')
		return result
示例#5
0
 def __init__(self, config, name, userOpt, itemName, discoverFun):
     Broker.__init__(self, config, name, userOpt, itemName, discoverFun)
     self._storageDict = config.getLookup(
         '%s storage access' % userOpt, {},
         onChange=None,
         parser=lambda x: parseList(x, ' '),
         strfun=lambda x: str.join(' ', x))
		def getFlatList(section, option):
			for (opt, value, src) in tmpConfigContent.get(section, []):
				try:
					if opt == option:
						for entry in parseList(value, None):
							yield entry
				except Exception:
					raise ConfigError('Unable to parse [%s] %s from %s' % (section, option, src))
示例#7
0
		def getFlatList(section, option):
			for (opt, value, src) in tmpConfigContent.get(section, []):
				try:
					if opt == option:
						for entry in parseList(value, None):
							yield entry
				except Exception:
					raise ConfigError('Unable to parse [%s] %s from %s' % (section, option, src))
示例#8
0
    def _readBlockFromConfig(self, config, datasetExpr, datasetNick,
                             datasetID):
        common_metadata = parseJSON(
            config.get('metadata common', '[]', onChange=None))
        common_prefix = config.get('prefix', '', onChange=None)
        file_list = []
        has_events = False
        has_se_list = False
        for url in config.getOptions():
            if url == 'se list':
                has_se_list = True
            elif url == 'events':
                has_events = True
            elif url not in [
                    'dataset hash', 'id', 'metadata', 'metadata common',
                    'nickname', 'prefix'
            ]:
                info = config.get(url, onChange=None)
                tmp = info.split(' ', 1)
                fi = {
                    DataProvider.URL: common_prefix + url,
                    DataProvider.NEntries: int(tmp[0])
                }
                if common_metadata:
                    fi[DataProvider.Metadata] = common_metadata
                if len(tmp) == 2:
                    fi[DataProvider.Metadata] = fi.get(DataProvider.Metadata,
                                                       []) + parseJSON(tmp[1])
                file_list.append(fi)
        if not file_list:
            raise DatasetError(
                'There are no dataset files specified for dataset %r' %
                datasetExpr)

        result = {
            DataProvider.Nickname:
            config.get('nickname', datasetNick, onChange=None),
            DataProvider.DatasetID:
            config.getInt('id', datasetID, onChange=None),
            DataProvider.Dataset:
            datasetExpr,
            DataProvider.Metadata:
            parseJSON(config.get('metadata', '[]', onChange=None)),
            DataProvider.FileList:
            sorted(file_list, key=lambda fi: fi[DataProvider.URL]),
        }
        if has_events:
            result[DataProvider.NEntries] = config.getInt('events',
                                                          -1,
                                                          onChange=None)
        if has_se_list:
            result[DataProvider.Locations] = parseList(
                config.get('se list', '', onChange=None), ',')
        return result
示例#9
0
    def _readBlockFromConfig(self, ds_config, datasetExpr, datasetNick,
                             datasetID):
        metadata_keys = parseJSON(
            ds_config.get('metadata', '[]', onChange=None))
        common_metadata = parseJSON(
            ds_config.get('metadata common', '[]', onChange=None))
        if len(common_metadata) > len(metadata_keys):
            raise DatasetError(
                'Unable to set %d common metadata items with %d metadata keys'
                % (len(common_metadata), len(metadata_keys)))
        common_prefix = ds_config.get('prefix', '', onChange=None)
        file_list = []
        has_events = False
        has_se_list = False
        for url in ds_config.getOptions():
            if url == 'se list':
                has_se_list = True
            elif url == 'events':
                has_events = True
            elif url not in [
                    'dataset hash', 'id', 'metadata', 'metadata common',
                    'nickname', 'prefix'
            ]:
                file_list.append(
                    self._readFileFromConfig(ds_config, url, metadata_keys,
                                             common_metadata, common_prefix))
        if not file_list:
            raise DatasetError(
                'There are no dataset files specified for dataset %r' %
                datasetExpr)

        result = {
            DataProvider.Nickname:
            ds_config.get('nickname', datasetNick, onChange=None),
            DataProvider.DatasetID:
            ds_config.getInt('id', datasetID, onChange=None),
            DataProvider.Dataset:
            datasetExpr,
            DataProvider.FileList:
            sorted(file_list, key=lambda fi: fi[DataProvider.URL]),
        }
        if metadata_keys:
            result[DataProvider.Metadata] = metadata_keys
        if has_events:
            result[DataProvider.NEntries] = ds_config.getInt('events',
                                                             -1,
                                                             onChange=None)
        if has_se_list:
            result[DataProvider.Locations] = parseList(
                ds_config.get('se list', '', onChange=None), ',')
        return result
	def getPaths(self, option, default = noDefault, mustExist = True, **kwargs):
		def patlist2pathlist(value, mustExist):
			ec = ExceptionCollector()
			for pattern in value:
				try:
					for fn in utils.resolvePaths(pattern, self._configView.pathDict.get('search_paths', []), mustExist, ConfigError):
						yield fn
				except Exception:
					ec.collect()
			ec.raise_any(ConfigError('Error resolving paths'))

		str2obj = lambda value: list(patlist2pathlist(parseList(value, None), mustExist))
		obj2str = lambda value: '\n' + str.join('\n', patlist2pathlist(value, False))
		return self._getInternal('paths', obj2str, str2obj, None, option, default, **kwargs)
示例#11
0
	def getPaths(self, option, default = noDefault, mustExist = True, **kwargs):
		def patlist2pathlist(value, mustExist):
			ec = ExceptionCollector()
			for pattern in value:
				try:
					for fn in utils.resolvePaths(pattern, self._configView.pathDict.get('search_paths', []), mustExist, ConfigError):
						yield fn
				except Exception:
					ec.collect()
			ec.raise_any(ConfigError('Error resolving paths'))

		str2obj = lambda value: list(patlist2pathlist(parseList(value, None), mustExist))
		obj2str = lambda value: '\n' + str.join('\n', patlist2pathlist(value, False))
		return self._getInternal('paths', obj2str, str2obj, None, option, default, **kwargs)
	def __init__(self, config, datasetExpr, datasetNick = None, datasetID = 0):
		DataProvider.__init__(self, config, datasetExpr, datasetNick, datasetID)
		self._CommonPrefix = max(self.enumValues) + 1
		self._CommonMetadata = max(self.enumValues) + 2

		self._handleEntry = {
			'events': (DataProvider.NEntries, int, 'block entry counter'),
			'id': (DataProvider.DatasetID, int, 'dataset ID'),
			'metadata': (DataProvider.Metadata, parseJSON, 'metadata description'),
			'metadata common': (self._CommonMetadata, parseJSON, 'common metadata'),
			'nickname': (DataProvider.Nickname, str, 'dataset nickname'),
			'prefix': (self._CommonPrefix, str, 'common prefix'),
			'se list': (DataProvider.Locations, lambda value: parseList(value, ','), 'block location'),
		}

		(path, self._forcePrefix, self._filter) = utils.optSplit(datasetExpr, '@%')
		self._filename = config.resolvePath(path, True, 'Error resolving dataset file: %s' % path)
示例#13
0
	def __init__(self, config, datasetExpr, datasetNick = None):
		DataProvider.__init__(self, config, datasetExpr, datasetNick)
		self._CommonPrefix = max(self.enumValues) + 1
		self._CommonMetadata = max(self.enumValues) + 2

		self._handleEntry = {
			'events': (DataProvider.NEntries, int, 'block entry counter'),
			'id': (None, None, 'dataset ID'), # legacy key - skip
			'metadata': (DataProvider.Metadata, parseJSON, 'metadata description'),
			'metadata common': (self._CommonMetadata, parseJSON, 'common metadata'),
			'nickname': (DataProvider.Nickname, str, 'dataset nickname'),
			'prefix': (self._CommonPrefix, str, 'common prefix'),
			'se list': (DataProvider.Locations, lambda value: parseList(value, ','), 'block location'),
		}

		(path, self._forcePrefix, self._filter) = utils.optSplit(datasetExpr, '@%')
		self._filename = config.resolvePath(path, True, 'Error resolving dataset file: %s' % path)
示例#14
0
	def __init__(self, path):
		activity = Activity('Reading dataset partition file')
		self._lock = GCLock()
		self._fmt = utils.DictFormat()
		self._tar = tarfile.open(path, 'r:')
		(self._cacheKey, self._cacheTar) = (None, None)

		metadata = self._fmt.parse(self._tar.extractfile('Metadata').readlines(), keyParser = {None: str})
		self.maxJobs = metadata.pop('MaxJobs')
		self.classname = metadata.pop('ClassName')
		self.metadata = {'dataset': dict(ifilter(lambda k_v: not k_v[0].startswith('['), metadata.items()))}
		for (k, v) in ifilter(lambda k_v: k_v[0].startswith('['), metadata.items()):
			self.metadata.setdefault('dataset %s' % k.split(']')[0].lstrip('['), {})[k.split(']')[1].strip()] = v
		activity.finish()

		self._parserMap = { None: str, DataSplitter.NEntries: int, DataSplitter.Skipped: int,
			DataSplitter.DatasetID: int, DataSplitter.Invalid: parseBool,
			DataSplitter.Locations: lambda x: parseList(x, ','),
			DataSplitter.MetadataHeader: parseJSON,
			DataSplitter.Metadata: lambda x: parseJSON(x.strip("'")) }
示例#15
0
 def getList(self, option, default=noDefault, parseItem=identity, **kwargs):
     obj2str = lambda value: '\n' + str.join('\n', imap(str, value))
     str2obj = lambda value: lmap(parseItem, parseList(value, None))
     return self._getInternal('list', obj2str, str2obj, None, option,
                              default, **kwargs)
	def getList(self, option, default = noDefault, parseItem = identity, **kwargs):
		obj2str = lambda value: '\n' + str.join('\n', imap(str, value))
		str2obj = lambda value: lmap(parseItem, parseList(value, None))
		return self._getInternal('list', obj2str, str2obj, None, option, default, **kwargs)
示例#17
0
 def getFlatList(section, option):
     for (opt, value, _) in tmpConfigContent.get(section, []):
         if opt == option:
             for entry in parseList(value, None):
                 yield entry