[searx-search] better module and class names

searx-api-pre
blob42 2 years ago
parent 6865fba689
commit a21e9becd4

@ -5,8 +5,8 @@ For Searx API refer to https://docs.searxng.org/index.html
""" """
import requests import requests
from pydantic import BaseModel, PrivateAttr, Extra, Field, validator from pydantic import BaseModel, PrivateAttr, Extra, Field, validator, root_validator
from typing import Optional, List, Dict from typing import Optional, List, Dict, Any
import json import json
@ -32,17 +32,27 @@ class SearxResults(dict):
def __str__(self) -> str: def __str__(self) -> str:
return self._data return self._data
# the following are fields from the json result of Searx we put getter
# to silence mypy errors
@property
def results(self) -> Any:
return self.results
class SearxAPIWrapper(BaseModel): @property
def answers(self) -> Any:
return self.results
class SearxSearchWrapper(BaseModel):
_result: SearxResults = PrivateAttr() _result: SearxResults = PrivateAttr()
host: str = '' host: str = ""
unsecure: bool = False unsecure: bool = False
params: dict = Field(default_factory=_get_default_params) params: dict = Field(default_factory=_get_default_params)
headers: Optional[dict] = None headers: Optional[dict] = None
k: int = 10 k: int = 10
@validator('unsecure', pre=True) @validator("unsecure", pre=True)
def disable_ssl_warnings(cls, v: bool) -> bool: def disable_ssl_warnings(cls, v: bool) -> bool:
if v: if v:
# requests.urllib3.disable_warnings() # requests.urllib3.disable_warnings()
@ -54,7 +64,17 @@ class SearxAPIWrapper(BaseModel):
return v return v
@validator('host', pre=True, always=True) @root_validator()
def validate_params(cls, values: Dict) -> Dict:
"""Validate that custom searx params are merged with default ones"""
user_params = values["params"]
default = _get_default_params()
values["params"] = {**default, **user_params}
return values
@validator("host", pre=True, always=True)
def valid_host_url(cls, host: str) -> str: def valid_host_url(cls, host: str) -> str:
if len(host) == 0: if len(host) == 0:
raise ValueError("url can not be empty") raise ValueError("url can not be empty")
@ -88,7 +108,7 @@ class SearxAPIWrapper(BaseModel):
# only return the content of the results list # only return the content of the results list
elif len(res.results) > 0: elif len(res.results) > 0:
toret = " ".join([r['content'] for r in res.results[:self.k]]) toret = "\n\n".join([r['content'] for r in res.results[:self.k]])
else: else:
toret = "No good search result found" toret = "No good search result found"
@ -126,6 +146,6 @@ class SearxAPIWrapper(BaseModel):
return metadata_results return metadata_results
if __name__ == "__main__": # if __name__ == "__main__":
search = SearxAPIWrapper(host='search.c.gopher', unsecure=True) # search = SearxSearchWrapper(host='search.c.gopher', unsecure=True)
print(search.run("who is the current president of Bengladesh")) # print(search.run("who is the current president of Bengladesh ?"))
Loading…
Cancel
Save