# -*- coding: utf-8 -*- import re import datetime import json from ConfigParser import ConfigParser from django.shortcuts import get_object_or_404 from django.core.cache import cache from django.conf import settings from django.utils.translation import get_language, activate from django.core.urlresolvers import reverse, reverse_lazy from accounts.models import User from emencia.django.newsletter.models import Contact def get_referer(request, default=None): referer = request.META.get('HTTP_REFERER') if not referer: return default # remove the protocol and split the url at the slashes referer = re.sub('^https?:\/\/', '', referer).split('/') # add the slash at the relative path's view and finished referer = u'/' + u'/'.join(referer[1:]) return referer def split_params(st): st = st.split('/') params = [] for item in st: n = item.find('-') if n != -1: params.append({'type': item[:n], 'url':item[n+1:]}) return params def dates_range(date1, date2): delta = date2 - date1 dates = [] for i in range(delta.days + 1): dates.append(date1 + datetime.timedelta(days=i)) return dates def get_user(url): try: url = int(url) user = get_object_or_404(User, id=url) except ValueError: user = get_object_or_404(User, url=url) return user def get_subscribers_count(): key = 'contact_count' count = cache.get(key) if count is None: count = Contact.objects.valid_subscribers().filter(from_users=False).count() cache.set(key, count, datetime.timedelta(days=1).total_seconds()) return count # def test_get_side_items(): # from city.models import City # activate('ru') # get_side_items('conf', City) def get_side_items(event_type, model): cache_timeout = datetime.timedelta(days=1) lang = get_language() option = '{type}_{model}'.format(type=event_type, model=model.__name__.lower()) key = '{option}_catalog_{lang}'.format(option=option, lang=lang) data = cache.get(key) if data is None: data = [] config = ConfigParser() config.read(settings.INI_CONFIG_PATH) pks = json.loads(config.get('sections', option, '[]')) if pks: qs = model.objects.language().filter(pk__in=pks).values_list('pk', 'name', 'url') raw_data = dict(map(lambda item: (item[0], {'name': item[1], 'url': reverse(option, args=[item[2]])}), qs)) for pk in pks: item = raw_data.get(pk) if item: data.append(item) cache.set(key, data, cache_timeout.total_seconds()) return data