[Feature] Alias Support (#151)

Fixes #149

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#151
This commit is contained in:
2025-10-09 23:14:34 +13:00
parent afeb56622c
commit 68a3f3b982
25 changed files with 675 additions and 31 deletions

View File

@ -691,6 +691,7 @@ class PackageManager(object):
struc.uuid = UUID(structure["id"].split("/")[-1]) if keep_ids else uuid4()
struc.name = structure["name"]
struc.description = structure["description"]
struc.aliases = structure.get("aliases", [])
struc.smiles = structure["smiles"]
struc.save()
@ -728,6 +729,7 @@ class PackageManager(object):
r.package = pack
r.name = rule["name"]
r.description = rule["description"]
r.aliases = rule.get("aliases", [])
r.smirks = rule["smirks"]
r.reactant_filter_smarts = rule.get("reactantFilterSmarts", None)
r.product_filter_smarts = rule.get("productFilterSmarts", None)
@ -747,6 +749,7 @@ class PackageManager(object):
r.uuid = UUID(par_rule["id"].split("/")[-1]) if keep_ids else uuid4()
r.name = par_rule["name"]
r.description = par_rule["description"]
r.aliases = par_rule.get("aliases", [])
r.save()
mapping[par_rule["id"]] = r.uuid
@ -766,6 +769,7 @@ class PackageManager(object):
r.uuid = UUID(seq_rule["id"].split("/")[-1]) if keep_ids else uuid4()
r.name = seq_rule["name"]
r.description = seq_rule["description"]
r.aliases = seq_rule.get("aliases", [])
r.save()
mapping[seq_rule["id"]] = r.uuid
@ -791,6 +795,7 @@ class PackageManager(object):
r.uuid = UUID(reaction["id"].split("/")[-1]) if keep_ids else uuid4()
r.name = reaction["name"]
r.description = reaction["description"]
r.aliases = reaction.get("aliases", [])
r.medlinereferences = (reaction["medlinereferences"],)
r.multi_step = True if reaction["multistep"] == "true" else False
r.save()
@ -824,6 +829,7 @@ class PackageManager(object):
pw.uuid = UUID(pathway["id"].split("/")[-1]) if keep_ids else uuid4()
pw.name = pathway["name"]
pw.description = pathway["description"]
pw.aliases = pathway.get("aliases", [])
pw.save()
mapping[pathway["id"]] = pw.uuid
@ -836,6 +842,8 @@ class PackageManager(object):
n = Node()
n.uuid = UUID(node["id"].split("/")[-1]) if keep_ids else uuid4()
n.name = node["name"]
n.description = node.get("description")
n.aliases = node.get("aliases", [])
n.pathway = pw
n.depth = node["depth"]
n.default_node_label = CompoundStructure.objects.get(
@ -862,6 +870,7 @@ class PackageManager(object):
e.name = edge["name"]
e.pathway = pw
e.description = edge["description"]
e.aliases = edge.get("aliases", [])
e.edge_label = Reaction.objects.get(uuid=mapping[edge["edgeLabel"]["id"]])
e.save()

View File

@ -300,6 +300,14 @@ def set_scenarios(current_user, attach_object, scenario_urls: List[str]):
attach_object.set_scenarios(scens)
def set_aliases(current_user, attach_object, aliases: List[str]):
if aliases == [""]:
aliases = []
attach_object.aliases = aliases
attach_object.save()
def copy_object(current_user, target_package: "Package", source_object_url: str):
# Ensures that source is readable
source_package = PackageManager.get_package_by_url(current_user, source_object_url)
@ -1160,10 +1168,19 @@ def package_compound(request, package_uuid, compound_uuid):
if "selected-scenarios" in request.POST:
selected_scenarios = request.POST.getlist("selected-scenarios")
set_scenarios(current_user, current_compound, selected_scenarios)
return redirect(current_compound.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_compound, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_compound.url})
new_compound_name = request.POST.get("compound-name", "").strip()
new_compound_description = request.POST.get("compound-description", "").strip()
@ -1311,6 +1328,16 @@ def package_compound_structure(request, package_uuid, compound_uuid, structure_u
set_scenarios(current_user, current_structure, selected_scenarios)
return redirect(current_structure.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_structure, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_structure.url})
selected_database = request.POST.get("selected-database", "").strip()
external_identifier = request.POST.get("identifier", "").strip()
@ -1472,6 +1499,16 @@ def package_rule(request, package_uuid, rule_uuid):
set_scenarios(current_user, current_rule, selected_scenarios)
return redirect(current_rule.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_rule, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_rule.url})
rule_name = request.POST.get("rule-name", "").strip()
rule_description = request.POST.get("rule-description", "").strip()
@ -1588,6 +1625,16 @@ def package_reaction(request, package_uuid, reaction_uuid):
set_scenarios(current_user, current_reaction, selected_scenarios)
return redirect(current_reaction.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_reaction, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_reaction.url})
new_reaction_name = request.POST.get("reaction-name", "").strip()
new_reaction_description = request.POST.get("reaction-description", "").strip()
@ -1807,6 +1854,16 @@ def package_pathway(request, package_uuid, pathway_uuid):
set_scenarios(current_user, current_pathway, selected_scenarios)
return redirect(current_pathway.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_pathway, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_pathway.url})
pathway_name = request.POST.get("pathway-name")
pathway_description = request.POST.get("pathway-description")
@ -1957,6 +2014,16 @@ def package_pathway_node(request, package_uuid, pathway_uuid, node_uuid):
set_scenarios(current_user, current_node, selected_scenarios)
return redirect(current_node.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_node, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_node.url})
return HttpResponseBadRequest()
else:
return HttpResponseNotAllowed(["GET", "POST"])
@ -2073,6 +2140,16 @@ def package_pathway_edge(request, package_uuid, pathway_uuid, edge_uuid):
set_scenarios(current_user, current_edge, selected_scenarios)
return redirect(current_edge.url)
if "aliases" in request.POST:
aliases = request.POST.getlist("aliases")
try:
set_aliases(current_user, current_edge, aliases)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
return JsonResponse({"success": current_edge.url})
return HttpResponseBadRequest()
else: