Created
January 25, 2011 16:17
-
-
Save Ciantic/795135 to your computer and use it in GitHub Desktop.
My Site object cache
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""Cache of Site related settings | |
Site IDs and urlconfs are such that are testd on *all* requests thus they need | |
to be cached. | |
""" | |
from django.conf import settings | |
from django.contrib.sites.models import Site | |
_CACHE_SITE_IDS = None | |
_CACHE_URLCONFS_BY_DOMAIN = getattr(settings, 'MULTIDOMAIN_URLCONFS', dict()) | |
def get_urlconf(domain=""): | |
"""Get urlconf (by domain, if omitted the global ROOT_URLCONF)""" | |
return _CACHE_URLCONFS_BY_DOMAIN.get(domain, settings.ROOT_URLCONF) | |
def get_site_id(domain=""): | |
"""Get site ID (by domain, if omitted the global SITE_ID is fetched)""" | |
refresh_multidomain_sites() | |
return _CACHE_SITE_IDS.get(domain, settings.SITE_ID) | |
def get_site(domain=""): | |
"""Get current Site (by domain, if omitted the global site is fetched) | |
.. note: Site *objects* are not cached, only site ids. | |
""" | |
site_id = get_site_id(domain) | |
if site_id == settings.SITE_ID: | |
return Site.objects.get_current() | |
return Site.objects.get(pk=site_id) | |
def refresh_multidomain_sites(forced=False): | |
"""Refresh the cache of site IDs | |
:param forced: Force refresh | |
""" | |
global _CACHE_SITE_IDS | |
if not _CACHE_SITE_IDS or forced: | |
_CACHE_SITE_IDS = {} | |
for s in Site.objects.all(): | |
_CACHE_SITE_IDS[s.domain] = s.id |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment