diff --git a/db/migrations/047_site_parser_schedule.sql b/db/migrations/047_site_parser_schedule.sql index 72af16d..60f3b03 100644 --- a/db/migrations/047_site_parser_schedule.sql +++ b/db/migrations/047_site_parser_schedule.sql @@ -3,8 +3,8 @@ VALUES ( 'site_parser_default_interval_minutes', '30'::jsonb, 'int', - 'Интервал по умолчанию, мин', - 'Как часто проверять сайт, если у источника не задан свой интервал.', + 'Интервал парсинга сайтов, мин', + 'Как часто Site Parser проверяет все активные сайты.', 'Site Parser' ) ON CONFLICT (key) DO NOTHING; diff --git a/db/migrations/048_site_parser_global_interval.sql b/db/migrations/048_site_parser_global_interval.sql new file mode 100644 index 0000000..9df2420 --- /dev/null +++ b/db/migrations/048_site_parser_global_interval.sql @@ -0,0 +1,14 @@ +INSERT INTO app_settings(key, value_json, value_type, title, description, category, updated_by) +SELECT + 'site_parser_interval_minutes', + value_json, + 'int', + 'Интервал парсинга сайтов, мин', + 'Как часто Site Parser проверяет все активные сайты.', + 'Site Parser', + updated_by +FROM app_settings +WHERE key='site_parser_default_interval_minutes' +ON CONFLICT (key) DO NOTHING; + +DELETE FROM app_settings WHERE key='site_parser_default_interval_minutes'; diff --git a/src/vk_parser_app/admin.py b/src/vk_parser_app/admin.py index 33bac20..e4bbcf5 100644 --- a/src/vk_parser_app/admin.py +++ b/src/vk_parser_app/admin.py @@ -371,7 +371,7 @@ SETTING_ORDER = { "site_parser_token", "site_parser_rucaptcha_token", "site_parser_timeout_sec", - "site_parser_default_interval_minutes", + "site_parser_interval_minutes", ], "VK": [ "vk_requests_per_second", @@ -2359,14 +2359,7 @@ async def source_new(request: Request): return redirect("/login") return templates.TemplateResponse( "source_form.html", - base_context( - request, - user, - source=None, - action="/sources/new", - title="Новый источник", - site_default_interval=await fetch_int_setting("site_parser_default_interval_minutes", 30), - ), + base_context(request, user, source=None, action="/sources/new", title="Новый источник"), ) @@ -2381,7 +2374,6 @@ async def source_create( active: str = Form("off"), priority: int = Form(100), settings_json: str = Form("{}"), - interval_minutes: int = Form(30), ): user = await get_current_user(request) if not user: @@ -2394,8 +2386,6 @@ async def source_create( source_settings = json.loads(settings_json or "{}") if not isinstance(source_settings, dict): raise ValueError("Настройки должны быть JSON-объектом") - if platform == PLATFORM_SITE: - source_settings["interval_minutes"] = interval_minutes validate_source_config(platform, source_settings) except (json.JSONDecodeError, ValueError) as exc: raise HTTPException(status_code=422, detail=str(exc)) from exc @@ -2461,7 +2451,6 @@ async def source_edit(request: Request, source_id: int): source={**dict(source), "settings_json": json_object(source["settings_json"])}, action=f"/sources/{source_id}/edit", title=f"Источник #{source_id}", - site_default_interval=await fetch_int_setting("site_parser_default_interval_minutes", 30), ), ) @@ -2478,7 +2467,6 @@ async def source_update( active: str = Form("off"), priority: int = Form(100), settings_json: str = Form("{}"), - interval_minutes: int = Form(30), ): user = await get_current_user(request) if not user: @@ -2491,8 +2479,6 @@ async def source_update( source_settings = json.loads(settings_json or "{}") if not isinstance(source_settings, dict): raise ValueError("Настройки должны быть JSON-объектом") - if platform == PLATFORM_SITE: - source_settings["interval_minutes"] = interval_minutes validate_source_config(platform, source_settings) except (json.JSONDecodeError, ValueError) as exc: raise HTTPException(status_code=422, detail=str(exc)) from exc diff --git a/src/vk_parser_app/source_adapters.py b/src/vk_parser_app/source_adapters.py index 09c132d..6855a34 100644 --- a/src/vk_parser_app/source_adapters.py +++ b/src/vk_parser_app/source_adapters.py @@ -55,14 +55,6 @@ def validate_source_config(platform: str, config: dict[str, Any]) -> None: raise ValueError("max_items должен быть целым числом") from exc if not 1 <= max_items <= 100: raise ValueError("max_items должен быть от 1 до 100") - try: - interval_minutes = int(config.get("interval_minutes", 30)) - except (TypeError, ValueError) as exc: - raise ValueError("interval_minutes должен быть целым числом") from exc - if not 1 <= interval_minutes <= 10080: - raise ValueError("interval_minutes должен быть от 1 до 10080") - - def _posted_at(value: Any) -> datetime: try: parsed = datetime.fromisoformat(str(value).replace("Z", "+00:00")) diff --git a/src/vk_parser_app/templates/source_form.html b/src/vk_parser_app/templates/source_form.html index f35698a..76988d7 100644 --- a/src/vk_parser_app/templates/source_form.html +++ b/src/vk_parser_app/templates/source_form.html @@ -42,8 +42,6 @@
{
"format": "rss",
"access": "auto",
- "max_items": 20,
- "interval_minutes": 30
+ "max_items": 20
}
access: auto сначала пробует обычный запрос и при Cloudflare использует RuCaptcha; http запрещает браузер; cloudflare сразу запускает браузер.