"""API v2 routes for parser source exports.""" from apps.parsers.models import ParserLoadLog from apps.parsers.source_registry import PARSER_SOURCES, ParserSourceDescriptor from apps.parsers.views import SourceResultCsvDownloadView from django.urls import path app_name = "parser_sources" def _download_source_descriptors(): """Return unique source result routes that support CSV download.""" seen_routes = set() for descriptor in PARSER_SOURCES.values(): if not descriptor.api_route or descriptor.api_route in seen_routes: continue seen_routes.add(descriptor.api_route) if descriptor.source == ParserLoadLog.Source.FNS_REPORTS: continue yield descriptor def _download_view(descriptor: ParserSourceDescriptor): class SourceDownloadView(SourceResultCsvDownloadView): source_key = descriptor.key return SourceDownloadView.as_view() urlpatterns = [] for source_descriptor in _download_source_descriptors(): route_name = source_descriptor.api_route.replace("/", "-") urlpatterns.append( path( f"{source_descriptor.api_route}/download/", _download_view(source_descriptor), name=f"{route_name}-download", ) )