Browse Source

Remove deprecated partner methods

This completes the move away from partner wrappers to strategies. All
the methods for determining price and availability information have now
been removed from the partner classes.

The helper policy class ("DelegateToStockRecord") have been removed too
as they no longer have methods to call on the stockrecord.
master
David Winterbottom 11 years ago
parent
commit
4abba90f3f

+ 14
- 0
docs/source/releases/v0.8.rst View File

@@ -162,3 +162,17 @@ These methods have been removed:
162 162
 * ``oscar.apps.catalogue.abstract_models.AbstractProduct.is_available_to_buy``
163 163
 * ``oscar.apps.catalogue.abstract_models.AbstractProduct.is_purchase_permitted``
164 164
 * ``oscar.apps.catalogue.views.get_product_base_queryset``
165
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.is_available_to_buy``
166
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.is_purchase_permitted``
167
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.availability_code``
168
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.availability``
169
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.max_purchase_quantity``
170
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.dispatch_date``
171
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.lead_time``
172
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.price_incl_tax``
173
+* ``oscar.apps.partner.abstract_models.AbstractStockRecord.price_tax``
174
+
175
+These classes have been removed
176
+
177
+* ``oscar.apps.partner.prices.DelegateToStockRecord``
178
+* ``oscar.apps.partner.availability.DelegateToStockRecord``

+ 3
- 119
oscar/apps/partner/abstract_models.py View File

@@ -1,16 +1,13 @@
1
-from decimal import Decimal as D
2
-import warnings
3
-
4 1
 from django.db import models
5 2
 from django.conf import settings
6
-from oscar.core.loading import get_model
7 3
 from django.utils.translation import ugettext_lazy as _
8 4
 from django.utils.importlib import import_module as django_import_module
9
-from oscar.core.compat import AUTH_USER_MODEL
10 5
 
11
-from oscar.core.loading import get_class
6
+from oscar.core.loading import get_model, get_class
7
+from oscar.core.compat import AUTH_USER_MODEL
12 8
 from oscar.models.fields import AutoSlugField
13 9
 from oscar.apps.partner.exceptions import InvalidStockAdjustment
10
+
14 11
 DefaultWrapper = get_class('partner.wrappers', 'DefaultWrapper')
15 12
 
16 13
 
@@ -255,119 +252,6 @@ class AbstractStockRecord(models.Model):
255 252
             return False
256 253
         return self.net_stock_level < self.low_stock_threshold
257 254
 
258
-    # Stock wrapper methods - deprecated since 0.6
259
-
260
-    @property
261
-    def is_available_to_buy(self):
262
-        """
263
-        Return whether this stockrecord allows the product to be purchased
264
-        """
265
-        warnings.warn((
266
-            "StockRecord.is_available_to_buy is deprecated and will be "
267
-            "removed in 0.7.  Use a strategy class to determine availability "
268
-            "instead"), DeprecationWarning)
269
-        return get_partner_wrapper(self.partner_id).is_available_to_buy(self)
270
-
271
-    def is_purchase_permitted(self, user=None, quantity=1, product=None):
272
-        """
273
-        Return whether this stockrecord allows the product to be purchased by a
274
-        specific user and quantity
275
-        """
276
-        warnings.warn((
277
-            "StockRecord.is_purchase_permitted is deprecated and will be "
278
-            "removed in 0.7.  Use a strategy class to determine availability "
279
-            "instead"), DeprecationWarning)
280
-        return get_partner_wrapper(
281
-            self.partner_id).is_purchase_permitted(self, user, quantity,
282
-                                                   product)
283
-
284
-    @property
285
-    def availability_code(self):
286
-        """
287
-        Return an product's availability as a code for use in CSS to add icons
288
-        to the overall availability mark-up.  For example, "instock",
289
-        "unavailable".
290
-        """
291
-        warnings.warn((
292
-            "StockRecord.availability_code is deprecated and will be "
293
-            "removed in 0.7.  Use a strategy class to determine availability "
294
-            "instead"), DeprecationWarning)
295
-        return get_partner_wrapper(self.partner_id).availability_code(self)
296
-
297
-    @property
298
-    def availability(self):
299
-        """
300
-        Return a product's availability as a string that can be displayed to
301
-        the user.  For example, "In stock", "Unavailable".
302
-        """
303
-        warnings.warn((
304
-            "StockRecord.availability is deprecated and will be "
305
-            "removed in 0.7.  Use a strategy class to determine availability "
306
-            "instead"), DeprecationWarning)
307
-        return get_partner_wrapper(self.partner_id).availability(self)
308
-
309
-    def max_purchase_quantity(self, user=None):
310
-        """
311
-        Return an item's availability as a string
312
-
313
-        :param user: (optional) The user who wants to purchase
314
-        """
315
-        warnings.warn((
316
-            "StockRecord.max_purchase_quantity is deprecated and will be "
317
-            "removed in 0.7.  Use a strategy class to determine availability "
318
-            "instead"), DeprecationWarning)
319
-        return get_partner_wrapper(
320
-            self.partner_id).max_purchase_quantity(self, user)
321
-
322
-    @property
323
-    def dispatch_date(self):
324
-        """
325
-        Return the estimated dispatch date for a line
326
-        """
327
-        warnings.warn((
328
-            "StockRecord.dispatch_date is deprecated and will be "
329
-            "removed in 0.7.  Use a strategy class to determine availability "
330
-            "instead"), DeprecationWarning)
331
-        return get_partner_wrapper(self.partner_id).dispatch_date(self)
332
-
333
-    @property
334
-    def lead_time(self):
335
-        warnings.warn((
336
-            "StockRecord.lead_time is deprecated and will be "
337
-            "removed in 0.7.  Use a strategy class to determine availability "
338
-            "instead"), DeprecationWarning)
339
-        return get_partner_wrapper(self.partner_id).lead_time(self)
340
-
341
-    # Price methods - deprecated in 0.6
342
-
343
-    @property
344
-    def price_incl_tax(self):
345
-        """
346
-        Return a product's price including tax.
347
-
348
-        This defaults to the price_excl_tax as tax calculations are
349
-        domain specific.  This class needs to be subclassed and tax logic
350
-        added to this method.
351
-        """
352
-        warnings.warn((
353
-            "StockRecord.price_incl_tax is deprecated and will be "
354
-            "removed in 0.7.  Use a strategy class to determine price "
355
-            "information instead"), DeprecationWarning, stacklevel=2)
356
-        if self.price_excl_tax is None:
357
-            return D('0.00')
358
-        return self.price_excl_tax + self.price_tax
359
-
360
-    @property
361
-    def price_tax(self):
362
-        """
363
-        Return a product's tax value
364
-        """
365
-        warnings.warn((
366
-            "StockRecord.price_incl_tax is deprecated and will be "
367
-            "removed in 0.7.  Use a strategy class to determine price "
368
-            "information instead"), DeprecationWarning)
369
-        return get_partner_wrapper(self.partner_id).calculate_tax(self)
370
-
371 255
 
372 256
 class AbstractStockAlert(models.Model):
