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.7 by afanfani, Wed May 28 18:37:42 2008 UTC vs.
Revision 1.20 by spiga, Thu Jan 22 18:19:14 2009 UTC

# Line 4 | Line 4 | _LFNBaseName_
4   """
5  
6   from crab_exceptions import *
7 < from crab_util import runCommand
7 > from crab_util import runCommand, UnixUserName
8   import common
9 < import os, string
9 > import os, string, time
10 > from WMCore.Services.SiteDB.SiteDB import SiteDBJSON
11  
12  
13 < def LFNBase(ProcessedDataset,merged=True,LocalUser=False):
13 > def LFNBase(forced_path, PrimaryDataset='',ProcessedDataset='',merged=True,LocalUser=False,publish=False):
14      """
15      """
16 <    lfnbase = "/store"
17 <    if not merged:
18 <        lfnbase = os.path.join(lfnbase,"tmp")  
19 <    lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), ProcessedDataset )
20 <      
21 <    return lfnbase
16 >    #lfnbase = "/store"
17 >    #if not merged:
18 >        #lfnbase = os.path.join(lfnbase,"tmp")
19 >    if (PrimaryDataset == 'null'):
20 >        PrimaryDataset = ProcessedDataset
21 >    if PrimaryDataset != '':
22 >        if ( PrimaryDataset[0] == '/' ):  PrimaryDataset=PrimaryDataset[1:]  
23 >   # lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
24 >    lfnbase = os.path.join(forced_path, getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset)
25  
26 < def PFNportion(ProcessedDataset,LocalUser=False):
23 <    pfnpath = os.path.join(getUserName(LocalUser=LocalUser), ProcessedDataset )
24 <    return pfnpath
26 >    return lfnbase
27  
28   def getUnixUserName():
29      """
30      extract username from whoami
31      """
32 <    try:
31 <        UserName = runCommand("whoami")
32 <        UserName = string.strip(UserName)
33 <    except:
34 <        msg = "Error. Problem with whoami command"
35 <        raise CrabException(msg)
36 <    return UserName
32 >    return UnixUserName()
33  
34   def getDN():
35      """
# Line 47 | Line 43 | def getDN():
43      except:
44          msg = "Error. Problem with voms-proxy-info -identity command"
45          raise CrabException(msg)
46 <    return userdn
46 >    return userdn.split('\n')[0]
47  
48 < def gethnUserName():
48 > def gethnUserNameFromSiteDB():
49      """
50      extract user name from SiteDB
51      """
56    import urllib
52      hnUserName = None
53      userdn = getDN()
54 +    mySiteDB = SiteDBJSON()
55      try:
56 <        sitedburl="https://cmsweb.cern.ch/sitedb/sitedb/json/index/dnUserName"
61 <        params = urllib.urlencode({'dn': userdn })
62 <        f = urllib.urlopen(sitedburl,params)
63 <        udata = f.read()
64 <        try:
65 <            userinfo= eval(udata)
66 <        except StandardError, ex:
67 <            msg = "Error. Problem extracting user name from %s : %s \n SiteDB call output: \n %s"%(sitedburl,ex,udata)
68 <            raise CrabException(msg)
69 <        hnUserName = userinfo['user']
56 >        hnUserName = mySiteDB.dnUserName(dn=userdn)
57      except:
58 <        msg = "Error. Problem extracting user name from %s "%sitedburl
59 <        msg += "\n Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
73 <        msg += "\n SiteDB call output: \n %s"%udata
58 >        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          raise CrabException(msg)
61      if not hnUserName:
62 <        msg = "Error. There is no user name associated to DN %s in %s. You need to register in SiteDB with the instructions at https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"%(userdn,sitedburl)
62 >        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          print msg
64          raise CrabException(msg)
65      return hnUserName
66  
67 +
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 +    return nameuser
96 +
97   def getUserName(LocalUser=False):
98      """
99      extract user name from either SiteDB or Unix
100      """
101      if LocalUser:
102 <       common.logger.message("==> Using as username the Unix user name")
102 >       common.logger.debug(10,"Using as username the Unix user name")
103         UserName=getUnixUserName()
104         return UserName
105 <    
105 >
106      UserName=gethnUserName()
107      return UserName
108  
# Line 95 | Line 111 | if __name__ == '__main__' :
111      """
112      from crab_logger import Logger
113      from WorkSpace import *
114 <    continue_dir="/afs/cern.ch/user/a/afanfani/"
114 >    continue_dir = os.path.expanduser("~")
115      cfg_params={'USER.logdir' : continue_dir }
116      common.work_space = WorkSpace(continue_dir, cfg_params)
117      log = Logger()
118      common.logger = log
119  
120 <    print "xx %s xx"%getUserName()
120 >    print "xx %s xx"%getUserName()
121      baselfn = LFNBase("datasetstring")
122 <    print baselfn    
122 >    print baselfn
123  
124      unmergedlfn = LFNBase("datasetstring",merged=False)
125 <    print unmergedlfn  
125 >    print unmergedlfn
126      print PFNportion("datasetstring")

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines