Flake8 fixes

This commit is contained in:
Christopher Neugebauer 2016-04-28 12:39:20 +10:00
parent 71de0df5dc
commit 162db24817
9 changed files with 86 additions and 35 deletions

View file

@ -1,6 +1,5 @@
import collections
import datetime
import discount
import functools
import itertools
@ -378,7 +377,11 @@ class CartController(object):
)
products = [i.product for i in product_items]
discounts = DiscountController.available_discounts(self.cart.user, [], products)
discounts = DiscountController.available_discounts(
self.cart.user,
[],
products,
)
# The highest-value discounts will apply to the highest-value
# products first.

View file

@ -1,11 +1,6 @@
import itertools
import operator
from collections import defaultdict
from collections import namedtuple
from django.db.models import Case
from django.db.models import Count
from django.db.models import F, Q
from django.db.models import Sum
from django.db.models import Value
@ -234,9 +229,9 @@ class TimeOrStockLimitFlagController(
reserved_carts = cls._relevant_carts(user)
# Calculate category lines
cat_items = F('categories__product__productitem__product__category')
item_cats = F('categories__product__productitem__product__category')
reserved_category_products = (
Q(categories=F('categories__product__productitem__product__category')) &
Q(categories=item_cats) &
Q(categories__product__productitem__cart__in=reserved_carts)
)

View file

@ -46,16 +46,17 @@ class DiscountController(object):
@classmethod
def available_discounts(cls, user, categories, products):
''' Returns all discounts available to this user for the given categories
and products. The discounts also list the available quantity for this user,
not including products that are pending purchase. '''
''' Returns all discounts available to this user for the given
categories and products. The discounts also list the available quantity
for this user, not including products that are pending purchase. '''
filtered_clauses = cls._filtered_discounts(user, categories, products)
discounts = []
# Markers so that we don't need to evaluate given conditions more than once
# Markers so that we don't need to evaluate given conditions
# more than once
accepted_discounts = set()
failed_discounts = set()
@ -71,7 +72,8 @@ class DiscountController(object):
pass
elif discount not in failed_discounts:
# This clause is still available
if discount in accepted_discounts or cond.is_met(user, filtered=True):
is_accepted = discount in accepted_discounts
if is_accepted or cond.is_met(user, filtered=True):
# This clause is valid for this user
discounts.append(DiscountAndQuantity(
discount=discount,
@ -89,12 +91,15 @@ class DiscountController(object):
'''
Returns:
Sequence[discountbase]: All discounts that passed the filter function.
Sequence[discountbase]: All discounts that passed the filter
function.
'''
types = list(ConditionController._controllers())
discounttypes = [i for i in types if issubclass(i, conditions.DiscountBase)]
discounttypes = [
i for i in types if issubclass(i, conditions.DiscountBase)
]
# discounts that match provided categories
category_discounts = conditions.DiscountForCategory.objects.filter(
@ -105,7 +110,8 @@ class DiscountController(object):
product__in=products
)
# discounts that match categories for provided products
product_category_discounts = conditions.DiscountForCategory.objects.filter(
product_category_discounts = conditions.DiscountForCategory.objects
product_category_discounts = product_category_discounts.filter(
category__in=(product.category for product in products)
)
# (Not relevant: discounts that match products in provided categories)
@ -115,7 +121,9 @@ class DiscountController(object):
"product__category",
)
all_category_discounts = category_discounts | product_category_discounts
all_category_discounts = (
category_discounts | product_category_discounts
)
all_category_discounts = all_category_discounts.select_related(
"category",
)
@ -136,7 +144,8 @@ class DiscountController(object):
filtered_discounts = list(itertools.chain(*all_subsets))
# Map from discount key to itself (contains annotations added by filter)
# Map from discount key to itself
# (contains annotations needed in the future)
from_filter = dict((i.id, i) for i in filtered_discounts)
# The set of all potential discounts
@ -171,5 +180,7 @@ class DiscountController(object):
default=Value(0),
)
queryset = queryset.annotate(past_use_count=Sum(past_use_quantity_or_zero))
queryset = queryset.annotate(
past_use_count=Sum(past_use_quantity_or_zero)
)
return queryset

View file

@ -228,12 +228,19 @@ class FlagCounter(_FlagCounter):
# Get the count of how many conditions should exist per product
flagbases = conditions.FlagBase.objects
types = (conditions.FlagBase.ENABLE_IF_TRUE, conditions.FlagBase.DISABLE_IF_FALSE)
types = (
conditions.FlagBase.ENABLE_IF_TRUE,
conditions.FlagBase.DISABLE_IF_FALSE,
)
keys = ("eit", "dif")
flags = [
flagbases.filter(condition=condition_type
).values('products', 'categories'
).annotate(count=Count('id'))
flagbases.filter(
condition=condition_type
).values(
'products', 'categories'
).annotate(
count=Count('id')
)
for condition_type in types
]

View file

@ -5,7 +5,6 @@ from registrasion.models import commerce
from registrasion.models import inventory
from .category import CategoryController
from .conditions import ConditionController
from .flag import FlagController

View file

@ -26,7 +26,7 @@ class RegistrationCartTestCase(SetTimeMixin, TestCase):
super(RegistrationCartTestCase, self).setUp()
def tearDown(self):
if False:
if True:
# If you're seeing segfaults in tests, enable this.
call_command(
'flush',

View file

@ -149,7 +149,11 @@ class CeilingsTestCases(RegistrationCartTestCase):
cart.add_to_cart(self.PROD_1, 1)
cart.next_cart()
discounts = DiscountController.available_discounts(self.USER_1, [], [self.PROD_1])
discounts = DiscountController.available_discounts(
self.USER_1,
[],
[self.PROD_1],
)
self.assertEqual(0, len(discounts))

View file

@ -245,7 +245,11 @@ class DiscountTestCase(RegistrationCartTestCase):
# Tests for the DiscountController.available_discounts enumerator
def test_enumerate_no_discounts_for_no_input(self):
discounts = DiscountController.available_discounts(self.USER_1, [], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[],
[],
)
self.assertEqual(0, len(discounts))
def test_enumerate_no_discounts_if_condition_not_met(self):
@ -258,7 +262,11 @@ class DiscountTestCase(RegistrationCartTestCase):
)
self.assertEqual(0, len(discounts))
discounts = DiscountController.available_discounts(self.USER_1, [self.CAT_2], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[self.CAT_2],
[],
)
self.assertEqual(0, len(discounts))
def test_category_discount_appears_once_if_met_twice(self):
@ -280,7 +288,11 @@ class DiscountTestCase(RegistrationCartTestCase):
cart = TestingCartController.for_user(self.USER_1)
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
discounts = DiscountController.available_discounts(self.USER_1, [self.CAT_2], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[self.CAT_2],
[],
)
self.assertEqual(1, len(discounts))
def test_category_discount_appears_with_product(self):
@ -328,7 +340,11 @@ class DiscountTestCase(RegistrationCartTestCase):
cart = TestingCartController.for_user(self.USER_1)
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
discounts = DiscountController.available_discounts(self.USER_1, [self.CAT_1], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[self.CAT_1],
[],
)
self.assertEqual(0, len(discounts))
def test_discount_quantity_is_correct_before_first_purchase(self):
@ -338,7 +354,11 @@ class DiscountTestCase(RegistrationCartTestCase):
cart.add_to_cart(self.PROD_1, 1) # Enable the discount
cart.add_to_cart(self.PROD_3, 1) # Exhaust the quantity
discounts = DiscountController.available_discounts(self.USER_1, [self.CAT_2], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[self.CAT_2],
[],
)
self.assertEqual(2, discounts[0].quantity)
cart.next_cart()
@ -349,14 +369,22 @@ class DiscountTestCase(RegistrationCartTestCase):
cart = TestingCartController.for_user(self.USER_1)
cart.add_to_cart(self.PROD_3, 1) # Exhaust the quantity
discounts = DiscountController.available_discounts(self.USER_1, [self.CAT_2], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[self.CAT_2],
[],
)
self.assertEqual(1, discounts[0].quantity)
cart.next_cart()
def test_discount_is_gone_after_quantity_exhausted(self):
self.test_discount_quantity_is_correct_after_first_purchase()
discounts = DiscountController.available_discounts(self.USER_1, [self.CAT_2], [])
discounts = DiscountController.available_discounts(
self.USER_1,
[self.CAT_2],
[],
)
self.assertEqual(0, len(discounts))
def test_product_discount_enabled_twice_appears_twice(self):

View file

@ -427,7 +427,11 @@ def _handle_products(request, category, products, prefix):
)
handled = False if products_form.errors else True
discounts = DiscountController.available_discounts(request.user, [], products)
discounts = DiscountController.available_discounts(
request.user,
[],
products,
)
return products_form, discounts, handled