rewrite pytest-mypy-plugin extension code to use new hook

This commit is contained in:
Maxim Kurnikov
2019-07-23 17:38:18 +03:00
parent df021f6baa
commit 6332620443
6 changed files with 32 additions and 73 deletions

View File

@@ -8,8 +8,7 @@ jobs:
python: 3.7
script: |
set -e
pip install pytest_plugin/
pytest -p no:pytest-mypy-plugins
pytest
- name: Typecheck Django test suite
python: 3.7

View File

@@ -2,7 +2,8 @@
testpaths = ./test-data
addopts =
--tb=native
--mypy-ini-file=./test-data/plugins.ini
-s
-v
--cache-clear
--mypy-ini-file=./test-data/plugins.ini
--mypy-extension-hook=scripts.tests_extension_hook.django_plugin_hook

View File

@@ -1,42 +0,0 @@
# noinspection PyUnresolvedReferences
from pytest_mypy.collect import ( # noqa: F401
File, YamlTestFile, pytest_addoption,
)
from pytest_mypy.item import YamlTestItem
class DjangoYamlTestFile(YamlTestFile):
def get_test_class(self):
return NewSemanalDjangoTestItem
def pytest_collect_file(path, parent):
if path.ext in {'.yaml', '.yml'} and path.basename.startswith(('test-', 'test_')):
return DjangoYamlTestFile(path, parent=parent, config=parent.config)
class NewSemanalDjangoTestItem(YamlTestItem):
def custom_init(self):
settings = {
'SECRET_KEY': '"1"',
}
additional_settings = self.parsed_test_data.get('additional_settings')
if additional_settings:
for item in additional_settings:
name, _, val = item.partition('=')
settings[name] = val
installed_apps = self.parsed_test_data.get('installed_apps', None)
if installed_apps is not None:
installed_apps += ['django.contrib.contenttypes']
installed_apps_as_str = '(' + ','.join([repr(app) for app in installed_apps]) + ',)'
pyproject_toml_file = File(path='pyproject.toml',
content='[tool.django-stubs]\ndjango_settings_module=\'mysettings\'')
self.files.append(pyproject_toml_file)
settings_contents = f'INSTALLED_APPS={installed_apps_as_str}\n'
settings_contents += '\n'.join([f'{key}={val}' for key, val in settings.items()])
mysettings_file = File(path='mysettings.py', content=settings_contents)
self.files.append(mysettings_file)

View File

@@ -1,27 +0,0 @@
from setuptools import setup
dependencies = [
'pytest-mypy-plugins',
]
setup(
name='pytest-django-stubs-newsemanal',
version='0.4.0',
license='MIT',
url="https://github.com/mkurnikov/pytest-mypy-plugins",
author="Maksim Kurnikov",
author_email="maxim.kurnikov@gmail.com",
# the following makes a plugin available to pytest
entry_points={
'pytest11': [
'pytest-django-stubs-newsemanal = pytest_plugin.collect'
]
},
install_requires=dependencies,
classifiers=[
'Development Status :: 3 - Alpha',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7'
]
)

View File

@@ -0,0 +1,28 @@
from pytest_mypy.collect import File
from pytest_mypy.item import YamlTestItem
def django_plugin_hook(test_item: YamlTestItem) -> None:
settings = {
'SECRET_KEY': '"1"',
}
additional_settings = test_item.parsed_test_data.get('additional_settings')
if additional_settings:
for item in additional_settings:
name, _, val = item.partition('=')
settings[name] = val
installed_apps = test_item.parsed_test_data.get('installed_apps', None)
if installed_apps is not None:
installed_apps += ['django.contrib.contenttypes']
installed_apps_as_str = '(' + ','.join([repr(app) for app in installed_apps]) + ',)'
pyproject_toml_file = File(path='pyproject.toml',
content='[tool.django-stubs]\ndjango_settings_module=\'mysettings\'')
test_item.files.append(pyproject_toml_file)
settings_contents = f'INSTALLED_APPS={installed_apps_as_str}\n'
settings_contents += '\n'.join([f'{key}={val}' for key, val in settings.items()])
mysettings_file = File(path='mysettings.py', content=settings_contents)
test_item.files.append(mysettings_file)