Skip to content

Commit 0c25ab9

Browse files
authored
fix: Fix data for PSQL transfer (#1747)
* fix: Remove invalid attempts and snake case-ify field names * Remove tester code * Also rename traffic lights field * Also level decor * Move level decor helper method to migrations * Fix key
1 parent 3677c63 commit 0c25ab9

32 files changed

+248
-114
lines changed

game/admin.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class AttemptAdmin(admin.ModelAdmin):
4343

4444
class LevelDecorAdmin(admin.ModelAdmin):
4545
search_fields = ["level__name"]
46-
list_display = ["id", "level", "x", "y", "decorName"]
46+
list_display = ["id", "level", "x", "y", "decor_name"]
4747

4848

4949
admin.site.register(Level, LevelAdmin)

game/end_to_end_tests/test_cow_crashes.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def setUpClass(cls):
4747
TestCowCrashes.cow_level = Level(
4848
name="Cow crashing",
4949
anonymous=False,
50-
blocklyEnabled=True,
50+
blockly_enabled=True,
5151
character=van,
5252
cows='[{"minCows":"7","maxCows":"7","potentialCoordinates":[{"x":4,"y":4},{"x":2,"y":4},{"x":3,"y":7},{"x":4,"y":6},{"x":2,"y":6},{"x":3,"y":1},{"x":4,"y":2}],"type":"WHITE"}]',
5353
default=False,
@@ -57,7 +57,7 @@ def setUpClass(cls):
5757
model_solution="[1]",
5858
origin='{"coordinate":[2,5],"direction":"E"}',
5959
path='[{"coordinate":[2,5],"connectedNodes":[1]},{"coordinate":[3,5],"connectedNodes":[0,4,2,5]},{"coordinate":[4,5],"connectedNodes":[1]},{"coordinate":[3,7],"connectedNodes":[4]},{"coordinate":[3,6],"connectedNodes":[8,3,6,1]},{"coordinate":[3,4],"connectedNodes":[10,1,11,16]},{"coordinate":[4,6],"connectedNodes":[4,7]},{"coordinate":[4,7],"connectedNodes":[6]},{"coordinate":[2,6],"connectedNodes":[9,4]},{"coordinate":[2,7],"connectedNodes":[8]},{"coordinate":[2,4],"connectedNodes":[13,5,12]},{"coordinate":[4,4],"connectedNodes":[5,14,15]},{"coordinate":[2,3],"connectedNodes":[10]},{"coordinate":[1,4],"connectedNodes":[10]},{"coordinate":[5,4],"connectedNodes":[11]},{"coordinate":[4,3],"connectedNodes":[11,19]},{"coordinate":[3,3],"connectedNodes":[5,17]},{"coordinate":[3,2],"connectedNodes":[18,16,19,20]},{"coordinate":[2,2],"connectedNodes":[17]},{"coordinate":[4,2],"connectedNodes":[17,15,23,22]},{"coordinate":[3,1],"connectedNodes":[21,17,22]},{"coordinate":[2,1],"connectedNodes":[20]},{"coordinate":[4,1],"connectedNodes":[20,19]},{"coordinate":[5,2],"connectedNodes":[19]}]',
60-
pythonEnabled=False,
60+
python_enabled=False,
6161
theme=grass,
6262
threads=1,
6363
traffic_lights="[]",

game/end_to_end_tests/test_python_levels.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def test_animal_sound_horn(self):
4545
animal_level = Level(
4646
name="Animal commands",
4747
anonymous=False,
48-
blocklyEnabled=False,
48+
blockly_enabled=False,
4949
character=van,
5050
cows='[{"minCows":1,"maxCows":1,"potentialCoordinates":[{"x":3,"y":4}],"type":"WHITE"}]',
5151
default=False,
@@ -55,7 +55,7 @@ def test_animal_sound_horn(self):
5555
model_solution="",
5656
origin='{"coordinate":[2,4],"direction":"E"}',
5757
path='[{"coordinate":[2,4],"connectedNodes":[1]},{"coordinate":[3,4],"connectedNodes":[0,2]},{"coordinate":[4,4],"connectedNodes":[1]}]',
58-
pythonEnabled=True,
58+
python_enabled=True,
5959
theme=grass,
6060
threads=1,
6161
traffic_lights="[]",

game/level_management.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ def get_decor(level):
5252
"""Helper method parsing decor into a dictionary format 'sendable' to javascript."""
5353
decorData = []
5454
for ld in LevelDecor.objects.filter(level=level):
55-
decor = get_decor_element(name=ld.decorName, theme=level.theme)
55+
decor = get_decor_element(name=ld.decor_name, theme=level.theme)
5656
decorData.append(
5757
{
5858
"x": int(ld.x),
5959
"y": int(ld.y),
6060
"z": int(decor.z_index),
61-
"decorName": str(ld.decorName),
61+
"decorName": str(ld.decor_name),
6262
"width": int(decor.width),
6363
"height": int(decor.height),
6464
"url": str(decor.url),
@@ -81,7 +81,10 @@ def set_decor_inner(level, decor, LevelDecor):
8181
for data in decor:
8282
level_decors.append(
8383
LevelDecor(
84-
level_id=level.id, x=data["x"], y=data["y"], decorName=data["decorName"]
84+
level_id=level.id,
85+
x=data["x"],
86+
y=data["y"],
87+
decor_name=data["decorName"],
8588
)
8689
)
8790
LevelDecor.objects.bulk_create(level_decors)
@@ -160,9 +163,9 @@ def save_level(level, data):
160163
level.max_fuel = data["max_fuel"]
161164
level.traffic_lights = data["traffic_lights"]
162165
level.cows = data["cows"]
163-
level.blocklyEnabled = data.get("blocklyEnabled", True)
164-
level.pythonEnabled = data.get("pythonEnabled", False)
165-
level.pythonViewEnabled = data.get("pythonViewEnabled", False)
166+
level.blockly_enabled = data.get("blockly_enabled", True)
167+
level.python_enabled = data.get("python_enabled", False)
168+
level.python_view_enabled = data.get("python_view_enabled", False)
166169
level.theme = get_theme_by_pk(pk=data["theme"])
167170
level.character = get_character_by_pk(pk=data["character"])
168171
level.disable_algorithm_score = data.get("disable_algorithm_score", False)
@@ -203,6 +206,6 @@ def email_new_custom_level(
203206
"STUDENT_NAME": student_name,
204207
"CLASS_NAME": class_name,
205208
"LEVEL_URL": level_url,
206-
"MODERATE_URL": moderate_url
207-
}
209+
"MODERATE_URL": moderate_url,
210+
},
208211
)

game/migrations/0001_squashed_0025_levels_ordering_pt1.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.db import models, migrations
55
from django.conf import settings
66
import json
7-
from game.level_management import set_decor_inner, set_blocks_inner
7+
from game.level_management import set_blocks_inner
88

99

1010
# Functions from the following migrations need manual copying.
@@ -2527,6 +2527,21 @@ def delete_old_limit_level(apps, schema_editor):
25272527
old_limit_level.delete()
25282528

25292529

2530+
def set_decor_inner(level, decor, LevelDecor):
2531+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
2532+
LevelDecor.objects.filter(level=level).delete()
2533+
2534+
level_decors = []
2535+
for data in decor:
2536+
level_decors.append(
2537+
LevelDecor(
2538+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
2539+
"decorName"]
2540+
)
2541+
)
2542+
LevelDecor.objects.bulk_create(level_decors)
2543+
2544+
25302545
# Add episode 7 to 9
25312546
# Add levels 62, 51, 59, 57, 60, 61, 70
25322547
def add_episode_7_to_9(apps, schema_editor):

game/migrations/0026_levels_pt2.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import unicode_literals
22

33
from django.db import migrations
4-
from game.level_management import set_decor_inner, set_blocks_inner
4+
from game.level_management import set_blocks_inner
55
import json
66

77

@@ -13,7 +13,18 @@ def change_levels(apps, schema_editor):
1313
Block = apps.get_model("game", "Block")
1414

1515
def set_decor(level, decor):
16-
set_decor_inner(level, decor, LevelDecor)
16+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
17+
LevelDecor.objects.filter(level=level).delete()
18+
19+
level_decors = []
20+
for data in decor:
21+
level_decors.append(
22+
LevelDecor(
23+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
24+
"decorName"]
25+
)
26+
)
27+
LevelDecor.objects.bulk_create(level_decors)
1728

1829
def set_blocks(level, blocks):
1930
set_blocks_inner(level, blocks, LevelBlock, Block)

game/migrations/0032_cannot_turn_left_level.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
2+
from game.level_management import set_blocks_inner
33
import json
44

55

@@ -12,7 +12,18 @@ def new_level(apps, schema_editor):
1212
Block = apps.get_model("game", "Block")
1313

1414
def set_decor(level, decor):
15-
set_decor_inner(level, decor, LevelDecor)
15+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
16+
LevelDecor.objects.filter(level=level).delete()
17+
18+
level_decors = []
19+
for data in decor:
20+
level_decors.append(
21+
LevelDecor(
22+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
23+
"decorName"]
24+
)
25+
)
26+
LevelDecor.objects.bulk_create(level_decors)
1627

1728
def set_blocks(level, blocks):
1829
set_blocks_inner(level, blocks, LevelBlock, Block)

game/migrations/0033_recursion_level.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
2+
from game.level_management import set_blocks_inner
33
import json
44

55

@@ -15,7 +15,18 @@ def new_level(apps, schema_editor):
1515
Block = apps.get_model("game", "Block")
1616

1717
def set_decor(level, decor):
18-
set_decor_inner(level, decor, LevelDecor)
18+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
19+
LevelDecor.objects.filter(level=level).delete()
20+
21+
level_decors = []
22+
for data in decor:
23+
level_decors.append(
24+
LevelDecor(
25+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
26+
"decorName"]
27+
)
28+
)
29+
LevelDecor.objects.bulk_create(level_decors)
1930

2031
def set_blocks(level, blocks):
2132
set_blocks_inner(level, blocks, LevelBlock, Block)

game/migrations/0034_joes_level.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
2+
from game.level_management import set_blocks_inner
33
import json
44

55

@@ -12,7 +12,18 @@ def new_level(apps, schema_editor):
1212
Block = apps.get_model("game", "Block")
1313

1414
def set_decor(level, decor):
15-
set_decor_inner(level, decor, LevelDecor)
15+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
16+
LevelDecor.objects.filter(level=level).delete()
17+
18+
level_decors = []
19+
for data in decor:
20+
level_decors.append(
21+
LevelDecor(
22+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
23+
"decorName"]
24+
)
25+
)
26+
LevelDecor.objects.bulk_create(level_decors)
1627

1728
def set_blocks(level, blocks):
1829
set_blocks_inner(level, blocks, LevelBlock, Block)

game/migrations/0035_disable_route_score_level_70.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
3-
import json
42

53

64
def disable_route_score(apps, schema_editor):

game/migrations/0036_level_score_73.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
3-
import json
42

53

64
def update_level(apps, schema_editor):

game/migrations/0037_level_score_79.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
3-
import json
42

53

64
def update_level(apps, schema_editor):

game/migrations/0038_level_score_40.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
32
import json
43

54

game/migrations/0042_level_score_73.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
3-
import json
42

53

64
def update_level(apps, schema_editor):

game/migrations/0048_add_cow_field_and_blocks.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import unicode_literals
3-
import json
43

54
from django.db import models, migrations
6-
from game.level_management import set_blocks_inner, set_decor_inner
75

86

97
def add_cows_block(apps, schema_editor):

game/migrations/0049_level_score_34.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
3-
import json
42

53

64
def update_level(apps, schema_editor):

game/migrations/0050_level_score_40.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
3-
import json
42

53

64
def update_level(apps, schema_editor):

game/migrations/0051_level_score_49.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from django.db import migrations
2-
from game.level_management import set_decor_inner, set_blocks_inner
32
import json
43

54

game/migrations/0086_loop_levels.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from django.apps.registry import Apps
44
from django.db import migrations
55

6-
from game.level_management import set_decor_inner, set_blocks_inner
6+
from game.level_management import set_blocks_inner
77

88

99
def add_loop_levels(apps: Apps, *args):
@@ -365,7 +365,18 @@ def add_loop_levels(apps: Apps, *args):
365365
)
366366

367367
def set_decor(level, decor):
368-
set_decor_inner(level, decor, LevelDecor)
368+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
369+
LevelDecor.objects.filter(level=level).delete()
370+
371+
level_decors = []
372+
for data in decor:
373+
level_decors.append(
374+
LevelDecor(
375+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
376+
"decorName"]
377+
)
378+
)
379+
LevelDecor.objects.bulk_create(level_decors)
369380

370381
set_decor(
371382
level_110,

game/migrations/0097_add_python_den_levels.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from django.db import migrations
44

5-
from game.level_management import set_decor_inner, set_blocks_inner
5+
from game.level_management import set_blocks_inner
66

77

88
def add_python_den_levels(apps, schema_editor):
@@ -931,7 +931,18 @@ def add_python_den_decor(apps, schema_editor):
931931
LevelDecor = apps.get_model("game", "LevelDecor")
932932

933933
def set_decor(level, decor):
934-
set_decor_inner(level, decor, LevelDecor)
934+
"""Helper method creating LevelDecor objects given a list of decor in dictionary form."""
935+
LevelDecor.objects.filter(level=level).delete()
936+
937+
level_decors = []
938+
for data in decor:
939+
level_decors.append(
940+
LevelDecor(
941+
level_id=level.id, x=data["x"], y=data["y"], decorName=data[
942+
"decorName"]
943+
)
944+
)
945+
LevelDecor.objects.bulk_create(level_decors)
935946

936947
def bulk_copy_decor(old_level_name, new_level_name):
937948
old_level = Level.objects.get(name=old_level_name, default=True)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from django.apps.registry import Apps
2+
from django.db import migrations
3+
4+
5+
def delete_invalid_attempts(apps: Apps, *args):
6+
Attempt = apps.get_model("game", "Attempt")
7+
8+
Attempt.objects.filter(start_time__isnull=True).delete()
9+
10+
11+
class Migration(migrations.Migration):
12+
dependencies = [("game", "0104_remove_level_direct_drive")]
13+
operations = [
14+
migrations.RunPython(
15+
delete_invalid_attempts,
16+
reverse_code=migrations.RunPython.noop,
17+
)
18+
]

0 commit comments

Comments
 (0)