Source code for shuup.testing.utils

# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2021, Shuup Commerce Inc. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
import inspect
from django.conf import settings
from django.core.exceptions import MiddlewareNotUsed
from django.utils.module_loading import import_string
from django.utils.translation import activate, get_language

from shuup.admin import shop_provider
from shuup.utils.django_compat import RegexPattern, URLResolver, get_middleware_classes, set_urlconf


[docs]def apply_request_middleware(request, **attrs): """ Apply all the `process_request` capable middleware configured into the given request. :param request: The request to massage. :type request: django.http.HttpRequest :param attrs: Additional attributes to set after massage. :type attrs: dict :return: The same request, massaged in-place. :rtype: django.http.HttpRequest """ for middleware_path in get_middleware_classes(): mw_class = import_string(middleware_path) current_language = get_language() try: mw_instance = mw_class() except MiddlewareNotUsed: continue for key, value in attrs.items(): setattr(request, key, value) if hasattr(mw_instance, "process_request"): mw_instance.process_request(request) activate(current_language) assert request.shop if not attrs.get("skip_session", False): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) if mod.__name__.startswith("shuup_tests.admin"): shop_provider.set_shop(request, request.shop) return request
[docs]def apply_view_middleware(request): """ Apply all the `process_view` capable middleware configured into the given request. The logic is roughly copied from django.core.handlers.base.BaseHandler.get_response :param request: The request to massage. :type request: django.http.HttpRequest :return: The same request, massaged in-place. :rtype: django.http.HttpRequest """ urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF) set_urlconf(urlconf) resolver = URLResolver(RegexPattern(r"^/"), urlconf) resolver_match = resolver.resolve(request.path_info) callback, callback_args, callback_kwargs = resolver_match request.resolver_match = resolver_match for middleware_path in get_middleware_classes(): mw_class = import_string(middleware_path) try: mw_instance = mw_class() except MiddlewareNotUsed: continue if hasattr(mw_instance, "process_view"): mw_instance.process_view(request, callback, callback_args, callback_kwargs) return request
[docs]def apply_all_middleware(request, **attrs): """ Apply all the `process_request` and `process_view` capable middleware configured into the given request. :param request: The request to massage. :type request: django.http.HttpRequest :param attrs: Additional attributes to set to the request after massage. :type attrs: dict :return: The same request, massaged in-place. :rtype: django.http.HttpRequest """ request = apply_view_middleware(apply_request_middleware(request)) for key, value in attrs.items(): setattr(request, key, value) return request