forked from enviPath/enviPy
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
from csv import DictReader
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from epdb.models import *
|
|
|
|
|
|
class Command(BaseCommand):
|
|
STR_TO_MODEL = {
|
|
'Compound': Compound,
|
|
'CompoundStructure': CompoundStructure,
|
|
'Reaction': Reaction,
|
|
}
|
|
|
|
STR_TO_DATABASE = {
|
|
'ChEBI': ExternalDatabase.objects.get(name='ChEBI'),
|
|
'RHEA': ExternalDatabase.objects.get(name='RHEA'),
|
|
'KEGG Reaction': ExternalDatabase.objects.get(name='KEGG Reaction'),
|
|
'PubChem Compound': ExternalDatabase.objects.get(name='PubChem Compound'),
|
|
'PubChem Substance': ExternalDatabase.objects.get(name='PubChem Substance'),
|
|
}
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
'--data',
|
|
type=str,
|
|
help='Path of the ID Mapping file.',
|
|
required=True,
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--replace-host',
|
|
type=str,
|
|
help='Replace https://envipath.org/ with this host, e.g. http://localhost:8000/',
|
|
)
|
|
|
|
@transaction.atomic
|
|
def handle(self, *args, **options):
|
|
with open(options['data']) as fh:
|
|
reader = DictReader(fh)
|
|
for row in reader:
|
|
clz = self.STR_TO_MODEL[row['model']]
|
|
|
|
url = row['url']
|
|
if options['replace_host']:
|
|
url = url.replace('https://envipath.org/', options['replace_host'])
|
|
|
|
instance = clz.objects.get(url=url)
|
|
db = self.STR_TO_DATABASE[row['identifier_type']]
|
|
|
|
ExternalIdentifier.objects.create(
|
|
content_object=instance,
|
|
database=db,
|
|
identifier_value=row['identifier_value'],
|
|
url=db.url_pattern.format(id=row['identifier_value']),
|
|
is_primary=False
|
|
)
|