feat: search the full Find Work catalog (Closes #673)
This commit is contained in:
1 parent
dcf26c896c
commit
77fab85a66
18 files changed
+201
-28
No files matched your search
+17
-3
@@ -2721,7 +2721,18 @@ async def _available_issue_snapshot() -> tuple[list[dict], bool, bool, bool]:
|
||||
raise
|
||||
|
||||
|
||||
def _available_issue_page(items: list[dict], page: int, limit: int = 50) -> dict:
|
||||
def _available_issue_page(
|
||||
items: list[dict], page: int, limit: int = 50, query: str = ""
|
||||
) -> dict:
|
||||
normalized_query = query.strip().casefold()
|
||||
if normalized_query:
|
||||
number_query = normalized_query.removeprefix("#")
|
||||
items = [
|
||||
item for item in items
|
||||
if normalized_query in str(item.get("repository") or "").casefold()
|
||||
or normalized_query in str(item.get("title") or "").casefold()
|
||||
or (number_query.isdigit() and number_query == str(item.get("number") or ""))
|
||||
]
|
||||
start = (page - 1) * limit
|
||||
page_items = items[start:start + limit]
|
||||
return {
|
||||
@@ -2733,7 +2744,10 @@ def _available_issue_page(items: list[dict], page: int, limit: int = 50) -> dict
|
||||
|
||||
|
||||
@app.get("/api/v1/available-issues")
|
||||
async def available_issues(page: int = Query(default=1, ge=1, le=100)) -> JSONResponse:
|
||||
async def available_issues(
|
||||
page: int = Query(default=1, ge=1, le=100),
|
||||
q: str = Query(default="", max_length=100),
|
||||
) -> JSONResponse:
|
||||
try:
|
||||
items, stale, revalidating, refresh_failed = await asyncio.wait_for(
|
||||
_available_issue_snapshot(), timeout=WORK_PAGE_TIMEOUT_SECONDS
|
||||
@@ -2744,7 +2758,7 @@ async def available_issues(page: int = Query(default=1, ge=1, le=100)) -> JSONRe
|
||||
status_code=503,
|
||||
headers={"Retry-After": str(math.ceil(WORK_PAGE_TIMEOUT_SECONDS))},
|
||||
)
|
||||
result = _available_issue_page(items, page)
|
||||
result = _available_issue_page(items, page, query=q)
|
||||
if stale:
|
||||
result["stale"] = True
|
||||
if revalidating:
|
||||
|
||||
Reference in new issue
Block a user