mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-07 23:02:39 +02:00
feat: added periodic tasks in backend db and frontend hooks
- TODO: Add celery redbeat and create tasks dinamically in our redis
This commit is contained in:
parent
70808eb08b
commit
182f815bb7
8 changed files with 484 additions and 31 deletions
|
|
@ -2,7 +2,7 @@ import uuid
|
|||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, field_validator
|
||||
from pydantic import BaseModel, ConfigDict, field_validator, model_validator
|
||||
|
||||
from app.db import SearchSourceConnectorType
|
||||
from app.utils.validators import validate_connector_config
|
||||
|
|
@ -16,6 +16,9 @@ class SearchSourceConnectorBase(BaseModel):
|
|||
is_indexable: bool
|
||||
last_indexed_at: datetime | None = None
|
||||
config: dict[str, Any]
|
||||
periodic_indexing_enabled: bool = False
|
||||
indexing_frequency_minutes: int | None = None
|
||||
next_scheduled_at: datetime | None = None
|
||||
|
||||
@field_validator("config")
|
||||
@classmethod
|
||||
|
|
@ -25,6 +28,22 @@ class SearchSourceConnectorBase(BaseModel):
|
|||
connector_type = values.data.get("connector_type")
|
||||
return validate_connector_config(connector_type, config)
|
||||
|
||||
@model_validator(mode="after")
|
||||
def validate_periodic_indexing(self):
|
||||
"""Validate that periodic indexing configuration is consistent."""
|
||||
if self.periodic_indexing_enabled:
|
||||
if not self.is_indexable:
|
||||
raise ValueError(
|
||||
"periodic_indexing_enabled can only be True for indexable connectors"
|
||||
)
|
||||
if self.indexing_frequency_minutes is None:
|
||||
raise ValueError(
|
||||
"indexing_frequency_minutes is required when periodic_indexing_enabled is True"
|
||||
)
|
||||
if self.indexing_frequency_minutes <= 0:
|
||||
raise ValueError("indexing_frequency_minutes must be greater than 0")
|
||||
return self
|
||||
|
||||
|
||||
class SearchSourceConnectorCreate(SearchSourceConnectorBase):
|
||||
pass
|
||||
|
|
@ -36,6 +55,9 @@ class SearchSourceConnectorUpdate(BaseModel):
|
|||
is_indexable: bool | None = None
|
||||
last_indexed_at: datetime | None = None
|
||||
config: dict[str, Any] | None = None
|
||||
periodic_indexing_enabled: bool | None = None
|
||||
indexing_frequency_minutes: int | None = None
|
||||
next_scheduled_at: datetime | None = None
|
||||
|
||||
|
||||
class SearchSourceConnectorRead(SearchSourceConnectorBase, IDModel, TimestampModel):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue