runtests.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/usr/bin/env python
  2. from __future__ import absolute_import, unicode_literals
  3. import argparse
  4. import os
  5. import shutil
  6. import sys
  7. import warnings
  8. from django.core.management import execute_from_command_line
  9. os.environ['DJANGO_SETTINGS_MODULE'] = 'wagtail.tests.settings'
  10. def make_parser():
  11. parser = argparse.ArgumentParser()
  12. parser.add_argument('--deprecation', choices=['all', 'pending', 'imminent', 'none'], default='imminent')
  13. parser.add_argument('--postgres', action='store_true')
  14. parser.add_argument('--elasticsearch', action='store_true')
  15. parser.add_argument('--elasticsearch2', action='store_true')
  16. parser.add_argument('--elasticsearch5', action='store_true')
  17. parser.add_argument('rest', nargs='*')
  18. return parser
  19. def parse_args(args=None):
  20. return make_parser().parse_args(args)
  21. def runtests():
  22. args = parse_args()
  23. only_wagtail = r'^wagtail(\.|$)'
  24. if args.deprecation == 'all':
  25. # Show all deprecation warnings from all packages
  26. warnings.simplefilter('default', DeprecationWarning)
  27. warnings.simplefilter('default', PendingDeprecationWarning)
  28. elif args.deprecation == 'pending':
  29. # Show all deprecation warnings from wagtail
  30. warnings.filterwarnings('default', category=DeprecationWarning, module=only_wagtail)
  31. warnings.filterwarnings('default', category=PendingDeprecationWarning, module=only_wagtail)
  32. elif args.deprecation == 'imminent':
  33. # Show only imminent deprecation warnings from wagtail
  34. warnings.filterwarnings('default', category=DeprecationWarning, module=only_wagtail)
  35. elif args.deprecation == 'none':
  36. # Deprecation warnings are ignored by default
  37. pass
  38. if args.postgres:
  39. os.environ['DATABASE_ENGINE'] = 'django.db.backends.postgresql_psycopg2'
  40. if args.elasticsearch:
  41. os.environ.setdefault('ELASTICSEARCH_URL', 'http://localhost:9200')
  42. os.environ.setdefault('ELASTICSEARCH_VERSION', '1')
  43. if args.elasticsearch2:
  44. raise RuntimeError("You cannot test both Elasticsearch 1 and 2 together")
  45. elif args.elasticsearch2:
  46. os.environ.setdefault('ELASTICSEARCH_URL', 'http://localhost:9200')
  47. os.environ.setdefault('ELASTICSEARCH_VERSION', '2')
  48. elif args.elasticsearch5:
  49. os.environ.setdefault('ELASTICSEARCH_URL', 'http://localhost:9200')
  50. os.environ.setdefault('ELASTICSEARCH_VERSION', '5')
  51. elif 'ELASTICSEARCH_URL' in os.environ:
  52. # forcibly delete the ELASTICSEARCH_URL setting to skip those tests
  53. del os.environ['ELASTICSEARCH_URL']
  54. argv = [sys.argv[0], 'test'] + args.rest
  55. try:
  56. execute_from_command_line(argv)
  57. finally:
  58. from wagtail.tests.settings import STATIC_ROOT, MEDIA_ROOT
  59. shutil.rmtree(STATIC_ROOT, ignore_errors=True)
  60. shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
  61. if __name__ == '__main__':
  62. runtests()