# ===================================================================== #
# author: Ron Trompert <ron.trompert@surfsara.nl> -- SURFsara #
# helpdesk: Grid Services <grid.support@surfsara.nl> -- SURFsara #
# #
# usage: python stage.py #
# description: #
# Stage the files listed in "files". The paths should have the #
# '/pnfs/...' format. The pin lifetime is set with the value #
# 'srmv2_desiredpintime'. #
# ===================================================================== #
#!/usr/bin/env python
#import gfal2 as gfal
import re
import sys
from GRID_LRT.Staging import stager_access
[docs]def strip(item):
return item.strip()
[docs]def process_surl_line(line):
""" Used to drop empty lines and to
take the first argument of the srmfile (the srm:// link)
"""
if " " in line:
line = line.split(" ")[0]
if line == "/n":
return None
return line
[docs]def main(filename, test=False):
file_loc = location(filename)
rs, m = replace(file_loc)
with open(filename, 'r') as f:
urls = f.readlines()
return process(urls, rs, m, test)
[docs]def return_srmlist(filename):
file_loc = location(filename)
regex, match = replace(file_loc)
_file = open(filename, 'r')
urls = _file.readlines()
_file.close()
surls = []
for url in urls:
url = process_surl_line(url)
if "managerv2?SFN" in url:
surls.append(match.sub(regex, strip(u)))
elif url:
surls.append(url)
return surls
[docs]def state_dict(srm_dict):
locs_options = ['s', 'j', 'p']
line = srm_dict.itervalues().next()
file_loc = [locs_options[i] for i in range(len(locs_options)) if [
"sara" in line, "juelich" in line, not "sara" in line and not "juelich" in line][i] == True][0]
regex, match = replace(file_loc)
urls = []
for key, value in srm_dict.iteritems():
urls.append(value)
return process(urls, regex, match)
[docs]def location(filename):
locs_options = ['s', 'j', 'p']
with open(filename, 'r') as _file:
line = _file.readline()
file_loc = [locs_options[i] for i in range(len(locs_options)) if [
"sara" in line, "juelich" in line, not "sara" in line and not "juelich" in line][i] == True]
return file_loc[0]
[docs]def replace(file_loc):
if file_loc == 'p':
match = re.compile('/lofar')
repl_string = "srm://lta-head.lofar.psnc.pl:8443/srm/managerv2?SFN=/lofar"
print("Staging in Poznan")
else:
match = re.compile('/pnfs')
if file_loc == 'j':
repl_string = "srm://lofar-srm.fz-juelich.de:8443/srm/managerv2?SFN=/pnfs/"
print("Staging in Juleich")
elif file_loc == 's':
repl_string = "srm://srm.grid.sara.nl:8443/srm/managerv2?SFN=/pnfs"
print("files are on SARA")
else:
sys.exit()
return repl_string, match
[docs]def process(urls, repl_string, match, test=False):
surls = []
for url in urls:
if not 'srm' in url:
surls.append(match.sub(repl_string, strip(url)))
else:
surls.append(strip(url))
req = {}
print("Setting up "+str(len(surls))+" srms to stage")
if test:
return
stageid = stager_access.stage(surls)
print("staged with stageID ", stageid)
return stageid
[docs]def get_stage_status(stageid):
return stager_access.get_status(int(stageid))
if __name__ == '__main__':
if len(sys.argv) == 2:
sys.exit(main(sys.argv[1]))
else:
sys.exit(main('files'))