Viewing file: converters.py (1.19 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import uuid from functools import lru_cache
class IntConverter: regex = '[0-9]+'
def to_python(self, value): return int(value)
def to_url(self, value): return str(value)
class StringConverter: regex = '[^/]+'
def to_python(self, value): return value
def to_url(self, value): return value
class UUIDConverter: regex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
def to_python(self, value): return uuid.UUID(value)
def to_url(self, value): return str(value)
class SlugConverter(StringConverter): regex = '[-a-zA-Z0-9_]+'
class PathConverter(StringConverter): regex = '.+'
DEFAULT_CONVERTERS = { 'int': IntConverter(), 'path': PathConverter(), 'slug': SlugConverter(), 'str': StringConverter(), 'uuid': UUIDConverter(), }
REGISTERED_CONVERTERS = {}
def register_converter(converter, type_name): REGISTERED_CONVERTERS[type_name] = converter() get_converters.cache_clear()
@lru_cache(maxsize=None) def get_converters(): return {**DEFAULT_CONVERTERS, **REGISTERED_CONVERTERS}
def get_converter(raw_converter): return get_converters()[raw_converter]
|