Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. import sys
  2. from django.core.management import BaseCommand
  3. from django.conf.urls import RegexURLPattern, RegexURLResolver
  4. from django.core import urlresolvers
  5.  
  6.  
  7. def collect_urls(urls=None, namespace=None, prefix=None):
  8. if urls is None:
  9. urls = urlresolvers.get_resolver()
  10. _collected = []
  11. prefix = prefix or []
  12. for x in urls.url_patterns:
  13. if isinstance(x, RegexURLResolver):
  14. _collected += collect_urls(x, namespace=x.namespace or namespace,
  15. prefix=prefix + [x.regex.pattern])
  16. elif isinstance(x, RegexURLPattern):
  17. _collected.append({'namespace': namespace or '',
  18. 'name': x.name or '',
  19. 'pattern': prefix + [x.regex.pattern],
  20. 'lookup_str': x.lookup_str,
  21. 'default_args': dict(x.default_args)})
  22. else:
  23. raise NotImplementedError(repr(x))
  24. return _collected
  25.  
  26.  
  27. def show_urls():
  28. all_urls = collect_urls()
  29. all_urls.sort(key=lambda x: (x['namespace'], x['name']))
  30.  
  31. max_lengths = {}
  32. for u in all_urls:
  33. for k in ['pattern', 'default_args']:
  34. u[k] = str(u[k])
  35. for k, v in list(u.items())[:-1]:
  36. # Skip app_list due to length (contains all app names)
  37. if (u['namespace'], u['name'], k) == \
  38. ('admin', 'app_list', 'pattern'):
  39. continue
  40. max_lengths[k] = max(len(v), max_lengths.get(k, 0))
  41.  
  42. for u in all_urls:
  43. sys.stdout.write(' | '.join(
  44. ('{:%d}' % max_lengths.get(k, len(v))).format(v)
  45. for k, v in u.items()) + '\n')
  46.  
  47.  
  48. class Command(BaseCommand):
  49. def handle(self, *args, **kwargs):
  50. show_urls()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement