ATLAS Offline Software
Loading...
Searching...
No Matches
python.trfReports.trfFileReport Class Reference

Class to contain metadata for file types. More...

Inheritance diagram for python.trfReports.trfFileReport:
Collaboration diagram for python.trfReports.trfFileReport:

Public Member Functions

 __init__ (self, fileArg)
 Constructor.
 python (self, fast=False, type='full')
 Get a python representation of file report @detail Returns the python representation of this file report which is a list of dictionaries (a la Tier 0).
 singleFilePython (self, filename, fast=False, type='full', basename=True)
 Return unique metadata for a single file in an argFile class.
 classicEltreeList (self, fast=False)
 Return an element tree representation of the classic file report @detail Returns a list of eltree entities giving the classic metadata of a files for this argument.
 classicSingleEltree (self, filename, fast=False)
 Return file metadata in 'classic' POOLFILECATALOG format.
 classicPython (self, fast=False)
 Return file metadata in classic Tier 0 python style.
 classicSinglePython (self, filename, fast=False)
 Return single file metadata in classic Tier 0 python style.

Protected Attributes

 _fileArg = fileArg

Static Protected Attributes

dict _internalToClassicMap
dict _internalToGpickleMap
dict _internalToGpickleMoreMap

Detailed Description

Class to contain metadata for file types.

Definition at line 393 of file trfReports.py.

Constructor & Destructor Documentation

◆ __init__()

python.trfReports.trfFileReport.__init__ ( self,
fileArg )

Constructor.

Parameters

c fileArg argFile object which this report represents

Definition at line 416 of file trfReports.py.

416 def __init__(self, fileArg):
417 self._fileArg = fileArg
418

Member Function Documentation

◆ classicEltreeList()

python.trfReports.trfFileReport.classicEltreeList ( self,
fast = False )

Return an element tree representation of the classic file report @detail Returns a list of eltree entities giving the classic metadata of a files for this argument.

This is a list so that it can be attached as a series of nodes into the final PFC description of the job

Returns
List of ElementTree.Element objects

Definition at line 501 of file trfReports.py.

501 def classicEltreeList(self, fast = False):
502 treeList = []
503 for fname in self._fileArg.value:
504 treeList.append(self.classicSingleEltree(fname, fast = fast))
505
506 return treeList
507
508

◆ classicPython()

python.trfReports.trfFileReport.classicPython ( self,
fast = False )

Return file metadata in classic Tier 0 python style.

Parameters
fastPrevent external metadata calls if true
Returns
List of file metadata dictionaries

Definition at line 543 of file trfReports.py.

543 def classicPython(self, fast = False):
544 fileList = []
545 for fname in self._fileArg.value:
546 fileList.append(self.classicSinglePython(fname, fast = fast))
547 return fileList
548

◆ classicSingleEltree()

python.trfReports.trfFileReport.classicSingleEltree ( self,
filename,
fast = False )

Return file metadata in 'classic' POOLFILECATALOG format.

Parameters
filenameFilename to generate Element object for
fastPrevent external metadata calls if true

Definition at line 512 of file trfReports.py.

512 def classicSingleEltree(self, filename, fast = False):
513 if filename not in self._fileArg.value:
514 raise trfExceptions.TransformReportException(trfExit.nameToCode('TRF_INTERNAL_REPORT_ERROR'),
515 'Unknown file ({0}) in the file report for {1}'.format(filename, self._fileArg))
516 tree = ElementTree.Element('File', ID = str(self._fileArg.getSingleMetadata(fname = filename, metadataKey = 'file_guid', populate = not fast)))
517 for myKey, classicKey in self._internalToClassicMap.items():
518 # beam_type is tricky - we return only the first list value,
519 # (but remember, protect against funny stuff!)
520 if myKey == 'beam_type':
521 beamType = self._fileArg.getSingleMetadata(fname = filename, metadataKey = myKey, populate = not fast)
522 if isinstance(beamType, list):
523 if len(beamType) == 0:
524 ElementTree.SubElement(tree, 'metadata', att_name = classicKey, att_value = '')
525 else:
526 ElementTree.SubElement(tree, 'metadata', att_name = classicKey, att_value = str(beamType[0]))
527 else:
528 # This is really not normal, but best we can do is str conversion
529 ElementTree.SubElement(tree, 'metadata', att_name = classicKey, att_value = str(beamType))
530 else:
531 ElementTree.SubElement(tree, 'metadata', att_name = classicKey,
532 att_value = str(self._fileArg.getSingleMetadata(fname = filename, metadataKey = myKey, populate = not fast)))
533 # Now add the metadata which is stored at the whole argument level
534 ElementTree.SubElement(tree, 'metadata', att_name = 'fileType', att_value = str(self._fileArg.type))
535 if self._fileArg.dataset is not None:
536 ElementTree.SubElement(tree, 'metadata', att_name = 'dataset', att_value = self._fileArg.dataset)
537
538 return tree
539

