Skip to content

Commit 136230c

Browse files
committed
fix: keep hydrated keyword searches on public search
1 parent 024d7f7 commit 136230c

2 files changed

Lines changed: 53 additions & 5 deletions

File tree

polymarket_cli/api.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def search_markets(
229229
return []
230230

231231
gamma_order = self._normalize_market_order(order)
232-
requires_ranked_search = any(
232+
requires_market_search = any(
233233
value
234234
for value in (
235235
offset,
@@ -249,10 +249,9 @@ def search_markets(
249249
active is not True,
250250
closed is not False,
251251
gamma_order != "volume_24hr",
252-
hydrate,
253252
)
254253
)
255-
if requires_ranked_search:
254+
if requires_market_search:
256255
try:
257256
return self.list_markets(
258257
limit=limit,
@@ -279,12 +278,16 @@ def search_markets(
279278
except ApiError:
280279
pass
281280

282-
candidate_limit = self._search_candidate_limit(limit=limit, offset=offset, hydrate=hydrate or requires_ranked_search)
281+
candidate_limit = self._search_candidate_limit(
282+
limit=limit,
283+
offset=offset,
284+
hydrate=hydrate or requires_market_search,
285+
)
283286
markets = self._search_public_markets(query, limit=candidate_limit)
284287
if not markets:
285288
return []
286289

287-
if hydrate or requires_ranked_search:
290+
if hydrate or self._public_search_needs_hydration(markets, order=gamma_order):
288291
markets = self._hydrate_markets(markets, order=gamma_order, include_tokens=True)
289292

290293
filtered = self._filter_markets(
@@ -379,6 +382,9 @@ def _search_candidate_limit(self, *, limit: int, offset: int, hydrate: bool) ->
379382
return max(minimum, 1)
380383
return max(minimum * 5, 25)
381384

385+
def _public_search_needs_hydration(self, markets: list[dict[str, Any]], *, order: str) -> bool:
386+
return any(self._market_needs_hydration(dict(market), order=order, include_tokens=False) for market in markets)
387+
382388
def _hydrate_markets(self, markets: list[dict[str, Any]], *, order: str, include_tokens: bool) -> list[dict[str, Any]]:
383389
hydrated = []
384390
for market in markets:

tests/test_api.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,48 @@ def test_search_markets_uses_markets_endpoint_when_advanced_filters_requested(se
222222
self.assertEqual(len(markets), 1)
223223
self.assertEqual(markets[0]["id"], "1669969")
224224

225+
def test_search_markets_keeps_plain_hydrated_query_on_public_search(self):
226+
detail = load_fixture("market_detail.json")
227+
public_search = {
228+
"events": [
229+
{
230+
"markets": [
231+
{
232+
"slug": detail["slug"],
233+
"question": detail["question"],
234+
"id": None,
235+
"conditionId": None,
236+
"volume24hr": None,
237+
}
238+
]
239+
}
240+
]
241+
}
242+
http = StubHttpClient(
243+
[
244+
(
245+
"https://gamma-api.polymarket.com/public-search",
246+
{
247+
"q": "bitcoin",
248+
"limit_per_type": 50,
249+
"search_tags": False,
250+
"search_profiles": False,
251+
"optimized": True,
252+
},
253+
public_search,
254+
),
255+
(f"https://gamma-api.polymarket.com/markets/slug/{detail['slug']}", None, detail),
256+
]
257+
)
258+
259+
client = PolymarketClient(http=http)
260+
261+
markets = client.search_markets("bitcoin", hydrate=True)
262+
263+
self.assertEqual(len(markets), 1)
264+
self.assertEqual(markets[0]["slug"], detail["slug"])
265+
self.assertTrue(markets[0]["clobTokenIds"])
266+
225267
def test_search_markets_falls_back_to_public_search_and_hydrates_ranked_results(self):
226268
detail_a = load_fixture("market_detail.json")
227269
detail_b = dict(detail_a)

0 commit comments

Comments
 (0)