mirror of https://github.com/scrapy/scrapy.git
Add tests for envvar setting warnings
This commit is contained in:
parent
2acaa86231
commit
9aae4c0be7
|
|
@ -78,11 +78,11 @@ def get_project_settings():
|
|||
scrapy_envvars = {k[7:]: v for k, v in os.environ.items() if
|
||||
k.startswith('SCRAPY_')}
|
||||
valid_envvars = {
|
||||
'SCRAPY_CHECK',
|
||||
'SCRAPY_PICKLED_SETTINGS_TO_OVERRIDE',
|
||||
'SCRAPY_PROJECT',
|
||||
'SCRAPY_PYTHON_SHELL',
|
||||
'SCRAPY_SETTINGS_MODULE',
|
||||
'CHECK',
|
||||
'PICKLED_SETTINGS_TO_OVERRIDE',
|
||||
'PROJECT',
|
||||
'PYTHON_SHELL',
|
||||
'SETTINGS_MODULE',
|
||||
}
|
||||
setting_envvars = {k for k in scrapy_envvars if k not in valid_envvars}
|
||||
if setting_envvars:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,11 @@ import os
|
|||
import tempfile
|
||||
import shutil
|
||||
import contextlib
|
||||
from scrapy.utils.project import data_path
|
||||
|
||||
from pytest import warns
|
||||
|
||||
from scrapy.exceptions import ScrapyDeprecationWarning
|
||||
from scrapy.utils.project import data_path, get_project_settings
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
|
|
@ -41,3 +45,53 @@ class ProjectUtilsTest(unittest.TestCase):
|
|||
)
|
||||
abspath = os.path.join(os.path.sep, 'absolute', 'path')
|
||||
self.assertEqual(abspath, data_path(abspath))
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def set_env(**update):
|
||||
modified = set(update.keys()) & set(os.environ.keys())
|
||||
update_after = {k: os.environ[k] for k in modified}
|
||||
remove_after = frozenset(k for k in update if k not in os.environ)
|
||||
try:
|
||||
os.environ.update(update)
|
||||
yield
|
||||
finally:
|
||||
os.environ.update(update_after)
|
||||
for k in remove_after:
|
||||
os.environ.pop(k)
|
||||
|
||||
|
||||
class GetProjectSettingsTestCase(unittest.TestCase):
|
||||
|
||||
def test_valid_envvar(self):
|
||||
value = 'tests.test_cmdline.settings'
|
||||
envvars = {
|
||||
'SCRAPY_SETTINGS_MODULE': value,
|
||||
}
|
||||
with set_env(**envvars), warns(None) as warnings:
|
||||
settings = get_project_settings()
|
||||
assert not warnings
|
||||
assert settings.get('SETTINGS_MODULE') == value
|
||||
|
||||
def test_invalid_envvar(self):
|
||||
envvars = {
|
||||
'SCRAPY_FOO': 'bar',
|
||||
}
|
||||
with set_env(**envvars), warns(None) as warnings:
|
||||
get_project_settings()
|
||||
assert len(warnings) == 1
|
||||
assert warnings[0].category == ScrapyDeprecationWarning
|
||||
assert str(warnings[0].message).endswith(': FOO')
|
||||
|
||||
def test_valid_and_invalid_envvars(self):
|
||||
value = 'tests.test_cmdline.settings'
|
||||
envvars = {
|
||||
'SCRAPY_FOO': 'bar',
|
||||
'SCRAPY_SETTINGS_MODULE': value,
|
||||
}
|
||||
with set_env(**envvars), warns(None) as warnings:
|
||||
settings = get_project_settings()
|
||||
assert len(warnings) == 1
|
||||
assert warnings[0].category == ScrapyDeprecationWarning
|
||||
assert str(warnings[0].message).endswith(': FOO')
|
||||
assert settings.get('SETTINGS_MODULE') == value
|
||||
|
|
|
|||
Loading…
Reference in New Issue