def parse_gb(self):
"""
Take a genbank file and parse to items/SBOL
"""
items = []
elements = OrderedDict()
sbol = None
try:
record = SeqIO.read(self.file_data, 'genbank')
features = record.features # sorted(record.features, key=attrgetter('location.start'))
for feat in features:
# The file sometimes has lowercase and sometimes uppercase
# types so normalise to lowercase.
if feat.type.lower() in self.GENBANK_FEATURE_TYPES:
name = ''
# Look for the label key. Other keys can be set but
# most software simply sets the label key and nothing
# else.
for key, value in feat.qualifiers.items():
if key == 'label':
name = value[0]
if name:
feature_type = feat.type.lower()
if feature_type == 'rbs':
feature_type = 'ribosome entry site'
elif feature_type == 'primer_bind':
feature_type = 'primer binding site'
seq = str(feat.extract(record.seq))
elements[name] = self.genbank_to_sbol_component(name, seq, feature_type)
item = self.get_inventory_item(name)
if item:
items.append(item)
except Exception as e:
print(e)
pass
else:
if len(elements.values()) > 0:
self.make_sbol_construct(list(elements.values()))
sbol = self.make_sbol_xml()
return items, sbol
评论列表
文章目录