Source code for lotus.managers

from django.db import models

from .lookups import LookupBuilder


[docs] class BasePublishedQuerySet(LookupBuilder, models.QuerySet): """ Base queryset for publication methods. """
[docs] def get_published(self, target_date=None, language=None, private=None, prefix=None): """ Return a queryset with published entries selected. Keyword Arguments: target_date (datetime.datetime): Datetime timezone aware for publication target, if empty default value will be the current datetime. language (string): Language code to filter on. If empty, language is not filtered. private (boolean): Either True or False to set lookup for 'private' field. If not given, private field will not be part of built lookups. prefix (string): Prefix to append on each lookup expression on publication dates fields (start/end). Commonly used to filter from a relation like ``author__``. Default is empty. Returns: queryset: Queryset to filter published entries. """ return self.filter( *self.build_publication_conditions( target_date=target_date, language=language, private=private, prefix=prefix ) )
[docs] def get_unpublished(self, target_date=None, language=None, prefix=None): """ Return a queryset with unpublished entries selected. Keyword Arguments: target_date (datetime.datetime): Datetime timezone aware for publication target, if empty default value will be the current datetime. language (string): Language code to filter on. If empty, language is not filtered. prefix (string): Prefix to append on each lookup expression on publication dates fields (start/end). Commonly used to filter from a relation like ``author__``. Default is empty. Returns: queryset: Queryset to filter published entries. """ return self.exclude( *self.build_publication_conditions( target_date=target_date, language=language, prefix=prefix ) )
[docs] class BaseTranslatedQuerySet(LookupBuilder, models.QuerySet): """ Base queryset for translation methods only. """
[docs] def get_for_lang(self, language, prefix=None): """ Return a queryset with unpublished entries selected. Arguments: language (string): Language code to filter on. Keyword Arguments: prefix (string): Prefix to append on each lookup expression. Commonly used to filterfrom a relation. Default is empty. Returns: queryset: Queryset to filter published entries. """ return self.filter( *self.build_language_conditions(language, prefix=prefix) )
[docs] def get_siblings(self, source): """ For given object, return the sibling objects which can be the original object and translation objects. Arguments: source (object): Object to use for its id and original_id used in queryset lookup. Returns: queryset: Queryset with sibling articles. For an original article it will be all of its translations. For a translation article it will be its original article and all other original's translation articles. """ # Translations use complex lookups to regroup original and translations. return self.filter( *self.build_siblings_conditions(source) )
[docs] class ArticleQuerySet(BasePublishedQuerySet, BaseTranslatedQuerySet): """ Article queryset mix publication and translation QuerySet classes. """ pass
[docs] class CategoryManager(models.Manager): """ Categroy objects manager. """
[docs] def get_queryset(self): return BaseTranslatedQuerySet(self.model, using=self._db)
def get_for_lang(self, language): return self.get_queryset().get_for_lang(language) def get_siblings(self, source): return self.get_queryset().get_siblings(source)
[docs] class ArticleManager(models.Manager): """ Article objects manager. """
[docs] def get_queryset(self): return ArticleQuerySet(self.model, using=self._db)
def get_published(self, target_date=None, language=None, private=None): return self.get_queryset().get_published( target_date=target_date, language=language, private=private, ) def get_unpublished(self, target_date=None, language=None): return self.get_queryset().get_unpublished( target_date=target_date, language=language, ) def get_for_lang(self, language): return self.get_queryset().get_for_lang(language) def get_siblings(self, source): return self.get_queryset().get_siblings(source)
[docs] class AuthorManager(models.Manager): """ Author objects manager. Use the ArticleQuerySet class to inherit article queryset behaviors. """
[docs] def get_queryset(self): return ArticleQuerySet(self.model, using=self._db)
[docs] def get_active(self, target_date=None, language=None, private=None): """ Return distinct authors which have published articles. """ q = self.get_queryset() q = q.get_published( target_date=target_date, language=language, private=private, prefix="articles__" ) return q.distinct()