Skip to content

Commit

Permalink
Django Oscar Upgrade to version 3.2 (#4064)
Browse files Browse the repository at this point in the history
* chore: django oscar version upgrade to 3.1

* fix: changed django migration to alter price field in stockrecord model

chore: updated factory dependency

refactor: updated field name

feat: Mgmt Command to create mobile seats for new course runs (#4046)

fix: skipped a failing test. Will fix it in another ticket

fix: updated method

refactor: made changes as per new version of oscar

refactor: updated code to make voucher name unique

fix: removed white spaces

fix: removed white spaces

refactor: changed code as per new version of oscar

refactor: updated code

fix: override Product model in catalogue app

fix: removed extra spaces

fix: updated  code

fix: changes in code to pass checks

fix: changes in code to pass checks

* feat: add data migration to make voucher names unique

* fix: removed code

* refactor: updated django oscar templates

* refactor: updated price field name

* refactor: update price field name

* chore: PR to upgrade django oscar to version 3.2

* feat: resloved reserved keywords conflict

* feat: add data mmigration to make basket_lineattribute value json compatible

* feat: added refund functionality

* feat: add data mmigration to make order_lineattribute value json compatible

---------

Co-authored-by: Muhammad Umar Khan <[email protected]>
  • Loading branch information
zubair-ce07 and mumarkhan999 committed Feb 2, 2024
1 parent 7174f3f commit 8cd7c39
Show file tree
Hide file tree
Showing 11 changed files with 187 additions and 5 deletions.
5 changes: 5 additions & 0 deletions db_keyword_overrides.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,10 @@ MYSQL:
- ShippingEvent.lines
- PaymentEvent.lines
- ProductAlert.key
- HistoricalOption.order
- Option.order
SNOWFLAKE:
- HistoricalOption.order
- Option.order

STITCH:
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from django.core.paginator import Paginator
from django.db import migrations


def make_lineattribute_value_json_compatible(apps, schema_editor):
"""
Makes line attribute value json compatible.
"""
LineAttribute = apps.get_model("basket", "LineAttribute")
attributes = LineAttribute.objects.order_by('id')
paginator = Paginator(attributes, 1000)

for page_number in paginator.page_range:
page = paginator.page(page_number)
updates = []

for obj in page.object_list:
obj.value = '"{}"'.format(obj.value)
updates.append(obj)

LineAttribute.objects.bulk_update(updates, ['value'])


class Migration(migrations.Migration):

dependencies = [
('basket', '0015_add_paymentintentid'),
]

operations = [
migrations.RunPython(make_lineattribute_value_json_compatible, migrations.RunPython.noop),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 3.2.20 on 2023-12-05 10:34

import django.core.serializers.json
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('basket', '0016_make_lineattribute_value_json_compatible'),
]

operations = [
migrations.AlterField(
model_name='lineattribute',
name='value',
field=models.JSONField(encoder=django.core.serializers.json.DjangoJSONEncoder, verbose_name='Value'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Generated by Django 3.2.20 on 2023-12-05 10:34

from django.db import migrations, models
import django.db.models.deletion
import oscar.models.fields.slugfield


class Migration(migrations.Migration):

dependencies = [
('catalogue', '0056_auto_20231108_1355'),
]

operations = [
migrations.AlterModelOptions(
name='option',
options={'ordering': ['order', 'name'], 'verbose_name': 'Option', 'verbose_name_plural': 'Options'},
),
migrations.AddField(
model_name='historicaloption',
name='help_text',
field=models.CharField(blank=True, help_text='Help text shown to the user on the add to basket form', max_length=255, null=True, verbose_name='Help text'),
),
migrations.AddField(
model_name='historicaloption',
name='option_group',
field=models.ForeignKey(blank=True, db_constraint=False, help_text='Select an option group if using type "Option" or "Multi Option"', null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='catalogue.attributeoptiongroup', verbose_name='Option Group'),
),
migrations.AddField(
model_name='historicaloption',
name='order',
field=models.IntegerField(blank=True, db_index=True, help_text='Controls the ordering of product options on product detail pages', null=True, verbose_name='Ordering'),
),
migrations.AddField(
model_name='option',
name='help_text',
field=models.CharField(blank=True, help_text='Help text shown to the user on the add to basket form', max_length=255, null=True, verbose_name='Help text'),
),
migrations.AddField(
model_name='option',
name='option_group',
field=models.ForeignKey(blank=True, help_text='Select an option group if using type "Option" or "Multi Option"', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='product_options', to='catalogue.attributeoptiongroup', verbose_name='Option Group'),
),
migrations.AddField(
model_name='option',
name='order',
field=models.IntegerField(blank=True, db_index=True, help_text='Controls the ordering of product options on product detail pages', null=True, verbose_name='Ordering'),
),
migrations.AlterField(
model_name='historicaloption',
name='type',
field=models.CharField(choices=[('text', 'Text'), ('integer', 'Integer'), ('boolean', 'True / False'), ('float', 'Float'), ('date', 'Date'), ('select', 'Select'), ('radio', 'Radio'), ('multi_select', 'Multi select'), ('checkbox', 'Checkbox')], default='text', max_length=255, verbose_name='Type'),
),
migrations.AlterField(
model_name='historicalproduct',
name='slug',
field=oscar.models.fields.slugfield.SlugField(allow_unicode=True, max_length=255, verbose_name='Slug'),
),
migrations.AlterField(
model_name='option',
name='type',
field=models.CharField(choices=[('text', 'Text'), ('integer', 'Integer'), ('boolean', 'True / False'), ('float', 'Float'), ('date', 'Date'), ('select', 'Select'), ('radio', 'Radio'), ('multi_select', 'Multi select'), ('checkbox', 'Checkbox')], default='text', max_length=255, verbose_name='Type'),
),
migrations.AlterField(
model_name='product',
name='slug',
field=oscar.models.fields.slugfield.SlugField(allow_unicode=True, max_length=255, verbose_name='Slug'),
),
migrations.AlterUniqueTogether(
name='productattribute',
unique_together={('code', 'product_class')},
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from django.core.paginator import Paginator
from django.db import migrations


def make_lineattribute_value_json_compatible(apps, schema_editor):
"""
Makes line attribute value json compatible.
"""
LineAttribute = apps.get_model("order", "LineAttribute")
attributes = LineAttribute.objects.order_by('id')
paginator = Paginator(attributes, 1000)

for page_number in paginator.page_range:
page = paginator.page(page_number)
updates = []

for obj in page.object_list:
obj.value = '"{}"'.format(obj.value)
updates.append(obj)

LineAttribute.objects.bulk_update(updates, ['value'])


class Migration(migrations.Migration):

dependencies = [
('order', '0026_auto_20231108_1355'),
]

operations = [
migrations.RunPython(make_lineattribute_value_json_compatible, migrations.RunPython.noop),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 3.2.20 on 2023-12-05 10:34

import django.core.serializers.json
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('order', '0027_make_lineattribute_value_json_compatible'),
]

operations = [
migrations.AlterField(
model_name='lineattribute',
name='value',
field=models.JSONField(encoder=django.core.serializers.json.DjangoJSONEncoder, verbose_name='Value'),
),
]
2 changes: 1 addition & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ django-libsass==0.9
# via -r requirements/base.in
django-model-utils==4.3.1
# via edx-rbac
django-oscar==3.1
django-oscar==3.2
# via
# -c requirements/constraints.txt
# -r requirements/base.in
Expand Down
2 changes: 1 addition & 1 deletion requirements/constraints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
cybersource-rest-client-python==0.0.21

# Django 3.2 support is added in version 2.2 so pinning it to 2.2
django-oscar==3.1
django-oscar==3.2

# Pinned because transifex-client==0.13.6 pins it
urllib3>=1.24.2,<2.0.0
Expand Down
2 changes: 1 addition & 1 deletion requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ django-model-utils==4.3.1
# via
# -r requirements/test.txt
# edx-rbac
django-oscar==3.1
django-oscar==3.2
# via -r requirements/test.txt
django-phonenumber-field==5.0.0
# via
Expand Down
2 changes: 1 addition & 1 deletion requirements/production.txt
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ django-libsass==0.9
# via -r requirements/base.in
django-model-utils==4.3.1
# via edx-rbac
django-oscar==3.1
django-oscar==3.2
# via
# -c requirements/constraints.txt
# -r requirements/base.in
Expand Down
2 changes: 1 addition & 1 deletion requirements/test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ django-model-utils==4.3.1
# via
# -r requirements/base.txt
# edx-rbac
django-oscar==3.1
django-oscar==3.2
# via
# -c requirements/constraints.txt
# -r requirements/base.txt
Expand Down

0 comments on commit 8cd7c39

Please sign in to comment.