Ejemplo n.º 1
0
    def get(self, request, app, model):

        Model = apps.get_model(app, model)

        if self.has_export_permission(request.user, Model):
            return queryset_as_csv_response(Model.objects.all(),
                                            is_stream=True)
        else:
            raise PermissionDenied
Ejemplo n.º 2
0
    def test_queryset_csv_response(self):
        for i in range(0, 10):
            self.IntegerTestModel.objects.create(number=i)

        expected = b"""Id,Number\r\n1,0\r\n2,1\r\n3,2\r\n4,3\r\n5,4\r\n6,5\r\n7,6\r\n8,7\r\n9,8\r\n10,9\r\n"""
        expected_filename = "some_file.csv"

        response = queryset_as_csv_response(
            self.IntegerTestModel.objects.all(), expected_filename)
        self.assertEqual(expected, response.content,
                         "Comparing response body (as bytes)")
        self.assertEqual("text/csv", response["Content-Type"],
                         "Ensure content type is csv")
        self.assertEqual("attachment; filename={}".format(expected_filename),
                         response["content-disposition"],
                         "Ensuring filename is correctly propogated")
Ejemplo n.º 3
0
    def test_queryset_csv_response_values_ordering_with_defer(self):
        for i in range(0, 10):
            self.IntegerTestModel.objects.create(number=i)

        expected = b"""Number,Id\r\n0,1\r\n1,2\r\n2,3\r\n3,4\r\n4,5\r\n5,6\r\n6,7\r\n7,8\r\n8,9\r\n9,10\r\n"""
        expected_filename = "some_file.csv"

        response = queryset_as_csv_response(
            self.IntegerTestModel.objects.all().defer('number').values(
                'number', 'id'), expected_filename)
        self.assertEqual(expected, response.content,
                         "Comparing response body (as bytes)")
        self.assertEqual("text/csv", response["Content-Type"],
                         "Ensure content type is csv")
        self.assertEqual("attachment; filename={}".format(expected_filename),
                         response["content-disposition"],
                         "Ensuring filename is correctly propogated")
Ejemplo n.º 4
0
    def test_queryset_csv_response_complex_values(self):
        for i in range(0, 2):
            self.ComplexTestModel.objects.create(integer=i,
                                                 char='abc\nde,./[];#"\'',
                                                 datetime=datetime.datetime(
                                                     2000, 1, 2))

        expected = b'''Id,Integer,Char,Datetime\r\n1,0,"abc\nde,./[];#""\'",02-01-2000 00:00:00\r\n2,1,"abc\nde,./[];#""\'",02-01-2000 00:00:00\r\n'''
        expected_filename = "other_file.csv"

        response = queryset_as_csv_response(
            self.ComplexTestModel.objects.all(), expected_filename)
        self.assertEqual(expected, response.content,
                         "Comparing response body (as bytes)")
        self.assertEqual("text/csv", response["Content-Type"],
                         "Ensure content type is csv")
        self.assertEqual("attachment; filename={}".format(expected_filename),
                         response["content-disposition"],
                         "Ensuring filename is correctly propogated")
Ejemplo n.º 5
0
def export_selection_as_csv(admin, request, queryset):
    return queryset_as_csv_response(queryset, is_stream=True)