From ee1ec3979c1dbed2f90113655aba85ccb1780c52 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 3 Apr 2015 20:48:20 +0200 Subject: [PATCH] Updates for making Evennia compatible with Django 1.8+. Still not fully functioning. --- evennia/comms/models.py | 1 + evennia/objects/models.py | 1 + evennia/players/models.py | 2 +- evennia/scripts/manager.py | 2 +- evennia/scripts/models.py | 1 + evennia/server/evennia_launcher.py | 2 ++ evennia/typeclasses/models.py | 16 +--------------- 7 files changed, 8 insertions(+), 17 deletions(-) diff --git a/evennia/comms/models.py b/evennia/comms/models.py index 8a5a18472f..618050809e 100644 --- a/evennia/comms/models.py +++ b/evennia/comms/models.py @@ -471,6 +471,7 @@ class ChannelDB(TypedObject): __settingclasspath__ = settings.BASE_CHANNEL_TYPECLASS __defaultclasspath__ = "evennia.comms.comms.DefaultChannel" + __applabel__ = "comms" class Meta: "Define Django meta options" diff --git a/evennia/objects/models.py b/evennia/objects/models.py index 5c34eb472d..16ccdc4472 100644 --- a/evennia/objects/models.py +++ b/evennia/objects/models.py @@ -182,6 +182,7 @@ class ObjectDB(TypedObject): # defaults __settingsclasspath__ = settings.BASE_OBJECT_TYPECLASS __defaultclasspath__ = "evennia.objects.objects.DefaultObject" + __applabel__ = "objects" @lazy_property def contents_cache(self): diff --git a/evennia/players/models.py b/evennia/players/models.py index c688664e54..07e4684e1c 100644 --- a/evennia/players/models.py +++ b/evennia/players/models.py @@ -96,9 +96,9 @@ class PlayerDB(TypedObject, AbstractUser): # defaults __settingsclasspath__ = settings.BASE_SCRIPT_TYPECLASS __defaultclasspath__ = "evennia.players.players.DefaultPlayer" + __applabel__ = "players" class Meta: - app_label = 'players' verbose_name = 'Player' # alias to the objs property diff --git a/evennia/scripts/manager.py b/evennia/scripts/manager.py index f527938be3..60844dc5f4 100644 --- a/evennia/scripts/manager.py +++ b/evennia/scripts/manager.py @@ -44,7 +44,7 @@ class ScriptDBManager(TypedObjectManager): """ if not obj: return [] - player = _GA(_GA(obj, "__class__"), "__name__") == "PlayerDB" + player = _GA(_GA(obj, "__dbclass__"), "__name__") == "PlayerDB" if key: dbref = self.dbref(key) if dbref or dbref == 0: diff --git a/evennia/scripts/models.py b/evennia/scripts/models.py index f64283eb3e..e3cbcc9936 100644 --- a/evennia/scripts/models.py +++ b/evennia/scripts/models.py @@ -103,6 +103,7 @@ class ScriptDB(TypedObject): # defaults __settingsclasspath__ = settings.BASE_SCRIPT_TYPECLASS __defaultclasspath__ = "evennia.scripts.scripts.DefaultScript" + __applabel__ = "scripts" class Meta: "Define Django meta options" diff --git a/evennia/server/evennia_launcher.py b/evennia/server/evennia_launcher.py index 87b2c7dc4d..fcd3682b66 100644 --- a/evennia/server/evennia_launcher.py +++ b/evennia/server/evennia_launcher.py @@ -454,6 +454,8 @@ def check_database(): # Check so a database exists and is accessible from django.db import connection tables = connection.introspection.get_table_list(connection.cursor()) + if not isinstance(tables, basestring): # django 1.8+ + tables = [tableinfo.name for tableinfo in tables] if tables and u'players_playerdb' in tables: # database exists and seems set up. Initialize evennia. import evennia diff --git a/evennia/typeclasses/models.py b/evennia/typeclasses/models.py index 59b0d4e420..1617c798ba 100644 --- a/evennia/typeclasses/models.py +++ b/evennia/typeclasses/models.py @@ -91,26 +91,12 @@ class TypeclassBase(SharedMemoryModelBase): # storage of stats attrs["typename"] = name attrs["path"] = "%s.%s" % (attrs["__module__"], name) - #defaultpath = attrs["__defaultclasspath__"] - #attrs["__defaultclass__"] = class_from_module(attrs["__defaultclasspath__"]) - #try: - # defaultpath = attrs["__defaultclasspath__"] - # attrs["__defaultclass__"] = class_from_module(attrs["__defaultclasspath__"]) - #except Exception: - # log_trace("Typeclass error for %s: Default typeclass '%s' could not load. " - # "Falling back to library base." % (name, defaultpath)) - # try: - # # two levels down from TypedObject will always be the default base class. - # attrs["__defaultclass__"] = cls.__mro__[cls.__mro__.index(TypedObject)-2] - # except Exception: - # log_trace("Critical error for %s: Neither typeclass, " - # "default fallback nor base class could load." % name) - # attrs["__defaultclass__"] = cls # typeclass proxy setup if not "Meta" in attrs: class Meta: proxy = True + app_label = attrs.get("__applabel__", "typeclasses") attrs["Meta"] = Meta attrs["Meta"].proxy = True