Package spade :: Module SpadeConfigParser
[hide private]
[frames] | no frames]

Source Code for Module spade.SpadeConfigParser

  1  #! python 
  2   
  3  #import sys 
  4  from string import * 
  5   
  6  from xml.sax import ContentHandler 
  7  from xml.sax import parseString 
  8  from xml.sax import make_parser 
  9  from xml.sax.handler import * 
 10   
 11  """ 
 12  spade = dict() 
 13  domain = dict() 
 14  acc = dict() 
 15  acc["mtp"] = dict() 
 16  ams = dict() 
 17  df = dict() 
 18  jabber = dict() 
 19  simba = dict() 
 20  """ 
 21   
22 -class ParseObject(dict):
23 - def __getattr__(self, name): return self[name]
24
25 -class spadeXML:
26 '''SPADE XML analyzer'''
27 - def __init__(self):
28 self.ch = spadeXMLHandler()
29
30 - def parseString(self, xmlstream, tag_attr, chars):
31 self.ch.tag_attr = tag_attr 32 parseString(xmlstream, self.ch) 33 return self.ch.tag_name, self.ch.message
34 35
36 -class spadeXMLHandler(ContentHandler):
37 - def __init__(self):
38 self.chars = "" 39 self.message = "" 40 self.current_tag = "" 41 self.current_mtp = ""
42
43 - def startDocument(self):
44 45 self.content = ParseObject()
46
47 - def startElement(self, name, attrs):
48 '''Called when a node starts''' 49 self.chars = "" 50 self.tag_name = name 51 if name == "platform": 52 self.current_tag = "platform" 53 self.content['platform'] = ParseObject() 54 #print "Current Tag: " + name 55 elif name == "acc": 56 self.current_tag = "acc" 57 self.content['acc'] = ParseObject() 58 self.content.acc['mtp'] = ParseObject() 59 #print "Current Tag: " + name 60 elif name == "ams": 61 self.current_tag = "ams" 62 self.content['ams'] = ParseObject() 63 #print "Current Tag: " + name 64 elif name == "df": 65 self.current_tag = "df" 66 self.content['df'] = ParseObject() 67 #print "Current Tag: " + name 68 elif name == "mtp": 69 self.current_tag = attrs.getValue("name") 70 self.current_mtp = self.current_tag 71 self.content.acc.mtp[self.current_tag] = ParseObject() 72 73 else: 74 self.chars = "" 75 self.tag_name = name
76
77 - def characters(self, ch):
78 '''Characters included in a node''' 79 self.chars = str(self.chars + ch)
80
81 - def endElement(self, name):
82 '''Called when a node ends''' 83 if name == "hostname": 84 if self.current_tag == "platform": 85 self.content.platform['hostname'] = self.chars 86 elif self.current_tag == "ams": 87 self.content.ams['hostname'] = self.chars 88 elif self.current_tag == "df": 89 self.content.df['hostname'] = self.chars 90 elif self.current_tag == "acc": 91 self.content.acc['hostname'] = self.chars 92 93 elif name == "password": 94 if self.current_tag == "ams": 95 self.content.ams['password'] = self.chars 96 elif self.current_tag == "df": 97 self.content.df['password'] = self.chars 98 elif self.current_tag == "acc": 99 self.content.acc['password'] = self.chars 100 101 elif name == "port": 102 if self.current_tag == "platform": 103 self.content.platform['port'] = self.chars 104 elif self.current_tag == "ams": 105 self.content.ams['port'] = self.chars 106 elif self.current_tag == "df": 107 self.content.df['port'] = self.chars 108 elif self.current_tag == "acc": 109 self.content.acc['port'] = self.chars 110 else: 111 self.content.acc[self.current_tag]['port'] = self.chars 112 113 elif name == "mtp": 114 self.current_mtp = "" 115 116 elif name == "protocol": 117 self.content.acc["mtp"][self.current_mtp]['protocol'] = self.chars 118 119 #elif name == "address": 120 # self.content.acc[self.current_tag][self.current_mtp]['address'] = self.chars 121 122 elif name == "instance": 123 self.content.acc["mtp"][self.current_mtp]['instance'] = self.chars 124 125 elif name == "path": 126 self.content.platform["path"] = self.chars 127 128 elif name == "adminpasswd": 129 self.content["adminpasswd"] = self.chars
130
131 -class ConfigParser:
132 133 """def get(self, section, keyword): 134 answer = "" 135 try: 136 d = spade[section] 137 answer = d[keyword] 138 except: 139 print "Section %s does not have keyword %s" % (str(section), keyword) 140 return answer""" 141
142 - def __init__(self):
143 # Create a parser 144 self.parser = make_parser() 145 146 # Tell the parser we are not interested in XML namespaces 147 self.parser.setFeature(feature_namespaces, 0) 148 149 # Create the handler 150 self.dh = spadeXMLHandler() 151 152 # Tell the parser to use our handler 153 self.parser.setContentHandler(self.dh)
154
155 - def parse(self,fn):
156 157 # Parse the input 158 self.parser.parse(fn) 159 160 return self.dh.content 161 162 """ 163 # Manage the results 164 spade['domain'] = domain 165 spade['acc'] = acc 166 spade['ams'] = ams 167 spade['df'] = df 168 spade['jabber'] = jabber 169 spade['simba'] = simba 170 #print spade 171 """
172