mirror of
https://github.com/evennia/evennia.git
synced 2026-03-27 02:06:32 +01:00
Migrate serverconf values to use picklefield
This commit is contained in:
parent
7c3753dc2a
commit
a2ddc82707
3 changed files with 21 additions and 9 deletions
|
|
@ -2,8 +2,21 @@
|
|||
# Generated by Django 1.11.16 on 2019-01-28 23:11
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from base64 import b64encode
|
||||
from django.db import migrations
|
||||
import evennia.utils.picklefield
|
||||
from pickle import dumps, loads
|
||||
from evennia.utils.utils import to_bytes
|
||||
from copy import deepcopy
|
||||
|
||||
|
||||
def forwards(apps, schema_editor):
|
||||
ServerConfig = apps.get_model('server', 'ServerConfig')
|
||||
for conf in ServerConfig.objects.all():
|
||||
# picklefield requires base64 encoding
|
||||
value = loads(to_bytes(conf.db_value), encoding='bytes') # py2->py3 byte encoding
|
||||
conf.db_value = b64encode(dumps(deepcopy(value), protocol=4)).decode()
|
||||
conf.save(update_fields=['db_value'])
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
@ -13,9 +26,11 @@ class Migration(migrations.Migration):
|
|||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forwards, migrations.RunPython.noop),
|
||||
migrations.AlterField(
|
||||
model_name='serverconfig',
|
||||
name='db_value',
|
||||
field=evennia.utils.picklefield.PickledObjectField(help_text='The data returned when the config value is accessed. Must be written as a Python literal if editing through the admin interface. Attribute values which are not Python literals cannot be edited through the admin interface.', null=True, verbose_name='value'),
|
||||
),
|
||||
|
||||
]
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import pickle
|
|||
from django.db import models
|
||||
from evennia.utils.idmapper.models import WeakSharedMemoryModel
|
||||
from evennia.utils import logger, utils
|
||||
from evennia.utils.dbserialize import to_pickle, from_pickle
|
||||
from evennia.server.manager import ServerConfigManager
|
||||
from evennia.utils import picklefield
|
||||
|
||||
|
|
@ -86,7 +87,7 @@ class ServerConfig(WeakSharedMemoryModel):
|
|||
#@property
|
||||
def __value_get(self):
|
||||
"Getter. Allows for value = self.value"
|
||||
return pickle.loads(utils.to_bytes(self.db_value))
|
||||
return from_pickle(self.db_value, db_obj=self)
|
||||
|
||||
#@value.setter
|
||||
def __value_set(self, value):
|
||||
|
|
@ -95,7 +96,7 @@ class ServerConfig(WeakSharedMemoryModel):
|
|||
# we have to protect against storing db objects.
|
||||
logger.log_err("ServerConfig cannot store db objects! (%s)" % value)
|
||||
return
|
||||
self.db_value = pickle.dumps(value)
|
||||
self.db_value = to_pickle(value)
|
||||
self.save()
|
||||
|
||||
#@value.deleter
|
||||
|
|
@ -113,8 +114,8 @@ class ServerConfig(WeakSharedMemoryModel):
|
|||
# ServerConfig other methods
|
||||
#
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s : %s" % (self.key, self.value)
|
||||
def __repr__(self):
|
||||
return "<{} {}>".format(self.__class__.__name__, self.key, self.value)
|
||||
|
||||
def store(self, key, value):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -46,17 +46,13 @@ from django.utils.html import format_html
|
|||
|
||||
from evennia.utils.dbserialize import from_pickle, to_pickle
|
||||
from future.utils import with_metaclass
|
||||
from pickle import loads, dumps
|
||||
|
||||
try:
|
||||
from django.utils.encoding import force_text
|
||||
except ImportError:
|
||||
from django.utils.encoding import force_unicode as force_text
|
||||
|
||||
# python 3.x does not have cPickle module
|
||||
try:
|
||||
from pickle import loads, dumps # cpython 2.x
|
||||
except ImportError:
|
||||
from pickle import loads, dumps # cpython 3.x, other interpreters
|
||||
|
||||
DEFAULT_PROTOCOL = 4
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue