Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.10/site-packages/django/urls/converters.py: 64%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

36 statements  

1import functools 

2import uuid 

3 

4 

5class IntConverter: 

6 regex = "[0-9]+" 

7 

8 def to_python(self, value): 

9 return int(value) 

10 

11 def to_url(self, value): 

12 return str(value) 

13 

14 

15class StringConverter: 

16 regex = "[^/]+" 

17 

18 def to_python(self, value): 

19 return value 

20 

21 def to_url(self, value): 

22 return value 

23 

24 

25class UUIDConverter: 

26 regex = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" 

27 

28 def to_python(self, value): 

29 return uuid.UUID(value) 

30 

31 def to_url(self, value): 

32 return str(value) 

33 

34 

35class SlugConverter(StringConverter): 

36 regex = "[-a-zA-Z0-9_]+" 

37 

38 

39class PathConverter(StringConverter): 

40 regex = ".+" 

41 

42 

43DEFAULT_CONVERTERS = { 

44 "int": IntConverter(), 

45 "path": PathConverter(), 

46 "slug": SlugConverter(), 

47 "str": StringConverter(), 

48 "uuid": UUIDConverter(), 

49} 

50 

51 

52REGISTERED_CONVERTERS = {} 

53 

54 

55def register_converter(converter, type_name): 

56 if type_name in REGISTERED_CONVERTERS or type_name in DEFAULT_CONVERTERS: 

57 raise ValueError(f"Converter {type_name!r} is already registered.") 

58 REGISTERED_CONVERTERS[type_name] = converter() 

59 get_converters.cache_clear() 

60 

61 from django.urls.resolvers import _route_to_regex 

62 

63 _route_to_regex.cache_clear() 

64 

65 

66@functools.cache 

67def get_converters(): 

68 return {**DEFAULT_CONVERTERS, **REGISTERED_CONVERTERS}