def isEOSDir(path): """Returns True if path is either: /store/... or /eos/cms/store/... or root://eoscms.cern.ch//eos/cms/ Otherwise, returns False. WARNING!! This function does not check for path existence, and returns true also for plain files. !!! Will, is my summary correct? """ if os.path.exists(path): # path does not exist # COLIN: I think this condition could be removed, # as it duplicates the following one. return False if not path.startswith('/eos') and not path.startswith( '/store') and not path.startswith( 'root://eoscms.cern.ch//eos/cms/'): # neither an EOS PFN or a LFN. return False # at this stage, we must have an EOS PFN or an LFN pfn = lfnToPFN(eosToLFN(path)) tokens = cmsIO.splitPFN(pfn) return tokens and tokens[1].lower().startswith('eos')
def isEOSDir( path ): """Returns True if path is either: /store/... or /eos/cms/store/... or root://eoscms.cern.ch//eos/cms/ Otherwise, returns False. WARNING!! This function does not check for path existence, and returns true also for plain files. !!! Will, is my summary correct? """ if os.path.exists( path ): # path does not exist # COLIN: I think this condition could be removed, # as it duplicates the following one. return False if not path.startswith('/eos') and not path.startswith('/store') and not path.startswith('root://eoscms.cern.ch//eos/cms/'): # neither an EOS PFN or a LFN. return False # at this stage, we must have an EOS PFN or an LFN pfn = lfnToPFN(eosToLFN(path)) tokens = cmsIO.splitPFN(pfn) return tokens and tokens[1].lower().startswith('eos')
def runXRDCommand(path, cmd, *args): """Run an xrd command. """ lfn = eosToLFN(path) #print "lfn:", lfn, cmd tokens = cmsIO.splitPFN(lfnToPFN(lfn)) command = ['xrd', tokens[1], cmd, tokens[2]] command.extend(args) runner = cmsIO.cmsFileManip() # print ' '.join(command) return runner.runCommand(command)
def runXRDCommand(path, cmd, *args): """Run an xrd command. !!! Will, what is happening in case of problem? ??? At some point, should return a list of lines instead of a string.""" lfn = eosToLFN(path) tokens = cmsIO.splitPFN(lfnToPFN(lfn)) command = ['xrd', tokens[1], cmd, tokens[2]] command.extend(args) runner = cmsIO.cmsFileManip() # print ' '.join(command) return runner.runCommand(command)
def runEOSCommand(path, cmd, *args): """Run an eos command. !!! Will, when the EOS command fails, it passes silently... I think we should really try and raise an exception in case of problems. should be possible as the return code is provided in the tuple returned by runner.""" lfn = eosToLFN(path) pfn = lfnToPFN(lfn) tokens = cmsIO.splitPFN(pfn) #obviously, this is not nice command = ['/afs/cern.ch/project/eos/installation/pro/bin/eos.select', cmd] command.extend(args) command.append(tokens[2]) runner = cmsIO.cmsFileManip() return runner.runCommand(command)
def xrdcp(src, dest): """Does a copy of files using xrd. Colin: implement a generic cp interface as done for rm, ls, etc?""" recursive = False #first the src file pfn_src = src if os.path.exists(src): #local pfn_src = src if os.path.isdir(src): recursive = True elif fileExists(src): src = eosToLFN(src) pfn_src = lfnToPFN(src) if isDirectory(src): recursive = True else: raise ValueError(src + ' does not exist.') #now the dest pfn_dest = dest if isEOSDir(dest): dest = eosToLFN(dest) pfn_dest = lfnToPFN(dest) if isDirectory(dest): tokens = cmsIO.splitPFN(pfn_dest) pfn_dest = '%s://%s//%s/' % (tokens[0], tokens[1], tokens[2]) elif os.path.exists(dest): pfn_dest = dest command = ['xrdcp', '-force'] if recursive: # print 'recursive' topDir = src.rstrip('/').split('/')[-1] if topDir != '.': dest = '/'.join([dest, topDir]) # print 'mkdir ' + dest mkdir(dest) files = listFiles(src, rec=True) # pprint.pprint( [file[4] for file in files] ) for srcFile in files: # srcFile = file[4] pfnSrcFile = srcFile if isEOSDir(srcFile): srcFile = eosToLFN(srcFile) pfnSrcFile = lfnToPFN(srcFile) destFile = srcFile.replace(src, '') destFile = '/'.join([dest, destFile]) pfnDestFile = destFile if isEOSDir(destFile): lfnDestFile = eosToLFN(destFile) pfnDestFile = lfnToPFN(lfnDestFile) # print 'srcFile', pfnSrcFile # print 'destFile', pfnDestFile if isFile(srcFile): _xrdcpSingleFile(pfnSrcFile, pfnDestFile) else: mkdir(destFile) else: _xrdcpSingleFile(pfn_src, pfn_dest)
def xrdcp(src, dest): """Does a copy of files using xrd. Colin: implement a generic cp interface as done for rm, ls, etc?""" recursive = False #first the src file pfn_src = src if os.path.exists(src): #local pfn_src = src if os.path.isdir(src): recursive = True elif fileExists(src): src = eosToLFN(src) pfn_src = lfnToPFN(src) if isDirectory(src): recursive = True else: raise ValueError(src + ' does not exist.') #now the dest pfn_dest = dest if isEOSDir(dest): dest = eosToLFN(dest) pfn_dest = lfnToPFN(dest) if isDirectory(dest): tokens = cmsIO.splitPFN(pfn_dest) pfn_dest = '%s://%s//%s/' % (tokens[0],tokens[1],tokens[2]) elif os.path.exists(dest): pfn_dest = dest command = ['xrdcp'] if recursive: # print 'recursive' topDir = src.rstrip('/').split('/')[-1] if topDir != '.': dest = '/'.join([dest, topDir]) # print 'mkdir ' + dest mkdir( dest ) files = listFiles(src, rec=True) # pprint.pprint( [file[4] for file in files] ) for srcFile in files: # srcFile = file[4] pfnSrcFile = srcFile if isEOSDir(srcFile): srcFile = eosToLFN(srcFile) pfnSrcFile = lfnToPFN(srcFile) destFile = srcFile.replace( src, '' ) destFile = '/'.join([dest,destFile]) pfnDestFile = destFile if isEOSDir(destFile): lfnDestFile = eosToLFN(destFile) pfnDestFile = lfnToPFN(lfnDestFile) # print 'srcFile', pfnSrcFile # print 'destFile', pfnDestFile if isFile(srcFile): _xrdcpSingleFile( pfnSrcFile, pfnDestFile ) else: mkdir(destFile) else: _xrdcpSingleFile( pfn_src, pfn_dest )