Ensure generated label PDFs have correct extension (#12870)

* Ensure generated label PDFs retain their extension

* Test generated label PDF filename handling
This commit is contained in:
Petr Ledvina
2026-09-18 17:09:49 +10:00
committed by GitHub
parent b9c7c24f8a
commit 98f4a8203b
2 changed files with 33 additions and 1 deletions
@@ -81,6 +81,9 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin):
data = pdf_file.getvalue() data = pdf_file.getvalue()
pdf_file.close() pdf_file.close()
filename = kwargs.get('filename', 'labels.pdf') filename = kwargs.get('filename') or 'labels.pdf'
if not filename.lower().endswith('.pdf'):
filename = f'{filename}.pdf'
return ContentFile(data, name=filename) return ContentFile(data, name=filename)
+29
View File
@@ -518,6 +518,35 @@ class LabelTest(InvenTreeAPITestCase):
self.assertEqual(output.plugin, 'inventreelabel') self.assertEqual(output.plugin, 'inventreelabel')
self.assertTrue(output.output.name.endswith('.pdf')) self.assertTrue(output.output.name.endswith('.pdf'))
# Filename patterns without an extension must still produce PDF filenames.
template.filename_pattern = 'unit_test_label'
template.save()
output = template.print(items=parts[:1], plugin=plugin)
self.assertTrue(output.output.name.endswith('.pdf'))
def test_generated_file_filename(self):
"""PDF filenames retain existing suffixes and default when empty."""
template = LabelTemplate.objects.filter(enabled=True, model_type='part').first()
plugin = registry.get_plugin('inventreelabel')
plugin.before_printing()
plugin.outputs.append(
plugin.render_to_pdf(template, Part.objects.first(), None)
)
for kwargs, expected in [
({'filename': 'unit_test_label'}, 'unit_test_label.pdf'),
({'filename': 'unit_test_label.pdf'}, 'unit_test_label.pdf'),
({'filename': 'unit_test_label.PDF'}, 'unit_test_label.PDF'),
({'filename': ''}, 'labels.pdf'),
({'filename': None}, 'labels.pdf'),
({}, 'labels.pdf'),
]:
with self.subTest(kwargs=kwargs):
output = plugin.get_generated_file(**kwargs)
self.assertEqual(output.name, expected)
def test_print_custom_template(self): def test_print_custom_template(self):
"""Test printing against a custom template file.""" """Test printing against a custom template file."""
template_string = """ template_string = """