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.3 by slacapra, Fri Apr 11 14:54:22 2008 UTC vs.
Revision 1.16 by fanzago, Thu Oct 23 17:07:22 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):
13 > def LFNBase(lfn, 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 <    
20 <    lfnbase = os.path.join(lfnbase, "user", gethnUserName(), ProcessedDataset )
16 >    #lfnbase = "/store"
17 >    #if not merged:
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 >    lfnbase = os.path.join(lfn, getUserName(LocalUser=LocalUser), PrimaryDataset, ProcessedDataset)
23 >
24      return lfnbase
25  
26 < def PFNportion(ProcessedDataset):
27 <    pfnpath = os.path.join(gethnUserName(), ProcessedDataset )
28 <    return pfnpath
26 > def getUnixUserName():
27 >    """
28 >    extract username from whoami
29 >    """
30 >    return UnixUserName()
31  
32   def getDN():
33      """
# Line 30 | Line 36 | def getDN():
36      try:
37          userdn = runCommand("voms-proxy-info -identity")
38          userdn = string.strip(userdn)
39 +        #search for a / to avoid picking up warning messages
40 +        userdn = userdn[userdn.find('/'):]
41      except:
42          msg = "Error. Problem with voms-proxy-info -identity command"
43          raise CrabException(msg)
44 <    return userdn
44 >    return userdn.split('\n')[0]
45  
46 < def gethnUserName():
46 > def gethnUserNameFromSiteDB():
47      """
48      extract user name from SiteDB
49      """
42    import urllib
50      hnUserName = None
51      userdn = getDN()
52 +    mySiteDB = SiteDBJSON()
53      try:
54 <        sitedburl="https://cmsweb.cern.ch/sitedb/sitedb/json/index/dnUserName"
47 <        params = urllib.urlencode({'dn': userdn })
48 <        f = urllib.urlopen(sitedburl,params)
49 <        udata = f.read()
50 <        try:
51 <            userinfo= eval(udata)
52 <        except StandardError, ex:
53 <            msg = "Error. Problem extracting user name from %s : %s"%(sitedburl,ex)
54 <            raise CrabException(msg)
55 <        hnUserName = userinfo['user']
54 >        hnUserName = mySiteDB.dnUserName(dn=userdn)
55      except:
56 <        msg = "Error. Problem extracting user name from %s"%sitedburl
57 <        msg += "Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
56 >        msg = "Error. Problem extracting user name from SiteDB"
57 >        msg += "\n Check that you are registered in SiteDB, see https://twiki.cern.ch/twiki/bin/view/CMS/SiteDBForCRAB"
58          raise CrabException(msg)
59      if not hnUserName:
60 <        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)
60 >        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
61          print msg
62          raise CrabException(msg)
63      return hnUserName
64  
65 +
66 + def gethnUserName():
67 +    """
68 +    cache the username extracted from SiteDB for 24hours
69 +    """
70 +    userconfigFileName="SiteDBusername.conf"
71 +    if not os.path.exists(userconfigFileName):
72 +        common.logger.debug(5,"Downloading from SiteDB username into %s"%userconfigFileName)
73 +        nameuser = gethnUserNameFromSiteDB()
74 +        userfile = open(userconfigFileName, 'w')
75 +        userfile.write(nameuser)
76 +        userfile.close()
77 +    else:
78 +        statinfo = os.stat(userconfigFileName)
79 +        ## if the file is older then 24 hours it is re-downloaded to update the configuration
80 +        oldness = 24*3600
81 +        if (time.time() - statinfo.st_ctime) > oldness:
82 +           common.logger.debug(5,"Downloading from SiteDB username into %s"%userconfigFileName)
83 +           nameuser = gethnUserNameFromSiteDB()
84 +           userfile = open(userconfigFileName, 'w')
85 +           userfile.write(nameuser)
86 +           userfile.close()
87 +        else:
88 +           userfile = open(userconfigFileName, 'r')
89 +           for line in userfile.readlines():
90 +               nameuser = line
91 +           userfile.close()
92 +           nameuser = string.strip(nameuser)
93 +    return nameuser  
94 +
95 + def getUserName(LocalUser=False):
96 +    """
97 +    extract user name from either SiteDB or Unix
98 +    """
99 +    if LocalUser:
100 +       common.logger.debug(10,"Using as username the Unix user name")
101 +       UserName=getUnixUserName()
102 +       return UserName
103 +
104 +    UserName=gethnUserName()
105 +    return UserName
106 +
107   if __name__ == '__main__' :
108      """
109      """
110      from crab_logger import Logger
111      from WorkSpace import *
112 <    continue_dir="/bohome/fanfani/CRAB"
112 >    continue_dir = os.path.expanduser("~")
113      cfg_params={'USER.logdir' : continue_dir }
114      common.work_space = WorkSpace(continue_dir, cfg_params)
115      log = Logger()
116      common.logger = log
117  
118 +    print "xx %s xx"%getUserName()
119      baselfn = LFNBase("datasetstring")
120 <    print baselfn    
120 >    print baselfn
121  
122      unmergedlfn = LFNBase("datasetstring",merged=False)
123 <    print unmergedlfn  
123 >    print unmergedlfn
124      print PFNportion("datasetstring")

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines