Si acabas de actualizar entre versiones de Python o Django (o tienes un proyecto que ya has actualizado) es bastante posible que tengas código que, aunque funcione, esté obsoleto.

Por ejemplo, la antigua sintaxis de uniones de tipos era esta Union[X, Y] y, desde Python 3.10, se escribe como X | Y.

Gracias a ruff podemos actualizar esta sintaxis automáticamente utilizando las reglas de pyupgrade:

ruff check --select UP --fix --target-version py310

Hay algunos fixes que están marcados como inseguros. Mi recomendación es ejecutar primero los seguros, hacer commit, y luego probar con los inseguros, revisándolos bien.

ruff check --select UP --fix --target-version py310 --unsafe-fixes

Para el caso de Django tenemos otra herramienta, django-upgrade, que nos actualizará el proyecto para que use las últimas características de Django.

git ls-files -z -- '*.py' | xargs -0r django-upgrade --target-version 6.0