◆ classicSinglePython()

python.trfReports.trfFileReport.classicSinglePython ( self,
filename,
fast = False )

Return single file metadata in classic Tier 0 python style.

Parameters
fastPrevent external metadata calls if true

c filename Filename to generate Element object for

Definition at line 552 of file trfReports.py.

552 def classicSinglePython(self, filename, fast = False):
553 if filename not in self._fileArg.value:
554 raise trfExceptions.TransformReportException(trfExit.nameToCode('TRF_INTERNAL_REPORT_ERROR'),
555 'Unknown file ({0}) in the file report for {1}'.format(filename, self._fileArg))
556 # Direct population of some keys
557 fileDict = {'lfn' : filename,
558 'dataset' : self._fileArg.dataset,
559 }
560 # Fill in the mapped 'primary' keys
561 for myKey, classicKey in self._internalToGpickleMap.items():
562 fileDict[classicKey] = self._fileArg.getSingleMetadata(fname = filename, metadataKey = myKey, populate = not fast)
563 if classicKey == 'checkSum' and fileDict[classicKey] == 'UNDEFINED':
564 # Old style is that we give back None when we don't know
565 fileDict[classicKey] = None
566 elif fileDict[classicKey] == 'UNDEFINED':
567 # Suppress things we don't generally expect to know
568 del fileDict[classicKey]
569 # Base 'more' stuff which is known by the argFile itself
570 fileDict['more'] = {'metadata' : {'fileType' : self._fileArg.type}}
571 for myKey, classicKey in self._internalToGpickleMoreMap.items():
572 value = self._fileArg.getSingleMetadata(fname = filename, metadataKey = myKey, populate = not fast)
573 if value != 'UNDEFINED':
574 fileDict['more']['metadata'][classicKey] = value
575
576 return fileDict
577
578

◆ python()

python.trfReports.trfFileReport.python ( self,
fast = False,
type = 'full' )

Get a python representation of file report @detail Returns the python representation of this file report which is a list of dictionaries (a la Tier 0).

Parameters
typeReport type (e.g., None = normal or fast)
baseHow extensive to make the report: name or full

Definition at line 424 of file trfReports.py.

