Skip to content

Commit a13b5a6

Browse files
committed
Prevent overriding server_settings on base provider class
1 parent 6f32acc commit a13b5a6

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

packages/jupyter-ai-magics/jupyter_ai_magics/providers.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,18 @@ def __new__(mcs, name, bases, namespace, **kwargs):
197197

198198
return cls
199199

200+
@property
201+
def server_settings(cls):
202+
return cls._server_settings
203+
204+
@server_settings.setter
205+
def server_settings(cls, value):
206+
if cls._server_settings is not None:
207+
raise AttributeError("'server_settings' attribute was already set")
208+
cls._server_settings = value
209+
210+
_server_settings = None
211+
200212

201213
class BaseProvider(BaseModel, metaclass=ProviderMetaclass):
202214
#

packages/jupyter-ai-magics/jupyter_ai_magics/tests/test_provider_metaclass.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
from types import MappingProxyType
12
from typing import ClassVar, Optional
23

34
from langchain.pydantic_v1 import BaseModel
5+
from pytest import raises
46

5-
from ..providers import ProviderMetaclass
7+
from ..providers import BaseProvider, ProviderMetaclass
68

79

810
def test_provider_metaclass():
@@ -24,3 +26,10 @@ class Child(Base, Parent, metaclass=ProviderMetaclass):
2426
test: ClassVar[str] = "expected"
2527

2628
assert Child.test == "expected"
29+
30+
31+
def test_base_provider_server_settings_read_only():
32+
BaseProvider.server_settings = MappingProxyType({})
33+
34+
with raises(AttributeError, match="'server_settings' attribute was already set"):
35+
BaseProvider.server_settings = MappingProxyType({})

0 commit comments

Comments
 (0)