Add optional keyword for quick search
Browse files- app.py +37 -36
- static/script.js +2 -2
app.py
CHANGED
@@ -222,7 +222,7 @@ class BatchDocResponse(BaseModel):
|
|
222 |
search_time: float
|
223 |
|
224 |
class KeywordRequest(BaseModel):
|
225 |
-
keywords: str
|
226 |
search_mode: Literal["quick", "deep"]
|
227 |
case_sensitive: Optional[bool] = False
|
228 |
release: Optional[str] = None
|
@@ -450,20 +450,21 @@ async def main_menu():
|
|
450 |
def search_spec(request: KeywordRequest):
|
451 |
start_time = time.time()
|
452 |
booleanLowered = request.case_sensitive
|
453 |
-
|
|
|
|
|
|
|
|
|
454 |
unique_specs = set()
|
455 |
results = []
|
456 |
|
|
|
|
|
|
|
457 |
for string, spec in finder_spec.indexer_specs.items():
|
458 |
put = False
|
459 |
if spec['id'] in unique_specs:
|
460 |
continue
|
461 |
-
|
462 |
-
release = request.release
|
463 |
-
working_group = request.working_group
|
464 |
-
spec_type = request.spec_type
|
465 |
-
search_mode = request.search_mode
|
466 |
-
|
467 |
if spec.get('version', None) is None or (release is not None and spec["version"].split(".")[0] != str(release)):
|
468 |
continue
|
469 |
if spec.get('type', None) is None or (spec_type is not None and spec["type"] != spec_type):
|
@@ -471,35 +472,35 @@ def search_spec(request: KeywordRequest):
|
|
471 |
if spec.get('working_group', None) is None or (working_group is not None and spec["working_group"] != working_group):
|
472 |
continue
|
473 |
|
474 |
-
if
|
475 |
-
print(spec["working_group"], working_group, spec["working_group"] != working_group)
|
476 |
-
|
477 |
-
contents = []
|
478 |
-
version = finder_spec.search_document(spec['id'], spec['release']).split("/")[-1].replace(".zip", "").split("-")[-1]
|
479 |
-
if search_mode == "deep":
|
480 |
-
doc = finder_spec.get_document(spec['id'], version)
|
481 |
-
docValid = not isinstance(doc, str)
|
482 |
-
|
483 |
-
if request.mode == "and":
|
484 |
-
if all(kw in willLower(string, booleanLowered) for kw in kws):
|
485 |
-
put = True
|
486 |
if search_mode == "deep":
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
|
504 |
if put:
|
505 |
spec_content = spec
|
|
|
222 |
search_time: float
|
223 |
|
224 |
class KeywordRequest(BaseModel):
|
225 |
+
keywords: Optional[str] = ""
|
226 |
search_mode: Literal["quick", "deep"]
|
227 |
case_sensitive: Optional[bool] = False
|
228 |
release: Optional[str] = None
|
|
|
450 |
def search_spec(request: KeywordRequest):
|
451 |
start_time = time.time()
|
452 |
booleanLowered = request.case_sensitive
|
453 |
+
search_mode = request.search_mode
|
454 |
+
release = request.release
|
455 |
+
working_group = request.working_group
|
456 |
+
spec_type = request.spec_type
|
457 |
+
kws = [willLower(_, booleanLowered) for _ in request.keywords.split(" ")] if request.keywords != " " else ""
|
458 |
unique_specs = set()
|
459 |
results = []
|
460 |
|
461 |
+
if kws == "" and search_mode == "deep":
|
462 |
+
raise HTTPException(status_code=400, detail="You must enter keywords in deep search mode !")
|
463 |
+
|
464 |
for string, spec in finder_spec.indexer_specs.items():
|
465 |
put = False
|
466 |
if spec['id'] in unique_specs:
|
467 |
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
468 |
if spec.get('version', None) is None or (release is not None and spec["version"].split(".")[0] != str(release)):
|
469 |
continue
|
470 |
if spec.get('type', None) is None or (spec_type is not None and spec["type"] != spec_type):
|
|
|
472 |
if spec.get('working_group', None) is None or (working_group is not None and spec["working_group"] != working_group):
|
473 |
continue
|
474 |
|
475 |
+
if kws != "":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
476 |
if search_mode == "deep":
|
477 |
+
contents = []
|
478 |
+
version = finder_spec.search_document(spec['id'], spec['release']).split("/")[-1].replace(".zip", "").split("-")[-1]
|
479 |
+
doc = finder_spec.get_document(spec['id'], version)
|
480 |
+
docValid = not isinstance(doc, str)
|
481 |
+
|
482 |
+
if request.mode == "and":
|
483 |
+
if all(kw in willLower(string, booleanLowered) for kw in kws):
|
484 |
+
put = True
|
485 |
+
if search_mode == "deep":
|
486 |
+
if docValid:
|
487 |
+
for chapter in list(doc.keys())[1:]:
|
488 |
+
if "references" not in chapter.lower() and "void" not in chapter.lower() and "annexe" not in doc[chapter].lower():
|
489 |
+
if all(kw in willLower(doc[chapter], booleanLowered) for kw in kws):
|
490 |
+
put = True
|
491 |
+
contents.append(chapter)
|
492 |
+
elif request.mode == "or":
|
493 |
+
if any(kw in willLower(string, booleanLowered) for kw in kws):
|
494 |
+
put = True
|
495 |
+
if search_mode == "deep":
|
496 |
+
if docValid:
|
497 |
+
for chapter in list(doc.keys())[1:]:
|
498 |
+
if "references" not in chapter.lower() or "void" not in chapter.lower() or "annexe" not in doc[chapter].lower():
|
499 |
+
if any(kw in willLower(doc[chapter], booleanLowered) for kw in kws):
|
500 |
+
put = True
|
501 |
+
contents.append(chapter)
|
502 |
+
else:
|
503 |
+
put = True
|
504 |
|
505 |
if put:
|
506 |
spec_content = spec
|
static/script.js
CHANGED
@@ -91,8 +91,8 @@ keywordSearchBtn.addEventListener("click", async ()=>{
|
|
91 |
let checked = caseSensitiveFilter.checked;
|
92 |
let mode = modeFilter.value;
|
93 |
|
94 |
-
if (!keywords) {
|
95 |
-
showError("Please enter at least one keyword");
|
96 |
return;
|
97 |
}
|
98 |
|
|
|
91 |
let checked = caseSensitiveFilter.checked;
|
92 |
let mode = modeFilter.value;
|
93 |
|
94 |
+
if (!keywords && searchMode == "deep") {
|
95 |
+
showError("Please enter at least one keyword in deep search mode");
|
96 |
return;
|
97 |
}
|
98 |
|