424 def python(self, fast = False, type = 'full'):
425 # First entity contains shared properties - same for all files in this argFile
426 if type == 'name':
427 fileArgProps = {'dataset': self._fileArg.dataset,
428 'nentries': self._fileArg.getnentries(fast),
429 'subFiles' : []}
430 elif type == 'full':
431 fileArgProps = {'dataset' : self._fileArg.dataset,
432 'type' : self._fileArg.type,
433 'subFiles' : [],
434 'argName' : self._fileArg.name,
435 }
436 else:
437 raise trfExceptions.TransformReportException(trfExit.nameToCode('TRF_INTERNAL_REPORT_ERROR'),
438 'Unknown file report type ({0}) in the file report for {1}'.format(type, self._fileArg))
439
440
443 uniqueBasenames = set([ os.path.basename(fname) for fname in self._fileArg.value ])
444 uniqueDirectories = set([ os.path.dirname(os.path.relpath(os.path.normpath(fname))) for fname in self._fileArg.value ])
445 if len(uniqueBasenames) != len(self._fileArg.value):
446 msg.info('Detected two files with the same basename in a file argument - report for file {0} will be produced with the path as a key'.format(self._fileArg))
447 basenameReport = False
448 elif len(uniqueDirectories) > 1:
449 msg.warning('Detected output files in different directories - report for file {0} will be produced with the path as a key'.format(self._fileArg))
450 basenameReport = False
451 else:
452 basenameReport = True
453 suppressed = []
454 for fname in self._fileArg.value:
455 subFile = None
456 if basenameReport:
457 subFile = self.singleFilePython(fname, fast = fast, type = type)
458 else:
459 subFile = self.singleFilePython(fname, fast = fast, type = type, basename = False)
460 if subFile is not None:
461 # if nentries == 0 for DRAW, suppress subfile from report
462 if 'nentries' in subFile and subFile['nentries'] == 0 and isinstance(self._fileArg, trfArgClasses.argBSFile):
463 msg.info('Suppressing file {0}, nentries is 0'.format(subFile['name']))
464 suppressed.append(subFile['name'])
465 else:
466 fileArgProps['subFiles'].append(subFile)
467
468 return fileArgProps
469
STL class.

◆ singleFilePython()

python.trfReports.trfFileReport.singleFilePython ( self,
filename,
fast = False,
type = 'full',
basename = True )

Return unique metadata for a single file in an argFile class.

Parameters
filenameFile for which report should be generated
typeType of report to produce
fastGenerate a fast report, i.e., no external matadata calls
Returns
Python report dictionary

Definition at line 475 of file trfReports.py.

475 def singleFilePython(self, filename, fast = False, type = 'full', basename = True):
476 if filename not in self._fileArg.value:
477 raise trfExceptions.TransformReportException(trfExit.nameToCode('TRF_INTERNAL_REPORT_ERROR'),
478 'Unknown file ({0}) in the file report for {1}'.format(filename, self._fileArg))
479 if basename:
480 entry = {'name': os.path.basename(filename)}
481 else:
482 entry = {'name': os.path.relpath(os.path.normpath(filename))}
483 if type == 'name':
484 # For 'name' we return only the GUID
485 entry.update(self._fileArg.getMetadata(files = filename, populate = not fast, metadataKeys = ['file_guid'])[filename])
486 elif type == 'full':
487 # Suppress io because it's the key at a higher level and _exists because it's internal
488 entry.update(self._fileArg.getMetadata(files = filename, populate = not fast, maskMetadataKeys = ['io', '_exists', 'integrity', 'file_type'])[filename])
489 else:
490 raise trfExceptions.TransformReportException(trfExit.nameToCode('TRF_INTERNAL_REPORT_ERROR'),
491 'Unknown file report type ({0}) in the file report for {1}'.format(type, self._fileArg))
492
493 return entry
494
495

Member Data Documentation

◆ _fileArg

python.trfReports.trfFileReport._fileArg = fileArg
protected

Definition at line 417 of file trfReports.py.

◆ _internalToClassicMap

dict python.trfReports.trfFileReport._internalToClassicMap
staticprotected
Initial value:
= {'conditions_tag' : 'conditionsTag',
'beam_type' : 'beamType',
'geometry' : 'geometryVersion',
'nentries' : 'events',
'file_size': 'size',
}

Definition at line 396 of file trfReports.py.

◆ _internalToGpickleMap

dict python.trfReports.trfFileReport._internalToGpickleMap
staticprotected
Initial value:
= {'file_guid' : 'GUID',
'checkSum' : 'checkSum', # We don't have this, but Tier 0 want it in the dictionary
'nentries' : 'events',
'file_size' : 'size',
}

Definition at line 403 of file trfReports.py.

◆ _internalToGpickleMoreMap

dict python.trfReports.trfFileReport._internalToGpickleMoreMap
staticprotected
Initial value:
= {'beam_type' : 'beamType',
'conditions_tag' : 'conditionsTag',
'geometry' : 'geometryVersion',
}

Definition at line 409 of file trfReports.py.


The documentation for this class was generated from the following file: