Merge pull request #397 from MODSetter/dev

refactor: updated SearxNG connector migration and fixed validation for SearxNG host URL
This commit is contained in:
Rohan Verma 2025-10-13 14:06:42 -07:00 committed by GitHub
commit 30b8852ba7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 16 additions and 15 deletions

View file

@ -1,7 +1,7 @@
"""Add SearxNG connector enum value
Revision ID: 26
Revises: 25
Revision ID: 27
Revises: 26
Create Date: 2025-01-18 00:00:00.000000
"""
@ -11,8 +11,8 @@ from collections.abc import Sequence
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "26"
down_revision: str | None = "25"
revision: str = "27"
down_revision: str | None = "26"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
@ -39,4 +39,3 @@ def upgrade() -> None:
def downgrade() -> None:
"""Downgrade not supported for enum edits."""
pass

View file

@ -432,7 +432,7 @@ class ConnectorService:
safesearch_clean = safesearch.strip()
if safesearch_clean.isdigit():
safesearch_value = int(safesearch_clean)
elif isinstance(safesearch, (int, float)):
elif isinstance(safesearch, int | float):
safesearch_value = int(safesearch)
if safesearch_value is not None and not (0 <= safesearch_value <= 2):
@ -444,7 +444,7 @@ class ConnectorService:
if isinstance(value, str):
value = value.strip()
return value or None
if isinstance(value, (list, tuple, set)):
if isinstance(value, list | tuple | set):
cleaned = [str(item).strip() for item in value if str(item).strip()]
return ",".join(cleaned) if cleaned else None
return str(value)

View file

@ -412,7 +412,7 @@ def validate_connector_config(
raise ValueError(f"Invalid email format for {connector_name} connector")
def validate_url_field(key: str, connector_name: str) -> None:
if not validators.url(config.get(key, "")):
if not validators.url(config.get(key, "").strip(), simple_host=True):
raise ValueError(f"Invalid base URL format for {connector_name} connector")
def validate_list_field(key: str, field_name: str) -> None:
@ -435,9 +435,7 @@ def validate_connector_config(
"SEARXNG_VERIFY_SSL",
],
"validators": {
"SEARXNG_HOST": lambda: validate_url_field(
"SEARXNG_HOST", "SearxNG"
)
"SEARXNG_HOST": lambda: validate_url_field("SEARXNG_HOST", "SearxNG")
},
},
"LINKUP_API": {"required": ["LINKUP_API_KEY"], "validators": {}},

View file

@ -258,7 +258,9 @@ export default function SearxngConnectorPage() {
<FormControl>
<Input placeholder="google,bing,duckduckgo" {...field} />
</FormControl>
<FormDescription>Comma-separated list to target specific engines.</FormDescription>
<FormDescription>
Comma-separated list to target specific engines.
</FormDescription>
<FormMessage />
</FormItem>
)}
@ -273,7 +275,9 @@ export default function SearxngConnectorPage() {
<FormControl>
<Input placeholder="general,it,science" {...field} />
</FormControl>
<FormDescription>Comma-separated list of SearxNG categories.</FormDescription>
<FormDescription>
Comma-separated list of SearxNG categories.
</FormDescription>
<FormMessage />
</FormItem>
)}
@ -308,8 +312,8 @@ export default function SearxngConnectorPage() {
<Input placeholder="0 (off), 1 (moderate), 2 (strict)" {...field} />
</FormControl>
<FormDescription>
Set 0, 1, or 2 to adjust SafeSearch filtering. Leave blank to use the instance
default.
Set 0, 1, or 2 to adjust SafeSearch filtering. Leave blank to use the
instance default.
</FormDescription>
<FormMessage />
</FormItem>