Network killswitch: per-network enable/disable. Use when: disabling problematic networks, emergency ad shutoff, toggling networks without deletion.
AdsSettings.ads_enabledAdsSettings.ads_enabled is the master switch — if False, ALL ads stopAdsSettings.ad_networks_enabled controls whether network waterfall runsAdNetwork.is_enabled is the per-network toggleis_enabled = False# apps/ads/services.py
from apps.ads.models import AdsSettings
def is_ads_active() -> bool:
"""Check if ads system is globally enabled."""
settings = AdsSettings.get_solo()
return settings.ads_enabled and settings.ad_networks_enabled
def toggle_network(*, network_id: int, enabled: bool) -> AdNetwork:
network = AdNetwork.objects.get(pk=network_id)
network.is_enabled = enabled
network.save(update_fields=["is_enabled", "updated_at"])
return network
def emergency_shutdown_all_networks(*, reason: str) -> int:
"""Disable all networks immediately. Returns count of disabled networks."""
count = AdNetwork.objects.filter(is_enabled=True).update(
is_enabled=False,
sync_status=f"Emergency shutdown: {reason}",
)
settings = AdsSettings.get_solo()
settings.ads_enabled = False
settings.save(update_fields=["ads_enabled"])
return count
{% load ads_tags %}
{% if ads_enabled %}
{% include "ads/fragments/placement.html" with placement=sidebar_ad %}
{% endif %}
AdNetwork records instead of disabling — loses historical dataAdNetwork.is_enabled without checking master AdsSettings.ads_enabled& .\.venv\Scripts\python.exe -m ruff check . --fix
& .\.venv\Scripts\python.exe -m ruff format .
& .\.venv\Scripts\python.exe manage.py check --settings=app.settings_dev