from django.views import generic from django.db.models import get_model from django.http import HttpResponseRedirect from django.contrib import messages from django.core.urlresolvers import reverse from oscar.apps.dashboard.catalogue import forms from oscar.core.loading import get_classes ProductForm, StockRecordForm, StockAlertSearchForm, ProductCategoryFormSet, ProductImageFormSet = get_classes( 'dashboard.catalogue.forms', ('ProductForm', 'StockRecordForm', 'StockAlertSearchForm', 'ProductCategoryFormSet', 'ProductImageFormSet')) Product = get_model('catalogue', 'Product') ProductCategory = get_model('catalogue', 'ProductCategory') ProductClass = get_model('catalogue', 'ProductClass') StockRecord = get_model('partner', 'StockRecord') StockAlert = get_model('partner', 'StockAlert') class ProductListView(generic.ListView): template_name = 'dashboard/catalogue/product_list.html' model = Product context_object_name = 'products' form_class = forms.ProductSearchForm base_description = 'Products' paginate_by = 20 def get_context_data(self, **kwargs): ctx = super(ProductListView, self).get_context_data(**kwargs) ctx['product_classes'] = ProductClass.objects.all()
def test_load_formsets_mixed_destination(self): BaseBasketLineFormSet, BasketLineForm = get_classes( 'basket.forms', ('BaseBasketLineFormSet', 'BasketLineForm')) self.assertEqual('oscar.apps.basket.formsets', BaseBasketLineFormSet.__module__) self.assertEqual('oscar.apps.basket.forms', BasketLineForm.__module__) StockRecordForm, StockRecordFormSet = get_classes( 'dashboard.catalogue.forms', ('StockRecordForm', 'StockRecordFormSet') ) self.assertEqual('oscar.apps.dashboard.catalogue.forms', StockRecordForm.__module__) OrderedProductForm, OrderedProductFormSet = get_classes( 'dashboard.promotions.forms', ('OrderedProductForm', 'OrderedProductFormSet') ) self.assertEqual('oscar.apps.dashboard.promotions.forms', OrderedProductForm.__module__) self.assertTrue(isinstance(OrderedProductFormSet().forms[0], OrderedProductForm)) LineFormset, WishListLineForm = get_classes('wishlists.forms', ('LineFormset', 'WishListLineForm')) self.assertEqual('oscar.apps.wishlists.forms', WishListLineForm.__module__) self.assertTrue(isinstance(LineFormset(instance=self.wishlist).forms[0], WishListLineForm))
def test_loading_classes_with_root_app(self): import tests._site.shipping path = dirname(dirname(tests._site.shipping.__file__)) with temporary_python_path([path]): self.installed_apps[ self.installed_apps.index('tests._site.shipping')] = 'shipping' with override_settings(INSTALLED_APPS=self.installed_apps): (Free,) = get_classes('shipping.methods', ('Free',)) self.assertEqual('shipping.methods', Free.__module__)
from oscar.core.loading import get_class, get_classes OrderReportGenerator = get_class('order.reports', 'OrderReportGenerator') ProductReportGenerator, UserReportGenerator \ = get_classes('analytics.reports', ['ProductReportGenerator', 'UserReportGenerator']) OpenBasketReportGenerator, SubmittedBasketReportGenerator \ = get_classes('basket.reports', ['OpenBasketReportGenerator', 'SubmittedBasketReportGenerator']) OfferReportGenerator = get_class('offer.reports', 'OfferReportGenerator') VoucherReportGenerator = get_class('voucher.reports', 'VoucherReportGenerator') class GeneratorRepository(object): generators = [OrderReportGenerator, ProductReportGenerator, UserReportGenerator, OpenBasketReportGenerator, SubmittedBasketReportGenerator, VoucherReportGenerator, OfferReportGenerator] def get_report_generators(self): return self.generators def get_generator(self, code): for generator in self.generators: if generator.code == code: return generator return None
import os from datetime import datetime from decimal import Decimal as D from django.db.transaction import atomic from django.utils.translation import ugettext_lazy as _ from oscar.apps.catalogue.categories import create_from_breadcrumbs from oscar.core.compat import UnicodeCSVReader from oscar.core.loading import get_class, get_classes ImportingError = get_class('partner.exceptions', 'ImportingError') Partner, StockRecord = get_classes('partner.models', ['Partner', 'StockRecord']) ProductClass, Product, Category, ProductCategory = get_classes( 'catalogue.models', ('ProductClass', 'Product', 'Category', 'ProductCategory')) class CatalogueImporter(object): """ CSV product importer used to built sandbox. Might not work very well for anything else. """ _flush = False def __init__(self, logger, delimiter=",", flush=False): self.logger = logger self._delimiter = delimiter self._flush = flush
from django.core.urlresolvers import reverse, resolve from django.http import HttpResponseRedirect, Http404, HttpResponse from django.views.generic import FormView, View from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist from django import shortcuts from extra_views import ModelFormSetView from oscar.core import ajax from oscar.apps.basket import signals from oscar.core.loading import get_class, get_classes, get_model Applicator = get_class('offer.utils', 'Applicator') (BasketLineFormSet, BasketLineForm, AddToBasketForm, BasketVoucherForm, SavedLineFormSet, SavedLineForm) \ = get_classes('basket.forms', ('BasketLineFormSet', 'BasketLineForm', 'AddToBasketForm', 'BasketVoucherForm', 'SavedLineFormSet', 'SavedLineForm')) Repository = get_class('shipping.repository', ('Repository')) OrderTotalCalculator = get_class( 'checkout.calculators', 'OrderTotalCalculator') def get_messages(basket, offers_before, offers_after, include_buttons=True): """ Return the messages about offer changes """ # Look for changes in offers offers_lost = set(offers_before.keys()).difference( set(offers_after.keys())) offers_gained = set(offers_after.keys()).difference(
ObjectDoesNotExist, MultipleObjectsReturned, PermissionDenied) from django.core.urlresolvers import reverse from django.db.models import get_model from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.views.generic import (ListView, CreateView, UpdateView, DeleteView, View, FormView) from django.utils.translation import ugettext_lazy as _ from oscar.apps.customer.mixins import PageTitleMixin from oscar.core.loading import get_classes WishList = get_model('wishlists', 'WishList') Line = get_model('wishlists', 'Line') Product = get_model('catalogue', 'Product') WishListForm, LineFormset = get_classes('wishlists.forms', ['WishListForm', 'LineFormset']) class WishListListView(PageTitleMixin, ListView): context_object_name = active_tab = "wishlists" template_name = 'customer/wishlists/wishlists_list.html' page_title = _('Wish Lists') def get_queryset(self): return self.request.user.wishlists.all() class WishListDetailView(PageTitleMixin, FormView): """ This view acts as a DetailView for a wish list and allows updating the quantities of products.
import logging from django.http import Http404, HttpResponseRedirect, HttpResponseBadRequest from django.core.urlresolvers import reverse from django.contrib import messages from django.contrib.auth import login from django.db.models import get_model from django.utils.translation import ugettext as _ from django.views.generic import DetailView, TemplateView, FormView, \ DeleteView, UpdateView, CreateView from oscar.apps.shipping.methods import NoShippingRequired from oscar.core.loading import get_class, get_classes ShippingAddressForm, GatewayForm = get_classes('checkout.forms', ['ShippingAddressForm', 'GatewayForm']) OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator') CheckoutSessionData = get_class('checkout.utils', 'CheckoutSessionData') pre_payment, post_payment = get_classes('checkout.signals', ['pre_payment', 'post_payment']) OrderNumberGenerator, OrderCreator = get_classes('order.utils', ['OrderNumberGenerator', 'OrderCreator']) UserAddressForm = get_class('address.forms', 'UserAddressForm') Repository = get_class('shipping.repository', 'Repository') AccountAuthView = get_class('customer.views', 'AccountAuthView') RedirectRequired, UnableToTakePayment, PaymentError = get_classes( 'payment.exceptions', ['RedirectRequired', 'UnableToTakePayment', 'PaymentError']) UnableToPlaceOrder = get_class('order.exceptions', 'UnableToPlaceOrder') OrderPlacementMixin = get_class('checkout.mixins', 'OrderPlacementMixin') CheckoutSessionMixin = get_class('checkout.session', 'CheckoutSessionMixin') Order = get_model('order', 'Order') ShippingAddress = get_model('order', 'ShippingAddress') CommunicationEvent = get_model('order', 'CommunicationEvent')
from oscar.core.loading import get_model from django.http import HttpResponseRedirect, Http404, HttpResponse from django.views.generic import FormView, View from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist from extra_views import ModelFormSetView from oscar.core.compat import urlparse from oscar.core import ajax from oscar.apps.basket import signals from oscar.core.loading import get_class, get_classes Applicator = get_class('offer.utils', 'Applicator') (BasketLineFormSet, BasketLineForm, AddToBasketForm, BasketVoucherForm, SavedLineFormSet, SavedLineForm, ProductSelectionForm) \ = get_classes('basket.forms', ('BasketLineFormSet', 'BasketLineForm', 'AddToBasketForm', 'BasketVoucherForm', 'SavedLineFormSet', 'SavedLineForm', 'ProductSelectionForm')) Repository = get_class('shipping.repository', ('Repository')) OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator') def get_messages(basket, offers_before, offers_after, include_buttons=True): """ Return the messages about offer changes """ # Look for changes in offers offers_lost = set(offers_before.keys()).difference(set( offers_after.keys())) offers_gained = set(offers_after.keys()).difference( set(offers_before.keys()))
from django.dispatch import receiver from django.db.models.signals import post_save from oscar.core.loading import get_classes StockRecord, StockAlert = get_classes('partner.models', ('StockRecord', 'StockAlert')) @receiver(post_save, sender=StockRecord) def update_stock_alerts(sender, instance, created, **kwargs): """ Update low-stock alerts """ if created or kwargs.get('raw', False): return stockrecord = instance try: alert = StockAlert.objects.get(stockrecord=stockrecord, status=StockAlert.OPEN) except StockAlert.DoesNotExist: alert = None if stockrecord.is_below_threshold and not alert: StockAlert.objects.create(stockrecord=stockrecord, threshold=stockrecord.low_stock_threshold) elif not stockrecord.is_below_threshold and alert: alert.close()
from __future__ import unicode_literals from decimal import Decimal as D from django.test import TestCase from django.test.client import Client from django.urls import reverse from django.utils.encoding import force_text from mock import Mock, patch from oscar.apps.basket.models import Basket from oscar.apps.order.models import Order from oscar.core.loading import get_classes from oscar.test.factories import create_product from purl import URL Partner, StockRecord = get_classes('partner.models', ('Partner', 'StockRecord')) (ProductClass, Product, ProductAttribute, ProductAttributeValue) = get_classes( 'catalogue.models', ('ProductClass', 'Product', 'ProductAttribute', 'ProductAttributeValue')) class MockedPayPalTests(TestCase): fixtures = ['countries.json'] response_body = None def setUp(self): self.client = Client() with patch('requests.post') as post: self.patch_http_post(post) self.perform_action()
from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ from django.template.loader import render_to_string from django.views import generic from oscar.apps.customer.utils import normalise_email from oscar.apps.dashboard.partners.forms import UserEmailForm, ExistingUserForm, NewUserForm from oscar.core.loading import get_classes from oscar.core.compat import get_user_model from oscar.views import sort_queryset User = get_user_model() Partner = get_model('partner', 'Partner') PartnerSearchForm, PartnerCreateForm, PartnerAddressForm = get_classes( 'dashboard.partners.forms', ['PartnerSearchForm', 'PartnerCreateForm', 'PartnerAddressForm']) class PartnerListView(generic.ListView): model = Partner context_object_name = 'partners' template_name = 'dashboard/partners/partner_list.html' form_class = PartnerSearchForm def get_queryset(self): qs = self.model._default_manager.all() qs = sort_queryset(qs, self.request, ['name']) self.description = _("All partners")
from django.core import exceptions from django.db import models from django.db.models.query import Q from django.template.defaultfilters import date as date_filter from django.urls import reverse from django.utils.functional import cached_property from django.utils.timezone import get_current_timezone, now from django.utils.translation import gettext_lazy as _ from oscar.core.compat import AUTH_USER_MODEL from oscar.core.loading import get_class, get_classes, get_model from oscar.models import fields from oscar.templatetags.currency_filters import currency ActiveOfferManager, BrowsableRangeManager \ = get_classes('offer.managers', ['ActiveOfferManager', 'BrowsableRangeManager']) ZERO_DISCOUNT = get_class('offer.results', 'ZERO_DISCOUNT') load_proxy, unit_price = get_classes('offer.utils', ['load_proxy', 'unit_price']) # 基本报价 class BaseOfferMixin(models.Model): class Meta: abstract = True def proxy(self): """ Return the proxy model 返回代理模型 """ klassmap = self.proxy_map
from django.forms.models import BaseModelFormSet, modelformset_factory from oscar.core.loading import get_classes, get_model Line = get_model('basket', 'line') BasketLineForm, SavedLineForm = get_classes('basket.forms', ['BasketLineForm', 'SavedLineForm']) class BaseBasketLineFormSet(BaseModelFormSet): def __init__(self, strategy, *args, **kwargs): self.strategy = strategy super().__init__(*args, **kwargs) def _construct_form(self, i, **kwargs): return super()._construct_form( i, strategy=self.strategy, **kwargs) def _should_delete_form(self, form): """ Quantity of zero is treated as if the user checked the DELETE checkbox, which results in the basket line being deleted 零的数量被处理为用户检查删除复选框,这会导致购物篮行被删除。 """ if super()._should_delete_form(form): return True if self.can_delete and 'quantity' in form.cleaned_data: return form.cleaned_data['quantity'] == 0 BasketLineFormSet = modelformset_factory(
from django.test import TestCase from django.urls import reverse from oscar.core.loading import get_classes from oscar.test.testcases import WebTestCase from oscar_promotions import models from oscar_promotions.dashboard import forms RawHTML, PagePromotion = get_classes('oscar_promotions.models', ['RawHTML', 'PagePromotion']) class ViewTests(WebTestCase): is_staff = True def test_pages_exist(self): urls = [ reverse('dashboard:promotion-list'), reverse('dashboard:promotion-create-rawhtml'), reverse('dashboard:promotion-create-singleproduct'), reverse('dashboard:promotion-create-image'), ] for url in urls: self.assertIsOk(self.get(url)) def test_create_redirects(self): base_url = reverse('dashboard:promotion-create-redirect') types = ['rawhtml', 'singleproduct', 'image'] for p_type in types: url = '%s?promotion_type=%s' % (base_url, p_type)
from django.utils.translation import ugettext_lazy as _ from django.template.loader import render_to_string from django.views import generic from oscar.apps.customer.utils import normalise_email from oscar.core.loading import get_classes, get_model from oscar.core.compat import get_user_model from oscar.views import sort_queryset User = get_user_model() Partner = get_model('partner', 'Partner') ( PartnerSearchForm, PartnerCreateForm, PartnerAddressForm, NewUserForm, UserEmailForm, ExistingUserForm ) = get_classes( 'dashboard.partners.forms', ['PartnerSearchForm', 'PartnerCreateForm', 'PartnerAddressForm', 'NewUserForm', 'UserEmailForm', 'ExistingUserForm']) class PartnerListView(generic.ListView): model = Partner context_object_name = 'partners' template_name = 'dashboard/partners/partner_list.html' form_class = PartnerSearchForm def get_queryset(self): qs = self.model._default_manager.all() qs = sort_queryset(qs, self.request, ['name']) self.description = _("All partners")
from django.db.models import Q from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from django.views.generic import ( DeleteView, DetailView, FormView, ListView, UpdateView) from django.views.generic.detail import SingleObjectMixin from django.views.generic.edit import FormMixin from django_tables2 import SingleTableView from oscar.apps.customer.utils import normalise_email from oscar.core.compat import get_user_model from oscar.core.loading import get_class, get_classes, get_model from oscar.views.generic import BulkEditMixin UserSearchForm, ProductAlertSearchForm, ProductAlertUpdateForm = get_classes( 'dashboard.users.forms', ('UserSearchForm', 'ProductAlertSearchForm', 'ProductAlertUpdateForm')) PasswordResetForm = get_class('customer.forms', 'PasswordResetForm') UserTable = get_class('dashboard.users.tables', 'UserTable') ProductAlert = get_model('customer', 'ProductAlert') User = get_user_model() class IndexView(BulkEditMixin, FormMixin, SingleTableView): template_name = 'dashboard/users/index.html' table_pagination = True model = User actions = ('make_active', 'make_inactive', ) form_class = UserSearchForm table_class = UserTable context_table_name = 'users'
from django.db.models import Q, get_model from django.contrib import messages from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.views.generic import ListView, DetailView, DeleteView, UpdateView from oscar.apps.customer.utils import normalise_email from oscar.views.generic import BulkEditMixin from oscar.core.compat import get_user_model from oscar.core.loading import get_classes UserSearchForm, ProductAlertSearchForm, ProductAlertUpdateForm = get_classes( "dashboard.users.forms", ("UserSearchForm", "ProductAlertSearchForm", "ProductAlertUpdateForm") ) ProductAlert = get_model("customer", "ProductAlert") User = get_user_model() class IndexView(BulkEditMixin, ListView): template_name = "dashboard/users/index.html" paginate_by = 25 model = User actions = ("make_active", "make_inactive") current_view = "dashboard:users-index" form_class = UserSearchForm desc_template = _("%(main_filter)s %(email_filter)s %(name_filter)s") description = "" def get_queryset(self): queryset = self.model.objects.all().order_by("-date_joined")
from django.views import generic from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.contrib import messages from django.http import HttpResponseRedirect from django.db.models import Count from django.shortcuts import HttpResponse from oscar.core.loading import get_classes from oscar.apps.promotions.conf import PROMOTION_CLASSES, PROMOTION_POSITIONS SingleProduct, RawHTML, Image, MultiImage, \ AutomaticProductList, PagePromotion, \ HandPickedProductList = get_classes('promotions.models', ['SingleProduct', 'RawHTML', 'Image', 'MultiImage', 'AutomaticProductList', 'PagePromotion', 'HandPickedProductList']) SelectForm, RawHTMLForm, PagePromotionForm, HandPickedProductListForm, OrderedProductFormSet = get_classes( 'dashboard.promotions.forms', [ 'PromotionTypeSelectForm', 'RawHTMLForm', 'PagePromotionForm', 'HandPickedProductListForm', 'OrderedProductFormSet' ]) class ListView(generic.TemplateView): template_name = 'dashboard/promotions/promotion_list.html' def get_context_data(self): # Need to load all promotions of all types and chain them together # no pagination required for now. data = []
ProductClassSelectForm, ProductSearchForm, ProductClassForm, CategoryForm, StockRecordFormSet, StockAlertSearchForm, ProductCategoryFormSet, ProductImageFormSet, ProductRecommendationFormSet, ProductAttributesFormSet) \ = get_classes('dashboard.catalogue.forms', ('ProductForm', 'ProductClassSelectForm', 'ProductSearchForm', 'ProductClassForm', 'CategoryForm', 'StockRecordFormSet', 'StockAlertSearchForm', 'ProductCategoryFormSet', 'ProductImageFormSet', 'ProductRecommendationFormSet', 'ProductAttributesFormSet')) ProductTable, CategoryTable \ = get_classes('dashboard.catalogue.tables', ('ProductTable', 'CategoryTable')) Product = get_model('catalogue', 'Product') Category = get_model('catalogue', 'Category') ProductImage = get_model('catalogue', 'ProductImage') ProductCategory = get_model('catalogue', 'ProductCategory') ProductClass = get_model('catalogue', 'ProductClass') StockRecord = get_model('partner', 'StockRecord') StockAlert = get_model('partner', 'StockAlert')
def test_raise_exception_when_bad_appname_used(self): with self.assertRaises(AppNotFoundError): get_classes('fridge.models', ('Product', 'Category'))
from django.utils.encoding import python_2_unicode_compatible from django.utils.functional import cached_property from django.utils.html import strip_tags from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.utils.translation import get_language, pgettext_lazy from treebeard.mp_tree import MP_Node from oscar.core.compat import user_is_anonymous, user_is_authenticated from oscar.core.loading import get_class, get_classes, get_model from oscar.core.utils import slugify from oscar.core.validators import non_python_keyword from oscar.models.fields import AutoSlugField, NullCharField from oscar.models.fields.slugfield import SlugField ProductManager, BrowsableProductManager = get_classes( 'catalogue.managers', ['ProductManager', 'BrowsableProductManager']) ProductAttributesContainer = get_class( 'catalogue.product_attributes', 'ProductAttributesContainer') Selector = get_class('partner.strategy', 'Selector') @python_2_unicode_compatible class AbstractProductClass(models.Model): """ Used for defining options and attributes for a subset of products. E.g. Books, DVDs and Toys. A product can only belong to one product class. At least one product class must be created when setting up a new Oscar deployment. Not necessarily equivalent to top-level categories but usually will be.
def test_loading_class_which_is_not_defined_in_local_module(self): with override_settings(INSTALLED_APPS=self.installed_apps): (FixedPrice, ) = get_classes('shipping.methods', ('FixedPrice', )) self.assertEqual('oscar.apps.shipping.methods', FixedPrice.__module__)
from decimal import Decimal as D from django.utils.translation import gettext_lazy as _ from oscar.core.loading import get_class, get_classes, get_model from oscar.templatetags.currency_filters import currency Benefit = get_model('offer', 'Benefit') BasketDiscount, SHIPPING_DISCOUNT, ZERO_DISCOUNT = get_classes('offer.results', [ 'BasketDiscount', 'SHIPPING_DISCOUNT', 'ZERO_DISCOUNT']) CoverageCondition, ValueCondition = get_classes('offer.conditions', ['CoverageCondition', 'ValueCondition']) range_anchor = get_class('offer.utils', 'range_anchor') __all__ = [ 'PercentageDiscountBenefit', 'AbsoluteDiscountBenefit', 'FixedPriceBenefit', 'ShippingBenefit', 'MultibuyDiscountBenefit', 'ShippingAbsoluteDiscountBenefit', 'ShippingFixedPriceBenefit', 'ShippingPercentageDiscountBenefit', ] def apply_discount(line, discount, quantity, offer=None): """ Apply a given discount to the passed basket """ line.discount(discount, quantity, incl_tax=False, offer=offer) class PercentageDiscountBenefit(Benefit): """ An offer benefit that gives a percentage discount
def test_loading_class_from_module_not_defined_in_local_app(self): with override_settings(INSTALLED_APPS=self.installed_apps): (Repository, ) = get_classes('shipping.repository', ('Repository', )) self.assertEqual('oscar.apps.shipping.repository', Repository.__module__)
from oscar.core.loading import get_class, get_classes, get_model from oscar.views.generic import ObjectLookupView (ProductForm, ProductClassSelectForm, ProductSearchForm, ProductClassForm, CategoryForm, StockAlertSearchForm, AttributeOptionGroupForm, OptionForm) \ = get_classes('dashboard.catalogue.forms', ('ProductForm', 'ProductClassSelectForm', 'ProductSearchForm', 'ProductClassForm', 'CategoryForm', 'StockAlertSearchForm', 'AttributeOptionGroupForm', 'OptionForm')) (StockRecordFormSet, ProductCategoryFormSet, ProductImageFormSet, ProductRecommendationFormSet, ProductAttributesFormSet, AttributeOptionFormSet) \ = get_classes('dashboard.catalogue.formsets', ('StockRecordFormSet', 'ProductCategoryFormSet', 'ProductImageFormSet', 'ProductRecommendationFormSet',
def test_loading_class_which_is_not_defined_in_local_module(self): with patch_settings(INSTALLED_APPS=self.installed_apps): (FixedPrice,) = get_classes('shipping.methods', ('FixedPrice',)) self.assertEqual('oscar.apps.shipping.methods', FixedPrice.__module__)
from oscar.apps.catalogue.abstract_models import AbstractProduct from oscar.core.loading import get_classes from django.conf import settings StockRecord, Partner = get_classes('partner.models', ('StockRecord', 'Partner')) # here we override the core oscar Product model class Product(AbstractProduct): # the 2 main modification we are doing are: # 1. add properties for cost_price and num_in_stock # 2. add a function allowing to set those values # both these modifications will be used in the product edit form @property def cost_price(self): # oscar has the prices and stock in a stockrecord model # in this case, we just use the first stockrecord, always if self.has_stockrecords: return self.stockrecords.first().cost_price else: return 0 @property def num_in_stock(self): if self.has_stockrecords: return self.stockrecords.first().num_in_stock else: return 0
def test_loading_classes_defined_in_both_local_and_oscar_modules(self): with patch_settings(INSTALLED_APPS=self.installed_apps): (Free, FixedPrice) = get_classes('shipping.methods', ('Free', 'FixedPrice')) self.assertEqual('tests.site.shipping.methods', Free.__module__) self.assertEqual('oscar.apps.shipping.methods', FixedPrice.__module__)
import json from django.core.exceptions import ( ObjectDoesNotExist, PermissionDenied) from django.core.urlresolvers import reverse from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.views.generic import (View, FormView) from rest_framework.views import APIView from oscar.core.loading import get_class, get_classes, get_model from oscar.core.utils import redirect_to_referrer WishList = get_model('wishlists', 'WishList') WishLine = get_model('wishlists', 'Line') Product = get_model('catalogue', 'Product') WishListForm, LineFormset = get_classes('wishlists.forms', ['WishListForm', 'LineFormset']) PageTitleMixin = get_class('customer.mixins', 'PageTitleMixin') wishlist_title = u'我的关注' class MyFavListView(APIView): def get(self, request, *args, **kwargs): user = request.user tpl = 'customer/wishlists/myfav.html' wishlist = WishList.objects.filter(owner__pk=user.pk).first() if not wishlist: wishlist = WishList(owner=user) wishlist.save() myfav = []
ProductCategory = get_model('catalogue', 'ProductCategory') ProductImage = get_model('catalogue', 'ProductImage') ProductRecommendation = get_model('catalogue', 'ProductRecommendation') AttributeOptionGroup = get_model('catalogue', 'AttributeOptionGroup') AttributeOption = get_model('catalogue', 'AttributeOption') (StockRecordForm, ProductCategoryForm, ProductImageForm, ProductRecommendationForm, ProductAttributesForm, AttributeOptionForm) = \ get_classes('dashboard.catalogue.forms', ('StockRecordForm', 'ProductCategoryForm', 'ProductImageForm', 'ProductRecommendationForm', 'ProductAttributesForm', 'AttributeOptionForm')) BaseStockRecordFormSet = inlineformset_factory(Product, StockRecord, form=StockRecordForm, extra=1, max_num=1) class StockRecordFormSet(BaseStockRecordFormSet): def __init__(self, product_class, user, *args, **kwargs): self.user = user self.require_user_stockrecord = False #not user.is_staff
def test_loading_class_from_module_not_defined_in_local_app(self): with patch_settings(INSTALLED_APPS=self.installed_apps): (Repository,) = get_classes('shipping.repository', ('Repository',)) self.assertEqual('oscar.apps.shipping.repository', Repository.__module__)
from django.utils import six from django.utils.encoding import python_2_unicode_compatible from django.utils.functional import cached_property from django.utils.html import strip_tags from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.utils.translation import get_language, pgettext_lazy from treebeard.mp_tree import MP_Node from oscar.core.loading import get_class, get_classes, get_model from oscar.core.utils import slugify from oscar.core.validators import non_python_keyword from oscar.models.fields import AutoSlugField, NullCharField from oscar.models.fields.slugfield import SlugField ProductManager, BrowsableProductManager = get_classes( 'catalogue.managers', ['ProductManager', 'BrowsableProductManager']) ProductAttributesContainer = get_class('catalogue.product_attributes', 'ProductAttributesContainer') Selector = get_class('partner.strategy', 'Selector') @python_2_unicode_compatible class AbstractProductClass(models.Model): """ Used for defining options and attributes for a subset of products. E.g. Books, DVDs and Toys. A product can only belong to one product class. At least one product class must be created when setting up a new Oscar deployment. Not necessarily equivalent to top-level categories but usually will be.
import re, copy from oscar.core.loading import get_class, get_classes from oscar.apps.catalogue.categories import create_from_breadcrumbs """ You can replace these with regular imports, but make sure you reference the correct version (i.e. if you forked the app, use your local version) """ ProductClass, Product, Category, ProductCategory = get_classes('catalogue.models', ('ProductClass', 'Product', 'Category', 'ProductCategory')) class MatchCategories(object): """ The large convoluted class is a helper class to match a Product to a ProductCategory. It is specific to our needs, and likely to change heavily as our store evolves. """ def __init__(self, description=None, target_group=None, product_type=None,): if description is not None: self.description = description if target_group is not None: self.target_group = target_group else: self.target_group = self.find_target_group() if product_type is not None: self.product_type = product_type else: self.product_type = self.find_product_type()
from django.urls import reverse from django.utils.http import is_safe_url from django.utils.translation import gettext_lazy as _ from django.views.generic import FormView, View from extra_views import ModelFormSetView from oscar.apps.basket.signals import (basket_addition, voucher_addition, voucher_removal) from oscar.core import ajax from oscar.core.loading import get_class, get_classes, get_model from oscar.core.utils import redirect_to_referrer, safe_referrer Applicator = get_class('offer.applicator', 'Applicator') (BasketLineForm, AddToBasketForm, BasketVoucherForm, SavedLineForm) = get_classes('basket.forms', ('BasketLineForm', 'AddToBasketForm', 'BasketVoucherForm', 'SavedLineForm')) BasketLineFormSet, SavedLineFormSet = get_classes( 'basket.formsets', ('BasketLineFormSet', 'SavedLineFormSet')) Repository = get_class('shipping.repository', 'Repository') OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator') BasketMessageGenerator = get_class('basket.utils', 'BasketMessageGenerator') class BasketView(ModelFormSetView): model = get_model('basket', 'Line') basket_model = get_model('basket', 'Basket') formset_class = BasketLineFormSet form_class = BasketLineForm
from oscar.core.loading import get_class, get_classes Applicator = get_class("offer.utils", "Applicator") ( BasketLineForm, AddToBasketForm, BasketVoucherForm, SavedLineFormSet, SavedLineForm, ProductSelectionForm, ) = get_classes( "basket.forms", ( "BasketLineForm", "AddToBasketForm", "BasketVoucherForm", "SavedLineFormSet", "SavedLineForm", "ProductSelectionForm", ), ) Repository = get_class("shipping.repository", ("Repository")) def get_messages(basket, offers_before, offers_after, include_buttons=True): """ Return the messages about offer changes """ # Look for changes in offers offers_lost = set(offers_before.keys()).difference(set(offers_after.keys())) offers_gained = set(offers_after.keys()).difference(set(offers_before.keys()))
from django.conf import settings from django.contrib import messages from django.shortcuts import get_object_or_404, redirect from django.utils.translation import gettext_lazy as _ from django.views.generic import CreateView, DetailView, ListView, View from oscar.apps.catalogue.reviews.signals import review_added from oscar.core.loading import get_classes, get_model from oscar.core.utils import redirect_to_referrer ProductReviewForm, VoteForm, SortReviewsForm = get_classes( 'catalogue.reviews.forms', ['ProductReviewForm', 'VoteForm', 'SortReviewsForm']) Vote = get_model('reviews', 'vote') ProductReview = get_model('reviews', 'ProductReview') Product = get_model('catalogue', 'product') class CreateProductReview(CreateView): template_name = "oscar/catalogue/reviews/review_form.html" model = ProductReview product_model = Product form_class = ProductReviewForm view_signal = review_added def dispatch(self, request, *args, **kwargs): self.product = get_object_or_404(self.product_model, pk=kwargs['product_pk'], is_public=True) # check permission to leave review
from oscar.core.loading import get_class, get_classes from oscar.core.compat import get_user_model from oscar.apps.checkout.views import PaymentMethodView as corePaymentMethodView from oscar.apps.checkout.views import PaymentDetailsView as corePaymentDetailsView from oscar.apps.checkout.views import ThankYouView as coreThankYouView from robokassa.facade import robokassa_redirect from apps.shipping.methods import Pickup from apps.shipping.repository import Repository RedirectRequired, UnableToTakePayment, PaymentError = get_classes( 'payment.exceptions', ['RedirectRequired', 'UnableToTakePayment', 'PaymentError']) Dispatcher = get_class('customer.utils', 'Dispatcher') CommunicationEventType = get_model('customer', 'CommunicationEventType') Order = get_model('order', 'Order') SourceType = get_model('payment', 'SourceType') Source = get_model('payment', 'Source') CheckoutSessionData = get_class('checkout.utils', 'CheckoutSessionData') # defered payment codes - коды офлайновых способов оплаты, нал, через банк, по счету DeferedPaymentCodes = ('cash_payment', 'sbrf_slip', 'invoice_payment') RedirectPaymentCodes = ('robokassa',) RemotePaymentCodes = ('sbrf_slip', 'invoice_payment', 'robokassa') User = get_user_model()
from django.test.utils import override_settings from django.core.urlresolvers import reverse from django.conf import settings from django.utils.importlib import import_module from oscar.core.compat import get_user_model from oscar.core.loading import get_class, get_classes, get_model from oscar.test.testcases import WebTestCase from oscar.test import factories from . import CheckoutMixin GatewayForm = get_class('checkout.forms', 'GatewayForm') CheckoutSessionData = get_class('checkout.utils', 'CheckoutSessionData') RedirectRequired, UnableToTakePayment, PaymentError = get_classes( 'payment.exceptions', ['RedirectRequired', 'UnableToTakePayment', 'PaymentError']) UnableToPlaceOrder = get_class('order.exceptions', 'UnableToPlaceOrder') Basket = get_model('basket', 'Basket') Order = get_model('order', 'Order') User = get_user_model() # Python 3 compat try: from imp import reload except ImportError: pass REDIRECT_PATH = re.compile(u"url=http://localhost:80(.*)\"")
from django.test import TestCase from oscar.apps.dashboard.promotions import forms from oscar.core.loading import get_classes RawHTML, PagePromotion = get_classes('promotions.models', ['RawHTML', 'PagePromotion']) class TestPagePromotionForm(TestCase): def test_page_promotion_has_fields(self): promotion = RawHTML() promotion.save() instance = PagePromotion(content_object=promotion) data = {'position': 'page', 'page_url': '/'} form = forms.PagePromotionForm(data=data, instance=instance) self.assertTrue(form.is_valid()) page_promotion = form.save() self.assertEqual(page_promotion.page_url, '/')
from django import forms from django.conf import settings from django.utils.translation import ugettext_lazy as _ from oscar.apps.promotions.conf import PROMOTION_CLASSES from oscar.core.loading import get_class, get_classes from oscar.forms.fields import ExtendedURLField HandPickedProductList, RawHTML, SingleProduct, PagePromotion, OrderedProduct \ = get_classes('promotions.models', ['HandPickedProductList', 'RawHTML', 'SingleProduct', 'PagePromotion', 'OrderedProduct']) ProductSelect = get_class('dashboard.catalogue.widgets', 'ProductSelect') class PromotionTypeSelectForm(forms.Form): choices = [] for klass in PROMOTION_CLASSES: choices.append((klass.classname(), klass._meta.verbose_name)) promotion_type = forms.ChoiceField(choices=tuple(choices), label=_("Promotion type")) class RawHTMLForm(forms.ModelForm): class Meta: model = RawHTML fields = ['name', 'body'] def __init__(self, *args, **kwargs): super(RawHTMLForm, self).__init__(*args, **kwargs) self.fields['body'].widget.attrs['class'] = "no-widget-init"
import logging from django import http from django.contrib import messages from django.contrib.auth import login from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext as _ from django.views import generic from oscar.core.loading import get_model from oscar.apps.shipping.methods import NoShippingRequired from oscar.core.loading import get_class, get_classes from . import signals ShippingAddressForm, GatewayForm \ = get_classes('checkout.forms', ['ShippingAddressForm', 'GatewayForm']) OrderCreator = get_class('order.utils', 'OrderCreator') UserAddressForm = get_class('address.forms', 'UserAddressForm') Repository = get_class('shipping.repository', 'Repository') AccountAuthView = get_class('customer.views', 'AccountAuthView') RedirectRequired, UnableToTakePayment, PaymentError \ = get_classes('payment.exceptions', ['RedirectRequired', 'UnableToTakePayment', 'PaymentError']) UnableToPlaceOrder = get_class('order.exceptions', 'UnableToPlaceOrder') OrderPlacementMixin = get_class('checkout.mixins', 'OrderPlacementMixin') CheckoutSessionMixin = get_class('checkout.session', 'CheckoutSessionMixin') Order = get_model('order', 'Order') ShippingAddress = get_model('order', 'ShippingAddress') CommunicationEvent = get_model('order', 'CommunicationEvent')
from oscar.views.generic import ObjectLookupView (ProductForm, ProductClassSelectForm, ProductSearchForm, CategoryForm, StockRecordFormSet, StockAlertSearchForm, ProductCategoryFormSet, ProductImageFormSet, ProductRecommendationFormSet) \ = get_classes('dashboard.catalogue.forms', ('ProductForm', 'ProductClassSelectForm', 'ProductSearchForm', 'CategoryForm', 'StockRecordFormSet', 'StockAlertSearchForm', 'ProductCategoryFormSet', 'ProductImageFormSet', 'ProductRecommendationFormSet')) Product = get_model('catalogue', 'Product') Category = get_model('catalogue', 'Category') ProductImage = get_model('catalogue', 'ProductImage') ProductCategory = get_model('catalogue', 'ProductCategory') ProductClass = get_model('catalogue', 'ProductClass') StockRecord = get_model('partner', 'StockRecord') StockAlert = get_model('partner', 'StockAlert') Partner = get_model('partner', 'Partner') def filter_products(queryset, user):
Product = get_model('catalogue', 'Product') ProductClass = get_model('catalogue', 'ProductClass') ProductAttribute = get_model('catalogue', 'ProductAttribute') Category = get_model('catalogue', 'Category') StockRecord = get_model('partner', 'StockRecord') ProductCategory = get_model('catalogue', 'ProductCategory') ProductImage = get_model('catalogue', 'ProductImage') ProductRecommendation = get_model('catalogue', 'ProductRecommendation') AttributeOptionGroup = get_model('catalogue', 'AttributeOptionGroup') AttributeOption = get_model('catalogue', 'AttributeOption') Option = get_model('catalogue', 'Option') ProductSelect = get_class('dashboard.catalogue.widgets', 'ProductSelect') (RelatedFieldWidgetWrapper, RelatedMultipleFieldWidgetWrapper) = get_classes('dashboard.widgets', ('RelatedFieldWidgetWrapper', 'RelatedMultipleFieldWidgetWrapper')) CategoryForm = movenodeform_factory( Category, fields=['name', 'description', 'image']) class ProductClassSelectForm(forms.Form): """ Form which is used before creating a product to select it's product class """ product_class = forms.ModelChoiceField( label=_("Create a new product of type"), empty_label=_("-- Choose type --"),
from django.dispatch import receiver from django.db.models.signals import post_save from oscar.core.loading import get_classes StockRecord, StockAlert = get_classes('partner.models', ('StockRecord', 'StockAlert')) @receiver(post_save, sender=StockRecord) def update_stock_alerts(sender, instance, created, **kwargs): """ Update low-stock alerts """ if created: return stockrecord = instance try: alert = StockAlert.objects.get(stockrecord=stockrecord, status=StockAlert.OPEN) except StockAlert.DoesNotExist: alert = None if stockrecord.is_below_threshold and not alert: StockAlert.objects.create(stockrecord=stockrecord, threshold=stockrecord.low_stock_threshold) elif not stockrecord.is_below_threshold and alert: alert.close()
from django.conf import settings from django.contrib import messages from django.shortcuts import get_object_or_404, redirect from django.utils.translation import gettext_lazy as _ from django.views.generic import CreateView, DetailView, ListView, View from oscar.apps.catalogue.reviews.signals import review_added from oscar.core.loading import get_classes, get_model from oscar.core.utils import redirect_to_referrer ProductReviewForm, VoteForm, SortReviewsForm = get_classes( 'catalogue.reviews.forms', ['ProductReviewForm', 'VoteForm', 'SortReviewsForm']) Vote = get_model('reviews', 'vote') ProductReview = get_model('reviews', 'ProductReview') Product = get_model('catalogue', 'product') class CreateProductReview(CreateView): template_name = "oscar/catalogue/reviews/review_form.html" model = ProductReview product_model = Product form_class = ProductReviewForm view_signal = review_added def dispatch(self, request, *args, **kwargs): self.product = get_object_or_404( self.product_model, pk=kwargs['product_pk']) # check permission to leave review if not self.product.is_review_permitted(request.user):
import os from decimal import Decimal as D from django.db.transaction import atomic from django.utils.translation import ugettext_lazy as _ from oscar.apps.catalogue.categories import create_from_breadcrumbs from oscar.core.compat import UnicodeCSVReader from oscar.core.loading import get_class, get_classes ImportingError = get_class('partner.exceptions', 'ImportingError') Partner, StockRecord = get_classes('partner.models', ['Partner', 'StockRecord']) ProductClass, Product, Category, ProductCategory = get_classes( 'catalogue.models', ('ProductClass', 'Product', 'Category', 'ProductCategory')) class CatalogueImporter(object): """ CSV product importer used to built sandbox. Might not work very well for anything else. """ _flush = False def __init__(self, logger, delimiter=",", flush=False): self.logger = logger self._delimiter = delimiter self._flush = flush
from django import forms from django.forms.models import inlineformset_factory from django.utils.translation import ugettext_lazy as _ from oscar.forms.fields import ExtendedURLField from oscar.core.loading import get_classes from oscar.apps.promotions.conf import PROMOTION_CLASSES, PROMOTION_POSITIONS RawHTML, SingleProduct, PagePromotion, HandPickedProductList, OrderedProduct = get_classes('promotions.models', ['RawHTML', 'SingleProduct', 'PagePromotion', 'HandPickedProductList', 'OrderedProduct']) class PromotionTypeSelectForm(forms.Form): choices = [] for klass in PROMOTION_CLASSES: choices.append((klass.classname(), klass._type)) promotion_type = forms.ChoiceField(choices=tuple(choices)) class RawHTMLForm(forms.ModelForm): class Meta: model = RawHTML exclude = ('display_type',) class HandPickedProductListForm(forms.ModelForm): class Meta: model = HandPickedProductList exclude = ('products',)
from django.shortcuts import render from django.conf import settings from django.core.files import File from oscar.core.loading import get_class, get_classes from PIL import Image from apps.designer.models import TshirtSKU ProductClass, Product, Category, ProductCategory = get_classes( 'catalogue.models', ('ProductClass', 'Product', 'Category', 'ProductCategory')) ProductImage, ProductAttribute, ProductAttributeValue, AttributeOption = get_classes( 'catalogue.models', ('ProductImage', 'ProductAttribute', 'ProductAttributeValue', 'AttributeOption')) Partner, StockRecord = get_classes('partner.models', ('Partner', 'StockRecord')) def home(request): if request.method == 'GET': return render(request, 'home.html') def create(request): context_dict = {} if request.method == 'POST': img_src = request.POST.get('imagesrc') img_idx = img_src.find('base64') img_data = img_src[img_idx + 7:].decode("base64") img_file = open("./public/photo.png", "wb")
from urlparse import urlparse from django.contrib import messages from django.core.urlresolvers import reverse, resolve from django.db.models import get_model from django.http import HttpResponseRedirect, Http404 from django.views.generic import FormView, View from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ObjectDoesNotExist from extra_views import ModelFormSetView from oscar.apps.basket.signals import basket_addition, voucher_addition from oscar.core.loading import get_class, get_classes Applicator = get_class('offer.utils', 'Applicator') BasketLineForm, AddToBasketForm, BasketVoucherForm, \ SavedLineFormSet, SavedLineForm, ProductSelectionForm = get_classes( 'basket.forms', ('BasketLineForm', 'AddToBasketForm', 'BasketVoucherForm', 'SavedLineFormSet', 'SavedLineForm', 'ProductSelectionForm')) Repository = get_class('shipping.repository', ('Repository')) def apply_messages(offers_before, request, default_msg=None): """ Set flash messages triggered by changes to the basket """ # Re-apply offers to see if any new ones are now available Applicator().apply(request, request.basket) offers_after = request.basket.get_discount_offers() # Look for changes in offers offers_lost = set(offers_before.keys()).difference( set(offers_after.keys()))
from django.http import HttpResponseRedirect from django.shortcuts import HttpResponse, get_object_or_404 from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ungettext from django.views.generic import ( CreateView, DeleteView, ListView, UpdateView, View) from oscar.core.loading import get_classes, get_model from oscar.views.generic import BulkEditMixin Range = get_model('offer', 'Range') RangeProduct = get_model('offer', 'RangeProduct') RangeProductFileUpload = get_model('offer', 'RangeProductFileUpload') Product = get_model('catalogue', 'Product') RangeForm, RangeProductForm = get_classes('dashboard.ranges.forms', ['RangeForm', 'RangeProductForm']) class RangeListView(ListView): model = Range context_object_name = 'ranges' template_name = 'dashboard/ranges/range_list.html' class RangeCreateView(CreateView): model = Range template_name = 'dashboard/ranges/range_form.html' form_class = RangeForm def get_success_url(self): if 'action' in self.request.POST:
from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.conf import settings from django.contrib import messages from django.http import HttpResponseRedirect from django.db.models import Count from django.shortcuts import HttpResponse from oscar.core.loading import get_classes from oscar.apps.promotions.conf import PROMOTION_CLASSES SingleProduct, RawHTML, Image, MultiImage, AutomaticProductList, \ PagePromotion, HandPickedProductList \ = get_classes('promotions.models', ['SingleProduct', 'RawHTML', 'Image', 'MultiImage', 'AutomaticProductList', 'PagePromotion', 'HandPickedProductList']) SelectForm, RawHTMLForm, PagePromotionForm, HandPickedProductListForm, \ SingleProductForm, OrderedProductFormSet \ = get_classes('dashboard.promotions.forms', ['PromotionTypeSelectForm', 'RawHTMLForm', 'PagePromotionForm', 'HandPickedProductListForm', 'SingleProductForm', 'OrderedProductFormSet']) class ListView(generic.TemplateView): template_name = 'dashboard/promotions/promotion_list.html' def get_context_data(self): # Need to load all promotions of all types and chain them together # no pagination required for now.
from django.http import HttpResponseRedirect, Http404 from django.contrib import messages from django.utils.translation import ugettext_lazy as _ from django.contrib.auth import logout as auth_logout, login as auth_login from django.contrib.auth.forms import PasswordChangeForm from django.contrib.sites.models import get_current_site from django.conf import settings from oscar.core.loading import get_model from oscar.views.generic import PostActionMixin from oscar.apps.customer.utils import get_password_reset_url from oscar.core.loading import get_class, get_profile_class, get_classes from oscar.core.compat import get_user_model from . import signals PageTitleMixin, RegisterUserMixin = get_classes( 'customer.mixins', ['PageTitleMixin', 'RegisterUserMixin']) Dispatcher = get_class('customer.utils', 'Dispatcher') EmailAuthenticationForm, EmailUserCreationForm, OrderSearchForm = get_classes( 'customer.forms', ['EmailAuthenticationForm', 'EmailUserCreationForm', 'OrderSearchForm']) ProfileForm, ConfirmPasswordForm = get_classes( 'customer.forms', ['ProfileForm', 'ConfirmPasswordForm']) UserAddressForm = get_class('address.forms', 'UserAddressForm') Order = get_model('order', 'Order') Line = get_model('basket', 'Line') Basket = get_model('basket', 'Basket') UserAddress = get_model('address', 'UserAddress') Email = get_model('customer', 'Email') UserAddress = get_model('address', 'UserAddress') ProductAlert = get_model('customer', 'ProductAlert') CommunicationEventType = get_model('customer', 'CommunicationEventType')
from django.db.models import Q, get_model from django.contrib import messages from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.views.generic import ListView, DetailView, DeleteView, \ UpdateView, FormView from django.views.generic.detail import SingleObjectMixin from oscar.apps.customer.utils import normalise_email from oscar.views.generic import BulkEditMixin from oscar.core.compat import get_user_model from oscar.core.loading import get_class, get_classes UserSearchForm, ProductAlertSearchForm, ProductAlertUpdateForm = get_classes( 'dashboard.users.forms', ('UserSearchForm', 'ProductAlertSearchForm', 'ProductAlertUpdateForm')) PasswordResetForm = get_class('customer.forms', 'PasswordResetForm') ProductAlert = get_model('customer', 'ProductAlert') User = get_user_model() class IndexView(BulkEditMixin, ListView): template_name = 'dashboard/users/index.html' paginate_by = 25 model = User actions = ('make_active', 'make_inactive', ) current_view = 'dashboard:users-index' form_class = UserSearchForm desc_template = _('%(main_filter)s %(email_filter)s %(name_filter)s') description = ''
from django.urls import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.views import generic from oscar.apps.customer.utils import normalise_email from oscar.core.compat import get_user_model from oscar.core.loading import get_classes, get_model from oscar.views import sort_queryset User = get_user_model() Partner = get_model('partner', 'Partner') ( PartnerSearchForm, PartnerCreateForm, PartnerAddressForm, NewUserForm, UserEmailForm, ExistingUserForm ) = get_classes( 'dashboard.partners.forms', ['PartnerSearchForm', 'PartnerCreateForm', 'PartnerAddressForm', 'NewUserForm', 'UserEmailForm', 'ExistingUserForm']) class PartnerListView(generic.ListView): model = Partner context_object_name = 'partners' template_name = 'dashboard/partners/partner_list.html' form_class = PartnerSearchForm def get_queryset(self): qs = self.model._default_manager.all() qs = sort_queryset(qs, self.request, ['name']) self.description = _("All partners")
import os from django.views.generic import (ListView, DeleteView, CreateView, UpdateView) from django.utils.translation import ungettext, ugettext_lazy as _ from django.db.models.loading import get_model from django.core.urlresolvers import reverse from django.contrib import messages from django.shortcuts import get_object_or_404 from django.http import HttpResponseRedirect from django.conf import settings from oscar.views.generic import BulkEditMixin from oscar.core.loading import get_classes Range = get_model('offer', 'Range') Product = get_model('catalogue', 'Product') RangeForm, RangeProductForm = get_classes('dashboard.ranges.forms', ['RangeForm', 'RangeProductForm']) RangeProductFileUpload = get_model('ranges', 'RangeProductFileUpload') class RangeListView(ListView): model = Range context_object_name = 'ranges' template_name = 'dashboard/ranges/range_list.html' class RangeCreateView(CreateView): model = Range template_name = 'dashboard/ranges/range_form.html' form_class = RangeForm
def test_loading_class_defined_in_local_module(self): with override_settings(INSTALLED_APPS=self.installed_apps): (Free, ) = get_classes('shipping.methods', ('Free', )) self.assertEqual('tests._site.apps.shipping.methods', Free.__module__)
from django.utils.translation import ugettext_lazy as _ from oscar.core.loading import get_classes (ProductForm, ProductSearchForm, CategoryForm, StockRecordForm, StockAlertSearchForm, ProductCategoryFormSet, ProductImageFormSet, ProductRecommendationFormSet) = get_classes('dashboard.catalogue.forms', ('ProductForm', 'ProductSearchForm', 'CategoryForm', 'StockRecordForm', 'StockAlertSearchForm', 'ProductCategoryFormSet', 'ProductImageFormSet', 'ProductRecommendationFormSet')) Product = get_model('catalogue', 'Product') Category = get_model('catalogue', 'Category') ProductImage = get_model('catalogue', 'ProductImage') ProductCategory = get_model('catalogue', 'ProductCategory') ProductClass = get_model('catalogue', 'ProductClass') StockRecord = get_model('partner', 'StockRecord') StockAlert = get_model('partner', 'StockAlert') class ProductListView(generic.ListView): template_name = 'dashboard/catalogue/product_list.html'
def test_load_oscar_classes_correctly(self): Product, Category = get_classes('catalogue.models', ('Product', 'Category')) self.assertEqual('oscar.apps.catalogue.models', Product.__module__) self.assertEqual('oscar.apps.catalogue.models', Category.__module__)