Exemplo n.º 1
0
 def dsinfo(n):
     import PyUtils.AmiLib as A
     import xml.etree.cElementTree as ET
     import PyUtils.xmldict as _x
     c = A.Client()
     try:
         res = c.exec_cmd(cmd="GetDatasetInfo", logicalFileName=n)
         dd = _x.xml2dict(ET.fromstring(res.output('xml')))
         return dd['AMIMessage']['Result']
     except PyAmi.AMI_Error:
         # maybe a logical dataset name ?
         res = c.exec_cmd(cmd="GetDatasetInfo", logicalDatasetName=n)
         dd = _x.xml2dict(ET.fromstring(res.output('xml')))
         return dd['AMIMessage']['Result']
Exemplo n.º 2
0
 def dsinfo(n):
     import PyUtils.AmiLib as A
     import xml.etree.cElementTree as ET
     import PyUtils.xmldict as _x
     c = A.Client()
     try:
         res = c.exec_cmd(cmd="GetDatasetInfo", logicalFileName=n)
         dd = _x.xml2dict(ET.fromstring(res.output('xml')))
         return dd['AMIMessage']['Result']
     except PyAmi.AMI_Error:
         # maybe a logical dataset name ?
         res = c.exec_cmd(cmd="GetDatasetInfo", logicalDatasetName=n)
         dd = _x.xml2dict(ET.fromstring(res.output('xml')))
         return dd['AMIMessage']['Result']
Exemplo n.º 3
0
    def get_clients(self, project, release, full_pkg_name):
        """return the list of clients (full-pkg-name, version) of
        `full_pkg_name` for project `project` and release `release`
        """
        args = {
            'groupName': project,  # AtlasOffline, AtlasEvent, ...
            'releaseName': release,
        }
        if full_pkg_name[0] != "/":
            full_pkg_name = "/" + full_pkg_name
        args['fullPackageName'] = full_pkg_name

        result = self.exec_cmd(cmd="TCListPackageVersionClient", args=args)
        if not result:
            raise RuntimeError('error executing TCListPackageVersionClient')

        rxml = result.output('xml')
        import xml.etree.cElementTree as ET
        try:
            rows = xml2dict(
                ET.fromstring(rxml))['AMIMessage']["Result"]["rowset"]['row']
        except Exception, e:
            self.msg.error(e.message)
            raise RuntimeError(
                'could not parse result of TCListPackageVersionClient:\n%s' %
                rxml)
Exemplo n.º 4
0
 def get_clients(self, project, release, full_pkg_name):
     """return the list of clients (full-pkg-name, version) of
     `full_pkg_name` for project `project` and release `release`
     """
     args = {
         'groupName': project, # AtlasOffline, AtlasEvent, ...
         'releaseName': release,
         }
     if full_pkg_name[0] != "/":
         full_pkg_name = "/"+full_pkg_name
     args['fullPackageName'] = full_pkg_name
     
     result = self.exec_cmd(cmd="TCListPackageVersionClient", args=args)
     if not result:
         raise RuntimeError(
             'error executing TCListPackageVersionClient'
             )
     
     rxml = result.output('xml')
     import xml.etree.cElementTree as ET
     try:
         rows = xml2dict(ET.fromstring(rxml))['AMIMessage']["Result"]["rowset"]['row']
     except Exception, e:
         self.msg.error(e.message)
         raise RuntimeError(
             'could not parse result of TCListPackageVersionClient:\n%s' % rxml
             )
Exemplo n.º 5
0
def xmlstr_todict(s):
    import PyUtils.xmldict as _x
    import xml.etree.cElementTree as ET
    return _x.xml2dict(ET.fromstring(s))
Exemplo n.º 6
0
]

if 0:
    import xml.etree.cElementTree as ET
    from pyAMI.pyAMI import *
    amiclient = AMI(certAuth=True)

    import PyUtils.xmldict as _x

    clients_cmd = 'TCListPackageVersionClient  -processingStep=production -project=TagCollector   -groupName=AtlasOffline -releaseName=17.0.1 -fullPackageName=/AtlasTest/AthenaMPTest -repositoryName=AtlasOfflineRepository'.split(
        ' ')

    rec_cmd = 'TCFormGetDependencyPackageVersionTree -expandedPackageID="*" -expandedTopContainerPackage="*" -groupName="AtlasProduction" -processingStep="production" -project="TagCollector" -releaseName="15.7.0"'.replace(
        '"', '').split(' ')
    res = amiclient.execute(rec_cmd)
    dd = _x.xml2dict(ET.fromstring(res.output('xml')))
    dd['AMIMessage']['Result']['tree']

    # all the leaf packages in AtlasProduction and its dependencies
    cmd = """
    TCFormGetDependencyPackageVersionTree -expandedPackageID=* 
    -expandedTopContainerPackage=* -groupName=AtlasProduction 
    -processingStep=production -project=TagCollector -releaseName=15.7.0
    """.replace("\n", "").split()
    res = amiclient.execute(cmd)
    d = _x.xml2dict(ET.fromstring(res.output('xml')))

    # only the leaf packages in groupName="AtlasProduction"
    cmd = """
    TCFormGetPackageVersionTree -expandedPackageID='*' 
    -expandedTopContainerPackage='*' -groupName='AtlasProduction' 
Exemplo n.º 7
0
def ami_dsinfos(dsname):
    """a helper function to query AMI for informations about a dataset name.
    `dsname` can be either a logical dataset name (a bag of files) or a
    logical filename.
    """
    import PyUtils.AmiLib as A
    import PyUtils.xmldict as _x
    import xml.etree.cElementTree as ET

    # keep order of tokens !
    for token in ('ami://', '//', '/'):
        if dsname.startswith(token):
            dsname = dsname[len(token):]
            pass
        pass
    
    ami = A.Client()
    try:
        res = ami.exec_cmd(cmd="GetDatasetInfo", logicalFileName=dsname)
    except A.PyAmi.AMI_Error:
        # maybe a logical dataset name then ?
        res = ami.exec_cmd(cmd="GetDatasetInfo", logicalDatasetName=dsname)
    res = _x.xml2dict(ET.fromstring(res.transform('xml')))
    data = res['AMIMessage']['Result']
        
    # get only interesting informations...
    rowset = data['rowset']
    if isinstance(rowset, list):
        fields = rowset[-1]['row']['field']
    else:
        fields = rowset['row']['field']

    # translate into athfile-infos format
    af_infos = _create_file_infos()
    for i in fields:
        if not ('name' in i and '_text' in i):
            continue
        k = i['name']
        v = i['_text']

        if v.lower() == 'none':
            v = None
            
        if k == 'logicalDatasetName':
            af_infos['file_name'] = 'ami://'+v

        elif k == 'totalEvents':
            af_infos['nentries'] = int(v)

        elif k == 'runNumber':
            af_infos['run_number'] = [int(v)]
            
        elif k == 'geometryVersion':
            af_infos['geometry'] = v

        elif k == 'conditionsTag':
            af_infos['conditions_tag'] = v

        elif k == 'beamType':
            af_infos['beam_type'] = [v]
            
        elif k == 'dataType':
            af_infos['file_type'] = 'bs' if v.lower() == 'raw' else 'pool'
            stream_name = 'Stream' + v.upper()
            af_infos['stream_names'] = [stream_name]

        elif k == 'streamName':
            stream_type,stream_name = v.split('_')
            af_infos['stream_tags'] = [
                {'obeys_lbk': None,
                 'stream_type': stream_type,
                 'stream_name': stream_name}
                ]
    # FIXME !!
    af_infos['file_guid'] = af_infos['file_name']
    # FIXME !!
    if not af_infos['run_number']:
        dsname = af_infos['file_name']
        idx = [i for i,j in enumerate(fields)
               if j['name']=='contained_dataset']
        if len(idx)==1:
            #try to extract run-number from the name of the first dataset
            dsname = fields[idx[0]]['_text'].split(';')[0]
            try:
                # an AMI dsname is of the form:
                # (project_name).(run_nbr).[...]
                run_number = dsname.split('.')[1]
                af_infos['run_number'] = [int(run_number)]
            except ValueError:
                pass
                
        else:
            try:
                # an AMI dsname is of the form:
                # (project_name).(run_nbr).[...]
                run_number = dsname.split('.')[1]
                af_infos['run_number'] = [int(run_number)]
            except ValueError:
                pass
        pass
    
    return af_infos
Exemplo n.º 8
0
def xmlstr_todict(s):
    import PyUtils.xmldict as _x
    import xml.etree.cElementTree as ET
    return  _x.xml2dict(ET.fromstring(s))
Exemplo n.º 9
0
    'ami_todict',
    'Client',
    ]

if 0:
    import xml.etree.cElementTree as ET
    from pyAMI.pyAMI import *
    amiclient = AMI(certAuth = True)

    import PyUtils.xmldict as _x

    clients_cmd = 'TCListPackageVersionClient  -processingStep=production -project=TagCollector   -groupName=AtlasOffline -releaseName=17.0.1 -fullPackageName=/AtlasTest/AthenaMPTest -repositoryName=AtlasOfflineRepository'.split(' ')
    
    rec_cmd = 'TCFormGetDependencyPackageVersionTree -expandedPackageID="*" -expandedTopContainerPackage="*" -groupName="AtlasProduction" -processingStep="production" -project="TagCollector" -releaseName="15.7.0"'.replace('"','').split(' ')
    res = amiclient.execute(rec_cmd)
    dd = _x.xml2dict(ET.fromstring(res.output('xml')))
    dd['AMIMessage']['Result']['tree']


    # all the leaf packages in AtlasProduction and its dependencies
    cmd = """
    TCFormGetDependencyPackageVersionTree -expandedPackageID=* 
    -expandedTopContainerPackage=* -groupName=AtlasProduction 
    -processingStep=production -project=TagCollector -releaseName=15.7.0
    """.replace("\n","").split()
    res = amiclient.execute(cmd)
    d = _x.xml2dict(ET.fromstring(res.output('xml')))

    # only the leaf packages in groupName="AtlasProduction"
    cmd = """
    TCFormGetPackageVersionTree -expandedPackageID='*'