Skip to content

Commit b45572c

Browse files
krassowskidlqqq
authored andcommitted
Prevent overriding server_settings on base provider class
1 parent 289d39d commit b45572c

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
@@ -196,6 +196,18 @@ def __new__(mcs, name, bases, namespace, **kwargs):
196196

197197
return cls
198198

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

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

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)