373 257
     """

+ 0
- 39
oscar/apps/partner/availability.py View File

@@ -108,42 +108,3 @@ class StockRequired(Base):
108 108
         if self.num_available > 0:
109 109
             return _("In stock (%d available)") % self.num_available
110 110
         return _("Unavailable")
111
-
112
-
113
-class DelegateToStockRecord(Base):
114
-    """
115
-    An availability class which delegates all calls to the
116
-    stockrecord itself.  This will exercise the deprecated methods on the
117
-    stockrecord that call "partner wrapper" classes.
118
-
119
-    This is backwards compatible with Oscar<0.6
120
-    """
121
-
122
-    def __init__(self, product, stockrecord=None, user=None):
123
-        self.product = product
124
-        self.stockrecord = stockrecord
125
-        self.user = user
126
-
127
-    @property
128
-    def is_available_to_buy(self):
129
-        if self.stockrecord is None:
130
-            return False
131
-        if not self.product.get_product_class().track_stock:
132
-            return True
133
-        return self.stockrecord.is_available_to_buy
134
-
135
-    def is_purchase_permitted(self, quantity):
136
-        return self.stockrecord.is_purchase_permitted(
137
-            self.user, quantity, self.product)
138
-
139
-    @property
140
-    def code(self):
141
-        return self.stockrecord.availability_code
142
-
143
-    @property
144
-    def message(self):
145
-        return self.stockrecord.availability
146
-
147
-    @property
148
-    def dispatch_date(self):
149
-        return self.stockrecord.dispatch_date

+ 0
- 37
oscar/apps/partner/prices.py View File

@@ -94,40 +94,3 @@ class TaxInclusiveFixedPrice(FixedPrice):
94 94
     @property
95 95
     def effective_price(self):
96 96
         return self.incl_tax
97
-
98
-
99
-class DelegateToStockRecord(Base):
100
-    """
101
-    Pricing policy which wraps around an existing stockrecord.
102
-
103
-    This is backwards compatible with Oscar<0.6 where taxes were calculated by
104
-    "partner wrappers" which wrapped around stockrecords.
105
-    """
106
-    is_tax_known = True
107
-
108
-    def __init__(self, stockrecord):
109
-        self.stockrecord = stockrecord
110
-
111
-    @property
112
-    def exists(self):
113
-        return self.stockrecord is not None
114
-
115
-    @property
116
-    def excl_tax(self):
117
-        return self.stockrecord.price_excl_tax
118
-
119
-    @property
120
-    def incl_tax(self):
121
-        return self.stockrecord.price_incl_tax
122
-
123
-    @property
124
-    def tax(self):
125
-        return self.stockrecord.price_tax
126
-
127
-    @property
128
-    def retail(self):
129
-        return self.stockrecord.price_retail
130
-
131
-    @property
132
-    def currency(self):
133
-        return self.stockrecord.price_currency

+ 2
- 1
oscar/test/factories.py View File

@@ -53,7 +53,8 @@ def create_purchase_info(record):
53 53
             record.price_excl_tax,
54 54
             D('0.00')  # Default to no tax
55 55
         ),
56
-        availability=availability.DelegateToStockRecord(record),
56
+        availability=availability.StockRequired(
57
+            record.net_stock_level),
57 58
         stockrecord=record
58 59
     )
59 60
 

+ 0
- 41
tests/integration/partner/availability_tests.py View File

@@ -1,41 +0,0 @@
1
-from django.test import TestCase
2
-
3
-from oscar.apps.partner import availability
4
-from oscar.test import factories, decorators
5
-
6
-
7
-@decorators.ignore_deprecation_warnings
8
-class TestDelegateToStockRecordWrapper(TestCase):
9
-
10
-    def setUp(self):
11
-        self.product = factories.create_product()
12
-        self.stockrecord = factories.create_stockrecord(self.product)
13
-        self.assertTrue(self.product.get_product_class().track_stock)
14
-
15
-        self.availability = availability.DelegateToStockRecord(
16
-            self.product, self.stockrecord)
17
-
18
-    def test_delegates_is_available_to_buy(self):
19
-        self.assertEqual(
20
-            self.stockrecord.is_available_to_buy,
21
-            self.availability.is_available_to_buy)
22
-
23
-    def test_delegates_is_purchase_permitted(self):
24
-        self.assertEqual(
25
-            self.stockrecord.is_purchase_permitted(1),
26
-            self.availability.is_purchase_permitted(quantity=1))
27
-
28
-    def test_delegates_availability_code(self):
29
-        self.assertEqual(
30
-            self.stockrecord.availability_code,
31
-            self.availability.code)
32
-
33
-    def test_delegates_availability_message(self):
34
-        self.assertEqual(
35
-            self.stockrecord.availability,
36
-            self.availability.message)
37
-
38
-    def test_delegates_dispatch_date(self):
39
-        self.assertEqual(
40
-            self.stockrecord.dispatch_date,
41
-            self.availability.dispatch_date)

+ 0
- 36
tests/unit/partner/model_tests.py View File

@@ -28,10 +28,6 @@ class TestStockRecord(TestCase):
28 28
         self.stockrecord = factories.create_stockrecord(
29 29
             self.product, price_excl_tax=D('10.00'), num_in_stock=10)
30 30
 
31
-    @decorators.ignore_deprecation_warnings
32
-    def test_get_price_incl_tax_defaults_to_no_tax(self):
33
-        self.assertEqual(D('10.00'), self.stockrecord.price_incl_tax)
34
-
35 31
     def test_get_price_excl_tax_returns_correct_value(self):
36 32
         self.assertEqual(D('10.00'), self.stockrecord.price_excl_tax)
37 33
 
@@ -69,38 +65,6 @@ class TestStockRecord(TestCase):
69 65
         self.assertEqual(0, self.stockrecord.num_allocated)
70 66
         self.assertEqual(10, self.stockrecord.num_in_stock)
71 67
 
72
-    @decorators.ignore_deprecation_warnings
73
-    def test_max_purchase_quantity(self):
74
-        self.assertEqual(10, self.stockrecord.max_purchase_quantity())
75
-
76
-
77
-@decorators.ignore_deprecation_warnings
78
-class CustomWrapperTests(TestCase):
79
-    """
80
-    Partner wrappers are deprecated.  This testcase will be removed/rewritten
81
-    in Oscar 0.7.
82
-    """
83
-
84
-    def setUp(self):
85
-        abstract_models.partner_wrappers = {1: DummyWrapper()}
86
-
87
-    def tearDown(self):
88
-        abstract_models.partner_wrappers = None
89
-
90
-    def test_wrapper_availability_gets_called(self):
91
-        product = factories.create_product(
92
-            price=D('10.00'), partner_name="Acme", num_in_stock=10)
93
-        stockrecord = product.stockrecords.all()[0]
94
-        self.assertEqual(u"Dummy response",
95
-                          six.text_type(stockrecord.availability))
96
-
97
-    def test_wrapper_dispatch_date_gets_called(self):
98
-        product = factories.create_product(
99
-            price=D('10.00'), partner_name="Acme", num_in_stock=10)
100
-        stockrecord = product.stockrecords.all()[0]
101
-        self.assertEqual("Another dummy response",
102
-                          stockrecord.dispatch_date)
103
-
104 68
 
105 69
 class TestPartnerAddress(TestCase):
106 70
 

+ 1
- 16
tests/unit/partner/price_tests.py View File

@@ -2,7 +2,7 @@ from django.test import TestCase
2 2
 from decimal import Decimal as D
3 3
 
4 4
 from oscar.core.prices import TaxNotKnown
5
-from oscar.apps.partner import prices, models
5
+from oscar.apps.partner import prices
6 6
 
7 7
 
8 8
 class TestUnavailable(TestCase):
@@ -22,21 +22,6 @@ class TestUnavailable(TestCase):
22 22
         self.assertIsNone(self.price.tax)
23 23
 
24 24
 
25
-class TestDelegateToStockRecord(TestCase):
26
-
27
-    def setUp(self):
28
-        self.record = models.StockRecord(
29
-            price_excl_tax=D('12.99'))
30
-        self.price = prices.DelegateToStockRecord(self.record)
31
-
32
-    def test_assumes_tax_is_known(self):
33
-        self.assertTrue(self.price.is_tax_known)
34
-
35
-    def test_has_correct_price(self):
36
-        self.assertEqual(self.record.price_excl_tax,
37
-                          self.price.excl_tax)
38
-
39
-
40 25
 class TestFixedPriceWithoutTax(TestCase):
41 26
 
42 27
     def setUp(self):

Loading…
Cancel
Save