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.
This commit is contained in:
Scott Idem
2026-01-28 10:55:03 -05:00
parent b37108e5dd
commit a97e80baab
2 changed files with 37 additions and 31 deletions

View File

@@ -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(

View File

@@ -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)'])