40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""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",
|
|
)
|
|
)
|