import re
named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)')
non_named_group_matcher = re.compile(r'\(.*?\)')
def simplify_regex(pattern):
pattern = named_group_matcher.sub(lambda m: m.group(1), pattern)
pattern = non_named_group_matcher.sub("{}", pattern)
pattern = pattern.replace('^', '').replace('$', '').replace('?', '')\
.replace('//', '/').replace('\\', '').replace('<', '{').replace('>', '}')
if not pattern.startswith('/'):
pattern = '/' + pattern
return pattern
def get_urls(urlpatterns):
urls = []
def parse(urlpatterns, prefix=''):
for entry in urlpatterns:
if entry.__class__.__name__ == 'RegexURLPattern':
urls.append(simplify_regex(prefix+entry.regex.pattern))
else: # entry.__class__.__name__ == 'RegexURLResolver'
parse(entry.url_patterns, prefix+entry.regex.pattern)
parse(urlpatterns)
return urls