[Feature] Generate Compounds by Molfile (#423)

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#423
This commit is contained in:
2026-07-15 23:56:24 +12:00
parent 9bc9f86ff1
commit 2c2437e3f5
8 changed files with 439 additions and 44 deletions

View File

@ -19,7 +19,7 @@ from sentry_sdk import capture_exception
from utilities.chem import FormatConverter, IndigoUtils
from utilities.decorators import package_permission_required
from .exceptions import InvalidSMILESException
from .exceptions import InvalidMolfileException, InvalidSMILESException
from .logic import (
EPDBURLParser,
@ -1386,12 +1386,18 @@ def package_compounds(request, package_uuid):
elif request.method == "POST":
compound_name = request.POST.get("compound-name")
compound_smiles = request.POST.get("compound-smiles")
compound_molfile = request.POST.get("compound-molfile")
compound_description = request.POST.get("compound-description")
try:
c = Compound.create(
current_package, compound_smiles, compound_name, compound_description
current_package,
compound_smiles,
molfile=compound_molfile,
name=compound_name,
description=compound_description,
)
except ValueError as e:
except (InvalidSMILESException, InvalidMolfileException) as e:
raise BadRequest(str(e))
return redirect(c.url)
@ -1517,11 +1523,15 @@ def package_compound_structures(request, package_uuid, compound_uuid):
elif request.method == "POST":
structure_name = request.POST.get("structure-name")
structure_smiles = request.POST.get("structure-smiles")
structure_molfile = request.POST.get("structure-molfile")
structure_description = request.POST.get("structure-description")
try:
cs = current_compound.add_structure(
structure_smiles, structure_name, structure_description
structure_smiles,
molfile=structure_molfile,
name=structure_name,
description=structure_description,
)
except ValueError:
return error(
@ -2339,9 +2349,12 @@ def package_pathway_nodes(request, package_uuid, pathway_uuid):
node_description = request.POST.get("node-description")
node_smiles = request.POST.get("node-smiles").strip()
node_molfile = request.POST.get("node-molfile").strip()
try:
current_pathway.add_node(node_smiles, name=node_name, description=node_description)
current_pathway.add_node(
node_smiles, molfile=node_molfile, name=node_name, description=node_description
)
except InvalidSMILESException:
return error(
request, "Node creation failed!", f"Given SMILES ({node_smiles}) is invalid"