1
1
from django .urls import URLResolver , include , path , re_path , register_converter
2
+ from django .urls .converters import get_converters
2
3
from django .urls .resolvers import RoutePattern
3
4
4
5
from rest_framework .settings import api_settings
5
6
6
7
7
8
def _get_format_path_converter (suffix_kwarg , allowed ):
9
+ converter_name = 'drf_format_suffix'
10
+ if allowed :
11
+ converter_name += '_' + '_' .join (allowed )
12
+
13
+ if converter_name in get_converters ():
14
+ return converter_name
15
+
8
16
if allowed :
9
17
if len (allowed ) == 1 :
10
18
allowed_pattern = allowed [0 ]
@@ -23,11 +31,9 @@ def to_python(self, value):
23
31
def to_url (self , value ):
24
32
return '.' + value + '/'
25
33
26
- converter_name = 'drf_format_suffix'
27
- if allowed :
28
- converter_name += '_' + '_' .join (allowed )
34
+ register_converter (FormatSuffixConverter , converter_name )
29
35
30
- return converter_name , FormatSuffixConverter
36
+ return converter_name
31
37
32
38
33
39
def apply_suffix_patterns (urlpatterns , suffix_pattern , suffix_required , suffix_route = None ):
@@ -104,8 +110,7 @@ def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None):
104
110
else :
105
111
suffix_pattern = r'\.(?P<%s>[a-z0-9]+)/?$' % suffix_kwarg
106
112
107
- converter_name , suffix_converter = _get_format_path_converter (suffix_kwarg , allowed )
108
- register_converter (suffix_converter , converter_name )
113
+ converter_name = _get_format_path_converter (suffix_kwarg , allowed )
109
114
110
115
suffix_route = '<%s:%s>' % (converter_name , suffix_kwarg )
111
116
0 commit comments