Plain is headed towards 1.0! Subscribe for development updates →

 1import pytest
 2from plain.runtime import settings as plain_settings
 3from plain.runtime import setup
 4
 5
 6def pytest_configure(config):
 7    # Run Plain setup before anything else
 8    setup()
 9
10
11@pytest.fixture(autouse=True, scope="session")
12def _allowed_hosts_testserver():
13    # Add testserver to ALLOWED_HOSTS so the test client can make requests
14    plain_settings.ALLOWED_HOSTS = [*plain_settings.ALLOWED_HOSTS, "testserver"]
15
16
17@pytest.fixture
18def settings():
19    class SettingsProxy:
20        def __init__(self):
21            self._original = {}
22
23        def __getattr__(self, name):
24            return getattr(plain_settings, name)
25
26        def __setattr__(self, name, value):
27            if name.startswith("_"):
28                super().__setattr__(name, value)
29            else:
30                if name not in self._original:
31                    self._original[name] = getattr(plain_settings, name, None)
32                setattr(plain_settings, name, value)
33
34        def _restore(self):
35            for key, value in self._original.items():
36                setattr(plain_settings, key, value)
37
38    proxy = SettingsProxy()
39    yield proxy
40    proxy._restore()