ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/DLSInfo.py
Revision: 1.14
Committed: Wed Jan 17 18:17:58 2007 UTC (18 years, 3 months ago) by slacapra
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_1_5_0_pre7, CRAB_1_5_0_pre6, CRAB_1_5_0_pre5, CRAB_1_5_0_pre4
Changes since 1.13: +7 -20 lines
Log Message:
many minor fixes reported by pychecker, mostly unsude import and unused variables

File Contents

# Content
1 #!/usr/bin/env python
2 import sys, os, commands,string, re
3 import exceptions
4 from crab_exceptions import *
5 from crab_util import *
6 import common
7
8 import dlsApi
9 import dlsClient
10 from dlsDataObjects import DlsLocation, DlsFileBlock, DlsEntry
11
12 ## for python 2.2 add the pyexpat.so to PYTHONPATH
13 pythonV=sys.version.split(' ')[0]
14 if pythonV.find('2.2') >= 0 :
15 Crabpydir=commands.getoutput('which crab')
16 Topdir=string.replace(Crabpydir,'/python/crab','')
17 extradir=Topdir+'/DLSAPI/extra'
18 if sys.path.count(extradir) <= 0:
19 if os.path.exists(extradir):
20 sys.path.insert(0, extradir)
21
22
23 class DLSError:
24 def __init__(self, fileblocks):
25 print '\nERROR accessing DLS for fileblock '+fileblocks+'\n'
26 pass
27
28
29 class DLSNoReplicas(exceptions.Exception):
30 def __init__(self, FileBlock):
31 exceptions.Exception.__init__(self, self.args)
32 self.args ="No replicas exists for fileblock: "+FileBlock+"\n"
33 pass
34
35 def getClassName(self):
36 """ Return class name. """
37 return "%s" % (self.__class__.__name__)
38
39 def getErrorMessage(self):
40 """ Return exception error. """
41 return "%s" % (self.args)
42
43
44 ##############################################################################
45 # Class to extract info from DLS
46 ##############################################################################
47
48 class DLSInfo:
49 def __init__(self, type, cfg_params):
50 self.cfg_params = cfg_params
51 if type=="DLS_TYPE_DLI":
52 try:
53 endpoint=self.cfg_params['CMSSW.dls_endpoint']
54 except KeyError:
55 endpoint="prod-lfc-cms-central.cern.ch/grid/cms/DLS/LFC"
56
57 try:
58 import xml.dom.ext.reader
59 except:
60 crabdir=os.getenv('CRABDIR')
61 ## Let the user set up PyXML by hand
62 msg="There is no setup of PyXML python module required by DLS (DLI). Do the following:\n"
63 msg+=" - check that in %s/configure the function configureDLSAPI is not commented \n"%crabdir
64 msg+=" - uncomment it and re-run the configuration :"
65 msg+="\n cd %s\n"%crabdir
66 msg+=" ./configure\n"
67 msg+=" source crab.(c)sh\n"
68 raise CrabException(msg)
69
70 elif type=="DLS_TYPE_MYSQL":
71 try:
72 endpoint=self.cfg_params['CMSSW.dls_endpoint']
73 except KeyError:
74 endpoint="lxgate10.cern.ch:18081"
75 else:
76 msg = "DLS type %s not among the supported DLS ( DLS_TYPE_DLI and DLS_TYPE_MYSQL ) "%type
77 raise CrabException(msg)
78
79 common.logger.debug(5,"DLS interface: %s Server %s"%(type,endpoint))
80 try:
81 self.api = dlsClient.getDlsApi(dls_type=type,dls_endpoint=endpoint)
82 except dlsApi.DlsApiError, inst:
83 msg = "Error when binding the DLS interface: %s Server %s"%(str(inst),endpoint)
84 #print msg
85 raise CrabException(msg)
86
87 # ####################################
88 def getReplicas(self,fileblocks):
89 """
90 query DLS to get replicas
91 """
92 ##
93 try:
94 entryList=self.api.getLocations([fileblocks])
95 except dlsApi.DlsApiError, inst:
96 #msg = "Error in the DLS query: %s." % str(inst)
97 #print msg
98 raise DLSNoReplicas(fileblocks)
99
100 ListSites=[]
101 for entry in entryList:
102 for loc in entry.locations:
103 ListSites.append(str(loc.host))
104 if len(ListSites)<=0:
105 raise DLSNoReplicas(fileblocks)
106
107 return ListSites