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']
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)
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 )
def xmlstr_todict(s): import PyUtils.xmldict as _x import xml.etree.cElementTree as ET return _x.xml2dict(ET.fromstring(s))
] 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'
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
'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='*'