-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Environment variable to disable plugins (#8767)
Co-authored-by: pantero <pantero@panteros-MacBook-Pro.local> Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
- Loading branch information
1 parent
332eac4
commit b145516
Showing
3 changed files
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
import importlib.metadata as importlib_metadata | ||
import os | ||
from unittest.mock import patch | ||
|
||
import pytest | ||
|
||
import pydantic.plugin._loader as loader | ||
|
||
|
||
class EntryPoint: | ||
def __init__(self, name, value, group): | ||
self.name = name | ||
self.value = value | ||
self.group = group | ||
|
||
def load(self): | ||
return self.value | ||
|
||
|
||
class Dist: | ||
entry_points = [] | ||
|
||
def __init__(self, entry_points): | ||
self.entry_points = entry_points | ||
|
||
|
||
@pytest.fixture | ||
def reset_plugins(): | ||
global loader | ||
initial_plugins = loader._plugins | ||
loader._plugins = None | ||
yield | ||
# teardown | ||
loader._plugins = initial_plugins | ||
|
||
|
||
@pytest.fixture(autouse=True) | ||
def mock(): | ||
mock_entry_1 = EntryPoint(name='test_plugin1', value='test_plugin:plugin1', group='pydantic') | ||
mock_entry_2 = EntryPoint(name='test_plugin2', value='test_plugin:plugin2', group='pydantic') | ||
mock_entry_3 = EntryPoint(name='test_plugin3', value='test_plugin:plugin3', group='pydantic') | ||
mock_dist = Dist([mock_entry_1, mock_entry_2, mock_entry_3]) | ||
|
||
with patch.object(importlib_metadata, 'distributions', return_value=[mock_dist]): | ||
yield | ||
|
||
|
||
def test_loader(reset_plugins): | ||
res = loader.get_plugins() | ||
assert list(res) == ['test_plugin:plugin1', 'test_plugin:plugin2', 'test_plugin:plugin3'] | ||
|
||
|
||
def test_disable_all(reset_plugins): | ||
os.environ['PYDANTIC_DISABLE_PLUGINS'] = '__all__' | ||
res = loader.get_plugins() | ||
assert res == () | ||
|
||
|
||
def test_disable_all_1(reset_plugins): | ||
os.environ['PYDANTIC_DISABLE_PLUGINS'] = '1' | ||
res = loader.get_plugins() | ||
assert res == () | ||
|
||
|
||
def test_disable_true(reset_plugins): | ||
os.environ['PYDANTIC_DISABLE_PLUGINS'] = 'true' | ||
res = loader.get_plugins() | ||
assert res == () | ||
|
||
|
||
def test_disable_one(reset_plugins): | ||
os.environ['PYDANTIC_DISABLE_PLUGINS'] = 'test_plugin1' | ||
res = loader.get_plugins() | ||
assert len(list(res)) == 2 | ||
assert 'test_plugin:plugin1' not in list(res) | ||
|
||
|
||
def test_disable_multiple(reset_plugins): | ||
os.environ['PYDANTIC_DISABLE_PLUGINS'] = 'test_plugin1,test_plugin2' | ||
res = loader.get_plugins() | ||
assert len(list(res)) == 1 | ||
assert 'test_plugin:plugin1' not in list(res) | ||
assert 'test_plugin:plugin2' not in list(res) |