Пример #1
0
    def retrieve(self, request, pk):
        requestedFile = self.request.query_params.get('file', None)
        requestedTag = self.request.query_params.get('tag', None)
        serializer_context = {'request': request}

        try:
            serializer_instance = self.queryset.get(analisador_name=pk)
            # serializer_instance = self.queryset.get(pk=pk)
        except UploadFileAnalisador.DoesNotExist:
            raise NotFound('UploadFile não existe na Base de Dados.')

        serializer = self.serializer_class(serializer_instance,
                                           context=serializer_context)

        responseFile = None
        filename = None
        if requestedFile is not None:
            if requestedFile == 'scaler':
                file = pickle.loads(serializer_instance.scaler_data)
                responseFile = io.BufferedReader(io.BytesIO(file))
                filename = 'scaler_data'
            if requestedFile == 'modelo':
                file = pickle.loads(serializer_instance.modelo)
                responseFile = io.BufferedReader(io.BytesIO(file))
                filename = 'modelo.hdf5'

        if responseFile is not None and filename is not None:
            response = FileResponse(responseFile)
            response.as_attachment = False
            response.filename = filename
            response.set_headers({'content_type': 'application/octet-stream'})
            return response
        else:
            return NotFound()
Пример #2
0
def get_file_content(file_name, file_url, as_attachment=False):
    '''
    Gets file content usually from File Storage URL and returns it back.
    '''

    try:
        # Remote server
        response = request(method='get', url=file_url, stream=True)
    except requests.exceptions.MissingSchema:
        # File system
        response = open(os.path.abspath(file_url), 'rb')

    filename = file_name.split('/')[-1] if file_name else file_url.split(
        '/')[-1]
    http_response = FileResponse(
        streaming_content=response,
        as_attachment=as_attachment,
        # take the last part of the filename path
        filename=filename,
        status=getattr(response, 'status_code', None),
        content_type=getattr(response, 'headers', {}).get('Content-Type'),
    )
    http_response.set_headers(filelike=response)

    if as_attachment:
        http_response['Access-Control-Expose-Headers'] = 'Content-Disposition'

    return http_response
Пример #3
0
def dump(model_admin, request, queryset):
    data = [ReportSerializer(report, mode='table').data for report in queryset]
    with tempfile.SpooledTemporaryFile(mode="w", newline="") as tmp:
        fc = csv.DictWriter(tmp, fieldnames=data[0].keys())
        fc.writeheader()
        fc.writerows(data)
        tmp.seek(0)
        file_response = FileResponse(tmp.read(),
                                     as_attachment=True,
                                     filename="reports.csv")
        file_response.set_headers(tmp)
        return file_response