def manage_oai_pmh_xslt(request, id=None):
    if request.method == 'POST':
        try:
            upload_form = UploadOaiPmhXSLTForm(request.POST, request.FILES)
            name = upload_form['oai_name'].value()
            name = name.strip(' \t\n\r')
            xml_file = upload_form['oai_pmh_xslt_file'].value()
            # put the cursor at the beginning of the file
            xml_file.seek(0)
            # read the content of the file
            xml_data = xml_file.read()
            # check XML data or not?
            try:
                etree.fromstring(xml_data)
            except XMLSyntaxError:
                return HttpResponseBadRequest('Uploaded File is not well formed XML.')
            #No exceptions, we can add it in DB
            req = upload_oai_pmh_xslt_model(name, xml_file.name, xml_data)
            #If the status is OK, sucess message
            if req.status_code == status.HTTP_201_CREATED:
                messages.add_message(request, messages.INFO, 'XSLT added 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:
                data = req.data
                return HttpResponseBadRequest(data[APIMessage.label])
        except OAIAPIException as e:
            return HttpResponseBadRequest(e.message)
        except Exception:
            return HttpResponseBadRequest('An error occurred. Please contact your administrator.')
    else:
        return HttpResponseBadRequest('This method should not be called on GET.')
Exemple #2
0
def upload_oai_pmh_xslt(request):
    """
    POST http://localhost/oai_pmh/api/upload/xslt
    POST data query='{"name": ""value, "filename": "value", "content": "value"}
    """
    try:
        serializer = OaiXSLTSerializer(data=request.DATA)
        if serializer.is_valid():
            name = request.DATA['name']
            filename = request.DATA['filename']
            xmlStr = request.DATA['content']
            return upload_oai_pmh_xslt_model(name, filename, xmlStr)
        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)