diff options
Diffstat (limited to 'chimere/managers.py')
-rw-r--r-- | chimere/managers.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/chimere/managers.py b/chimere/managers.py new file mode 100644 index 0000000..7aec72f --- /dev/null +++ b/chimere/managers.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +import sys + +from django.contrib.gis.db import models + +from logging import getLogger +from datetime import datetime, date, timedelta + +from django.conf import settings + +# BASE +class BaseGeoQuerySet(models.query.QuerySet): + """ + Custom queryset for Geo objects. + """ + def available(self): + """ Chainable filter to retrieve only available elements. """ + return self.filter(status="A") + + def submited(self): + """ Chainable filter to retrieve only submited elements. """ + return self.filter(status="A") + + def active(self): + """ + Returns objects where within the active date period of events. + """ + # Fields are not set in the model in this case + if not settings.CHIMERE_DAYS_BEFORE_EVENT: + return self + today = date.today() + after = today + timedelta(settings.CHIMERE_DAYS_BEFORE_EVENT) + return self.filter(end_date__gte=today, start_date__lte=after) + +class BaseGeoManager(models.GeoManager): + """ + Custom base manager for Geo objects. + """ + def get_query_set(self): + """ Use our custom QuerySet. """ + return BaseGeoQuerySet(self.model) + + # Methods defined in the queryset that we also want exposed in the + # It would be nice to implement it with a magic method instead, later :) + def available(self): + return self.get_query_set().available() + + def submited(self): + return self.get_query_set().submited() + + def active(self): + return self.get_query_set().active() |