|
43 | 43 | 'AHAP':'Integer'
|
44 | 44 | }
|
45 | 45 |
|
| 46 | +# Spec is a bit weak on which metadata lines are singular, like fileformat |
| 47 | +# and which can have repeats, like contig |
| 48 | +SINGULAR_METADATA = ['fileformat', 'fileDate', 'reference'] |
| 49 | + |
46 | 50 | # Conversion between value in file and Python value
|
47 | 51 | field_counts = {
|
48 | 52 | '.': None, # Unknown number of values
|
@@ -750,7 +754,12 @@ def _parse_metainfo(self):
|
750 | 754 |
|
751 | 755 | else:
|
752 | 756 | key, val = parser.read_meta(line.strip())
|
753 |
| - self.metadata[key] = val |
| 757 | + if key in SINGULAR_METADATA: |
| 758 | + self.metadata[key] = val |
| 759 | + else: |
| 760 | + if key not in self.metadata: |
| 761 | + self.metadata[key] = [] |
| 762 | + self.metadata[key].append(val) |
754 | 763 |
|
755 | 764 | line = self.reader.next()
|
756 | 765 |
|
@@ -1010,8 +1019,11 @@ def __init__(self, stream, template):
|
1010 | 1019 | two = '##{key}=<ID={0},Description="{1}">\n'
|
1011 | 1020 | four = '##{key}=<ID={0},Number={num},Type={2},Description="{3}">\n'
|
1012 | 1021 | _num = self._fix_field_count
|
1013 |
| - for line in template.metadata.iteritems(): |
1014 |
| - stream.write('##{0}={1}\n'.format(*line)) |
| 1022 | + for (key, vals) in template.metadata.iteritems(): |
| 1023 | + if key in SINGULAR_METADATA: |
| 1024 | + vals = [vals] |
| 1025 | + for val in vals: |
| 1026 | + stream.write('##{0}={1}\n'.format(key, val)) |
1015 | 1027 | for line in template.infos.itervalues():
|
1016 | 1028 | stream.write(four.format(key="INFO", *line, num=_num(line.num)))
|
1017 | 1029 | for line in template.formats.itervalues():
|
|
0 commit comments