diff --git a/mercy/importers/drugbank.py b/mercy/importers/drugbank.py new file mode 100644 index 0000000..83ba989 --- /dev/null +++ b/mercy/importers/drugbank.py @@ -0,0 +1,31 @@ +import mercy.MercyApplication +import xml.dom.pulldom +from mercy.models.drugbank import * +import sqlalchemy.exc +import xpath + +class DrugBankImporter: + def __init__(self, *args, **kwargs): + self.__db = mercy.MercyApplication.get_db() + + def _saveobj(self, obj): + self.__db.session.add(obj) + self.__db.session.commit() + + def read(self, fname): + events = xml.dom.pulldom.parse(fname) + for event, node in events: + if event == xml.dom.pulldom.START_ELEMENT and node.tagName == 'drug': + events.expandNode(node) + self.__convert_drug(node) + + def __convert_drug(self, node): + drug = Drug() + drug.name = xpath.findvalue('name', node) + drug.indication = xpath.findvalue('indication', node) + drug.fda_product_id = xpath.findvalue('external-identifiers/external-identifier[starts-with(resource, "National Drug Code Directory")]/identifier', node) + drug.wikipedia = xpath.findvalue('external-links/external-link[starts-with(resource, "Wikipedia")]/url', node) + if not drug.fda_product_id: + return + print str(drug) + #self._saveobj(drug) diff --git a/mercy/models/drugbank.py b/mercy/models/drugbank.py index 6e69412..27fc6a0 100644 --- a/mercy/models/drugbank.py +++ b/mercy/models/drugbank.py @@ -18,7 +18,8 @@ class Drug(SimpleModel, db.Model): __repr_keys__ = { 'id': basestring, 'name': basestring, - 'ndc_id': basestring + 'fda_product_id': basestring, + 'wikipedia': basestring } class Price(SimpleModel, db.Model): diff --git a/mercy/models/simplemodel.py b/mercy/models/simplemodel.py index 834596a..115b931 100644 --- a/mercy/models/simplemodel.py +++ b/mercy/models/simplemodel.py @@ -20,7 +20,7 @@ class SimpleModel(): values = [] for (name, otype) in self.__class__.__repr_keys__.iteritems(): if otype == basestring: - values += "'{}'".format(str(getattr(self.__class__, name))) + values.append("'{}'".format(str(getattr(self, name)))) else: - values += str(getattr(self.__class__, name)) + values.append(str(getattr(self, name))) return "<{}({})>".format(self.__class__.__name__, ', '.join(values)) diff --git a/scripts/mercy-import-drugbank b/scripts/mercy-import-drugbank new file mode 100644 index 0000000..96a037e --- /dev/null +++ b/scripts/mercy-import-drugbank @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +import sys +import mercy.importers.drugbank + +sys.exit(mercy.importers.drugbank.DrugBankImporter().read(sys.argv[1])) diff --git a/setup.py b/setup.py index ef99afe..73e99be 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,8 @@ if __name__ == "__main__": "sqlalchemy", "alembic", "psycopg2", - "flask-sqlalchemy"], + "flask-sqlalchemy", + "py-dom-xpath"], scripts=["scripts/mercy.wsgi"], packages=["mercy", "mercy/models",