mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-08 04:54:48 +08:00
rewrite pytest-mypy-plugin extension code to use new hook
This commit is contained in:
@@ -8,8 +8,7 @@ jobs:
|
|||||||
python: 3.7
|
python: 3.7
|
||||||
script: |
|
script: |
|
||||||
set -e
|
set -e
|
||||||
pip install pytest_plugin/
|
pytest
|
||||||
pytest -p no:pytest-mypy-plugins
|
|
||||||
|
|
||||||
- name: Typecheck Django test suite
|
- name: Typecheck Django test suite
|
||||||
python: 3.7
|
python: 3.7
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
testpaths = ./test-data
|
testpaths = ./test-data
|
||||||
addopts =
|
addopts =
|
||||||
--tb=native
|
--tb=native
|
||||||
--mypy-ini-file=./test-data/plugins.ini
|
|
||||||
-s
|
-s
|
||||||
-v
|
-v
|
||||||
--cache-clear
|
--cache-clear
|
||||||
|
--mypy-ini-file=./test-data/plugins.ini
|
||||||
|
--mypy-extension-hook=scripts.tests_extension_hook.django_plugin_hook
|
||||||
|
|||||||
@@ -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)
|
|
||||||
@@ -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'
|
|
||||||
]
|
|
||||||
)
|
|
||||||
28
scripts/tests_extension_hook.py
Normal file
28
scripts/tests_extension_hook.py
Normal 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)
|
||||||
Reference in New Issue
Block a user