More work on the drugbank importer, got xpath figured out finally
This commit is contained in:
31
mercy/importers/drugbank.py
Normal file
31
mercy/importers/drugbank.py
Normal file
@@ -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)
|
||||
@@ -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):
|
||||
|
||||
@@ -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))
|
||||
|
||||
6
scripts/mercy-import-drugbank
Normal file
6
scripts/mercy-import-drugbank
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import mercy.importers.drugbank
|
||||
|
||||
sys.exit(mercy.importers.drugbank.DrugBankImporter().read(sys.argv[1]))
|
||||
Reference in New Issue
Block a user