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.5 by afanfani, Wed May 28 13:01:17 2008 UTC vs.
Revision 1.15 by fanzago, Thu Oct 16 16:47:40 2008 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 ProdCommon.SiteDB.SiteDB import SiteDBJSON
11  
12  
13 < def LFNBase(ProcessedDataset,merged=True,LocalUser=False):
13 > def LFNBase(PrimaryDataset='',ProcessedDataset='',merged=True,LocalUser=False,publish=False):
14      """
15      """
16 <    lfnbase = "/store"
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
18 >        lfnbase = os.path.join(lfnbase,"tmp")
19 >    if (PrimaryDataset == 'null'):
20 >        PrimaryDataset = ProcessedDataset
21 >    #lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
22 >    ### for tutorial
23 >    lfnbase = os.path.join(lfnbase, "user", getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset )
24  
25 < def PFNportion(ProcessedDataset,LocalUser=False):
23 <    pfnpath = os.path.join(getUserName(LocalUser=LocalUser), ProcessedDataset )
24 <    return pfnpath
25 >    return lfnbase
26  
27   def getUnixUserName():
28      """
29      extract username from whoami
30      """
31 <    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
31 >    return UnixUserName()
32  
33   def getDN():
34      """
# Line 42 | Line 37 | def getDN():
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
45 >    return userdn.split('\n')[0]
46  
47 < def gethnUserName():
47 > def gethnUserNameFromSiteDB():
48      """
49      extract user name from SiteDB
50      """
54    import urllib
51      hnUserName = None
52      userdn = getDN()
53 +    mySiteDB = SiteDBJSON()
54      try:
55 <        sitedburl="https://cmsweb.cern.ch/sitedb/sitedb/json/index/dnUserName"
59 <        params = urllib.urlencode({'dn': userdn })
60 <        f = urllib.urlopen(sitedburl,params)
61 <        udata = f.read()
62 <        try:
63 <            userinfo= eval(udata)
64 <        except StandardError, ex:
65 <            msg = "Error. Problem extracting user name from %s : %s"%(sitedburl,ex)
66 <            raise CrabException(msg)
67 <        hnUserName = userinfo['user']
55 >        hnUserName = mySiteDB.dnUserName(dn=userdn)
56      except:
57 <        msg = "Error. Problem extracting user name from %s"%sitedburl
58 <        msg += "Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
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 %s. You need to register in SiteDB with the instructions at https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"%(userdn,sitedburl)
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.message("==> Using as username the Unix user name")
101 >       common.logger.debug(10,"Using as username the Unix user name")
102         UserName=getUnixUserName()
103         return UserName
104 <    
104 >
105      UserName=gethnUserName()
106      return UserName
107  
# Line 92 | Line 110 | if __name__ == '__main__' :
110      """
111      from crab_logger import Logger
112      from WorkSpace import *
113 <    continue_dir="/afs/cern.ch/user/a/afanfani/"
113 >    continue_dir = os.path.expanduser("~")
114      cfg_params={'USER.logdir' : continue_dir }
115      common.work_space = WorkSpace(continue_dir, cfg_params)
116      log = Logger()
117      common.logger = log
118  
119 <    print "xx %s xx"%getUserName()
119 >    print "xx %s xx"%getUserName()
120      baselfn = LFNBase("datasetstring")
121 <    print baselfn    
121 >    print baselfn
122  
123      unmergedlfn = LFNBase("datasetstring",merged=False)
124 <    print unmergedlfn  
124 >    print unmergedlfn
125      print PFNportion("datasetstring")

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines