def api_notify(request): ''' #35 it receives a notification; the verb is POST parameters: TODO: first_version_UKCL->first_version_UKCL URL_dataset --> dataset_UKCL URL_structure --> structure_UKCL first_version_UKCL: the UKCL of the first version of the DataSet for which the event has happened event_type: the URInstance of the EventType NEVER CACHED ''' first_version_UKCL = request.POST.get("first_version_UKCL", "") URL_dataset = request.POST.get("URL_dataset", "") URL_structure = request.POST.get("URL_structure", "") event_type = request.POST.get("type", "") # Did I subscribe to this? sto = SubscriptionToOther.objects.filter( first_version_UKCL=first_version_UKCL) ar = ApiResponse() if len(sto) > 0: nr = NotificationReceived() nr.URL_dataset = URL_dataset nr.URL_structure = URL_structure nr.save() ar.status = ApiResponse.success else: ar.status = ApiResponse.failure ar.message = "Not subscribed to this" return render(request, 'knowledge_server/export.json', {'json': ar.json()}, content_type="application/json")
def api_notify(request): ''' #35 it receives a notification; the verb is POST parameters: TODO: first_version_UKCL->first_version_UKCL URL_dataset --> dataset_UKCL URL_structure --> structure_UKCL first_version_UKCL: the UKCL of the first version of the DataSet for which the event has happened event_type: the URInstance of the EventType NEVER CACHED ''' first_version_UKCL = request.POST.get("first_version_UKCL", "") URL_dataset = request.POST.get("URL_dataset", "") URL_structure = request.POST.get("URL_structure", "") event_type = request.POST.get("type", "") # Did I subscribe to this? sto = SubscriptionToOther.objects.filter(first_version_UKCL=first_version_UKCL) ar = ApiResponse() if len(sto) > 0: nr = NotificationReceived() nr.URL_dataset = URL_dataset nr.URL_structure = URL_structure nr.save() ar.status = ApiResponse.success else: ar.status = ApiResponse.failure ar.message = "Not subscribed to this" return render(request, 'knowledge_server/export.json', {'json': ar.json()}, content_type="application/json")
def api_dataset(request, DataSet_UKCL, response_format): ''' #36 It returns the data in the dataset with the UKCL in the parameter parameter: * DataSet_UKCL: UKCL of the DataSet Implementation: # it creates the ModelMetadata class, # fetches from the DB the one with pk = DataSet.root_instance_id # it runs to_xml of the ModelMetadata using DataSet.dataset_structure.root_node CAN BE CACHED ''' response_format = response_format.upper() ar = ApiResponse() DataSet_UKCL_decoded = urllib.parse.unquote(DataSet_UKCL).replace("%2F","/") url = KsUrl(DataSet_UKCL_decoded) # If it is not a DataSet we try to find the dataset it is in url.search_on_db() if url.actual_instance: if isinstance(url.actual_instance, DataSet): dataset = url.actual_instance else: dataset = url.actual_instance.dataset_I_belong_to if (not url.actual_instance) and (not dataset): ar.message = "Either the URL requested is not on this database or it is not part of a released dataset." if response_format == 'JSON': return render(request, 'knowledge_server/export.json', {'json': ar.json()}, content_type="application/json") if response_format == 'XML': ar.status = ApiResponse.failure return render(request, 'knowledge_server/export.xml', {'xml': ar.xml()}, content_type="application/xhtml+xml") actual_instance_json = "" #this dataset is not a view; if not dataset.dataset_structure.is_a_view: actual_instance = dataset.root if response_format == 'JSON': ar.content = { "DataSet": dataset.export(export_format = 'DICT') } ar.status = ApiResponse.success return render(request, 'knowledge_server/export.json', {'json': ar.json()}, content_type="application/json") if response_format == 'XML': ar.status = ApiResponse.success ar.content = dataset.export(export_format = response_format) return render(request, 'knowledge_server/export.xml', {'xml': ar.xml()}, content_type="application/xhtml+xml") if response_format == 'HTML' or response_format == 'BROWSE': actual_instance_json = '{' + actual_instance.serialize(dataset.dataset_structure.root_node, export_format='json', exported_instances = []) + '}' this_ks = KnowledgeServer.this_knowledge_server() cont = RequestContext(request, {'dataset': dataset, 'actual_instance': actual_instance, 'actual_instance_json': actual_instance_json, 'sn': dataset.dataset_structure.root_node, 'DataSet_UKCL': DataSet_UKCL, 'this_ks':this_ks, 'this_ks_encoded_url':this_ks.url(True)}) return render_to_response('knowledge_server/browse_dataset.html', context_instance=cont)
def api_dataset(request, UKCL=None): ''' #36 It returns the data in the dataset with the UKCL in the parameter parameter: * DataSet_UKCL: UKCL of the DataSet Implementation: # it creates the ModelMetadata class, # fetches from the DB the one with pk = DataSet.root_instance_id # it runs to_xml of the ModelMetadata using DataSet.dataset_structure.root_node CAN BE CACHED ''' if UKCL: # invoked from ks_info DataSet_UKCL = UKCL else: DataSet_UKCL = request.GET['UKCL'] ar = ApiResponse(request=request) url = KsUrl(DataSet_UKCL) # If it is not a DataSet we try to find the dataset it is in url.search_on_db() if url.actual_instance: if isinstance(url.actual_instance, DataSet): dataset = url.actual_instance else: dataset = url.actual_instance.dataset_I_belong_to if (not url.actual_instance) and (not dataset): ar.message = "Either the URL requested is not on this database or it is not part of a released dataset." if ar.response_format == 'JSON': return render(request, 'knowledge_server/export.json', {'json': ar.json()}, content_type="application/json") if ar.response_format == 'XML': ar.status = ApiResponse.failure return render(request, 'knowledge_server/export.xml', {'xml': ar.xml()}, content_type="application/xhtml+xml") actual_instance_json = "" #this dataset is not a view; if not dataset.dataset_structure.is_a_view: actual_instance = dataset.root if ar.response_format == 'JSON': ar.content = {"DataSet": dataset.export(export_format='DICT')} ar.status = ApiResponse.success return render(request, 'knowledge_server/export.json', {'json': ar.json()}, content_type="application/json") if ar.response_format == 'XML': ar.status = ApiResponse.success ar.content = dataset.export(export_format=ar.response_format) return render(request, 'knowledge_server/export.xml', {'xml': ar.xml()}, content_type="application/xhtml+xml") if ar.response_format == 'HTML' or ar.response_format == 'BROWSE': actual_instance_json = '{' + actual_instance.serialize( dataset.dataset_structure.root_node, export_format='json', exported_instances=[]) + '}' this_ks = KnowledgeServer.this_knowledge_server() cont = RequestContext( request, { 'dataset': dataset, 'actual_instance': actual_instance, 'actual_instance_json': actual_instance_json, 'sn': dataset.dataset_structure.root_node, 'DataSet_UKCL': DataSet_UKCL, 'this_ks': this_ks, 'this_ks_encoded_url': this_ks.url(True) }) return render_to_response('knowledge_server/browse_dataset.html', context_instance=cont)