1 from linda.debug import dprint
2 from linda.parser.rfc822parser import RFC822Parser
3
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
50