ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/LFNBaseName.py
Revision: 1.20
Committed: Thu Jan 22 18:19:14 2009 UTC (16 years, 3 months ago) by spiga
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_5_0_pre5, CRAB_2_5_0_pre4, CRAB_2_5_0_pre3, CRAB_2_5_0_pre2, CRAB_2_5_0_pre1, CRAB_2_4_4, CRAB_2_4_4_pre6, CRAB_2_4_4_pre5, CRAB_2_4_4_pre4
Changes since 1.19: +2 -1 lines
Log Message:
protection against empty user_remote_dir

File Contents

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