Source code for search.converters
"""URL conversion for paths containing arXiv groups or archives."""
import re
from typing import List, Optional
from arxiv import taxonomy
from werkzeug.routing import BaseConverter, ValidationError
[docs]class ArchiveConverter(BaseConverter):
"""Route converter for arXiv IDs."""
[docs] def to_python(self, value: str) -> Optional[List[str]]:
"""Parse URL path part to Python rep (str)."""
valid_archives = []
for archive in value.split(','):
if archive not in taxonomy.ARCHIVES:
continue
# Support old archives.
if archive in taxonomy.ARCHIVES_SUBSUMED:
cat = taxonomy.CATEGORIES[taxonomy.ARCHIVES_SUBSUMED[archive]]
archive = cat['in_archive']
valid_archives.append(archive)
if not valid_archives:
raise ValidationError()
return valid_archives
[docs] def to_url(self, value: List[str]) -> str:
"""Cast Python rep (list) to URL path part."""
return ",".join(value)