You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

157 lines
6.5 KiB

import datetime
from operator import attrgetter
from django.utils import translation
from django.core.cache import cache
from hvad.models import TranslationManager
class ThemeActiveManager(TranslationManager):
"""
manager works only with active themes
models where theme defines activity:
- exposition
"""
cache_time = 600
def all(self):
lang = translation.get_language()
qs = super(ThemeActiveManager, self).select_related('exposition_themes').\
filter(exposition_themes__theme__isnull=False, translations__language_code=lang, )\
.order_by('translations__name').distinct()
return qs
def expo_main_page(self):
Model = self.model
return list(self.language().filter(types=Model.types.exposition)[:6])
def conference_main_page(self):
Model = self.model
return list(self.language().filter(types=Model.types.conference)[:6])
def expo_themes(self, cached=True):
lang = translation.get_language()
key = 'used_expo_themes_%s'%lang
cached_themes = cache.get(key)
if cached and cached_themes:
return cached_themes
else:
from exposition.models import Exposition
themes_id = [item['theme'] for item in Exposition.objects.values('theme').distinct()]
themes = list(self.language().filter(id__in=themes_id))
themes = sorted(themes, key=attrgetter('name'))
cache.set(key, themes, 300)
return themes
def expo_themes_with_count(self, cached=True):
lang = translation.get_language()
key = 'used_expo_themes_count_%s'%lang
cached_themes = cache.get(key)
if cached and cached_themes:
return cached_themes
else:
from exposition.models import Exposition
now = datetime.datetime.now().date()
# id of unique cities
themes_id = [item['theme'] for item in Exposition.objects.filter(is_published=True, data_end__gte=now).values('theme').distinct()]
#themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql)))
themes = set(list(self.language().filter(id__in=themes_id)))
themes = sorted(themes, key=attrgetter('name'))
cache.set(key, themes, self.cache_time)
return themes
def conference_themes_with_count(self, cached=True):
lang = translation.get_language()
key = 'used_conference_themes_count_%s'%lang
cached_themes = cache.get(key)
if cached and cached_themes:
return cached_themes
else:
from conference.models import Conference
now = datetime.datetime.now().date()
# id of unique cities
themes_id = [item['theme'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('theme').distinct()]
#themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql)))
themes = set(list(self.language().filter(id__in=themes_id)))
themes = sorted(themes, key=attrgetter('name'))
cache.set(key, themes, self.cache_time)
return themes
class TagActiveManager(TranslationManager):
"""
manager works only with active themes
models where theme defines activity:
- exposition
"""
cache_time = 600
def all(self):
lang = translation.get_language()
qs = super(TagActiveManager, self).select_related('exposition_tags').\
filter(exposition_tags__tag__isnull=False, translations__language_code=lang, )\
.order_by('translations__name').distinct()
return qs
def expo_tag(self):
lang = translation.get_language()
key = 'used_expo_tags_%s'%lang
cached_tags = cache.get(key)
if cached_tags:
return cached_tags
else:
from exposition.models import Exposition
tag_id = [item['tag'] for item in Exposition.enable.upcoming().values('tag').distinct()]
tags = list(self.language().filter(id__in=tag_id))
cache.set(key, tags, 300)
return tags
def conference_tags(self, cached=True):
lang = translation.get_language()
key = 'used_conference_tags_%s'%lang
cached_tags = cache.get(key)
if cached and cached_tags:
return cached_tags
else:
from conference.models import Conference
now = datetime.datetime.now().date()
# id of unique cities
tag_id = [item['tag'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()]
#themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql)))
tags = set(list(self.language().filter(id__in=tag_id)))
tags = sorted(tags, key=attrgetter('name'))
cache.set(key, tags, self.cache_time)
return tags
def expo_themes_with_count(self, cached=True):
lang = translation.get_language()
key = 'used_expo_tags_count_%s'%lang
cached_tags = cache.get(key)
if cached and cached_tags:
return cached_tags
else:
from exposition.models import Exposition
now = datetime.datetime.now().date()
# id of unique cities
tags_id = [item['tag'] for item in Exposition.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()]
#themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql)))
tags = set(list(self.language().filter(id__in=tags_id)))
tags = sorted(tags, key=attrgetter('name'))
cache.set(key, tags, self.cache_time)
return tags
def conference_themes_with_count(self, cached=True):
lang = translation.get_language()
key = 'used_conference_tags_count_%s'%lang
cached_tags = cache.get(key)
if cached and cached_tags:
return cached_tags
else:
from conference.models import Conference
now = datetime.datetime.now().date()
# id of unique cities
tags_id = [item['tag'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()]
#themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql)))
tags = set(list(self.language().filter(id__in=tags_id)))
tags = sorted(tags, key=attrgetter('name'))
cache.set(key, tags, self.cache_time)
return tags