Source code for apis_core.apis_relations.views

import json

from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType
from django.http import HttpResponse
from django.template.loader import render_to_string

from apis_core.apis_entities.autocomplete3 import PropertyAutocomplete
from apis_core.apis_entities.utils import get_entity_classes
from apis_core.apis_relations.forms import GenericTripleForm
from apis_core.apis_relations.models import Property, TempTriple, Triple
from apis_core.generic.views import List


[docs] class GenericRelationView(List):
[docs] def setup(self, *args, **kwargs): super().setup(*args, **kwargs) if self.kwargs["entity"] == "property": self.model = Property else: self.model = Triple self.queryset = self.model.objects.all()
# TODO RDF: After full conversion to ne ajax logic, remove this function
[docs] @login_required def get_form_ajax(request): """Returns forms rendered in html""" form_name = request.POST.get("FormName") SiteID = int(request.POST.get("SiteID")) ButtonText = request.POST.get("ButtonText") ObjectID = request.POST.get("ObjectID") entity_type_self_str = request.POST.get("entity_type") if ObjectID is None and form_name.startswith("triple_form_"): # If this is the case, then instantiate an empty form entity_type_other_str = form_name.split("_to_")[1] form = GenericTripleForm( entity_type_self_str=entity_type_self_str, entity_type_other_str=entity_type_other_str, ) elif ObjectID is not None and SiteID is not None: # If this is the case, then instantiate a form and pre-load with existing data triple = TempTriple.objects.get(pk=ObjectID) property_instance = triple.prop if triple.subj.pk == SiteID: entity_instance_self = triple.subj entity_instance_other = triple.obj property_direction = PropertyAutocomplete.SELF_SUBJ_OTHER_OBJ_STR elif triple.obj.pk == SiteID: entity_instance_self = triple.obj entity_instance_other = triple.subj property_direction = PropertyAutocomplete.SELF_OBJ_OTHER_SUBJ_STR else: raise Exception("SiteID was not found in triple") entity_type_other_str = entity_instance_other.__class__.__name__ entity_type_self_str = entity_instance_self.__class__.__name__ form_name = f"triple_form_{entity_type_self_str.lower()}_to_{entity_type_other_str.lower()}" form = GenericTripleForm( entity_type_self_str=entity_type_self_str, entity_type_other_str=entity_type_other_str, ) form.load_subj_obj_prop( entity_instance_self, entity_instance_other, property_instance, property_direction, ) form.load_remaining_data_from_triple(triple) else: raise Exception("Missing necessary form data") param_dict = { "entity_type": entity_type_self_str, "form": form, "type1": form_name, "url2": "save_ajax_" + form_name, "button_text": ButtonText, "ObjectID": ObjectID, "SiteID": SiteID, } rendered_form_str = render_to_string( "apis_relations/_ajax_form.html", # rel_form_logic_breadcrumb (for refinding the implicit connections) context=param_dict, ) data = {"tab": form_name, "form": rendered_form_str} return HttpResponse(json.dumps(data), content_type="application/json")
# TODO RDF: Re-implement highlighter and label form
[docs] @login_required def save_ajax_form( request, entity_type, kind_form, SiteID, ObjectID=False ): # rel_form_logic_breadcrumb (for refinding the implicit connections) """Tests validity and saves AjaxForms, returns them when validity test fails""" self_other = kind_form.split("triple_form_")[1].split("_to_") entity_type_self_str = self_other[0] entity_type_other_str = self_other[1] contenttypes = [ ContentType.objects.get_for_model(model) for model in get_entity_classes() ] entity_type_self_class = next( filter(lambda x: x.model == entity_type_self_str.lower(), contenttypes) ).model_class() entity_type_other_class = next( filter(lambda x: x.model == entity_type_other_str.lower(), contenttypes) ).model_class() entity_instance_self = entity_type_self_class.objects.get(pk=SiteID) entity_instance_other = entity_type_other_class.get_or_create_uri( uri=request.POST["other_entity"] ) start_date_written = request.POST["start_date_written"] end_date_written = request.POST["end_date_written"] property_param_dict = {} for param_pair in request.POST["property"].split("__"): param_pair_split = param_pair.split(":") property_param_dict[param_pair_split[0]] = param_pair_split[1] property_instance = Property.objects.get(pk=property_param_dict["id"]) property_direction = property_param_dict["direction"] form = GenericTripleForm(entity_type_self_str, entity_type_other_str) form.load_subj_obj_prop( entity_instance_self, entity_instance_other, property_instance, property_direction, ) if ObjectID is not False: triple = TempTriple.objects.get(pk=ObjectID) form.load_remaining_data_from_triple(triple) form.load_remaining_data_from_input( start_date_written, end_date_written, ) form.fields["notes"].initial = request.POST["notes"] form.save() data = { "test": True, "tab": kind_form, "call_function": "EntityRelationForm_response", "instance": form.instance.get_web_object(), "table_html": form.get_html_table( entity_instance_self, entity_instance_other, request ).as_html(request), "text": None, "right_card": True, } return HttpResponse(json.dumps(data), content_type="application/json")