django-analytical/analytical/services/__init__.py
Joost Cassee 39c205f546 Updated analytical
* Added Chartbeat.
* Added settings context processor.
* Added identification.
* Prepared events.
* Updated tests.
2011-01-25 00:13:44 +01:00

66 lines
1.9 KiB
Python

"""
Analytics services.
"""
import logging
from django.conf import settings
from django.utils.importlib import import_module
from django.core.exceptions import ImproperlyConfigured
_log = logging.getLogger(__name__)
DEFAULT_SERVICES = [
'analytical.services.chartbeat.ChartbeatService',
'analytical.services.clicky.ClickyService',
'analytical.services.crazy_egg.CrazyEggService',
'analytical.services.google_analytics.GoogleAnalyticsService',
'analytical.services.kiss_insights.KissInsightsService',
'analytical.services.kiss_metrics.KissMetricsService',
'analytical.services.mixpanel.MixpanelService',
'analytical.services.optimizely.OptimizelyService',
]
enabled_services = None
def get_enabled_services():
global enabled_services
if enabled_services is None:
enabled_services = load_services()
return enabled_services
def load_services():
enabled_services = []
try:
service_paths = settings.ANALYTICAL_SERVICES
autoload = False
except AttributeError:
service_paths = DEFAULT_SERVICES
autoload = True
for path in service_paths:
try:
service = _load_service(path)
enabled_services.append(service)
except ImproperlyConfigured, e:
if autoload:
_log.debug('not loading analytical service "%s": %s',
path, e)
else:
raise
return enabled_services
def _load_service(path):
module, attr = path.rsplit('.', 1)
try:
mod = import_module(module)
except ImportError, e:
raise ImproperlyConfigured(
'error importing analytical service %s: "%s"' % (module, e))
try:
service = getattr(mod, attr)()
except (AttributeError, TypeError):
raise ImproperlyConfigured(
'module "%s" does not define callable service "%s"'
% (module, attr))
return service