fix: resolve Python code quality issues

- Fix undefined variable 'e' in PDF generator error handling
- Replace undefined 'Verpachtung' model references with 'LandVerpachtung'
- Fix all import and object access references to use correct model name
- Resolve all flake8 F821 undefined name errors

This addresses all code quality failures that were blocking CI pipeline.
This commit is contained in:
Stiftung Development
2025-09-06 20:54:20 +02:00
parent 4acb5885e8
commit 54bf468c53
2 changed files with 16 additions and 15 deletions

View File

@@ -1128,8 +1128,8 @@ class DokumentLink(models.Model):
"""Gibt die verknüpfte Verpachtung zurück""" """Gibt die verknüpfte Verpachtung zurück"""
if self.verpachtung_id: if self.verpachtung_id:
try: try:
return Verpachtung.objects.get(pk=self.verpachtung_id) return LandVerpachtung.objects.get(pk=self.verpachtung_id)
except Verpachtung.DoesNotExist: except LandVerpachtung.DoesNotExist:
return None return None
return None return None

View File

@@ -20,13 +20,15 @@ from django.conf import settings
from .models import Person, Paechter, Destinataer, DokumentLink, Foerderung, Land, CSVImport, LandAbrechnung, LandVerpachtung, AppConfiguration, DestinataerUnterstuetzung, UnterstuetzungWiederkehrend from .models import Person, Paechter, Destinataer, DokumentLink, Foerderung, Land, CSVImport, LandAbrechnung, LandVerpachtung, AppConfiguration, DestinataerUnterstuetzung, UnterstuetzungWiederkehrend
import json import json
# Lazy import for PDF generator to avoid startup errors
def get_pdf_generator(): def get_pdf_generator():
"""Lazy load PDF generator to handle missing dependencies gracefully""" """Lazy load PDF generator to handle missing dependencies gracefully"""
try: try:
from .utils.pdf_generator import pdf_generator from .utils.pdf_generator import pdf_generator
return pdf_generator return pdf_generator
except ImportError as e: except ImportError as e:
# Store the error message for use in MockPDFGenerator
error_message = str(e)
# Return a mock generator if dependencies are missing # Return a mock generator if dependencies are missing
class MockPDFGenerator: class MockPDFGenerator:
def is_available(self): def is_available(self):
@@ -40,7 +42,7 @@ def get_pdf_generator():
<body> <body>
<h1>PDF Export Not Available</h1> <h1>PDF Export Not Available</h1>
<p>PDF generation requires additional system dependencies that are not installed.</p> <p>PDF generation requires additional system dependencies that are not installed.</p>
<p>Error: {str(e)}</p> <p>Error: {error_message}</p>
<p>Please install WeasyPrint dependencies or use CSV export instead.</p> <p>Please install WeasyPrint dependencies or use CSV export instead.</p>
</body> </body>
</html> </html>
@@ -1418,7 +1420,7 @@ def verpachtung_list(request):
# Get unique gemeinden and statuses for filters # Get unique gemeinden and statuses for filters
gemeinden = Land.objects.values_list('gemeinde', flat=True).distinct().order_by('gemeinde') gemeinden = Land.objects.values_list('gemeinde', flat=True).distinct().order_by('gemeinde')
status_choices = Verpachtung.STATUS_CHOICES status_choices = LandVerpachtung.STATUS_CHOICES
context = { context = {
'page_obj': page_obj, 'page_obj': page_obj,
@@ -2055,7 +2057,7 @@ def land_stats_api(request):
stats = { stats = {
'total_count': lands.count(), 'total_count': lands.count(),
'total_flaeche': float(lands.aggregate(total=Sum('groesse_qm'))['total'] or 0), 'total_flaeche': float(lands.aggregate(total=Sum('groesse_qm'))['total'] or 0),
'total_verpachtet': float(Verpachtung.objects.filter(status='aktiv', land__in=lands).aggregate( 'total_verpachtet': float(LandVerpachtung.objects.filter(status='aktiv', land__in=lands).aggregate(
total=Sum('verpachtete_flaeche') total=Sum('verpachtete_flaeche')
)['total'] or 0), )['total'] or 0),
'avg_verpachtungsgrad': 0, 'avg_verpachtungsgrad': 0,
@@ -2685,8 +2687,7 @@ def link_document_create(request):
entity = Foerderung.objects.get(id=link_id) entity = Foerderung.objects.get(id=link_id)
target_name = f"{entity.destinataer.get_full_name() if entity.destinataer else 'Unbekannt'} - {entity.jahr}" target_name = f"{entity.destinataer.get_full_name() if entity.destinataer else 'Unbekannt'} - {entity.jahr}"
elif link_type == 'verpachtung': elif link_type == 'verpachtung':
from stiftung.models import Verpachtung entity = LandVerpachtung.objects.get(id=link_id)
entity = Verpachtung.objects.get(id=link_id)
target_name = str(entity) target_name = str(entity)
elif link_type == 'rentmeister': elif link_type == 'rentmeister':
from stiftung.models import Rentmeister from stiftung.models import Rentmeister
@@ -2918,7 +2919,7 @@ def link_document_update(request):
# Cleanup: Entferne verwaiste Pächter-Verknüpfungen wenn von Verpachtung weg geändert # Cleanup: Entferne verwaiste Pächter-Verknüpfungen wenn von Verpachtung weg geändert
if old_verpachtung_id and link_type != 'verpachtung': if old_verpachtung_id and link_type != 'verpachtung':
try: try:
old_verpachtung = Verpachtung.objects.select_related('paechter').get(id=old_verpachtung_id) old_verpachtung = LandVerpachtung.objects.select_related('paechter').get(id=old_verpachtung_id)
if old_verpachtung.paechter: if old_verpachtung.paechter:
# Prüfe ob noch andere Verpachtungs-Links für diesen Pächter existieren # Prüfe ob noch andere Verpachtungs-Links für diesen Pächter existieren
other_verpachtung_links = DokumentLink.objects.filter( other_verpachtung_links = DokumentLink.objects.filter(
@@ -2933,7 +2934,7 @@ def link_document_update(request):
paechter_id=old_verpachtung.paechter.id, paechter_id=old_verpachtung.paechter.id,
kontext='paechter' kontext='paechter'
).delete() ).delete()
except (Verpachtung.DoesNotExist, Exception): except (LandVerpachtung.DoesNotExist, Exception):
pass pass
message = 'Verknüpfung aktualisiert' message = 'Verknüpfung aktualisiert'
@@ -2990,9 +2991,9 @@ def link_document_delete(request, link_id):
elif link.verpachtung_id: elif link.verpachtung_id:
target_type = "verpachtung" target_type = "verpachtung"
try: try:
entity = Verpachtung.objects.get(id=link.verpachtung_id) entity = LandVerpachtung.objects.get(id=link.verpachtung_id)
target_name = str(entity) target_name = str(entity)
except Verpachtung.DoesNotExist: except LandVerpachtung.DoesNotExist:
target_name = f"Verpachtung ID {link.verpachtung_id}" target_name = f"Verpachtung ID {link.verpachtung_id}"
elif link.rentmeister_id: elif link.rentmeister_id:
target_type = "rentmeister" target_type = "rentmeister"
@@ -3020,7 +3021,7 @@ def link_document_delete(request, link_id):
# Cleanup NACH der Haupttransaktion: Wenn eine Verpachtungs-Verknüpfung gelöscht wurde, prüfe Pächter-Links # Cleanup NACH der Haupttransaktion: Wenn eine Verpachtungs-Verknüpfung gelöscht wurde, prüfe Pächter-Links
if verpachtung_id_for_cleanup: if verpachtung_id_for_cleanup:
try: try:
verpachtung = Verpachtung.objects.select_related('paechter').get(id=verpachtung_id_for_cleanup) verpachtung = LandVerpachtung.objects.select_related('paechter').get(id=verpachtung_id_for_cleanup)
if verpachtung.paechter: if verpachtung.paechter:
# Prüfe ob noch andere Verpachtungs-Links für diesen Pächter existieren # Prüfe ob noch andere Verpachtungs-Links für diesen Pächter existieren
other_verpachtung_links = DokumentLink.objects.filter( other_verpachtung_links = DokumentLink.objects.filter(
@@ -3035,7 +3036,7 @@ def link_document_delete(request, link_id):
paechter_id=verpachtung.paechter.id, paechter_id=verpachtung.paechter.id,
kontext='paechter' kontext='paechter'
).delete() ).delete()
except (Verpachtung.DoesNotExist, Exception): except (LandVerpachtung.DoesNotExist, Exception):
pass pass
return Response({'success': True}) return Response({'success': True})
@@ -4384,7 +4385,7 @@ def verpachtung_export(request, pk):
import os import os
from django.http import HttpResponse from django.http import HttpResponse
verpachtung = get_object_or_404(Verpachtung, pk=pk) verpachtung = get_object_or_404(LandVerpachtung, pk=pk)
# Create a temporary file for the ZIP # Create a temporary file for the ZIP
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.zip') temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.zip')