"""Parsers for lists from KEGG."""
import logging
from dabeplech.models.kegg import KeggOrthologyListModel
from dabeplech.models.kegg import KeggPathwayListModel
from dabeplech.parsers.base import BaseListParser
logging.basicConfig()
logger = logging.getLogger()
class BaseKeggListParser(BaseListParser):
"""Base class for list from KEGG."""
def _parse_line(self, line):
elements = line.split(maxsplit=1)
entry_id = elements[0].split(":")[1]
names = elements[1].split(";")[0].split(",")
names = [name.strip() for name in names]
return {
"entry_id": entry_id,
"names": names,
}
def parse(self):
"""Perform parsing of the ``content_response``."""
for line in self.lines:
if not line.strip():
continue
self.parsed_content.append(self._parse_line(line))
[docs]class KeggOrthologyListParser(BaseKeggListParser):
"""Parser for list of KEGG ko from KEGG API (http://rest.kegg.jp/list/ko)."""
model = KeggOrthologyListModel
def _parse_line(self, line):
elements = line.split(maxsplit=1)
entry_id = elements[0].split(":")[1]
names = elements[1].split(";")[0].split(",")
names = [name.strip() for name in names]
if ";" in elements[1]:
definition = elements[1].split(";")[1].split("[")[0].strip()
else:
definition = None
if "[" in elements[1]:
ec_numbers = (
elements[1].split("[")[1].rstrip("]").replace("EC:", "").split()
)
else:
ec_numbers = None
return {
"entry_id": entry_id,
"names": names,
"definition": definition,
"ec_numbers": ec_numbers,
}
[docs]class KeggPathwayListParser(BaseKeggListParser):
"""Parser for list of KEGG pathways (map) from KEGG API (http://rest.kegg.jp/list/pathway)."""
model = KeggPathwayListModel
[docs]class KeggModuleListParser(BaseKeggListParser):
"""Parser for list of KEGG modules (M) from KEGG API (http://rest.kegg.jp/list/module)."""
model = KeggPathwayListModel