Package linda :: Package parser :: Module override
[hide private]

Source Code for Module linda.parser.override

 1  from linda.debug import dprint 
 2  from linda.parser.rfc822parser import RFC822Parser 
 3   
4 -class OverrideParser(RFC822Parser):
5 - def parse(self):
6 self.validate(('Tag:',)) 7 if not self.data: 8 raise OverrideParserException, "Badly-formatted file %s" % \ 9 self.file 10 output_var = {} 11 for x in self.data: 12 parse_dict = {'tag': '', 'key': '', 'value': ''} 13 for k in x: 14 if k.find(':') != -1: 15 cur_line = k.split(':', 1) 16 parse_dict['key'] = cur_line[0] 17 value = cur_line[1] 18 if value.endswith('\n'): 19 value = cur_line[1][:-1] 20 parse_dict['value'] = value.strip() 21 elif k.startswith('#'): 22 continue 23 if k.startswith('Tag:'): 24 parse_dict['tag'] = parse_dict['value'] 25 if not output_var.has_key(parse_dict['tag']): 26 output_var[parse_dict['tag']] = {} 27 dprint(_("Found tag: %s.") % parse_dict['tag'], 4) 28 elif k.startswith('Type:') or k.startswith('Data:'): 29 dprint(_("Adding %s: %s to %s") % (parse_dict['key'], \ 30 parse_dict['value'], parse_dict['tag']), 4) 31 if output_var[parse_dict['tag']].has_key(parse_dict['key']): 32 output_var[parse_dict['tag']][parse_dict['key']].append(parse_dict['value']) 33 else: 34 output_var[parse_dict['tag']][parse_dict['key']] = \ 35 [parse_dict['value']] 36 else: 37 raise OverrideParserException, 'Unknown key: %s' % \ 38 parse_dict['key'] 39 for tag in output_var: 40 for key in output_var[tag]: 41 if len(output_var[tag][key]) == 1: 42 output_var[tag][key] = output_var[tag][key][0] 43 elif len(output_var[tag][key]) >= 2: 44 output_var[tag][key] = '(%s)' % \ 45 '|'.join(output_var[tag][key]) 46 self.data = output_var
47
48 -class OverrideParserException(Exception):
49 pass
50