ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/LFNBaseName.py
(Generate patch)

Comparing COMP/CRAB/python/LFNBaseName.py (file contents):
Revision 1.15 by fanzago, Thu Oct 16 16:47:40 2008 UTC vs.
Revision 1.21 by spiga, Fri Mar 6 18:36:30 2009 UTC

# Line 4 | Line 4 | _LFNBaseName_
4   """
5  
6   from crab_exceptions import *
7 < from crab_util import runCommand, UnixUserName
7 > from crab_util import runCommand, getUserName
8   import common
9   import os, string, time
10 from ProdCommon.SiteDB.SiteDB import SiteDBJSON
10  
11  
12 < def LFNBase(PrimaryDataset='',ProcessedDataset='',merged=True,LocalUser=False,publish=False):
12 > def LFNBase(forced_path, PrimaryDataset='',ProcessedDataset='',merged=True,publish=False):
13      """
14      """
16    lfnbase = "/store"
17    if not merged:
18        lfnbase = os.path.join(lfnbase,"tmp")
15      if (PrimaryDataset == 'null'):
16          PrimaryDataset = ProcessedDataset
17 <    #lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
18 <    ### for tutorial
19 <    lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
17 >    if PrimaryDataset != '':
18 >        if ( PrimaryDataset[0] == '/' ):  PrimaryDataset=PrimaryDataset[1:]  
19 >    lfnbase = os.path.join(forced_path, getUserName(), PrimaryDataset, ProcessedDataset)
20  
21      return lfnbase
22  
27 def getUnixUserName():
28    """
29    extract username from whoami
30    """
31    return UnixUserName()
32
33 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        #search for a / to avoid picking up warning messages
41        userdn = userdn[userdn.find('/'):]
42    except:
43        msg = "Error. Problem with voms-proxy-info -identity command"
44        raise CrabException(msg)
45    return userdn.split('\n')[0]
46
47 def gethnUserNameFromSiteDB():
48    """
49    extract user name from SiteDB
50    """
51    hnUserName = None
52    userdn = getDN()
53    mySiteDB = SiteDBJSON()
54    try:
55        hnUserName = mySiteDB.dnUserName(dn=userdn)
56    except:
57        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        raise CrabException(msg)
60    if not hnUserName:
61        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        print msg
63        raise CrabException(msg)
64    return hnUserName
65
66
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 def getUserName(LocalUser=False):
97    """
98    extract user name from either SiteDB or Unix
99    """
100    if LocalUser:
101       common.logger.debug(10,"Using as username the Unix user name")
102       UserName=getUnixUserName()
103       return UserName
104
105    UserName=gethnUserName()
106    return UserName
23  
24   if __name__ == '__main__' :
25      """

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines