view allpy/markups.py @ 711:21cfc7897a8f
Implemented markup fileIO (closes #56)
This is done by adding file format 'markup' or 'markup:formatname', where
'formatname' is otherwise known alignment format.
The file format for is described briefly in fileio.MarkupFile docstrings.
This commit also contains example of defining Markup saving mixin:
markups.IntMarkupMixin and a test for it.
author |
Daniil Alexeyevsky <dendik@kodomo.fbb.msu.ru> |
date |
Thu, 07 Jul 2011 22:32:21 +0400 |
parents |
df624c729ab5 |
children |
52ce523138d5 |
line source
3 class IntMarkupMixin(base.Markup):
6 def from_record(cls, container, record, name=None):
7 assert record['io-class'] == 'IntMarkup'
8 result = cls(container, name=name)
9 separator = record.get('separator', ',')
10 values = record['markup'].split(separator)
11 assert len(values) == len(result.sorted_keys())
12 for key, value in zip(result.sorted_keys(), values):
14 result[key] = int(value)
22 values = [fmt(self.get(key)) for key in self.sorted_keys()]
23 return {'markup': ','.join(values), 'io-class': 'IntMarkup'}
25 class SequenceNumberMarkup(base.SequenceMarkup):
30 for number, monomer in enumerate(self.sequence, 1):
31 monomer.number = number
33 class SequenceIndexMarkup(base.SequenceMarkup):
38 for index, monomer in enumerate(self.sequence):
41 class AlignmentNumberMarkup(base.AlignmentMarkup):
46 for number, column in enumerate(self.alignment.columns, 1):
49 class AlignmentIndexMarkup(base.AlignmentMarkup):
54 for index, column in enumerate(self.alignment.columns):
57 class SequenceCaseMarkup(base.SequenceMarkup):
62 for monomer in self.sequence:
63 if monomer.input_code1.isupper():
64 monomer.case = 'upper'
65 elif monomer.input_code1.islower():
66 monomer.case = 'lower'
68 # vim: set ts=4 sts=4 sw=4 et: