Skip to content

Commit f954214

Browse files
committed
fix doctest logging errors
Signed-off-by: Madhav Kandukuri <madhav165@gmail.com>
1 parent a589de3 commit f954214

File tree

3 files changed

+59
-13
lines changed

3 files changed

+59
-13
lines changed

mcpgateway/services/prompt_service.py

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -438,22 +438,30 @@ async def register_prompt(
438438
PromptError: For other prompt registration errors
439439
440440
Examples:
441+
>>> import logging
442+
>>> logging.disable(logging.CRITICAL)
441443
>>> from mcpgateway.services.prompt_service import PromptService
442-
>>> from unittest.mock import MagicMock
444+
>>> from unittest.mock import AsyncMock, MagicMock
443445
>>> service = PromptService()
444446
>>> db = MagicMock()
445447
>>> prompt = MagicMock()
448+
>>> prompt.template = "Hello {{ name }}"
449+
>>> prompt.name = "test-prompt"
450+
>>> prompt.custom_name = None
451+
>>> prompt.display_name = None
452+
>>> prompt.arguments = []
446453
>>> db.execute.return_value.scalar_one_or_none.return_value = None
447454
>>> db.add = MagicMock()
448455
>>> db.commit = MagicMock()
449456
>>> db.refresh = MagicMock()
450-
>>> service._notify_prompt_added = MagicMock()
457+
>>> service._notify_prompt_added = AsyncMock()
451458
>>> service.convert_prompt_to_read = MagicMock(return_value={})
452459
>>> import asyncio
453460
>>> try:
454461
... asyncio.run(service.register_prompt(db, prompt))
455462
... except Exception:
456463
... pass
464+
>>> logging.disable(logging.NOTSET)
457465
"""
458466
try:
459467
# Validate template syntax
@@ -688,16 +696,31 @@ async def register_prompts_bulk(
688696
PromptError: If bulk registration fails critically
689697
690698
Examples:
699+
>>> import logging
700+
>>> logging.disable(logging.CRITICAL)
691701
>>> from mcpgateway.services.prompt_service import PromptService
692702
>>> from unittest.mock import MagicMock
693703
>>> service = PromptService()
694704
>>> db = MagicMock()
695-
>>> prompts = [MagicMock(), MagicMock()]
705+
>>> p1 = MagicMock()
706+
>>> p1.name = "prompt-1"
707+
>>> p1.template = "Hello"
708+
>>> p1.custom_name = None
709+
>>> p1.display_name = None
710+
>>> p1.arguments = []
711+
>>> p2 = MagicMock()
712+
>>> p2.name = "prompt-2"
713+
>>> p2.template = "World"
714+
>>> p2.custom_name = None
715+
>>> p2.display_name = None
716+
>>> p2.arguments = []
717+
>>> prompts = [p1, p2]
696718
>>> import asyncio
697719
>>> try:
698720
... result = asyncio.run(service.register_prompts_bulk(db, prompts))
699721
... except Exception:
700722
... pass
723+
>>> logging.disable(logging.NOTSET)
701724
"""
702725
if not prompts:
703726
return {"created": 0, "updated": 0, "skipped": 0, "failed": 0, "errors": []}
@@ -1706,20 +1729,31 @@ async def update_prompt(
17061729
PromptError: For other update errors
17071730
17081731
Examples:
1732+
>>> import logging
1733+
>>> logging.disable(logging.CRITICAL)
17091734
>>> from mcpgateway.services.prompt_service import PromptService
1710-
>>> from unittest.mock import MagicMock
1735+
>>> from unittest.mock import AsyncMock, MagicMock
17111736
>>> service = PromptService()
17121737
>>> db = MagicMock()
1713-
>>> db.execute.return_value.scalar_one_or_none.return_value = MagicMock()
1738+
>>> existing = MagicMock()
1739+
>>> existing.custom_name = "test-prompt"
1740+
>>> existing.name = "test-prompt"
1741+
>>> existing.gateway = None
1742+
>>> db.execute.return_value.scalar_one_or_none.return_value = existing
17141743
>>> db.commit = MagicMock()
17151744
>>> db.refresh = MagicMock()
1716-
>>> service._notify_prompt_updated = MagicMock()
1745+
>>> service._notify_prompt_updated = AsyncMock()
17171746
>>> service.convert_prompt_to_read = MagicMock(return_value={})
1747+
>>> update = MagicMock()
1748+
>>> update.name = None
1749+
>>> update.visibility = None
1750+
>>> update.team_id = None
17181751
>>> import asyncio
17191752
>>> try:
1720-
... asyncio.run(service.update_prompt(db, 'prompt_name', MagicMock()))
1753+
... asyncio.run(service.update_prompt(db, 'prompt_name', update))
17211754
... except Exception:
17221755
... pass
1756+
>>> logging.disable(logging.NOTSET)
17231757
"""
17241758
try:
17251759
# Acquire a row-level lock for the prompt being updated to make
@@ -1964,22 +1998,25 @@ async def set_prompt_state(self, db: Session, prompt_id: int, activate: bool, us
19641998
PermissionError: If user doesn't own the prompt.
19651999
19662000
Examples:
2001+
>>> import logging
2002+
>>> logging.disable(logging.CRITICAL)
19672003
>>> from mcpgateway.services.prompt_service import PromptService
1968-
>>> from unittest.mock import MagicMock
2004+
>>> from unittest.mock import AsyncMock, MagicMock
19692005
>>> service = PromptService()
19702006
>>> db = MagicMock()
19712007
>>> prompt = MagicMock()
19722008
>>> db.get.return_value = prompt
19732009
>>> db.commit = MagicMock()
19742010
>>> db.refresh = MagicMock()
1975-
>>> service._notify_prompt_activated = MagicMock()
1976-
>>> service._notify_prompt_deactivated = MagicMock()
2011+
>>> service._notify_prompt_activated = AsyncMock()
2012+
>>> service._notify_prompt_deactivated = AsyncMock()
19772013
>>> service.convert_prompt_to_read = MagicMock(return_value={})
19782014
>>> import asyncio
19792015
>>> try:
1980-
... asyncio.run(service.set_prompt_state(db, 1, True))
2016+
... result = asyncio.run(service.set_prompt_state(db, 1, True))
19812017
... except Exception:
19822018
... pass
2019+
>>> logging.disable(logging.NOTSET)
19832020
"""
19842021
try:
19852022
# Use nowait=True to fail fast if row is locked, preventing lock contention under high load
@@ -2159,20 +2196,23 @@ async def delete_prompt(self, db: Session, prompt_id: Union[int, str], user_emai
21592196
Exception: For unexpected errors.
21602197
21612198
Examples:
2199+
>>> import logging
2200+
>>> logging.disable(logging.CRITICAL)
21622201
>>> from mcpgateway.services.prompt_service import PromptService
2163-
>>> from unittest.mock import MagicMock
2202+
>>> from unittest.mock import AsyncMock, MagicMock
21642203
>>> service = PromptService()
21652204
>>> db = MagicMock()
21662205
>>> prompt = MagicMock()
21672206
>>> db.get.return_value = prompt
21682207
>>> db.delete = MagicMock()
21692208
>>> db.commit = MagicMock()
2170-
>>> service._notify_prompt_deleted = MagicMock()
2209+
>>> service._notify_prompt_deleted = AsyncMock()
21712210
>>> import asyncio
21722211
>>> try:
21732212
... asyncio.run(service.delete_prompt(db, '123'))
21742213
... except Exception:
21752214
... pass
2215+
>>> logging.disable(logging.NOTSET)
21762216
"""
21772217
try:
21782218
prompt = db.get(DbPrompt, prompt_id)

mcpgateway/services/root_service.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,12 +457,15 @@ async def _notify_subscribers(self, event: Dict) -> None:
457457
True
458458
459459
Test error handling with closed queue:
460+
>>> import logging
461+
>>> logging.disable(logging.CRITICAL)
460462
>>> from unittest.mock import AsyncMock
461463
>>> service = RootService()
462464
>>> bad_queue = AsyncMock()
463465
>>> bad_queue.put.side_effect = Exception("Queue error")
464466
>>> service._subscribers.append(bad_queue)
465467
>>> asyncio.run(service._notify_subscribers({"type": "test"}))
468+
>>> logging.disable(logging.NOTSET)
466469
"""
467470
for queue in self._subscribers:
468471
try:

mcpgateway/toolops/utils/db_util.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,16 @@ def query_tool_auth(tool_id, db: Session):
148148
decoded-encoded-val
149149
150150
>>> # Case 2: Exception Handling
151+
>>> import logging
152+
>>> logging.disable(logging.CRITICAL)
151153
>>> mock_db_fail = MagicMock()
152154
>>> mock_db_fail.query.side_effect = Exception("DB Connection Error")
153155
154156
>>> with patch(f"{mod_path}.Tool"):
155157
... auth = query_tool_auth("tool-2", mock_db_fail)
156158
... print(auth)
157159
None
160+
>>> logging.disable(logging.NOTSET)
158161
"""
159162
tool_auth = None
160163
try:

0 commit comments

Comments
 (0)