From 087ba901d9b398af098173d24fd916d88d8beffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Szulc?= Date: Mon, 21 Oct 2024 14:43:36 +0200 Subject: [PATCH] Fix data not JSON-serializable --- src/ralph/assets/invoice_report.py | 6 +++++- src/ralph/reports/helpers.py | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/ralph/assets/invoice_report.py b/src/ralph/assets/invoice_report.py index 9b44935b1f..ee828377d1 100644 --- a/src/ralph/assets/invoice_report.py +++ b/src/ralph/assets/invoice_report.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import datetime +import json import logging from django.contrib import messages @@ -116,7 +117,7 @@ def _get_report_data(self, request, queryset): 'model': queryset.model._meta.model_name, 'base_info': { 'invoice_no': first_item.invoice_no, - 'invoice_date': first_item.invoice_date, + 'invoice_date': str(first_item.invoice_date), 'provider': first_item.provider, 'datetime': datetime.datetime.now().strftime( self._invoice_report_datetime_format @@ -148,6 +149,9 @@ def _get_pdf_content(self, data): template_content = f.read() service_pdf = ExternalService('PDF') + # Make sure data is JSON-serializable + # Will throw otherwise + data = json.loads(json.dumps(data)) result = service_pdf.run( template=template_content, data=data, diff --git a/src/ralph/reports/helpers.py b/src/ralph/reports/helpers.py index 798d7b043c..0c112ba350 100644 --- a/src/ralph/reports/helpers.py +++ b/src/ralph/reports/helpers.py @@ -1,4 +1,5 @@ import datetime +import json import os import tempfile @@ -25,17 +26,22 @@ def generate_report(name, requester, instances, language, context): service_pdf = ExternalService('PDF') for n in range(0, len(context), items_per_attachment): - result = service_pdf.run( - template=template_content, - data={ + # Make sure data is JSON-serializable + # Will throw otherwise + data = json.loads(json.dumps( + { 'id': ', '.join([str(obj.id) for obj in - instances[n:n+items_per_attachment]]), - 'now': datetime.datetime.now(), + instances[n:n + items_per_attachment]]), + 'now': str(datetime.datetime.now()), 'logged_user': obj_to_dict(requester), 'affected_user': obj_to_dict(instances[0].user), 'owner': obj_to_dict(instances[0].owner), - 'assets': context[n:n+items_per_attachment], + 'assets': context[n:n + items_per_attachment], } + )) + result = service_pdf.run( + template=template_content, + data=data ) filename = "_".join([