def get_options(self): ''' A helper method to retrieve a list of options in this OptionGroup ''' OPTION_MODEL = getattr(settings, 'SHOP_OPTION_MODEL', 'shop_optiongroups.models.defaults.Option') Option = load_class(OPTION_MODEL, 'SHOP_OPTION_MODEL') options = Option.objects.filter(group=self) return options
def get_cart_item_modelform_class(): """ Return the class of the CartItem ModelForm. The default `shop.forms.CartItemModelForm` can be overridden settings ``SHOP_CART_ITEM_FORM`` parameter in settings """ cls_name = getattr(settings, 'SHOP_CART_ITEM_FORM', 'shop.forms.CartItemModelForm') cls = load_class(cls_name) return cls
class CartItemOption(models.Model): ''' This holds the relation to product options from the cart item. It allows to know which options where selected for what cartItem. Generally, this is used by shop.cart.modifiers.product_options.ProductOptionsModifier ''' cartitem = models.ForeignKey(CartItem) option = models.ForeignKey(load_class(OPTION_MODEL)) class Meta: app_label = 'shop_simplevariations'
def _load_backends_list(self, setting_name, shop_object): """ This actually loads the backends from disk""" result = [] if not getattr(settings, setting_name, None): return result for backend_path in getattr(settings, setting_name, None): # The load_class function takes care of the classloading. It returns # a CLASS, not an INSTANCE! mod_class = load_class(backend_path,setting_name) # Seems like it is a real, valid class - let's instanciate it! # This is where the backends receive their self.shop reference! mod_instance = mod_class(shop=shop_object) self._check_backend_for_validity(mod_instance) # The backend seems valid (nothing raised), let's add it to the # return list. result.append(mod_instance) return result
def _load_backends_list(self, setting_name, shop_object): """ This actually loads the backends from disk""" result = [] if not getattr(settings, setting_name, None): return result for backend_path in getattr(settings, setting_name, None): # The load_class function takes care of the classloading. It returns # a CLASS, not an INSTANCE! mod_class = load_class(backend_path, setting_name) # Seems like it is a real, valid class - let's instanciate it! # This is where the backends receive their self.shop reference! mod_instance = mod_class(shop=shop_object) self._check_backend_for_validity(mod_instance) # The backend seems valid (nothing raised), let's add it to the # return list. result.append(mod_instance) return result
def _load_backends_list(self, setting_name, shop_object): """ This actually loads the backends from disk""" result = [] if not getattr(settings, setting_name, None): return result for backend_path in getattr(settings, setting_name, None): # The load_class function takes care of the classloading. It # returns a CLASS, not an INSTANCE! mod_class = load_class(backend_path, setting_name) # Seems like it is a real, valid class - let's instanciate it! # This is where the backends receive their self.shop reference! mod_instance = mod_class(shop=shop_object) self._check_backend_for_validity(mod_instance) # The backend seems valid (nothing raised), let's add it to the # return list. result.append(mod_instance) return result BACKENDS_POOL = getattr( settings, 'SHOP_BACKENDS_POOL', 'shop.backends_pool.BackendsPool') BackendsPoolClass = load_class(BACKENDS_POOL, 'SHOP_BACKENDS_POOL') backends_pool = BackendsPoolClass()
def test_loader_without_a_name_works_tuple(self): class_to_load = tuple(['shop.tests.util.Mock', 'tests']) res = load_class(class_to_load) self.assertEqual(res, Mock)
from django.db.models import Q from shop.models.cartmodel import CartItem from shop.models.productmodel import Product from shop.util.cart import get_or_create_cart from shop.views.cart import CartDetails from shop.util.loader import load_class from shop_simplevariations.models import TextOption, CartItemTextOption, CartItemOption OPTION_MODEL = getattr(settings, 'SHOP_PRODUCTVARIATION_MODEL', 'shop_simplevariations.models.defaults.Option') Option = load_class(OPTION_MODEL) class SimplevariationCartDetails(CartDetails): """Cart view that answers GET and POSTS request.""" def post(self, *args, **kwargs): #it starts similar to the original post method product_id = self.request.POST['add_item_id'] product_quantity = self.request.POST.get('add_item_quantity') if not product_quantity: product_quantity = 1 product = Product.objects.get(pk=product_id) cart_object = get_or_create_cart(self.request) #now we need to find out which options have been chosen by the user option_ids = [] text_option_ids = {} # A dict of {TextOption.id:CartItemTextOption.text} for key in self.request.POST.keys(): if key.startswith('add_item_option_group_'):
from shop.util.fields import CurrencyField from shop.util.loader import load_class import django #=============================================================================== # Extensibility #=============================================================================== """ This overrides the various models with classes loaded from the corresponding setting if it exists. """ # Order model ORDER_MODEL = getattr(settings, 'SHOP_ORDER_MODEL', 'shop.models.defaults.order.Order') Order = load_class(ORDER_MODEL, 'SHOP_ORDER_MODEL') # Order item model ORDERITEM_MODEL = getattr(settings, 'SHOP_ORDERITEM_MODEL', 'shop.models.defaults.orderitem.OrderItem') OrderItem = load_class(ORDERITEM_MODEL, 'SHOP_ORDERITEM_MODEL') # Order item model ORDEREXTRAINFO_MODEL = getattr(settings, 'SHOP_ORDEREXTRAINFO_MODEL', 'shop.models.defaults.orderextras.OrderExtraInfo') OrderExtraInfo = load_class(ORDEREXTRAINFO_MODEL, 'SHOP_ORDEREXTRAINFO_MODEL') # Order item model EXTRAORDERPRICEFIELD_MODEL = getattr(settings, 'SHOP_EXTRAORDERPRICEFIELD_MODEL', 'shop.models.defaults.orderextras.ExtraOrderPriceField') ExtraOrderPriceField = load_class(EXTRAORDERPRICEFIELD_MODEL, 'SHOP_EXTRAORDERPRICEFIELD_MODEL')
def get_options(self): Option = load_class(OPTION_MODEL, 'SHOP_PRODUCTVARIATION_MODEL') options = Option.objects.filter(group=self) return options
# -*- coding: utf-8 -*- from django.conf import settings from shop.util.loader import load_class #=============================================================================== # Extensibility #=============================================================================== """ This overrides the Product model with the class loaded from the SHOP_PRODUCT_MODEL setting if it exists. """ PRODUCT_MODEL = getattr(settings, 'SHOP_PRODUCT_MODEL', 'shop.models.defaults.product.Product') Product = load_class(PRODUCT_MODEL, 'SHOP_PRODUCT_MODEL')
from django.conf import settings from cartmodel import * # NOQA from ordermodel import * # NOQA from productmodel import * # NOQA from shop.order_signals import * # NOQA from shop.util.loader import load_class # Load the class specified by the user as the Address Model. ShippingAddressModel = load_class( getattr( settings, 'SHOP_SHIPPING_ADDRESS_MODEL', getattr(settings, 'SHOP_ADDRESS_MODEL', 'shop.addressmodel.models.Address'))) BillingAddressModel = load_class( getattr( settings, 'SHOP_BILLING_ADDRESS_MODEL', getattr(settings, 'SHOP_ADDRESS_MODEL', 'shop.addressmodel.models.Address')))
def update(self): self.line_subtotal = self.product.get_price() * self.quantity self.line_total = self.line_subtotal for modifier in cart_modifiers_pool.get_modifiers_list(): # We now loop over every registered price modifier, # most of them will simply add a field to extra_payment_fields modifier.process_cart_item(self) for label, value in self.extra_price_fields: self.line_total = self.line_total + value return self.line_total # =============================================================================== # Extensibility # =============================================================================== """ This overrides the various models with classes loaded from the corresponding setting if it exists. """ # Cart model CART_MODEL = getattr(settings, "SHOP_CART_MODEL", None) if CART_MODEL: Cart = load_class(CART_MODEL, "SHOP_CART_MODEL") # Cart item model CARTITEM_MODEL = getattr(settings, "SHOP_CARTITEM_MODEL", None) if CARTITEM_MODEL: CartItem = load_class(CARTITEM_MODEL, "SHOP_CARTITEM_MODEL")
from django.utils.translation import ugettext_lazy as _ from shop.models.productmodel import Product from shop.util.fields import CurrencyField from shop.util.loader import load_class import django #============================================================================== # Extensibility #============================================================================== # This overrides the various models with classes loaded from the corresponding # setting if it exists. # Order model ORDER_MODEL = getattr(settings, 'SHOP_ORDER_MODEL', 'shop.models.defaults.order.Order') Order = load_class(ORDER_MODEL, 'SHOP_ORDER_MODEL') # Order item model ORDERITEM_MODEL = getattr(settings, 'SHOP_ORDERITEM_MODEL', 'shop.models.defaults.orderitem.OrderItem') OrderItem = load_class(ORDERITEM_MODEL, 'SHOP_ORDERITEM_MODEL') # Now we clear refrence to product from every OrderItem def clear_products(sender, instance, using, **kwargs): for oi in OrderItem.objects.filter(product=instance): oi.product = None oi.save() if LooseVersion(django.get_version()) < LooseVersion('1.3'):
# -*- coding: utf-8 -*- from django.conf import settings from shop.util.loader import load_class TEXTOPTION_MODEL = getattr(settings, 'SHOP_TEXTOPTION_MODEL', 'shop_textoptions.models.defaults.TextOption') TextOption = load_class(TEXTOPTION_MODEL, 'SHOP_TEXTOPTION_MODEL')
from django.conf import settings from shop.util.loader import load_class PAYMENT_BACKEND_MODEL = getattr(settings, 'SHOP_PAYMENTBACKEND_MODEL', 'shop.models.defaults.payment.PaymentBackend') PaymentBackend = load_class(PAYMENT_BACKEND_MODEL, 'SHOP_PAYMENTBACKEND_MODEL')
from django.conf import settings from cartmodel import * # NOQA from ordermodel import * # NOQA from productmodel import * # NOQA from shop.order_signals import * # NOQA from shop.util.loader import load_class # Load the class specified by the user as the Address Model. ShippingAddressModel = load_class(getattr(settings, 'SHOP_SHIPPING_ADDRESS_MODEL', getattr(settings, 'SHOP_ADDRESS_MODEL', 'shop.addressmodel.models.Address'))) BillingAddressModel = load_class(getattr(settings, 'SHOP_BILLING_ADDRESS_MODEL', getattr(settings, 'SHOP_ADDRESS_MODEL', 'shop.addressmodel.models.Address')))
# -*- coding: utf-8 -*- """ This overrides the Category with the class loaded from the CATEGORYPRODUCT_CATEGORY_MODEL setting if it exists. """ from django.conf import settings from shop.util.loader import load_class #============================================================================== # Extensibility #============================================================================== CATEGORY_MODEL = getattr(settings, 'SHOP_CATEGORIES_CATEGORY_MODEL', 'shop_categories.models.defaults.category.default.Category') Category = load_class(CATEGORY_MODEL, 'SHOP_CATEGORIES_CATEGORY_MODEL')
from django.conf import settings from shop.util.loader import load_class from defaults import * from bases import * # Load the class specified by the user as the Option Model. OPTION_MODEL = getattr(settings, 'SHOP_PRODUCTVARIATION_MODEL', 'shop_simplevariations.models.defaults.Option') Option = load_class(OPTION_MODEL, 'SHOP_PRODUCTVARIATION_MODEL')
from django.conf import settings from cartmodel import * from ordermodel import * from productmodel import * from shop.order_signals import * from shop.util.loader import load_class """ Load the class specified by the user as the Address Model. """ AddressModel = load_class(getattr(settings, 'SHOP_ADDRESS_MODEL', 'shop.addressmodel.models.Address'))
def test_loader_without_a_name_works(self): class_to_load = 'shop.tests.util.Mock' res = load_class(class_to_load) self.assertEqual(res, Mock)
from django.utils.translation import ugettext_lazy as _ from shop.models.productmodel import Product from shop.util.fields import CurrencyField from shop.util.loader import load_class import django # ============================================================================== # Extensibility # ============================================================================== # This overrides the various models with classes loaded from the corresponding # setting if it exists. # Order model ORDER_MODEL = getattr(settings, "SHOP_ORDER_MODEL", "shop.models.defaults.order.Order") Order = load_class(ORDER_MODEL, "SHOP_ORDER_MODEL") # Order item model ORDERITEM_MODEL = getattr(settings, "SHOP_ORDERITEM_MODEL", "shop.models.defaults.orderitem.OrderItem") OrderItem = load_class(ORDERITEM_MODEL, "SHOP_ORDERITEM_MODEL") # Now we clear refrence to product from every OrderItem def clear_products(sender, instance, using, **kwargs): for oi in OrderItem.objects.filter(product=instance): oi.product = None oi.save() if LooseVersion(django.get_version()) < LooseVersion("1.3"): pre_delete.connect(clear_products, sender=Product)
# -*- coding: utf-8 -*- from django.conf import settings from shop.util.loader import load_class OPTIONGROUP_MODEL = getattr(settings, 'SHOP_OPTIONGROUP_MODEL', 'shop_optiongroups.models.defaults.OptionGroup') OptionGroup = load_class(OPTIONGROUP_MODEL, 'SHOP_OPTIONGROUP_MODEL') OPTION_MODEL = getattr(settings, 'SHOP_OPTION_MODEL', 'shop_optiongroups.models.defaults.Option') Option = load_class(OPTION_MODEL, 'SHOP_OPTION_MODEL')
# -*- coding: utf-8 -*- """ This overrides the Category with the class loaded from the CATEGORYPRODUCT_CATEGORY_MODEL setting if it exists. """ from django.conf import settings from shop.util.loader import load_class #============================================================================== # Extensibility #============================================================================== CATEGORY_MODEL = getattr(settings, 'CATEGORYPRODUCT_CATEGORY_MODEL', 'category_product.models.defaults.productcategory.Category') Category = load_class(CATEGORY_MODEL, 'CATEGORYPRODUCT_CATEGORY_MODEL')
# -*- coding: utf-8 -*- """ This overrides the various models with classes loaded from the corresponding setting if it exists. """ from django.conf import settings from shop.util.loader import load_class #============================================================================== # Extensibility #============================================================================== # Cart model CART_MODEL = getattr(settings, 'SHOP_CART_MODEL', 'shop.models.defaults.cart.Cart') Cart = load_class(CART_MODEL, 'SHOP_CART_MODEL') # Cart item model CARTITEM_MODEL = getattr(settings, 'SHOP_CARTITEM_MODEL', 'shop.models.defaults.cartitem.CartItem') CartItem = load_class(CARTITEM_MODEL, 'SHOP_CARTITEM_MODEL')
# -*- coding: utf-8 -*- """ This overrides the Category with the class loaded from the CATEGORYPRODUCT_CATEGORY_MODEL setting if it exists. """ from django.conf import settings from shop.util.loader import load_class #============================================================================== # Extensibility #============================================================================== CATEGORY_MODEL = getattr( settings, 'CATEGORYPRODUCT_CATEGORY_MODEL', 'category_product.models.defaults.productcategory.Category') Category = load_class(CATEGORY_MODEL, 'CATEGORYPRODUCT_CATEGORY_MODEL')
from shop.models.productmodel import Product from shop.util.fields import CurrencyField from shop.util.loader import load_class import django #============================================================================== # Extensibility #============================================================================== # This overrides the various models with classes loaded from the corresponding # setting if it exists. # Order model ORDER_MODEL = getattr(settings, 'SHOP_ORDER_MODEL', 'shop.models.defaults.order.Order') Order = load_class(ORDER_MODEL, 'SHOP_ORDER_MODEL') # Order item model ORDERITEM_MODEL = getattr(settings, 'SHOP_ORDERITEM_MODEL', 'shop.models.defaults.orderitem.OrderItem') OrderItem = load_class(ORDERITEM_MODEL, 'SHOP_ORDERITEM_MODEL') # Now we clear refrence to product from every OrderItem def clear_products(sender, instance, using, **kwargs): for oi in OrderItem.objects.filter(product=instance): oi.product = None oi.save() if LooseVersion(django.get_version()) < LooseVersion('1.3'): pre_delete.connect(clear_products, sender=Product)