1 |
afanfani |
1.2 |
#!/usr/bin/env python
|
2 |
|
|
"""
|
3 |
|
|
_LFNBaseName_
|
4 |
|
|
"""
|
5 |
|
|
|
6 |
|
|
from crab_exceptions import *
|
7 |
spiga |
1.13 |
from crab_util import runCommand, UnixUserName
|
8 |
afanfani |
1.2 |
import common
|
9 |
afanfani |
1.12 |
import os, string, time
|
10 |
ewv |
1.9 |
from ProdCommon.SiteDB.SiteDB import SiteDBJSON
|
11 |
afanfani |
1.2 |
|
12 |
|
|
|
13 |
spiga |
1.11 |
def LFNBase(PrimaryDataset='',ProcessedDataset='',merged=True,LocalUser=False,publish=False):
|
14 |
afanfani |
1.2 |
"""
|
15 |
|
|
"""
|
16 |
ewv |
1.9 |
lfnbase = "/store"
|
17 |
afanfani |
1.2 |
if not merged:
|
18 |
ewv |
1.9 |
lfnbase = os.path.join(lfnbase,"tmp")
|
19 |
fanzago |
1.10 |
if (PrimaryDataset == 'null'):
|
20 |
|
|
PrimaryDataset = ProcessedDataset
|
21 |
fanzago |
1.14 |
#lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
|
22 |
|
|
### for tutorial
|
23 |
|
|
lfnbase = os.path.join(lfnbase, "user/test", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
|
24 |
ewv |
1.9 |
|
25 |
afanfani |
1.2 |
return lfnbase
|
26 |
|
|
|
27 |
afanfani |
1.4 |
def getUnixUserName():
|
28 |
|
|
"""
|
29 |
|
|
extract username from whoami
|
30 |
|
|
"""
|
31 |
spiga |
1.13 |
return UnixUserName()
|
32 |
afanfani |
1.4 |
|
33 |
afanfani |
1.2 |
def getDN():
|
34 |
|
|
"""
|
35 |
|
|
extract DN from user proxy's identity
|
36 |
|
|
"""
|
37 |
|
|
try:
|
38 |
|
|
userdn = runCommand("voms-proxy-info -identity")
|
39 |
|
|
userdn = string.strip(userdn)
|
40 |
afanfani |
1.7 |
#search for a / to avoid picking up warning messages
|
41 |
|
|
userdn = userdn[userdn.find('/'):]
|
42 |
afanfani |
1.2 |
except:
|
43 |
|
|
msg = "Error. Problem with voms-proxy-info -identity command"
|
44 |
|
|
raise CrabException(msg)
|
45 |
ewv |
1.9 |
return userdn.split('\n')[0]
|
46 |
afanfani |
1.2 |
|
47 |
afanfani |
1.12 |
def gethnUserNameFromSiteDB():
|
48 |
afanfani |
1.2 |
"""
|
49 |
|
|
extract user name from SiteDB
|
50 |
|
|
"""
|
51 |
|
|
hnUserName = None
|
52 |
|
|
userdn = getDN()
|
53 |
ewv |
1.9 |
mySiteDB = SiteDBJSON()
|
54 |
afanfani |
1.2 |
try:
|
55 |
ewv |
1.9 |
hnUserName = mySiteDB.dnUserName(dn=userdn)
|
56 |
afanfani |
1.2 |
except:
|
57 |
ewv |
1.9 |
msg = "Error. Problem extracting user name from SiteDB"
|
58 |
|
|
msg += "\n Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
|
59 |
afanfani |
1.2 |
raise CrabException(msg)
|
60 |
|
|
if not hnUserName:
|
61 |
ewv |
1.9 |
msg = "Error. There is no user name associated to DN %s in SiteDB. You need to register in SiteDB with the instructions at https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB" % userdn
|
62 |
afanfani |
1.2 |
print msg
|
63 |
|
|
raise CrabException(msg)
|
64 |
|
|
return hnUserName
|
65 |
|
|
|
66 |
afanfani |
1.12 |
|
67 |
|
|
def gethnUserName():
|
68 |
|
|
"""
|
69 |
|
|
cache the username extracted from SiteDB for 24hours
|
70 |
|
|
"""
|
71 |
|
|
userconfigFileName="SiteDBusername.conf"
|
72 |
|
|
if not os.path.exists(userconfigFileName):
|
73 |
|
|
common.logger.debug(5,"Downloading from SiteDB username into %s"%userconfigFileName)
|
74 |
|
|
nameuser = gethnUserNameFromSiteDB()
|
75 |
|
|
userfile = open(userconfigFileName, 'w')
|
76 |
|
|
userfile.write(nameuser)
|
77 |
|
|
userfile.close()
|
78 |
|
|
else:
|
79 |
|
|
statinfo = os.stat(userconfigFileName)
|
80 |
|
|
## if the file is older then 24 hours it is re-downloaded to update the configuration
|
81 |
|
|
oldness = 24*3600
|
82 |
|
|
if (time.time() - statinfo.st_ctime) > oldness:
|
83 |
|
|
common.logger.debug(5,"Downloading from SiteDB username into %s"%userconfigFileName)
|
84 |
|
|
nameuser = gethnUserNameFromSiteDB()
|
85 |
|
|
userfile = open(userconfigFileName, 'w')
|
86 |
|
|
userfile.write(nameuser)
|
87 |
|
|
userfile.close()
|
88 |
|
|
else:
|
89 |
|
|
userfile = open(userconfigFileName, 'r')
|
90 |
|
|
for line in userfile.readlines():
|
91 |
|
|
nameuser = line
|
92 |
|
|
userfile.close()
|
93 |
|
|
nameuser = string.strip(nameuser)
|
94 |
|
|
return nameuser
|
95 |
|
|
|
96 |
afanfani |
1.5 |
def getUserName(LocalUser=False):
|
97 |
afanfani |
1.4 |
"""
|
98 |
|
|
extract user name from either SiteDB or Unix
|
99 |
|
|
"""
|
100 |
afanfani |
1.5 |
if LocalUser:
|
101 |
spiga |
1.11 |
common.logger.debug(10,"Using as username the Unix user name")
|
102 |
afanfani |
1.5 |
UserName=getUnixUserName()
|
103 |
|
|
return UserName
|
104 |
ewv |
1.9 |
|
105 |
afanfani |
1.5 |
UserName=gethnUserName()
|
106 |
afanfani |
1.4 |
return UserName
|
107 |
|
|
|
108 |
afanfani |
1.2 |
if __name__ == '__main__' :
|
109 |
|
|
"""
|
110 |
|
|
"""
|
111 |
|
|
from crab_logger import Logger
|
112 |
|
|
from WorkSpace import *
|
113 |
ewv |
1.9 |
continue_dir = os.path.expanduser("~")
|
114 |
afanfani |
1.2 |
cfg_params={'USER.logdir' : continue_dir }
|
115 |
|
|
common.work_space = WorkSpace(continue_dir, cfg_params)
|
116 |
|
|
log = Logger()
|
117 |
|
|
common.logger = log
|
118 |
|
|
|
119 |
ewv |
1.9 |
print "xx %s xx"%getUserName()
|
120 |
afanfani |
1.2 |
baselfn = LFNBase("datasetstring")
|
121 |
ewv |
1.9 |
print baselfn
|
122 |
afanfani |
1.2 |
|
123 |
|
|
unmergedlfn = LFNBase("datasetstring",merged=False)
|
124 |
ewv |
1.9 |
print unmergedlfn
|
125 |
afanfani |
1.2 |
print PFNportion("datasetstring")
|