#35276: Push cache backend checks down to backend classes
------------------------------------------------+------------------------
Reporter: Adam Johnson | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Core (System checks) | Version: dev
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------------+------------------------
Currently, the three system checks for caches are individual functions
[
https://github.com/django/django/blob/main/django/core/checks/caches.py
in django.core.checks.caches]. But two of them relate only to
`FileBasedCache`, yet still run regardless of which backends are used.
This structure causes some issues:
1. `FileBasedCache` and its dependencies are imported even when not used.
2. Some waste in `check_cache_location_not_exposed()` when no
`FileBasedCache` is configured, which resolves some paths before checking
against caches.
3. The code structure is a bit messy with repeated loops and
`isinstance(cache, FileBasedCache)` conditions.
I propose restructuring these checks to live within the cache backend
classes in `django.core.cache.backends.*`, adopting the same pattern used
for model and field checks, admin checks, and staticfiles finders. (And
template backend checks, as I proposed in #35233.)
This would mean:
1. Adding `BaseCache.check()` which just does `return []` for now.
2. Pushing the existing two checks down to a new `FileBasedCache.check()`
method.
3. Dropping the existing code.
4. Checking tests cover the checks sufficiently and they pass with the new
structure.
5. Potentially adding a test to cover a custom cache backend with its own
check.
--
Ticket URL: <
https://code.djangoproject.com/ticket/35276>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.