forked from enviPath/enviPy
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from csv import DictReader
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
|
|
from epdb.models import Compound, CompoundStructure, Reaction, ExternalDatabase, ExternalIdentifier
|
|
|
|
|
|
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,
|
|
)
|