def oai_pmh_conf_xslt(request): """ POST http://localhost/oai_pmh/api/oai-pmh-conf/xslt POST data query='{"template_id": "value", "my_metadata_format_id": "value", "xslt_id": "value", "activated": "value"}' """ try: serializer = OaiConfXSLTSerializer(data=request.DATA) if serializer.is_valid(): template_id = request.DATA['template_id'] my_metadata_format_id = request.DATA['my_metadata_format_id'] xslt_id = None if 'xslt_id' in request.DATA: xslt_id = request.DATA['xslt_id'] activated = request.DATA['activated'] == "True" return oai_pmh_conf_xslt_model(template_id, my_metadata_format_id, xslt_id, activated) else: raise OAIAPISerializeLabelledException(errors=serializer.errors, status=status.HTTP_400_BAD_REQUEST) except OAIAPIException as e: return e.response() except Exception as e: content = APIMessage.getMessageLabelled(e.message) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def oai_pmh_conf_xslt(request): if request.method == 'POST': try: errors = [] AssociateFormSet = formset_factory(AssociateXSLT, extra=3) article_formset = AssociateFormSet(request.POST) if article_formset.is_valid(): for f in article_formset: cd = f.cleaned_data myMetadataFormat_id = cd.get('oai_my_mf_id') template_id = cd.get('template_id') activated = cd.get('activated') xslt = cd.get('oai_pmh_xslt_file') xslt_id = None if xslt: xslt_id = xslt.id req = oai_pmh_conf_xslt_model(template_id, myMetadataFormat_id, xslt_id, activated) #If sth wrong happened, we keep the error if req.status_code != status.HTTP_200_OK: data = req.data errors.append(data[APIMessage.label]) #Good treatment if len(errors) == 0: messages.add_message(request, messages.INFO, 'XSLT edited with success.') return HttpResponse(json.dumps({}), content_type='application/javascript') #Else, we return a bad request response with the message provided by the API else: return HttpResponseBadRequest(errors) else: return HttpResponseBadRequest([x['__all__'] for x in article_formset.errors if '__all__' in x], content_type='application/javascript') except OAIAPIException as e: return HttpResponseBadRequest(e.message) except Exception: return HttpResponseBadRequest('An error occurred. Please contact your administrator.') else: template = loader.get_template('oai_pmh/admin/oai_pmh_conf_xslt.html') template_id = request.GET.get('id', None) if template_id is not None: templateName = Template.objects.only('title').get(pk=template_id).title allXsltFiles = OaiXslt.objects.all() myMetadataFormats = OaiMyMetadataFormat.objects(isTemplate=False or None).all() infos= dict() for myMetadataFormat in myMetadataFormats: try: obj = OaiTemplMfXslt.objects(template=template_id, myMetadataFormat=myMetadataFormat).get() infos[myMetadataFormat] = {'oai_pmh_xslt_file': obj.xslt.id if obj.xslt else None, 'activated': obj.activated} except: infos[myMetadataFormat] = {'oai_pmh_xslt_file': None, 'activated': False} AssociateFormSet = formset_factory(AssociateXSLT, extra=0) init = [{'template_id': template_id, 'oai_my_mf_id': x.id, 'oai_name': x.metadataPrefix, 'oai_pmh_xslt_file': infos[x]['oai_pmh_xslt_file'], 'activated': infos[x]['activated']} for x in myMetadataFormats] formset = AssociateFormSet(initial=init) context = RequestContext(request,{ 'metadataFormats': myMetadataFormats, 'xsltFiles': allXsltFiles, 'formSet': formset, 'templateName': templateName }) return HttpResponse(template.render(context))