livereload.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import os
  2. import re
  3. from django.core.management.base import BaseCommand, CommandError
  4. from django.core.management.commands.runserver import naiveip_re
  5. from django.core.servers.basehttp import get_internal_wsgi_application
  6. from livereload import Server
  7. class Command(BaseCommand):
  8. help = 'Runs the development server with livereload enabled.'
  9. def add_arguments(self, parser):
  10. parser.add_argument('addrport',
  11. nargs='?',
  12. default='127.0.0.1:8000',
  13. help='host and optional port the django server should listen on (default: 127.0.0.1:8000)')
  14. parser.add_argument('-l', '--liveport',
  15. type=int,
  16. default=35729,
  17. help='port the livereload server should listen on (default: 35729)')
  18. def handle(self, *args, **options):
  19. m = re.match(naiveip_re, options['addrport'])
  20. if m is None:
  21. raise CommandError('"%s" is not a valid port number '
  22. 'or address:port pair.' % options['addrport'])
  23. addr, _ipv4, _ipv6, _fqdn, port = m.groups()
  24. if not port.isdigit():
  25. raise CommandError("%r is not a valid port number." % port)
  26. if addr:
  27. if _ipv6:
  28. raise CommandError('IPv6 addresses are currently not supported.')
  29. application = get_internal_wsgi_application()
  30. server = Server(application)
  31. for file in os.listdir('.'):
  32. if file[0] != '.' and file[:2] != '__' and os.path.isdir(file):
  33. server.watch(file)
  34. server.serve(host=addr, port=port, liveport=options['liveport'])