From a97e80baabecbb1c2798db500014445e73f4ab68 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 28 Jan 2026 10:55:03 -0500 Subject: [PATCH] Implement Deprecation Warning System and Router Registry Cleanup - Added DeprecationParams dependency to log warnings when legacy routes are accessed. - Updated setup_routers to apply deprecation warnings to non-V3 legacy endpoints. - Exempted core infrastructure, special routers, and routers currently in use from deprecation warnings. - Cleaned up 24 unused router imports from the registry. --- app/routers/dependencies_v3.py | 9 +++++- app/routers/registry.py | 59 +++++++++++++++++----------------- 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/app/routers/dependencies_v3.py b/app/routers/dependencies_v3.py index baeaaa6..93b5ab6 100644 --- a/app/routers/dependencies_v3.py +++ b/app/routers/dependencies_v3.py @@ -1,4 +1,4 @@ -from fastapi import Depends, Header, HTTPException, Query, Response, status +from fastapi import Depends, Header, HTTPException, Query, Request, Response, status from typing import Optional, Union import logging import asyncio @@ -7,6 +7,13 @@ from app.models.auth_models import AccountContext log = logging.getLogger(__name__) +# --- Deprecation Dependency --- + +class DeprecationParams: + """Logs a warning when a legacy/deprecated route is accessed.""" + def __init__(self, request: Request): + log.warning(f"!!! DEPRECATED ROUTE ACCESSED: [{request.method}] {request.url.path} from {request.client.host if request.client else 'Unknown'}") + # --- Account Context Dependencies --- def get_account_context_optional( diff --git a/app/routers/registry.py b/app/routers/registry.py index 623b99f..f38c385 100644 --- a/app/routers/registry.py +++ b/app/routers/registry.py @@ -1,16 +1,15 @@ -from fastapi import FastAPI +from fastapi import FastAPI, Depends +from app.routers.dependencies_v3 import DeprecationParams from app.routers import ( ae_obj, aether_cfg, api_crud, api_crud_v2, api_crud_v3, api, importing, sql, - account, activity_log, address, archive, archive_content, contact, data_store, - event, event_abstract, event_badge, event_badge_importing, event_badge_template, + account, contact, data_store, + event, event_badge, event_badge_importing, event_badge_template, event_device, event_exhibit, event_exhibit_tracking, event_file, event_importing, - event_location, event_person, event_person_detail, event_person_tracking, - event_presentation, event_presenter, event_registration, event_session, - flask_cfg, fundraising, grant, hosted_file, api_v3_actions_hosted_file, log_client_viewing, lookup, - membership_cfg, membership_group, membership_person_group, membership_person, - membership_person_profile, membership_type, membership_person_type, - order, order_v3, order_line, order_cart, organization, page, person, - person_user, post, post_comment, product, qr, site, site_domain, user, + event_location, event_person, + event_presentation, event_presenter, event_session, + flask_cfg, hosted_file, api_v3_actions_hosted_file, lookup, + organization, page, person, + person_user, qr, site, site_domain, user, util_email, websockets_redis, e_confex, e_cvent, e_impexium, e_stripe ) @@ -20,45 +19,45 @@ def setup_routers(app: FastAPI): """ app.include_router(ae_obj.router, prefix='/ae_obj', tags=['AE Object']) app.include_router(aether_cfg.router, tags=['Aether Config']) - app.include_router(api_crud.router, prefix='/crud', tags=['CRUD v1.2 (Legacy)']) - app.include_router(api_crud_v2.router, prefix='/v2/crud', tags=['CRUD v2.5']) + app.include_router(api_crud.router, prefix='/crud', tags=['CRUD v1.2 (Legacy)'], dependencies=[Depends(DeprecationParams)]) + app.include_router(api_crud_v2.router, prefix='/v2/crud', tags=['CRUD v2.5'], dependencies=[Depends(DeprecationParams)]) app.include_router(api_crud_v3.router, prefix='/v3/crud', tags=['CRUD v3']) app.include_router(api.router, prefix='/api', tags=['API']) - app.include_router(flask_cfg.router, prefix='/flask_cfg', tags=['Flask CFG']) + app.include_router(flask_cfg.router, prefix='/flask_cfg', tags=['Flask CFG'], dependencies=[Depends(DeprecationParams)]) app.include_router(importing.router, prefix='/importing', tags=['Importing']) app.include_router(sql.router, tags=['SQL']) - app.include_router(account.router, tags=['Account']) + app.include_router(account.router, tags=['Account'], dependencies=[Depends(DeprecationParams)]) app.include_router(data_store.router, tags=['Data Store']) - app.include_router(event.router, tags=['Event']) - app.include_router(event_badge.router, tags=['Event Badge']) + app.include_router(event.router, tags=['Event'], dependencies=[Depends(DeprecationParams)]) + app.include_router(event_badge.router, tags=['Event Badge'], dependencies=[Depends(DeprecationParams)]) app.include_router(event_badge_importing.router, tags=['Event Badge Importing']) - app.include_router(event_badge_template.router, tags=['Event Badge Template']) + app.include_router(event_badge_template.router, tags=['Event Badge Template'], dependencies=[Depends(DeprecationParams)]) - app.include_router(event_device.router, tags=['Event Device']) - app.include_router(event_exhibit.router, tags=['Event Exhibit']) + app.include_router(event_device.router, tags=['Event Device'], dependencies=[Depends(DeprecationParams)]) + app.include_router(event_exhibit.router, tags=['Event Exhibit'], dependencies=[Depends(DeprecationParams)]) app.include_router(event_exhibit_tracking.router, tags=['Event Exhibit Tracking']) app.include_router(event_file.router, tags=['Event File']) app.include_router(event_importing.router, tags=['Event Importing']) - app.include_router(event_location.router, tags=['Event Location']) + app.include_router(event_location.router, tags=['Event Location'], dependencies=[Depends(DeprecationParams)]) - app.include_router(event_presentation.router, tags=['Event Presentation']) - app.include_router(event_presenter.router, prefix='/event/presenter', tags=['Event Presenter']) - app.include_router(event_session.router, tags=['Event Session']) + app.include_router(event_presentation.router, tags=['Event Presentation'], dependencies=[Depends(DeprecationParams)]) + app.include_router(event_presenter.router, prefix='/event/presenter', tags=['Event Presenter'], dependencies=[Depends(DeprecationParams)]) + app.include_router(event_session.router, tags=['Event Session'], dependencies=[Depends(DeprecationParams)]) app.include_router(hosted_file.router, prefix='/hosted_file', tags=['Hosted File']) app.include_router(api_v3_actions_hosted_file.router, prefix='/v3/action/hosted_file', tags=['Hosted File (V3 Actions)']) app.include_router(lookup.router, prefix='/lu', tags=['Lookup']) - app.include_router(organization.router, prefix='/organization', tags=['Organization']) - app.include_router(page.router, prefix='/page', tags=['Page']) - app.include_router(person.router, tags=['Person']) - app.include_router(person_user.router, prefix='/person_user', tags=['Person User']) + app.include_router(organization.router, prefix='/organization', tags=['Organization'], dependencies=[Depends(DeprecationParams)]) + app.include_router(page.router, prefix='/page', tags=['Page'], dependencies=[Depends(DeprecationParams)]) + app.include_router(person.router, tags=['Person'], dependencies=[Depends(DeprecationParams)]) + app.include_router(person_user.router, prefix='/person_user', tags=['Person User'], dependencies=[Depends(DeprecationParams)]) - app.include_router(qr.router, tags=['QR']) - app.include_router(site.router, tags=['Site']) - app.include_router(site_domain.router, tags=['Site Domain']) + app.include_router(qr.router, tags=['QR'], dependencies=[Depends(DeprecationParams)]) + app.include_router(site.router, tags=['Site'], dependencies=[Depends(DeprecationParams)]) + app.include_router(site_domain.router, tags=['Site Domain'], dependencies=[Depends(DeprecationParams)]) app.include_router(user.router, tags=['User']) app.include_router(util_email.router, tags=['Utility: Email']) app.include_router(websockets_redis.router, tags=['Websockets (Redis)'])