Source code for shuup.core.basket

# -*- 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.
from shuup.utils.importing import cached_load


[docs]def get_basket_order_creator(request=None): return cached_load("SHUUP_BASKET_ORDER_CREATOR_SPEC")(request=request)
[docs]def get_basket_view(): view = cached_load("SHUUP_BASKET_VIEW_SPEC") if hasattr(view, "as_view"): # pragma: no branch view = view.as_view() return view
[docs]def get_basket_command_dispatcher(request): """ :type request: django.http.request.HttpRequest :rtype: shuup.front.basket.command_dispatcher.BasketCommandDispatcher """ return cached_load("SHUUP_BASKET_COMMAND_DISPATCHER_SPEC")(request=request)
[docs]def get_basket(request, basket_name="basket", basket_class=None): """ Get the basket cached in the request or create and cache a new one. The basket_class is used when creating a new basket, i.e. when the request doesn't already have a basket cached with the given name. If no basket_class is given, will load a class using the `~shuup.front.settings.SHUUP_BASKET_CLASS_SPEC` setting. :type request: django.http.request.HttpRequest :type basket_name: str :type basket_class: type|None :rtype: shuup.front.basket.objects.BaseBasket """ basket = _get_basket_from_request(request, basket_name) if basket: return basket if basket_class is None: basket_class = cached_load("SHUUP_BASKET_CLASS_SPEC") basket = basket_class(request, basket_name=basket_name) _save_basket_to_request(request, basket_name, basket) return basket
def _get_basket_from_request(request, basket_name): if basket_name == "basket": return getattr(request, "basket", None) else: return getattr(request, "baskets", {}).get(basket_name) def _save_basket_to_request(request, basket_name, basket): if basket_name == "basket": request.basket = basket else: if not hasattr(request, "baskets"): request.baskets = {} request.baskets[basket_name] = basket