Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/file/43bca78ece0c/allpy/markup.py
Дата изменения: Unknown
Дата индексирования: Mon Feb 4 03:21:01 2013
Кодировка:
allpy: 43bca78ece0c allpy/markup.py

allpy

view allpy/markup.py @ 426:43bca78ece0c

add class Markup (see #30) add module allpy/markup class MarkedAlignment seems to be added later
author boris <bnagaev@gmail.com>
date Mon, 14 Feb 2011 19:32:51 +0300
parents
children c37a2c56deb7
line source
1 import base
3 default = object()
4 """ object for use as key for default value """
6 class Markup(object):
7 """ Markup for Sequence or Alignment
9 container is iterable collection of items.
10 item is object getting markup data (new attribute).
12 container: Alignment, item: Column
13 container: Sequence, item: Monomer
15 Markup stored in attributes of item is internal value.
16 When export or import, it is mapped to or from external value.
17 Internal value could be of any type.
18 External value should be single character.
20 Data:
21 * name -- name (str) of attribute of object
22 * container
23 * map_out -- dict, mapping internal values to external
24 * map_in -- dict, mapping external values to internal
26 map_in and map_out can have key markup.default, which used when
27 input key is not in map. To drop this defaults, drop this key
28 from map_out and map_in dicts. In this case to_string() and
29 from_string() methods can raise KeyError
30 """
32 def __init__(self, name, container, map_out={}):
33 """ Note: adds convenient defaults to maps """
34 self.name = name
35 self.container = container
36 self.set_map_out(map_out)
37 self.set_internal_default()
38 self.set_external_default()
40 def set_map_out(self, map_out):
41 self.map_out = map_out
42 self.map_in = dict([(v, k) for (k, v) in self.map_out])
44 def set_map_in(self, map_in):
45 self.map_in = map_in
46 self.map_out = dict([(v, k) for (k, v) in self.map_in])
48 def set_internal_default(self, default=None):
49 self.map_in[default] = default
51 def set_external_default(self, default='-'):
52 self.map_out[default] = default
54 def __getitem__(self, item):
55 """ returns internal value for given item
57 markup[monomer] <==> monomer.name, where name is markup.name
58 """
59 return getattr(item, self.name)
61 def __contains__(self, item):
62 """ returns if intarnal value determined for given item
64 usage: if item in markup
65 """
66 return hasattr(item, self.name)
68 def clear(self):
69 """ delete all attributes from items """
70 for item in self.container:
71 delattr(item, self.name)
73 def to_string(self):
74 """ return string representing markup """
75 internal_values = []
76 for item in self.container:
77 if item in self and self[item] in self.map_out:
78 internal_values.append(self[item])
79 else:
80 internal_values.append(default)
81 return ''.join(self.map_out[i] for i in internal_values)
83 def from_string(self, string):
84 """ adds (or replaces) attributes to items """
85 assert len(string) == len(self.container)
86 for char, item in zip(list(string), self.container):
87 if char in self.map_in:
88 internal = self.map_in[char]
89 else:
90 internal = self.map_in[default]
91 setattr(item, self.name, internal)