mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-10 19:56:59 +03:00
4296189283
This change fixes the dist test by moving the --no-pkgroot option from pytest to the runtests script. The current "filterwarnings" setting for pytest includes rest_framework, which causes an early import of the module. As a result the current --no-pkgroot behavior fails with an assertion error. Trying to remove the module from sys.modules will cause the warning filter to not apply, so this change moves this code before pytest parses the config and loads the "filterwarnings".
65 lines
1.9 KiB
Python
Executable File
65 lines
1.9 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
|
|
def split_class_and_function(string):
|
|
class_string, function_string = string.split('.', 1)
|
|
return "%s and %s" % (class_string, function_string)
|
|
|
|
|
|
def is_function(string):
|
|
# `True` if it looks like a test function is included in the string.
|
|
return string.startswith('test_') or '.test_' in string
|
|
|
|
|
|
def is_class(string):
|
|
# `True` if first character is uppercase - assume it's a class name.
|
|
return string[0] == string[0].upper()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
pytest_args = sys.argv[1:]
|
|
first_arg = pytest_args[0]
|
|
|
|
try:
|
|
pytest_args.remove('--coverage')
|
|
except ValueError:
|
|
pass
|
|
else:
|
|
pytest_args = [
|
|
'--cov', '.',
|
|
'--cov-report', 'xml',
|
|
] + pytest_args
|
|
|
|
try:
|
|
pytest_args.remove('--no-pkgroot')
|
|
except ValueError:
|
|
pass
|
|
else:
|
|
sys.path.pop(0)
|
|
|
|
# import rest_framework before pytest re-adds the package root directory.
|
|
import rest_framework
|
|
package_dir = os.path.join(os.getcwd(), 'rest_framework')
|
|
assert not rest_framework.__file__.startswith(package_dir)
|
|
|
|
if first_arg.startswith('-'):
|
|
# `runtests.py [flags]`
|
|
pytest_args = ['tests'] + pytest_args
|
|
elif is_class(first_arg) and is_function(first_arg):
|
|
# `runtests.py TestCase.test_function [flags]`
|
|
expression = split_class_and_function(first_arg)
|
|
pytest_args = ['tests', '-k', expression] + pytest_args[1:]
|
|
elif is_class(first_arg) or is_function(first_arg):
|
|
# `runtests.py TestCase [flags]`
|
|
# `runtests.py test_function [flags]`
|
|
pytest_args = ['tests', '-k', pytest_args[0]] + pytest_args[1:]
|
|
else:
|
|
pytest_args = []
|
|
|
|
sys.exit(pytest.main(pytest_args))
|