from decimal import Decimal
from typing import List, TypeVar
from django.http import HttpRequest
from salesman.conf import app_settings
from .models import Basket, BasketItem
from .serializers import ExtraRowSerializer
BasketOrItem = TypeVar('BasketOrItem', Basket, BasketItem)
[docs]class BasketModifier(object):
"""
Basket modifier base, all modifiers defined
in ``SALESMAN_BASKET_MODIFIERS`` must extend this class.
"""
identifier = None
[docs] def process_item(self, item: BasketItem, request: HttpRequest) -> None:
"""
Process item. Add extra row to item using ``self.add_extra_row()`` method.
Args:
item (BasketItem): Basket item instance
request (HttpRequest): Django request
"""
[docs] def process_basket(self, basket: Basket, request: HttpRequest) -> None:
"""
Process basket. Add extra row to bakset using ``self.add_extra_row()`` method.
Args:
basket (Basket): Basket instance
request (HttpRequest): Django request
"""
[docs]class BasketModifiersPool(object):
"""
Pool for storing modifier instances.
"""
_modifiers = None
[docs] def get_modifiers(self) -> List[BasketModifier]:
"""
Returns modifier instances.
Returns:
list: Modifier instances
"""
if not self._modifiers:
self._modifiers = [M() for M in app_settings.SALESMAN_BASKET_MODIFIERS]
return self._modifiers
basket_modifiers_pool = BasketModifiersPool()