def _get_page_by_untyped_arg(page_lookup, request, site_id): """ The `page_lookup` argument can be of any of the following types: - Integer: interpreted as `pk` of the desired page - String: interpreted as `reverse_id` of the desired page - `dict`: a dictionary containing keyword arguments to find the desired page (for instance: `{'pk': 1}`) - `Page`: you can also pass a Page object directly, in which case there will be no database lookup. - `None`: the current page will be used """ if page_lookup is None: return request.current_page if isinstance(page_lookup, Page): if request.current_page and request.current_page.pk == page_lookup.pk: return request.current_page return page_lookup if isinstance(page_lookup, six.string_types): page_lookup = {'reverse_id': page_lookup} elif isinstance(page_lookup, six.integer_types): page_lookup = {'pk': page_lookup} elif not isinstance(page_lookup, dict): raise TypeError('The page_lookup argument can be either a Dictionary, Integer, Page, or String.') page_lookup.update({'site': site_id}) try: if 'pk' in page_lookup: page = Page.objects.all().get(**page_lookup) if request and use_draft(request): if page.publisher_is_draft: return page else: return page.publisher_draft else: if page.publisher_is_draft: return page.publisher_public else: return page else: return get_page_queryset(request).get(**page_lookup) except Page.DoesNotExist: site = Site.objects.get_current() subject = _('Page not found on %(domain)s') % {'domain': site.domain} body = _("A template tag couldn't find the page with lookup arguments `%(page_lookup)s\n`. " "The URL of the request was: http://%(host)s%(path)s") \ % {'page_lookup': repr(page_lookup), 'host': site.domain, 'path': request.path_info} if settings.DEBUG: raise Page.DoesNotExist(body) else: mw = get_middleware() if getattr(settings, 'SEND_BROKEN_LINK_EMAILS', False): mail_managers(subject, body, fail_silently=True) elif 'django.middleware.common.BrokenLinkEmailsMiddleware' in mw: middle = BrokenLinkEmailsMiddleware() domain = request.get_host() path = request.get_full_path() referer = force_text(request.META.get('HTTP_REFERER', ''), errors='replace') if not middle.is_ignorable_request(request, path, domain, referer): mail_managers(subject, body, fail_silently=True) return None
def _get_article_by_untyped_arg(article_lookup, request, site_id): """ The `article_lookup` argument can be of any of the following types: - Integer: interpreted as `pk` of the desired article - `dict`: a dictionary containing keyword arguments to find the desired article (for instance: `{'pk': 1}`) - `Article`: you can also pass an Article object directly, in which case there will be no database lookup. - `None`: the current article will be used """ if article_lookup is None: return request.current_article if isinstance(article_lookup, Article): if hasattr(request, 'current_article') and request.current_article.pk == article_lookup.pk: return request.current_article return article_lookup if isinstance(article_lookup, six.integer_types): article_lookup = {'pk': article_lookup} elif not isinstance(article_lookup, dict): raise TypeError('The article_lookup argument can be either a Dictionary, Integer, or Article.') article_lookup.update({'site': site_id}) try: article = Article.objects.all().get(**article_lookup) if request and use_draft(request): if article.publisher_is_draft: return article else: return article.publisher_draft else: if article.publisher_is_draft: return article.publisher_public else: return article except Article.DoesNotExist: site = Site.objects.get_current() subject = _('Article not found on %(domain)s') % {'domain': site.domain} body = ( _("A template tag couldn't find the article with lookup arguments `%(article_lookup)s\n`. " "The URL of the request was: http://%(host)s%(path)s") % {'article_lookup': repr(article_lookup), 'host': site.domain, 'path': request.path_info} ) if settings.DEBUG: raise Article.DoesNotExist(body) else: mw = get_middleware() if getattr(settings, 'SEND_BROKEN_LINK_EMAILS', False): mail_managers(subject, body, fail_silently=True) elif 'django.middleware.common.BrokenLinkEmailsMiddleware' in mw: middle = BrokenLinkEmailsMiddleware() domain = request.get_host() path = request.get_full_path() referer = force_text(request.META.get('HTTP_REFERER', ''), errors='replace') if not middle.is_ignorable_request(request, path, domain, referer): mail_managers(subject, body, fail_silently=True) return None
def _get_page_by_untyped_arg(page_lookup, request, site_id): """ The `page_lookup` argument can be of any of the following types: - Integer: interpreted as `pk` of the desired page - String: interpreted as `reverse_id` of the desired page - `dict`: a dictionary containing keyword arguments to find the desired page (for instance: `{'pk': 1}`) - `Page`: you can also pass a Page object directly, in which case there will be no database lookup. - `None`: the current page will be used """ if page_lookup is None: return request.current_page if isinstance(page_lookup, Page): if request.current_page and request.current_page.pk == page_lookup.pk: return request.current_page return page_lookup if isinstance(page_lookup, six.string_types): page_lookup = {'reverse_id': page_lookup} elif isinstance(page_lookup, six.integer_types): page_lookup = {'pk': page_lookup} elif not isinstance(page_lookup, dict): raise TypeError( 'The page_lookup argument can be either a Dictionary, Integer, Page, or String.' ) site = Site.objects._get_site_by_id(site_id) try: if 'pk' in page_lookup: page = Page.objects.select_related('node').get(**page_lookup) if request and use_draft(request): if page.publisher_is_draft: return page else: return page.publisher_draft else: if page.publisher_is_draft: return page.publisher_public else: return page else: pages = get_page_queryset(site, draft=use_draft(request)) return pages.select_related('node').get(**page_lookup) except Page.DoesNotExist: subject = _('Page not found on %(domain)s') % {'domain': site.domain} body = _("A template tag couldn't find the page with lookup arguments `%(page_lookup)s\n`. " "The URL of the request was: http://%(host)s%(path)s") \ % {'page_lookup': repr(page_lookup), 'host': site.domain, 'path': request.path_info} if settings.DEBUG: raise Page.DoesNotExist(body) else: mw = get_middleware() if getattr(settings, 'SEND_BROKEN_LINK_EMAILS', False): mail_managers(subject, body, fail_silently=True) elif 'django.middleware.common.BrokenLinkEmailsMiddleware' in mw: middle = BrokenLinkEmailsMiddleware() domain = request.get_host() path = request.get_full_path() referer = force_text(request.META.get('HTTP_REFERER', ''), errors='replace') if not middle.is_ignorable_request(request, path, domain, referer): mail_managers(subject, body, fail_silently=True) return None