CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
connectstrParser.py
Go to the documentation of this file.
1 import re
2 class connectstrParser(object):
3  def __init__(self,connectstr):
4  self.__connectstr=connectstr
5  self.__pattern=re.compile('(^[\w]+)(://)(.+)(/)(.+)')
6  self.__protocol=''
7  self.__schemaname=''
8  self.__servicename=''
10  def parse(self):
11  result=re.match(self.__pattern,self.__connectstr)
12  if result is not None:
13  protocol=result.group(1)
14  if protocol!='frontier' and protocol!='oracle':
15  raise 'unsupported technology',protocol
16  self.__protocol=protocol
17  self.__schemaname=result.group(5)
18  self.__servicename=result.group(3)
19  if self.__protocol=='frontier':
20  if self.__servicename.find('(')==-1:
21  if self.__servicename.find('/')==-1:
22  self.__servlettotranslate.append(self.__servicename)
23  elif self.__servicename.find('/') == -1:
24  self.__servlettotranslate.append(self.__servicename.split('(',1)[0])
25  self.__servlettotranslate.append('('+self.__servicename.split('(',1)[1])
26 
27  def protocol(self):
28  return self.__protocol
29  def schemaname(self):
30  return self.__schemaname
31  def service(self):
32  return self.__servicename
33  def needsitelocalinfo(self):
34  if self.__protocol=='frontier':
35  if len(self.__servlettotranslate)==0:
36  return False
37  else :
38  return True
39  else:
40  return False
41  def servlettotranslate(self):
42  """return a list, first is the servlet name, second is whatever additional parameter, if any.
43  """
44  return self.__servlettotranslate
45  def fullfrontierStr(self,schemaname,parameterDict):
46  if len(parameterDict)==0:
47  raise 'empty frontier parameters, cannot construct full connect string'
48  result='frontier://'
49  for k,v in parameterDict.items():
50  ##if attr name=url, concatenate; if attrname=value discard
51  if k=='load' and v[0][0]=='balance':
52  result+='(loadbalance='+v[0][1]+')'
53  continue
54  for (attrname,attrvalue) in v:
55  if attrname=='url':
56  if k=='server':
57  fields=attrvalue.rsplit('/')
58  if len(fields)>3:
59  fields[-1]=self.servlettotranslate()[0]
60  attrvalue='/'.join(fields)
61  result+='('+k+'url='+attrvalue+')'
62  else:
63  result+='('+k+'='+attrvalue+')'
64  if len(self.servlettotranslate())>1:
65  result+=self.servlettotranslate()[1]
66  result+='/'+schemaname
67  return result
68 if __name__ == '__main__':
69  import cacheconfigParser
70  o='oracle://cms_orcoff_prep/CMS_LUMI_DEV_OFFLINE'
71  parser=connectstrParser(o)
72  parser.parse()
73  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo()
74  print 'case 1'
75  f1='frontier://cmsfrontier.cern.ch:8000/LumiPrep/CMS_LUMI_DEV_OFFLINE'
76  parser=connectstrParser(f1)
77  parser.parse()
78  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo()
79  print 'case 2'
80  f2='frontier://(serverurl=cmsfrontier.cern.ch:8000/LumiPrep/CMS_LUMI_DEV_OFFLINE)'
81  parser=connectstrParser(f2)
82  parser.parse()
83  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo()
84  print 'case 3'
85  f3='frontier://(proxyurl=http://cmst0frontier.cern.ch:3128)(proxyurl=http://cmst0frontier.cern.ch:3128)(proxyurl=http://cmst0frontier1.cern.ch:3128)(proxyurl=http://cmst0frontier2.cern.ch:3128)(serverurl=http://cmsfrontier.cern.ch:8000/LumiPrep)(serverurl=http://cmsfrontier.cern.ch:8000)/LumiPrep)(serverurl=http://cmsfrontier1.cern.ch:8000/LumiPrep)(serverurl=http://cmsfrontier2.cern.ch:8000/LumiPrep)(serverurl=http://cmsfrontier3.cern.ch:8000/LumiPrep)(serverurl=http://cmsfrontier4.cern.ch:8000/LumiPrep)/CMS_LUMI_DEV_OFFLINE'
86  parser=connectstrParser(f3)
87  parser.parse()
88  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo()
89  print 'case 4'
90  f4='frontier://LumiPrep/CMS_LUMI_DEV_OFFLINE'
91  parser=connectstrParser(f4)
92  parser.parse()
93  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo(),parser.servlettotranslate()
94  if parser.needsitelocalinfo():
95  sitelocalconfig='/afs/cern.ch/user/x/xiezhen/w1/site-local-config.xml'
97  frontierparser.parse(sitelocalconfig)
98  print 'full frontier string'
99  print parser.fullfrontierStr(parser.schemaname(),frontierparser.parameterdict())
100  print 'case 5'
101  f5='frontier://LumiPrep(otherparameter=value)/CMS_LUMI_DEV_OFFLINE'
102  parser=connectstrParser(f5)
103  parser.parse()
104  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo(),parser.servlettotranslate()
105  print parser.fullfrontierStr(parser.schemaname(),frontierparser.parameterdict())
106  print 'case 6'
107  f6='frontier://LumiCalc/CMS_LUMI_PROD'
108  parser=connectstrParser(f6)
109  parser.parse()
110  print parser.protocol(),parser.service(),parser.schemaname(),parser.needsitelocalinfo(),parser.servlettotranslate()
111  print parser.fullfrontierStr(parser.schemaname(),frontierparser.parameterdict())
static std::string join(char **cmd)
Definition: RemoteFile.cc:18