Skip to content

Commit edabca4

Browse files
committed
Release v1.4.0: Clinical Intelligence & Robustness Fixes
1 parent 75a1fc3 commit edabca4

File tree

4 files changed

+21
-37
lines changed

4 files changed

+21
-37
lines changed

medkit/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def __init__(
4949
if os.getenv("MEDKIT_TESTING"):
5050
self.cache: Any = MemoryCache()
5151
else:
52-
self.cache: Any = DiskCache()
52+
self.cache = DiskCache()
5353

5454
# Register default providers
5555
self.register_provider(OpenFDAProvider(self._http_client))
@@ -301,7 +301,7 @@ def __init__(
301301
if os.getenv("MEDKIT_TESTING"):
302302
self.cache: Any = MemoryCache()
303303
else:
304-
self.cache: Any = DiskCache()
304+
self.cache = DiskCache()
305305

306306
self.register_provider(OpenFDAProvider(self._http_client))
307307
self.register_provider(PubMedProvider(self._http_client))

medkit/providers/clinicaltrials.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ async def search(self, query: str, **kwargs) -> list[ClinicalTrial]:
8484
# Run sync version in thread to bypass httpx-specific blocking
8585
import asyncio
8686
loop = asyncio.get_event_loop()
87-
return await loop.run_in_executor(None, self.search_sync, query, **kwargs)
87+
return await loop.run_in_executor(
88+
None, lambda: self.search_sync(query, **kwargs)
89+
)
8890

8991
def _parse_response(
9092
self, data: dict[str, Any], recruiting: bool | None = None

medkit/providers/openfda.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,10 @@ async def check_interactions(self, drugs: list[str]) -> list[dict[str, Any]]:
9393
# Using unquoted search for the second drug to allow
9494
# partial/text matches
9595
queries = [
96-
f'(openfda.brand_name:"{d1}" OR openfda.generic_name:"{d1}") AND {d2}',
97-
f'(openfda.brand_name:"{d2}" OR openfda.generic_name:"{d2}") AND {d1}'
96+
f'(openfda.brand_name:"{d1}" OR '
97+
f'openfda.generic_name:"{d1}") AND {d2}',
98+
f'(openfda.brand_name:"{d2}" OR '
99+
f'openfda.generic_name:"{d2}") AND {d1}'
98100
]
99101
for q in queries:
100102
try:
@@ -106,9 +108,11 @@ async def check_interactions(self, drugs: list[str]) -> list[dict[str, Any]]:
106108
result = data["results"][0]
107109
# Try to get specific interaction text, fallback to warnings
108110
evidence = result.get("drug_interactions", [""])[0] or \
109-
result.get("warnings", ["No specific text found."])[0]
111+
result.get("warnings",
112+
["No specific text found."])[0]
110113
short_evidence = (
111-
evidence[:500] + "..." if len(evidence) > 500 else evidence
114+
evidence[:500] + "..." \
115+
if len(evidence) > 500 else evidence
112116
)
113117

114118
interactions.append({
@@ -135,8 +139,10 @@ def check_interactions_sync(self, drugs: list[str]) -> list[dict[str, Any]]:
135139
for j in range(i + 1, len(drugs)):
136140
d1, d2 = drugs[i], drugs[j]
137141
queries = [
138-
f'(openfda.brand_name:"{d1}" OR openfda.generic_name:"{d1}") AND {d2}',
139-
f'(openfda.brand_name:"{d2}" OR openfda.generic_name:"{d2}") AND {d1}'
142+
f'(openfda.brand_name:"{d1}" OR '
143+
f'openfda.generic_name:"{d1}") AND {d2}',
144+
f'(openfda.brand_name:"{d2}" OR '
145+
f'openfda.generic_name:"{d2}") AND {d1}'
140146
]
141147
for q in queries:
142148
try:
@@ -147,9 +153,11 @@ def check_interactions_sync(self, drugs: list[str]) -> list[dict[str, Any]]:
147153
data = response.json()
148154
result = data["results"][0]
149155
evidence = result.get("drug_interactions", [""])[0] or \
150-
result.get("warnings", ["No specific text found."])[0]
156+
result.get("warnings",
157+
["No specific text found."])[0]
151158
short_evidence = (
152-
evidence[:500] + "..." if len(evidence) > 500 else evidence
159+
evidence[:500] + "..." \
160+
if len(evidence) > 500 else evidence
153161
)
154162

155163
interactions.append({

pytest_fail.txt

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)