Просмотр исходного кода

Update several test/development dependencies and add support for Python 3.9

master
Samir Shah 5 лет назад
Родитель
Сommit
02a657f5a2

+ 1
- 1
.github/workflows/test.yml Просмотреть файл

@@ -14,7 +14,7 @@ jobs:
14 14
     strategy:
15 15
       fail-fast: true
16 16
       matrix:
17
-        python-version: [3.6, 3.7, 3.8]
17
+        python-version: [3.6, 3.7, 3.8, 3.9]
18 18
         django-version: [2.2, 3.0, 3.1]
19 19
     services:
20 20
       postgres:

+ 1
- 2
requirements.txt Просмотреть файл

@@ -20,13 +20,12 @@ whitenoise==5.2.0
20 20
 # Linting
21 21
 flake8==3.8.4
22 22
 flake8-debugger==4.0.0
23
-flake8-blind-except==0.1.1
24 23
 isort==5.7.0
25 24
 
26 25
 # Helpers
27 26
 pyprof2calltree==1.4.5
28 27
 ipdb==0.13.4
29
-ipython>=7.12,<7.20
28
+ipython>=7.12,<7.21
30 29
 
31 30
 # Country data
32 31
 pycountry>=19.8,<20.8

+ 13
- 11
setup.py Просмотреть файл

@@ -33,9 +33,9 @@ install_requires = [
33 33
     'purl>=0.7',
34 34
     # For phone number field
35 35
     'phonenumbers',
36
-    'django-phonenumber-field>=3.0.0,<4.0.0',
37
-    # Used for oscar.test.newfactories
38
-    'factory-boy>=2.4.1,<3.0',
36
+    'django-phonenumber-field>=4.0.0,<6.0.0',
37
+    # Used for oscar.test.factories
38
+    'factory-boy>=3.0,<3.3',
39 39
     # Used for automatically building larger HTML tables
40 40
     'django-tables2>=2.3,<2.4',
41 41
     # Used for manipulating form field attributes in templates (eg: add
@@ -47,10 +47,10 @@ sorl_thumbnail_version = 'sorl-thumbnail>=12.6,<12.7'
47 47
 easy_thumbnails_version = 'easy-thumbnails>=2.7,<2.8'
48 48
 
49 49
 docs_requires = [
50
-    'Sphinx==2.2.2',
50
+    'Sphinx>=3.4,<3.5',
51 51
     'sphinxcontrib-napoleon==0.7',
52
-    'sphinxcontrib-spelling==4.3.0',
53
-    'sphinx_rtd_theme==0.4.3',
52
+    'sphinxcontrib-spelling==7.1.0',
53
+    'sphinx_rtd_theme==0.5.1',
54 54
     'sphinx-issues==1.2.0',
55 55
     sorl_thumbnail_version,
56 56
     easy_thumbnails_version,
@@ -58,13 +58,13 @@ docs_requires = [
58 58
 
59 59
 test_requires = [
60 60
     'WebTest>=2.0,<2.1',
61
-    'coverage>=5.0,<5.1',
61
+    'coverage>=5.4,<5.5',
62 62
     'django-webtest>=1.9,<1.10',
63 63
     'psycopg2-binary>=2.8,<2.9',
64
-    'pytest-django>=3.7,<3.8',
65
-    'pytest-xdist>=1.31,<1.32',
66
-    'tox>=3.14,<3.15',
67
-    'freezegun>=0.3,<0.4',
64
+    'pytest-django>=3.7,<3.9',
65
+    'pytest-xdist>=2.2,<3',
66
+    'tox>=3.21,<4',
67
+    'freezegun>=1.1,<2',
68 68
     sorl_thumbnail_version,
69 69
     easy_thumbnails_version,
70 70
 ]
@@ -107,6 +107,8 @@ setup(
107 107
         'Programming Language :: Python :: 3',
108 108
         'Programming Language :: Python :: 3.6',
109 109
         'Programming Language :: Python :: 3.7',
110
+        'Programming Language :: Python :: 3.8',
111
+        'Programming Language :: Python :: 3.9',
110 112
         'Topic :: Software Development :: Libraries :: Application Frameworks']
111 113
 )
112 114
 

+ 2
- 2
src/oscar/test/factories/address.py Просмотреть файл

@@ -8,7 +8,7 @@ __all__ = [
8 8
 ]
9 9
 
10 10
 
11
-class CountryFactory(factory.DjangoModelFactory):
11
+class CountryFactory(factory.django.DjangoModelFactory):
12 12
     iso_3166_1_a2 = 'GB'
13 13
     printable_name = "UNITED KINGDOM"
14 14
 
@@ -17,7 +17,7 @@ class CountryFactory(factory.DjangoModelFactory):
17 17
         django_get_or_create = ('iso_3166_1_a2',)
18 18
 
19 19
 
20
-class UserAddressFactory(factory.DjangoModelFactory):
20
+class UserAddressFactory(factory.django.DjangoModelFactory):
21 21
     title = "Dr"
22 22
     first_name = "Barry"
23 23
     last_name = 'Barrington'

+ 2
- 2
src/oscar/test/factories/basket.py Просмотреть файл

@@ -10,7 +10,7 @@ __all__ = [
10 10
 ]
11 11
 
12 12
 
13
-class BasketFactory(factory.DjangoModelFactory):
13
+class BasketFactory(factory.django.DjangoModelFactory):
14 14
 
15 15
     @factory.post_generation
16 16
     def set_strategy(self, create, extracted, **kwargs):
@@ -21,7 +21,7 @@ class BasketFactory(factory.DjangoModelFactory):
21 21
         model = get_model('basket', 'Basket')
22 22
 
23 23
 
24
-class BasketLineAttributeFactory(factory.DjangoModelFactory):
24
+class BasketLineAttributeFactory(factory.django.DjangoModelFactory):
25 25
     option = factory.SubFactory('oscar.test.factories.OptionFactory')
26 26
 
27 27
     class Meta:

+ 11
- 11
src/oscar/test/factories/catalogue.py Просмотреть файл

@@ -13,7 +13,7 @@ __all__ = [
13 13
 ]
14 14
 
15 15
 
16
-class ProductClassFactory(factory.DjangoModelFactory):
16
+class ProductClassFactory(factory.django.DjangoModelFactory):
17 17
     name = "Books"
18 18
     requires_shipping = True
19 19
     track_stock = True
@@ -22,7 +22,7 @@ class ProductClassFactory(factory.DjangoModelFactory):
22 22
         model = get_model('catalogue', 'ProductClass')
23 23
 
24 24
 
25
-class ProductFactory(factory.DjangoModelFactory):
25
+class ProductFactory(factory.django.DjangoModelFactory):
26 26
     class Meta:
27 27
         model = get_model('catalogue', 'Product')
28 28
 
@@ -37,7 +37,7 @@ class ProductFactory(factory.DjangoModelFactory):
37 37
         'oscar.test.factories.ProductCategoryFactory', 'product')
38 38
 
39 39
 
40
-class CategoryFactory(factory.DjangoModelFactory):
40
+class CategoryFactory(factory.django.DjangoModelFactory):
41 41
     name = factory.Sequence(lambda n: 'Category %d' % n)
42 42
 
43 43
     # Very naive handling of treebeard node fields. Works though!
@@ -48,14 +48,14 @@ class CategoryFactory(factory.DjangoModelFactory):
48 48
         model = get_model('catalogue', 'Category')
49 49
 
50 50
 
51
-class ProductCategoryFactory(factory.DjangoModelFactory):
51
+class ProductCategoryFactory(factory.django.DjangoModelFactory):
52 52
     category = factory.SubFactory(CategoryFactory)
53 53
 
54 54
     class Meta:
55 55
         model = get_model('catalogue', 'ProductCategory')
56 56
 
57 57
 
58
-class ProductAttributeFactory(factory.DjangoModelFactory):
58
+class ProductAttributeFactory(factory.django.DjangoModelFactory):
59 59
     code = name = 'weight'
60 60
     product_class = factory.SubFactory(ProductClassFactory)
61 61
     type = "float"
@@ -64,7 +64,7 @@ class ProductAttributeFactory(factory.DjangoModelFactory):
64 64
         model = get_model('catalogue', 'ProductAttribute')
65 65
 
66 66
 
67
-class OptionFactory(factory.DjangoModelFactory):
67
+class OptionFactory(factory.django.DjangoModelFactory):
68 68
     class Meta:
69 69
         model = get_model('catalogue', 'Option')
70 70
 
@@ -74,7 +74,7 @@ class OptionFactory(factory.DjangoModelFactory):
74 74
     required = False
75 75
 
76 76
 
77
-class AttributeOptionFactory(factory.DjangoModelFactory):
77
+class AttributeOptionFactory(factory.django.DjangoModelFactory):
78 78
     # Ideally we'd get_or_create a AttributeOptionGroup here, but I'm not
79 79
     # aware of how to not create a unique option group for each call of the
80 80
     # factory
@@ -85,14 +85,14 @@ class AttributeOptionFactory(factory.DjangoModelFactory):
85 85
         model = get_model('catalogue', 'AttributeOption')
86 86
 
87 87
 
88
-class AttributeOptionGroupFactory(factory.DjangoModelFactory):
88
+class AttributeOptionGroupFactory(factory.django.DjangoModelFactory):
89 89
     name = 'Grüppchen'
90 90
 
91 91
     class Meta:
92 92
         model = get_model('catalogue', 'AttributeOptionGroup')
93 93
 
94 94
 
95
-class ProductAttributeValueFactory(factory.DjangoModelFactory):
95
+class ProductAttributeValueFactory(factory.django.DjangoModelFactory):
96 96
     attribute = factory.SubFactory(ProductAttributeFactory)
97 97
     product = factory.SubFactory(ProductFactory)
98 98
 
@@ -100,7 +100,7 @@ class ProductAttributeValueFactory(factory.DjangoModelFactory):
100 100
         model = get_model('catalogue', 'ProductAttributeValue')
101 101
 
102 102
 
103
-class ProductReviewFactory(factory.DjangoModelFactory):
103
+class ProductReviewFactory(factory.django.DjangoModelFactory):
104 104
     score = 5
105 105
     product = factory.SubFactory(ProductFactory, stockrecords=[])
106 106
 
@@ -108,7 +108,7 @@ class ProductReviewFactory(factory.DjangoModelFactory):
108 108
         model = get_model('reviews', 'ProductReview')
109 109
 
110 110
 
111
-class ProductImageFactory(factory.DjangoModelFactory):
111
+class ProductImageFactory(factory.django.DjangoModelFactory):
112 112
     product = factory.SubFactory(ProductFactory, stockrecords=[])
113 113
     original = factory.django.ImageField(width=100, height=200, filename='test_image.jpg')
114 114
 

+ 2
- 2
src/oscar/test/factories/contrib.py Просмотреть файл

@@ -5,7 +5,7 @@ from django.contrib.sites import models as sites_models
5 5
 __all__ = ['PermissionFactory', 'SiteFactory']
6 6
 
7 7
 
8
-class PermissionFactory(factory.DjangoModelFactory):
8
+class PermissionFactory(factory.django.DjangoModelFactory):
9 9
     name = 'Dummy permission'
10 10
     codename = 'dummy'
11 11
 
@@ -14,7 +14,7 @@ class PermissionFactory(factory.DjangoModelFactory):
14 14
         django_get_or_create = ('content_type', 'codename')
15 15
 
16 16
 
17
-class SiteFactory(factory.DjangoModelFactory):
17
+class SiteFactory(factory.django.DjangoModelFactory):
18 18
     domain = factory.Sequence(lambda n: 'site-%d.oscarcommerce.com' % n)
19 19
 
20 20
     class Meta:

+ 2
- 2
src/oscar/test/factories/customer.py Просмотреть файл

@@ -6,7 +6,7 @@ from oscar.core.loading import get_model
6 6
 __all__ = ['ProductAlertFactory', 'UserFactory']
7 7
 
8 8
 
9
-class ProductAlertFactory(factory.DjangoModelFactory):
9
+class ProductAlertFactory(factory.django.DjangoModelFactory):
10 10
     class Meta:
11 11
         model = get_model('customer', 'ProductAlert')
12 12
 
@@ -15,7 +15,7 @@ class ProductAlertFactory(factory.DjangoModelFactory):
15 15
     status = Meta.model.ACTIVE
16 16
 
17 17
 
18
-class UserFactory(factory.DjangoModelFactory):
18
+class UserFactory(factory.django.DjangoModelFactory):
19 19
     username = factory.Sequence(lambda n: 'the_j_meister nummer %d' % n)
20 20
     email = factory.Sequence(lambda n: 'example_%s@example.com' % n)
21 21
     first_name = 'joseph'

+ 4
- 4
src/oscar/test/factories/offer.py Просмотреть файл

@@ -8,7 +8,7 @@ __all__ = [
8 8
 ]
9 9
 
10 10
 
11
-class RangeFactory(factory.DjangoModelFactory):
11
+class RangeFactory(factory.django.DjangoModelFactory):
12 12
     name = factory.Sequence(lambda n: 'Range %d' % n)
13 13
     slug = factory.Sequence(lambda n: 'range-%d' % n)
14 14
 
@@ -26,7 +26,7 @@ class RangeFactory(factory.DjangoModelFactory):
26 26
             RangeProduct.objects.create(product=product, range=self)
27 27
 
28 28
 
29
-class BenefitFactory(factory.DjangoModelFactory):
29
+class BenefitFactory(factory.django.DjangoModelFactory):
30 30
     type = get_model('offer', 'Benefit').PERCENTAGE
31 31
     value = 10
32 32
     max_affected_items = None
@@ -36,7 +36,7 @@ class BenefitFactory(factory.DjangoModelFactory):
36 36
         model = get_model('offer', 'Benefit')
37 37
 
38 38
 
39
-class ConditionFactory(factory.DjangoModelFactory):
39
+class ConditionFactory(factory.django.DjangoModelFactory):
40 40
     type = get_model('offer', 'Condition').COUNT
41 41
     value = 10
42 42
     range = factory.SubFactory(RangeFactory)
@@ -45,7 +45,7 @@ class ConditionFactory(factory.DjangoModelFactory):
45 45
         model = get_model('offer', 'Condition')
46 46
 
47 47
 
48
-class ConditionalOfferFactory(factory.DjangoModelFactory):
48
+class ConditionalOfferFactory(factory.django.DjangoModelFactory):
49 49
     name = factory.Sequence(lambda n: 'Test offer %d' % n)
50 50
     benefit = factory.SubFactory(BenefitFactory)
51 51
     condition = factory.SubFactory(ConditionFactory)

+ 7
- 7
src/oscar/test/factories/order.py Просмотреть файл

@@ -17,7 +17,7 @@ __all__ = [
17 17
 ]
18 18
 
19 19
 
20
-class BillingAddressFactory(factory.DjangoModelFactory):
20
+class BillingAddressFactory(factory.django.DjangoModelFactory):
21 21
     country = factory.SubFactory('oscar.test.factories.CountryFactory')
22 22
 
23 23
     first_name = 'John'
@@ -31,7 +31,7 @@ class BillingAddressFactory(factory.DjangoModelFactory):
31 31
         model = get_model('order', 'BillingAddress')
32 32
 
33 33
 
34
-class ShippingAddressFactory(factory.DjangoModelFactory):
34
+class ShippingAddressFactory(factory.django.DjangoModelFactory):
35 35
     country = factory.SubFactory('oscar.test.factories.CountryFactory')
36 36
 
37 37
     first_name = 'John'
@@ -46,13 +46,13 @@ class ShippingAddressFactory(factory.DjangoModelFactory):
46 46
         model = get_model('order', 'ShippingAddress')
47 47
 
48 48
 
49
-class OrderDiscountFactory(factory.DjangoModelFactory):
49
+class OrderDiscountFactory(factory.django.DjangoModelFactory):
50 50
 
51 51
     class Meta:
52 52
         model = get_model('order', 'OrderDiscount')
53 53
 
54 54
 
55
-class OrderFactory(factory.DjangoModelFactory):
55
+class OrderFactory(factory.django.DjangoModelFactory):
56 56
     class Meta:
57 57
         model = get_model('order', 'Order')
58 58
 
@@ -105,7 +105,7 @@ class OrderFactory(factory.DjangoModelFactory):
105 105
                 OrderCreator().create_line_models(obj, line)
106 106
 
107 107
 
108
-class OrderLineFactory(factory.DjangoModelFactory):
108
+class OrderLineFactory(factory.django.DjangoModelFactory):
109 109
     order = factory.SubFactory(OrderFactory)
110 110
     product = factory.SubFactory(
111 111
         'oscar.test.factories.ProductFactory')
@@ -129,7 +129,7 @@ class OrderLineFactory(factory.DjangoModelFactory):
129 129
         model = get_model('order', 'Line')
130 130
 
131 131
 
132
-class ShippingEventTypeFactory(factory.DjangoModelFactory):
132
+class ShippingEventTypeFactory(factory.django.DjangoModelFactory):
133 133
     name = 'Test event'
134 134
     code = factory.LazyAttribute(lambda o: slugify(o.name).replace('-', '_'))
135 135
 
@@ -138,7 +138,7 @@ class ShippingEventTypeFactory(factory.DjangoModelFactory):
138 138
         django_get_or_create = ('code', )
139 139
 
140 140
 
141
-class ShippingEventFactory(factory.DjangoModelFactory):
141
+class ShippingEventFactory(factory.django.DjangoModelFactory):
142 142
 
143 143
     order = factory.SubFactory(OrderFactory)
144 144
     event_type = factory.SubFactory(ShippingEventTypeFactory)

+ 2
- 2
src/oscar/test/factories/partner.py Просмотреть файл

@@ -9,7 +9,7 @@ __all__ = [
9 9
 ]
10 10
 
11 11
 
12
-class PartnerFactory(factory.DjangoModelFactory):
12
+class PartnerFactory(factory.django.DjangoModelFactory):
13 13
     name = "Gardners"
14 14
 
15 15
     class Meta:
@@ -25,7 +25,7 @@ class PartnerFactory(factory.DjangoModelFactory):
25 25
                 self.users.add(user)
26 26
 
27 27
 
28
-class StockRecordFactory(factory.DjangoModelFactory):
28
+class StockRecordFactory(factory.django.DjangoModelFactory):
29 29
     partner = factory.SubFactory(PartnerFactory)
30 30
     partner_sku = factory.Sequence(lambda n: 'unit%d' % n)
31 31
     price_currency = "GBP"

+ 3
- 3
src/oscar/test/factories/payment.py Просмотреть файл

@@ -7,7 +7,7 @@ __all__ = [
7 7
 ]
8 8
 
9 9
 
10
-class SourceTypeFactory(factory.DjangoModelFactory):
10
+class SourceTypeFactory(factory.django.DjangoModelFactory):
11 11
     name = 'Creditcard'
12 12
     code = 'creditcard'
13 13
 
@@ -15,7 +15,7 @@ class SourceTypeFactory(factory.DjangoModelFactory):
15 15
         model = get_model('payment', 'SourceType')
16 16
 
17 17
 
18
-class SourceFactory(factory.DjangoModelFactory):
18
+class SourceFactory(factory.django.DjangoModelFactory):
19 19
     order = factory.SubFactory(
20 20
         'oscar.test.factories.OrderFactory')
21 21
     source_type = factory.SubFactory(SourceTypeFactory)
@@ -24,7 +24,7 @@ class SourceFactory(factory.DjangoModelFactory):
24 24
         model = get_model('payment', 'Source')
25 25
 
26 26
 
27
-class TransactionFactory(factory.DjangoModelFactory):
27
+class TransactionFactory(factory.django.DjangoModelFactory):
28 28
     amount = factory.LazyAttribute(lambda obj: obj.source.order.total_incl_tax)
29 29
     reference = factory.LazyAttribute(lambda obj: obj.source.order.number)
30 30
     source = factory.SubFactory(SourceFactory)

+ 2
- 2
src/oscar/test/factories/voucher.py Просмотреть файл

@@ -9,7 +9,7 @@ from oscar.test.factories import ConditionalOfferFactory
9 9
 __all__ = ['VoucherFactory', 'VoucherSetFactory']
10 10
 
11 11
 
12
-class VoucherFactory(factory.DjangoModelFactory):
12
+class VoucherFactory(factory.django.DjangoModelFactory):
13 13
     name = "My voucher"
14 14
     code = "MYVOUCHER"
15 15
 
@@ -20,7 +20,7 @@ class VoucherFactory(factory.DjangoModelFactory):
20 20
         model = get_model('voucher', 'Voucher')
21 21
 
22 22
 
23
-class VoucherSetFactory(factory.DjangoModelFactory):
23
+class VoucherSetFactory(factory.django.DjangoModelFactory):
24 24
     name = factory.Sequence(lambda n: 'Voucher Set %d' % n)
25 25
     count = 100
26 26
     code_length = 12

+ 1
- 1
src/oscar/test/factories/wishlists.py Просмотреть файл

@@ -5,7 +5,7 @@ from oscar.core.loading import get_model
5 5
 __all__ = ['WishListFactory']
6 6
 
7 7
 
8
-class WishListFactory(factory.DjangoModelFactory):
8
+class WishListFactory(factory.django.DjangoModelFactory):
9 9
     name = factory.Sequence(lambda n: 'Wishlist %d' % n)
10 10
 
11 11
     class Meta:

+ 1
- 1
tox.ini Просмотреть файл

@@ -1,6 +1,6 @@
1 1
 [tox]
2 2
 envlist =
3
-    py{36,37,38}-django{22,30,31}
3
+    py{36,37,38,39}-django{22,30,31}
4 4
     lint
5 5
     sandbox
6 6
     docs

Загрузка…
Отмена
Сохранить