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.6 by afanfani, Wed May 28 18:18:05 2008 UTC vs.
Revision 1.12 by afanfani, Thu Oct 2 12:54:51 2008 UTC

# Line 6 | Line 6 | _LFNBaseName_
6   from crab_exceptions import *
7   from crab_util import runCommand
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  
23 < def PFNportion(ProcessedDataset,LocalUser=False):
23 <    pfnpath = os.path.join(getUserName(LocalUser=LocalUser), ProcessedDataset )
24 <    return pfnpath
23 >    return lfnbase
24  
25   def getUnixUserName():
26      """
# Line 42 | Line 41 | def getDN():
41      try:
42          userdn = runCommand("voms-proxy-info -identity")
43          userdn = string.strip(userdn)
44 +        #search for a / to avoid picking up warning messages
45 +        userdn = userdn[userdn.find('/'):]
46      except:
47          msg = "Error. Problem with voms-proxy-info -identity command"
48          raise CrabException(msg)
49 <    return userdn
49 >    return userdn.split('\n')[0]
50  
51 < def gethnUserName():
51 > def gethnUserNameFromSiteDB():
52      """
53      extract user name from SiteDB
54      """
54    import urllib
55      hnUserName = None
56      userdn = getDN()
57 +    mySiteDB = SiteDBJSON()
58      try:
59 <        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 \n SiteDB call output: \n %s"%(sitedburl,ex,udata)
66 <            raise CrabException(msg)
67 <        hnUserName = userinfo['user']
59 >        hnUserName = mySiteDB.dnUserName(dn=userdn)
60      except:
61 <        msg = "Error. Problem extracting user name from %s "%sitedburl
62 <        msg += "\n Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
71 <        msg += "\n SiteDB call output: \n %s"%udata
61 >        msg = "Error. Problem extracting user name from SiteDB"
62 >        msg += "\n Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
63          raise CrabException(msg)
64      if not hnUserName:
65 <        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)
65 >        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
66          print msg
67          raise CrabException(msg)
68      return hnUserName
69  
70 +
71 + def gethnUserName():
72 +    """
73 +    cache the username extracted from SiteDB for 24hours
74 +    """
75 +    userconfigFileName="SiteDBusername.conf"
76 +    if not os.path.exists(userconfigFileName):
77 +        common.logger.debug(5,"Downloading from SiteDB username into %s"%userconfigFileName)
78 +        nameuser = gethnUserNameFromSiteDB()
79 +        userfile = open(userconfigFileName, 'w')
80 +        userfile.write(nameuser)
81 +        userfile.close()
82 +    else:
83 +        statinfo = os.stat(userconfigFileName)
84 +        ## if the file is older then 24 hours it is re-downloaded to update the configuration
85 +        oldness = 24*3600
86 +        if (time.time() - statinfo.st_ctime) > oldness:
87 +           common.logger.debug(5,"Downloading from SiteDB username into %s"%userconfigFileName)
88 +           nameuser = gethnUserNameFromSiteDB()
89 +           userfile = open(userconfigFileName, 'w')
90 +           userfile.write(nameuser)
91 +           userfile.close()
92 +        else:
93 +           userfile = open(userconfigFileName, 'r')
94 +           for line in userfile.readlines():
95 +               nameuser = line
96 +           userfile.close()
97 +           nameuser = string.strip(nameuser)
98 +    return nameuser  
99 +
100   def getUserName(LocalUser=False):
101      """
102      extract user name from either SiteDB or Unix
103      """
104      if LocalUser:
105 <       common.logger.message("==> Using as username the Unix user name")
105 >       common.logger.debug(10,"Using as username the Unix user name")
106         UserName=getUnixUserName()
107         return UserName
108 <    
108 >
109      UserName=gethnUserName()
110      return UserName
111  
# Line 93 | Line 114 | if __name__ == '__main__' :
114      """
115      from crab_logger import Logger
116      from WorkSpace import *
117 <    continue_dir="/afs/cern.ch/user/a/afanfani/"
117 >    continue_dir = os.path.expanduser("~")
118      cfg_params={'USER.logdir' : continue_dir }
119      common.work_space = WorkSpace(continue_dir, cfg_params)
120      log = Logger()
121      common.logger = log
122  
123 <    print "xx %s xx"%getUserName()
123 >    print "xx %s xx"%getUserName()
124      baselfn = LFNBase("datasetstring")
125 <    print baselfn    
125 >    print baselfn
126  
127      unmergedlfn = LFNBase("datasetstring",merged=False)
128 <    print unmergedlfn  
128 >    print unmergedlfn
129      print PFNportion("datasetstring")

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines