dansan / spring-replay-site

Website to upload, comment and download replays from/for the SpringRTS engine
http://replays.springrts.com/
GNU General Public License v3.0
11 stars 1 forks source link

convert Map.metadata to something ... version agnostic #125

Closed dansan closed 4 years ago

dansan commented 4 years ago

The data in Map.metadata is stored in a PickledObjectField. In Django 3 with Python 3 and django-picklefield updated from 0.3.2 to 2.0 it cannot be loaded anymore.

dansan commented 4 years ago

./manage.py migarate_metadata_field has run on the server, all Map objects now have both metadata and metadata2 filled.

dansan commented 4 years ago

Map.metadata2 is a TextField that contains a JSON dump of a maps properties (gravity, height, wind etc.). Map.metadata is now deprecated and can be removed.

dansan commented 4 years ago

OK, confirmed with:

In [16]: for map_ in Map.objects.all():
    ...:     if not map_.metadata:
    ...:         assert not map_.metadata2
    ...:         continue
    ...:     assert map_.metadata["metadata"]["MapFileName"] == map_.metadata2["metadata"]["MapFileName"]
    ...:     assert map_.metadata["metadata"]["Gravity"] == map_.metadata2["metadata"]["Gravity"]
    ...:     assert map_.metadata["filename"] == map_.metadata2["filename"]

(Yes - the metadata attribute has a metadata key… don't ask…)

dansan commented 4 years ago

Migrations ran and removed the field Map.metadata (v1). The server was restarted.