Commit 6cfc497
authored
feat: вложенные роутеры с наследованием middleware и фильтров (#63)
* feat(dispatcher): поддержка вложенных роутеров с наследованием middleware и фильтров
Добавлен рекурсивный обход дерева роутеров через _iter_routers:
дочерние роутеры автоматически наследуют middleware, MagicFilter и BaseFilter
от всех родителей по цепочке вложенности.
Покрыто тестами: unit на _iter_routers, интеграционные на dispatch,
наследование middleware (3+ уровня), BaseFilter и MagicFilter.
* fix(dispatcher): дедупликация повторно включённых роутеров
Вынесен обход уникальных экземпляров роутеров в _iter_unique_routers и применён в _prepare_handlers, _process_event и handle_raw_response, чтобы один и тот же роутер не обрабатывал событие дважды. При подготовке обработчиков добавлено предупреждение в лог о повторных включениях. Добавлены тесты на дедупликацию и логирование.
* fix(dispatcher): уточнить тип результата _check_router_filters
Метод возвращает только dict (включая {}) или False, поэтому убрано | None из аннотации и обновлён Returns в докстринге.
* fix(dispatcher): защита _iter_routers от циклических включений роутеров
Добавлен обход с path по текущей ветви DFS: повторный заход в роутер на цикле пропускается, после обхода поддерева ключ снимается из path. Добавлен тест, что при a↔b полный обход конечен и даёт оба роутера.
* test(nested-routers): MagicFilter на r1/r2 по is_bot и user_id для трёх уровней
Добавлены сценарии с накопленными фильтрами: сначала не-бот, затем «админский» user_id; события задаются через мок sender с полями как у User. Покрыты случаи обоих совпадений и блокировки на r1 или r2.
* style: правки ruff (E501, E712) в dispatcher и test_nested_routers
Разбиты длинные строки в докстрингах _iter_routers и _iter_unique_routers; в тестах MagicFilter заменено сравнение is_bot с False на ~F; укорочены имена длинных тестов и модульный docstring.
* fix(dispatcher): убраны ложные дубли роутеров через self в _prepare_handlers
В _iter_routers отключён спуск в поддерево Dispatcher-self, чтобы корневые роутеры не обходились повторно через dp.routers и не давали ложные warning о повторных включениях. Добавлен регрессионный тест на отсутствие такого warning при уникальных корневых роутерах.1 parent a93544b commit 6cfc497
2 files changed
Lines changed: 1143 additions & 16 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
| 28 | + | |
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| |||
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
239 | | - | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
240 | 242 | | |
241 | 243 | | |
242 | 244 | | |
| |||
339 | 341 | | |
340 | 342 | | |
341 | 343 | | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
342 | 491 | | |
343 | | - | |
344 | | - | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
345 | 497 | | |
346 | | - | |
| 498 | + | |
347 | 499 | | |
348 | 500 | | |
349 | 501 | | |
350 | | - | |
| 502 | + | |
| 503 | + | |
351 | 504 | | |
352 | 505 | | |
353 | | - | |
354 | | - | |
| 506 | + | |
| 507 | + | |
355 | 508 | | |
356 | | - | |
| 509 | + | |
357 | 510 | | |
358 | 511 | | |
359 | | - | |
| 512 | + | |
360 | 513 | | |
361 | | - | |
| 514 | + | |
362 | 515 | | |
363 | 516 | | |
364 | 517 | | |
| |||
482 | 635 | | |
483 | 636 | | |
484 | 637 | | |
485 | | - | |
| 638 | + | |
486 | 639 | | |
487 | 640 | | |
488 | 641 | | |
| |||
525 | 678 | | |
526 | 679 | | |
527 | 680 | | |
528 | | - | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
529 | 687 | | |
530 | 688 | | |
531 | 689 | | |
532 | 690 | | |
533 | 691 | | |
534 | 692 | | |
535 | | - | |
| 693 | + | |
536 | 694 | | |
537 | 695 | | |
538 | 696 | | |
| |||
545 | 703 | | |
546 | 704 | | |
547 | 705 | | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
548 | 709 | | |
549 | 710 | | |
550 | 711 | | |
| |||
582 | 743 | | |
583 | 744 | | |
584 | 745 | | |
585 | | - | |
| 746 | + | |
586 | 747 | | |
587 | | - | |
| 748 | + | |
588 | 749 | | |
589 | 750 | | |
590 | 751 | | |
| |||
0 commit comments