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 from typing import Optional, Union
import logging import logging
import asyncio import asyncio
@@ -7,6 +7,13 @@ from app.models.auth_models import AccountContext
log = logging.getLogger(__name__) 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 --- # --- Account Context Dependencies ---
def get_account_context_optional( 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 ( from app.routers import (
ae_obj, aether_cfg, api_crud, api_crud_v2, api_crud_v3, api, importing, sql, 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, account, contact, data_store,
event, event_abstract, event_badge, event_badge_importing, event_badge_template, event, event_badge, event_badge_importing, event_badge_template,
event_device, event_exhibit, event_exhibit_tracking, event_file, event_importing, event_device, event_exhibit, event_exhibit_tracking, event_file, event_importing,
event_location, event_person, event_person_detail, event_person_tracking, event_location, event_person,
event_presentation, event_presenter, event_registration, event_session, event_presentation, event_presenter, event_session,
flask_cfg, fundraising, grant, hosted_file, api_v3_actions_hosted_file, log_client_viewing, lookup, flask_cfg, hosted_file, api_v3_actions_hosted_file, lookup,
membership_cfg, membership_group, membership_person_group, membership_person, organization, page, person,
membership_person_profile, membership_type, membership_person_type, person_user, qr, site, site_domain, user,
order, order_v3, order_line, order_cart, organization, page, person,
person_user, post, post_comment, product, qr, site, site_domain, user,
util_email, websockets_redis, e_confex, e_cvent, e_impexium, e_stripe 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(ae_obj.router, prefix='/ae_obj', tags=['AE Object'])
app.include_router(aether_cfg.router, tags=['Aether Config']) 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.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']) 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_crud_v3.router, prefix='/v3/crud', tags=['CRUD v3'])
app.include_router(api.router, prefix='/api', tags=['API']) 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(importing.router, prefix='/importing', tags=['Importing'])
app.include_router(sql.router, tags=['SQL']) 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(data_store.router, tags=['Data Store'])
app.include_router(event.router, tags=['Event']) app.include_router(event.router, tags=['Event'], dependencies=[Depends(DeprecationParams)])
app.include_router(event_badge.router, tags=['Event Badge']) 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_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_device.router, tags=['Event Device'], dependencies=[Depends(DeprecationParams)])
app.include_router(event_exhibit.router, tags=['Event Exhibit']) 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_exhibit_tracking.router, tags=['Event Exhibit Tracking'])
app.include_router(event_file.router, tags=['Event File']) app.include_router(event_file.router, tags=['Event File'])
app.include_router(event_importing.router, tags=['Event Importing']) 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_presentation.router, tags=['Event Presentation'], dependencies=[Depends(DeprecationParams)])
app.include_router(event_presenter.router, prefix='/event/presenter', tags=['Event Presenter']) app.include_router(event_presenter.router, prefix='/event/presenter', tags=['Event Presenter'], dependencies=[Depends(DeprecationParams)])
app.include_router(event_session.router, tags=['Event Session']) 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(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(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(lookup.router, prefix='/lu', tags=['Lookup'])
app.include_router(organization.router, prefix='/organization', tags=['Organization']) app.include_router(organization.router, prefix='/organization', tags=['Organization'], dependencies=[Depends(DeprecationParams)])
app.include_router(page.router, prefix='/page', tags=['Page']) app.include_router(page.router, prefix='/page', tags=['Page'], dependencies=[Depends(DeprecationParams)])
app.include_router(person.router, tags=['Person']) app.include_router(person.router, tags=['Person'], dependencies=[Depends(DeprecationParams)])
app.include_router(person_user.router, prefix='/person_user', tags=['Person User']) 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(qr.router, tags=['QR'], dependencies=[Depends(DeprecationParams)])
app.include_router(site.router, tags=['Site']) app.include_router(site.router, tags=['Site'], dependencies=[Depends(DeprecationParams)])
app.include_router(site_domain.router, tags=['Site Domain']) app.include_router(site_domain.router, tags=['Site Domain'], dependencies=[Depends(DeprecationParams)])
app.include_router(user.router, tags=['User']) app.include_router(user.router, tags=['User'])
app.include_router(util_email.router, tags=['Utility: Email']) app.include_router(util_email.router, tags=['Utility: Email'])
app.include_router(websockets_redis.router, tags=['Websockets (Redis)']) app.include_router(websockets_redis.router, tags=['Websockets (Redis)'])