ob-dj-store 0.0.20.1__py3-none-any.whl → 0.0.20.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ob_dj_store/apis/stores/filters.py +5 -19
- ob_dj_store/apis/stores/rest/serializers/serializers.py +13 -17
- ob_dj_store/apis/stores/views.py +74 -226
- ob_dj_store/apis/tap/views.py +2 -6
- ob_dj_store/core/stores/admin.py +3 -20
- ob_dj_store/core/stores/admin_inlines.py +1 -7
- ob_dj_store/core/stores/gateway/tap/admin.py +1 -3
- ob_dj_store/core/stores/gateway/tap/managers.py +1 -6
- ob_dj_store/core/stores/gateway/tap/migrations/0001_initial.py +1 -3
- ob_dj_store/core/stores/gateway/tap/models.py +3 -12
- ob_dj_store/core/stores/gateway/tap/utils.py +2 -7
- ob_dj_store/core/stores/managers.py +1 -3
- ob_dj_store/core/stores/migrations/0001_initial.py +1 -4
- ob_dj_store/core/stores/migrations/0005_auto_20220425_2119.py +2 -5
- ob_dj_store/core/stores/migrations/0005_auto_20220427_1729.py +1 -2
- ob_dj_store/core/stores/migrations/0006_auto_20220428_0100.py +2 -8
- ob_dj_store/core/stores/migrations/0007_cart_cartitem_order_orderitem.py +2 -8
- ob_dj_store/core/stores/migrations/0010_auto_20220509_1633.py +1 -4
- ob_dj_store/core/stores/migrations/0012_auto_20220514_0633.py +1 -4
- ob_dj_store/core/stores/migrations/0013_auto_20220518_1539.py +1 -4
- ob_dj_store/core/stores/migrations/0014_auto_20220519_0018.py +3 -12
- ob_dj_store/core/stores/migrations/0017_auto_20220524_0912.py +3 -10
- ob_dj_store/core/stores/migrations/0018_auto_20220524_1613.py +1 -3
- ob_dj_store/core/stores/migrations/0021_auto_20220531_1849.py +1 -4
- ob_dj_store/core/stores/migrations/0026_auto_20220630_1913.py +8 -32
- ob_dj_store/core/stores/migrations/0031_auto_20220811_1733.py +1 -4
- ob_dj_store/core/stores/migrations/0033_auto_20220815_0133.py +2 -8
- ob_dj_store/core/stores/migrations/0039_auto_20220831_1521.py +1 -4
- ob_dj_store/core/stores/migrations/0044_remove_productvariant_has_inventory.py +1 -4
- ob_dj_store/core/stores/migrations/0049_auto_20221029_1524.py +2 -8
- ob_dj_store/core/stores/migrations/0050_favoriteextra.py +1 -3
- ob_dj_store/core/stores/migrations/0052_auto_20221129_1732.py +2 -8
- ob_dj_store/core/stores/migrations/0059_auto_20230217_2006.py +2 -8
- ob_dj_store/core/stores/migrations/0062_auto_20230226_2005.py +2 -6
- ob_dj_store/core/stores/migrations/0064_auto_20230228_1814.py +1 -2
- ob_dj_store/core/stores/migrations/0066_auto_20230304_1532.py +2 -8
- ob_dj_store/core/stores/migrations/0070_auto_20230323_1628.py +1 -4
- ob_dj_store/core/stores/migrations/0071_auto_20230328_1825.py +2 -5
- ob_dj_store/core/stores/migrations/0082_auto_20230613_1424.py +1 -4
- ob_dj_store/core/stores/migrations/0084_payment_result.py +1 -3
- ob_dj_store/core/stores/migrations/0087_auto_20230828_2138.py +1 -4
- ob_dj_store/core/stores/migrations/0097_auto_20231108_1939.py +1 -4
- ob_dj_store/core/stores/migrations/0100_remove_shippingmethod_type_arabic.py +1 -4
- ob_dj_store/core/stores/migrations/0106_alter_paymentmethod_payment_provider.py +35 -0
- ob_dj_store/core/stores/models/_address.py +1 -3
- ob_dj_store/core/stores/models/_cart.py +1 -3
- ob_dj_store/core/stores/models/_feedback.py +1 -3
- ob_dj_store/core/stores/models/_inventory.py +1 -2
- ob_dj_store/core/stores/models/_order.py +5 -19
- ob_dj_store/core/stores/models/_payment.py +3 -12
- ob_dj_store/core/stores/models/_product.py +4 -16
- ob_dj_store/core/stores/models/_store.py +3 -11
- ob_dj_store/core/stores/models/_wallet.py +7 -23
- ob_dj_store/core/stores/receivers.py +7 -20
- ob_dj_store/core/stores/utils.py +1 -2
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/METADATA +1 -1
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/RECORD +59 -58
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/WHEEL +1 -1
- {ob_dj_store-0.0.20.1.dist-info → ob_dj_store-0.0.20.3.dist-info}/top_level.txt +0 -0
@@ -13,10 +13,7 @@ class Migration(migrations.Migration):
|
|
13
13
|
]
|
14
14
|
|
15
15
|
operations = [
|
16
|
-
migrations.RemoveField(
|
17
|
-
model_name="product",
|
18
|
-
name="category",
|
19
|
-
),
|
16
|
+
migrations.RemoveField(model_name="product", name="category",),
|
20
17
|
migrations.AddField(
|
21
18
|
model_name="product",
|
22
19
|
name="category",
|
@@ -26,10 +26,7 @@ class Migration(migrations.Migration):
|
|
26
26
|
"verbose_name_plural": "Store Attribute Choices",
|
27
27
|
},
|
28
28
|
),
|
29
|
-
migrations.RemoveField(
|
30
|
-
model_name="attributechoice",
|
31
|
-
name="price",
|
32
|
-
),
|
29
|
+
migrations.RemoveField(model_name="attributechoice", name="price",),
|
33
30
|
migrations.AddField(
|
34
31
|
model_name="storeattributechoice",
|
35
32
|
name="price",
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Generated by Django 3.2.8 on 2024-12-22 19:07
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
("stores", "0105_store_is_open_after_midnight"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AlterField(
|
14
|
+
model_name="paymentmethod",
|
15
|
+
name="payment_provider",
|
16
|
+
field=models.CharField(
|
17
|
+
choices=[
|
18
|
+
("cod", "cash on delivery"),
|
19
|
+
("src_all", "TAP all payment methods"),
|
20
|
+
("src_card", "Tap Credit Card"),
|
21
|
+
("src_kw.knet", "Tap knet"),
|
22
|
+
("paypal", "Paypal"),
|
23
|
+
("stripe", "Stripe"),
|
24
|
+
("wallet", "Wallet"),
|
25
|
+
("gift", "Gift"),
|
26
|
+
("src_apple_pay", "Apple Pay"),
|
27
|
+
("google_pay", "Google Pay"),
|
28
|
+
("src_sa.mada", "Mada"),
|
29
|
+
("src_bh.benefit", "Benefit"),
|
30
|
+
],
|
31
|
+
default="cod",
|
32
|
+
max_length=20,
|
33
|
+
),
|
34
|
+
),
|
35
|
+
]
|
@@ -10,9 +10,7 @@ class BaseAddress(models.Model):
|
|
10
10
|
Base class for all address models.
|
11
11
|
"""
|
12
12
|
|
13
|
-
address_line = models.CharField(
|
14
|
-
max_length=250,
|
15
|
-
)
|
13
|
+
address_line = models.CharField(max_length=250,)
|
16
14
|
address_line_arabic = models.CharField(max_length=250, blank=True, null=True)
|
17
15
|
postal_code = models.CharField(
|
18
16
|
max_length=64, help_text=_("The address postal/zip code.")
|
@@ -63,9 +63,7 @@ class Cart(models.Model):
|
|
63
63
|
return self.total_price + self.get_applied_tax_amount()
|
64
64
|
|
65
65
|
@property
|
66
|
-
def full_price(
|
67
|
-
self,
|
68
|
-
) -> Decimal:
|
66
|
+
def full_price(self,) -> Decimal:
|
69
67
|
return self.total_price_with_tax - self.discount_offer_amount
|
70
68
|
|
71
69
|
@property
|
@@ -22,9 +22,7 @@ class Feedback(models.Model):
|
|
22
22
|
get_user_model(), related_name="feedbacks", on_delete=models.CASCADE
|
23
23
|
)
|
24
24
|
order = models.ForeignKey(
|
25
|
-
"stores.Order",
|
26
|
-
related_name="feedbacks",
|
27
|
-
on_delete=models.CASCADE,
|
25
|
+
"stores.Order", related_name="feedbacks", on_delete=models.CASCADE,
|
28
26
|
)
|
29
27
|
review = models.CharField(
|
30
28
|
max_length=100, choices=Reviews.choices, default="NOT_AVAILABLE"
|
@@ -37,8 +37,7 @@ class Inventory(DjangoModelCleanMixin, models.Model):
|
|
37
37
|
# Add is_primary for variant
|
38
38
|
is_primary = models.BooleanField(default=True)
|
39
39
|
preparation_time = models.DurationField(
|
40
|
-
default=timedelta(minutes=0),
|
41
|
-
help_text=_("Preparation time in minutes"),
|
40
|
+
default=timedelta(minutes=0), help_text=_("Preparation time in minutes"),
|
42
41
|
)
|
43
42
|
created_at = models.DateTimeField(auto_now_add=True)
|
44
43
|
updated_at = models.DateTimeField(auto_now=True)
|
@@ -41,10 +41,7 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
41
41
|
"stores.Discount", on_delete=models.PROTECT, null=True, blank=True
|
42
42
|
)
|
43
43
|
customer = models.ForeignKey(
|
44
|
-
get_user_model(),
|
45
|
-
related_name="orders",
|
46
|
-
on_delete=models.SET_NULL,
|
47
|
-
null=True,
|
44
|
+
get_user_model(), related_name="orders", on_delete=models.SET_NULL, null=True,
|
48
45
|
)
|
49
46
|
store = models.ForeignKey(
|
50
47
|
"stores.Store",
|
@@ -82,9 +79,7 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
82
79
|
blank=True,
|
83
80
|
)
|
84
81
|
status = models.CharField(
|
85
|
-
max_length=32,
|
86
|
-
default=OrderStatus.PENDING,
|
87
|
-
choices=OrderStatus.choices,
|
82
|
+
max_length=32, default=OrderStatus.PENDING, choices=OrderStatus.choices,
|
88
83
|
)
|
89
84
|
# Add pickup time for an order, Pick up can be now or a later hour during the day
|
90
85
|
pickup_time = models.DateTimeField(
|
@@ -93,10 +88,7 @@ class Order(DjangoModelCleanMixin, models.Model):
|
|
93
88
|
# Order id of the pickup_car
|
94
89
|
car_id = models.PositiveIntegerField(null=True, blank=True)
|
95
90
|
# Pick up can be now or a later hour during the day. If pickup_time is not set,
|
96
|
-
extra_infos = models.JSONField(
|
97
|
-
null=True,
|
98
|
-
blank=True,
|
99
|
-
)
|
91
|
+
extra_infos = models.JSONField(null=True, blank=True,)
|
100
92
|
init_data = models.JSONField(null=True, blank=True)
|
101
93
|
|
102
94
|
# TODO: add pick_up_time maybe ?
|
@@ -195,10 +187,7 @@ class OrderItem(DjangoModelCleanMixin, models.Model):
|
|
195
187
|
total_price = models.DecimalField(max_digits=10, decimal_places=3, default=0)
|
196
188
|
quantity = models.PositiveIntegerField(
|
197
189
|
validators=[
|
198
|
-
MinValueValidator(
|
199
|
-
1,
|
200
|
-
message="Can you please provide a valid quantity !",
|
201
|
-
)
|
190
|
+
MinValueValidator(1, message="Can you please provide a valid quantity !",)
|
202
191
|
],
|
203
192
|
help_text=_("quantity of the variant"),
|
204
193
|
)
|
@@ -277,10 +266,7 @@ class OrderHistory(DjangoModelCleanMixin, models.Model):
|
|
277
266
|
"""
|
278
267
|
|
279
268
|
order = models.ForeignKey(Order, related_name="history", on_delete=models.CASCADE)
|
280
|
-
status = models.CharField(
|
281
|
-
max_length=32,
|
282
|
-
choices=Order.OrderStatus.choices,
|
283
|
-
)
|
269
|
+
status = models.CharField(max_length=32, choices=Order.OrderStatus.choices,)
|
284
270
|
created_at = models.DateTimeField(auto_now_add=True)
|
285
271
|
|
286
272
|
class Meta:
|
@@ -75,21 +75,12 @@ class Payment(models.Model):
|
|
75
75
|
related_name="user_payments",
|
76
76
|
)
|
77
77
|
status = models.CharField(
|
78
|
-
max_length=100,
|
79
|
-
default=PaymentStatus.INIT,
|
80
|
-
choices=PaymentStatus.choices,
|
78
|
+
max_length=100, default=PaymentStatus.INIT, choices=PaymentStatus.choices,
|
81
79
|
)
|
82
80
|
method = models.ForeignKey(
|
83
|
-
"stores.PaymentMethod",
|
84
|
-
on_delete=models.CASCADE,
|
85
|
-
null=True,
|
86
|
-
blank=True,
|
87
|
-
)
|
88
|
-
payment_tax = models.ForeignKey(
|
89
|
-
Tax,
|
90
|
-
on_delete=models.SET_NULL,
|
91
|
-
null=True,
|
81
|
+
"stores.PaymentMethod", on_delete=models.CASCADE, null=True, blank=True,
|
92
82
|
)
|
83
|
+
payment_tax = models.ForeignKey(Tax, on_delete=models.SET_NULL, null=True,)
|
93
84
|
orders = models.ManyToManyField("stores.Order", related_name="payments")
|
94
85
|
amount = models.DecimalField(
|
95
86
|
max_digits=settings.DEFAULT_MAX_DIGITS,
|
@@ -204,10 +204,7 @@ class Product(DjangoModelCleanMixin, models.Model):
|
|
204
204
|
|
205
205
|
name = models.CharField(max_length=200, help_text=_("Name"), unique=True)
|
206
206
|
name_arabic = models.CharField(
|
207
|
-
max_length=200,
|
208
|
-
null=True,
|
209
|
-
blank=True,
|
210
|
-
help_text=_("Name in arabic"),
|
207
|
+
max_length=200, null=True, blank=True, help_text=_("Name in arabic"),
|
211
208
|
)
|
212
209
|
slug = models.SlugField(max_length=255, unique=True)
|
213
210
|
label = models.CharField(
|
@@ -219,18 +216,11 @@ class Product(DjangoModelCleanMixin, models.Model):
|
|
219
216
|
description = models.TextField(null=True, blank=True)
|
220
217
|
description_arabic = models.TextField(null=True, blank=True)
|
221
218
|
# TODO: A product can be assigned to multiple categories
|
222
|
-
category = models.ManyToManyField(
|
223
|
-
Category,
|
224
|
-
related_name="products",
|
225
|
-
blank=True,
|
226
|
-
)
|
219
|
+
category = models.ManyToManyField(Category, related_name="products", blank=True,)
|
227
220
|
is_active = models.BooleanField(default=False)
|
228
221
|
is_featured = models.BooleanField(default=False)
|
229
222
|
tags = models.ManyToManyField(ProductTag, related_name="products", blank=True)
|
230
|
-
type = models.CharField(
|
231
|
-
max_length=32,
|
232
|
-
choices=ProductTypes.choices,
|
233
|
-
)
|
223
|
+
type = models.CharField(max_length=32, choices=ProductTypes.choices,)
|
234
224
|
plu = models.CharField(max_length=40, unique=True, null=True, blank=True)
|
235
225
|
external_id = models.CharField(max_length=40, unique=True, null=True, blank=True)
|
236
226
|
order_value = models.PositiveSmallIntegerField(
|
@@ -377,9 +367,7 @@ class ProductAttribute(DjangoModelCleanMixin, models.Model):
|
|
377
367
|
AttributeChoice, related_name="product_attributes", blank=True
|
378
368
|
)
|
379
369
|
type = models.CharField(
|
380
|
-
max_length=32,
|
381
|
-
default=Type.ONE_CHOICE,
|
382
|
-
choices=Type.choices,
|
370
|
+
max_length=32, default=Type.ONE_CHOICE, choices=Type.choices,
|
383
371
|
)
|
384
372
|
order_value = models.PositiveSmallIntegerField(
|
385
373
|
verbose_name=_("ordering"), default=1
|
@@ -85,9 +85,7 @@ class PaymentMethod(models.Model):
|
|
85
85
|
"""
|
86
86
|
|
87
87
|
payment_provider = models.CharField(
|
88
|
-
max_length=20,
|
89
|
-
choices=settings.PAYMENT_PROVIDER_CHOICES,
|
90
|
-
default="cod",
|
88
|
+
max_length=20, choices=settings.PAYMENT_PROVIDER_CHOICES, default="cod",
|
91
89
|
)
|
92
90
|
is_active = models.BooleanField(default=True)
|
93
91
|
name = models.CharField(max_length=200, help_text=_("Name"))
|
@@ -149,9 +147,7 @@ class Store(DjangoModelCleanMixin, models.Model):
|
|
149
147
|
help_text=_("Shipping methods within the store"),
|
150
148
|
)
|
151
149
|
pickup_addresses = models.ManyToManyField(
|
152
|
-
"stores.address",
|
153
|
-
related_name="pickup_stores",
|
154
|
-
blank=True,
|
150
|
+
"stores.address", related_name="pickup_stores", blank=True,
|
155
151
|
)
|
156
152
|
payment_methods = models.ManyToManyField(
|
157
153
|
PaymentMethod,
|
@@ -179,11 +175,7 @@ class Store(DjangoModelCleanMixin, models.Model):
|
|
179
175
|
)
|
180
176
|
image = models.ImageField(upload_to=store_media_upload_to, null=True, blank=True)
|
181
177
|
currency = models.CharField(
|
182
|
-
max_length=3,
|
183
|
-
default="KWD",
|
184
|
-
validators=[
|
185
|
-
validate_currency,
|
186
|
-
],
|
178
|
+
max_length=3, default="KWD", validators=[validate_currency,],
|
187
179
|
)
|
188
180
|
busy_mode = models.BooleanField(default=False)
|
189
181
|
is_digital = models.BooleanField(default=False)
|
@@ -47,9 +47,7 @@ class WalletMedia(DjangoModelCleanMixin, models.Model):
|
|
47
47
|
|
48
48
|
class Wallet(models.Model):
|
49
49
|
user = models.ForeignKey(
|
50
|
-
settings.AUTH_USER_MODEL,
|
51
|
-
on_delete=models.CASCADE,
|
52
|
-
related_name="wallets",
|
50
|
+
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="wallets",
|
53
51
|
)
|
54
52
|
name = models.CharField(max_length=200, null=True, blank=True)
|
55
53
|
name_arabic = models.CharField(max_length=200, null=True, blank=True)
|
@@ -61,11 +59,7 @@ class Wallet(models.Model):
|
|
61
59
|
related_name="wallets",
|
62
60
|
)
|
63
61
|
currency = models.CharField(
|
64
|
-
max_length=3,
|
65
|
-
default="KWD",
|
66
|
-
validators=[
|
67
|
-
validate_currency,
|
68
|
-
],
|
62
|
+
max_length=3, default="KWD", validators=[validate_currency,],
|
69
63
|
)
|
70
64
|
is_active = models.BooleanField(default=True)
|
71
65
|
|
@@ -82,8 +76,7 @@ class Wallet(models.Model):
|
|
82
76
|
query = self.transactions.aggregate(
|
83
77
|
balance=Coalesce(
|
84
78
|
models.Sum(
|
85
|
-
"amount",
|
86
|
-
filter=models.Q(type=WalletTransaction.TYPE.CREDIT),
|
79
|
+
"amount", filter=models.Q(type=WalletTransaction.TYPE.CREDIT),
|
87
80
|
),
|
88
81
|
models.Value(Decimal(0)),
|
89
82
|
output_field=models.DecimalField(),
|
@@ -118,14 +111,10 @@ class Wallet(models.Model):
|
|
118
111
|
)
|
119
112
|
user = self.user
|
120
113
|
order = Order.objects.create(
|
121
|
-
customer=user,
|
122
|
-
payment_method=payment_method,
|
123
|
-
extra_infos=extra_infos,
|
114
|
+
customer=user, payment_method=payment_method, extra_infos=extra_infos,
|
124
115
|
)
|
125
116
|
payment = Payment.objects.create(
|
126
|
-
orders=[
|
127
|
-
order,
|
128
|
-
],
|
117
|
+
orders=[order,],
|
129
118
|
user=user,
|
130
119
|
currency=self.currency,
|
131
120
|
method=payment_method,
|
@@ -148,14 +137,9 @@ class WalletTransaction(models.Model):
|
|
148
137
|
DEBIT = "DEBIT", _("debit")
|
149
138
|
|
150
139
|
wallet = models.ForeignKey(
|
151
|
-
"stores.Wallet",
|
152
|
-
on_delete=models.CASCADE,
|
153
|
-
related_name="transactions",
|
154
|
-
)
|
155
|
-
type = models.CharField(
|
156
|
-
max_length=100,
|
157
|
-
choices=TYPE.choices,
|
140
|
+
"stores.Wallet", on_delete=models.CASCADE, related_name="transactions",
|
158
141
|
)
|
142
|
+
type = models.CharField(max_length=100, choices=TYPE.choices,)
|
159
143
|
|
160
144
|
amount = models.DecimalField(
|
161
145
|
max_digits=settings.DEFAULT_MAX_DIGITS,
|
@@ -34,24 +34,19 @@ def create_customer_cart_and_wallet_handler(sender, instance, created, **kwargs)
|
|
34
34
|
|
35
35
|
|
36
36
|
@receiver(
|
37
|
-
post_save,
|
38
|
-
sender=Order,
|
39
|
-
dispatch_uid="create_order_history_handler",
|
37
|
+
post_save, sender=Order, dispatch_uid="create_order_history_handler",
|
40
38
|
)
|
41
39
|
def create_order_history_handler(sender, instance, created, **kwargs):
|
42
40
|
try:
|
43
41
|
OrderHistory.objects.create(
|
44
|
-
order=instance,
|
45
|
-
status=instance.status,
|
42
|
+
order=instance, status=instance.status,
|
46
43
|
)
|
47
44
|
except Exception:
|
48
45
|
pass
|
49
46
|
|
50
47
|
|
51
48
|
@receiver(
|
52
|
-
pre_save,
|
53
|
-
sender=Category,
|
54
|
-
dispatch_uid="create_category_thumbnails",
|
49
|
+
pre_save, sender=Category, dispatch_uid="create_category_thumbnails",
|
55
50
|
)
|
56
51
|
def create_category_thumbnails(sender, instance, **kwargs):
|
57
52
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
@@ -74,9 +69,7 @@ def create_category_thumbnails(sender, instance, **kwargs):
|
|
74
69
|
|
75
70
|
|
76
71
|
@receiver(
|
77
|
-
pre_save,
|
78
|
-
sender=ProductMedia,
|
79
|
-
dispatch_uid="create_product_media_thumbnails",
|
72
|
+
pre_save, sender=ProductMedia, dispatch_uid="create_product_media_thumbnails",
|
80
73
|
)
|
81
74
|
def create_product_media_thumbnails(sender, instance, **kwargs):
|
82
75
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
@@ -99,17 +92,13 @@ def create_product_media_thumbnails(sender, instance, **kwargs):
|
|
99
92
|
|
100
93
|
|
101
94
|
@receiver(
|
102
|
-
pre_save,
|
103
|
-
sender=WalletMedia,
|
104
|
-
dispatch_uid="create_wallet_thumbnails",
|
95
|
+
pre_save, sender=WalletMedia, dispatch_uid="create_wallet_thumbnails",
|
105
96
|
)
|
106
97
|
def create_wallet_thumbnails(sender, instance, **kwargs):
|
107
98
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
108
99
|
if instance.image and medium_dim:
|
109
100
|
instance.image_thumbnail_medium = resize_image(
|
110
|
-
instance.image,
|
111
|
-
dim=medium_dim,
|
112
|
-
size_name="medium",
|
101
|
+
instance.image, dim=medium_dim, size_name="medium",
|
113
102
|
)
|
114
103
|
|
115
104
|
|
@@ -122,7 +111,5 @@ def create_product_vraiant_image_thumbnails(sender, instance, **kwargs):
|
|
122
111
|
medium_dim = getattr(store_settings, "THUMBNAIL_MEDIUM_DIMENSIONS", None)
|
123
112
|
if instance.image and medium_dim:
|
124
113
|
instance.image_thumbnail_medium = resize_image(
|
125
|
-
instance.image,
|
126
|
-
dim=medium_dim,
|
127
|
-
size_name="medium",
|
114
|
+
instance.image, dim=medium_dim, size_name="medium",
|
128
115
|
)
|
ob_dj_store/core/stores/utils.py
CHANGED
@@ -76,8 +76,7 @@ def get_country_by_currency(currency):
|
|
76
76
|
def validate_currency(value):
|
77
77
|
if not pycountry.currencies.get(alpha_3=value):
|
78
78
|
raise ValidationError(
|
79
|
-
_("%(value)s is not a currency"),
|
80
|
-
params={"value": value},
|
79
|
+
_("%(value)s is not a currency"), params={"value": value},
|
81
80
|
)
|
82
81
|
|
83
82
|
|