aircox-radiocampus/aircox/converters.py
2019-09-08 01:39:40 +02:00

49 lines
1.3 KiB
Python

import datetime
from django.utils.safestring import mark_safe
from django.urls.converters import StringConverter
from .utils import str_to_date
class PagePathConverter(StringConverter):
""" Match path for pages, including surrounding slashes. """
regex = r'/?|([-_a-zA-Z0-9]+/)*?'
def to_python(self, value):
if not value or value[0] != '/':
value = '/' + value
if len(value) > 1 and value[-1] != '/':
value = value + '/'
return value
def to_url(self, value):
if value[0] == '/':
value = value[1:]
if value[-1] != '/':
value = value + '/'
return mark_safe(value)
class WeekConverter:
""" Converter for date as YYYYY/WW """
regex = r'[0-9]{4}/[0-9]{2}'
def to_python(self, value):
return datetime.datetime.strptime(value + '/1', '%G/%V/%u').date()
def to_url(self, value):
return '{:04d}/{:02d}'.format(*value.isocalendar())
class DateConverter:
""" Converter for date as YYYY/MM/DD """
regex = r'[0-9]{4}/[0-9]{2}/[0-9]{2}'
def to_python(self, value):
return str_to_date(value)
def to_url(self, value):
return '{:04d}/{:02d}/{:02d}'.format(value.year, value.month,
value.day)