From 781e8310f5ebac34a8c0ff156fb5c9890c7eff29 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 9 Aug 2019 18:03:02 +0200 Subject: [PATCH] Security update; Increase rec Django version to 2.2.4 --- evennia/scripts/scripts.py | 13 ------------- evennia/server/evennia_launcher.py | 11 +++++------ evennia/typeclasses/models.py | 4 ++++ evennia/utils/idmapper/models.py | 13 ++++++++++--- requirements.txt | 2 +- win_requirements.txt | 2 +- 6 files changed, 21 insertions(+), 24 deletions(-) diff --git a/evennia/scripts/scripts.py b/evennia/scripts/scripts.py index 5563a9391e..0e1573c412 100644 --- a/evennia/scripts/scripts.py +++ b/evennia/scripts/scripts.py @@ -152,19 +152,6 @@ class ScriptBase(with_metaclass(TypeclassBase, ScriptDB)): """ objects = ScriptManager() - def __eq__(self, other): - """ - Compares two Scripts. Compares dbids. - - Args: - other (Script): A script to compare with. - - """ - try: - return other.dbid == self.dbid - except Exception: - return False - def __str__(self): return "<{cls} {key}>".format(cls=self.__class__.__name__, key=self.key) diff --git a/evennia/server/evennia_launcher.py b/evennia/server/evennia_launcher.py index 1326f6431d..43b374913f 100644 --- a/evennia/server/evennia_launcher.py +++ b/evennia/server/evennia_launcher.py @@ -92,7 +92,7 @@ SRESET = chr(19) # shutdown server in reset mode PYTHON_MIN = '3.7' TWISTED_MIN = '18.0.0' DJANGO_MIN = '2.1' -DJANGO_REC = '2.1' +DJANGO_REC = '2.2.4' try: sys.path[1] = EVENNIA_ROOT @@ -397,7 +397,6 @@ ERROR_DJANGO_MIN = \ ERROR: Django {dversion} found. Evennia requires version {django_min} or higher. - TE_TEST If you are using a virtualenv, use the command `pip install --upgrade -e evennia` where `evennia` is the folder to where you cloned the Evennia library. If not in a virtualenv you can install django with for example `pip install --upgrade django` @@ -409,14 +408,14 @@ ERROR_DJANGO_MIN = \ NOTE_DJANGO_MIN = \ """ - NOTE: Django {dversion} found. This will work, but v{django_rec} - is recommended for production. + NOTE: Django {dversion} found. This will work, but Django {django_rec} is + recommended for production. """ NOTE_DJANGO_NEW = \ """ NOTE: Django {dversion} found. This is newer than Evennia's - recommended version (v{django_rec}). It might work, but may be new + recommended version ({django_rec}). It might work, but may be new enough to not be fully tested yet. Report any issues. """ @@ -1281,7 +1280,7 @@ def check_main_evennia_dependencies(): try: dversion = ".".join(str(num) for num in django.VERSION if isinstance(num, int)) # only the main version (1.5, not 1.5.4.0) - dversion_main = ".".join(dversion.split(".")[:2]) + dversion_main = ".".join(dversion.split(".")[:3]) if LooseVersion(dversion) < LooseVersion(DJANGO_MIN): print(ERROR_DJANGO_MIN.format( dversion=dversion_main, django_min=DJANGO_MIN)) diff --git a/evennia/typeclasses/models.py b/evennia/typeclasses/models.py index 1f7e068f9d..7c24496220 100644 --- a/evennia/typeclasses/models.py +++ b/evennia/typeclasses/models.py @@ -358,6 +358,10 @@ class TypedObject(SharedMemoryModel): except AttributeError: return False + def __hash__(self): + # this is required to maintain hashing + return super().__hash__() + def __str__(self): return smart_str("%s" % self.db_key) diff --git a/evennia/utils/idmapper/models.py b/evennia/utils/idmapper/models.py index 642fc28d63..57a7cbaacd 100644 --- a/evennia/utils/idmapper/models.py +++ b/evennia/utils/idmapper/models.py @@ -173,14 +173,14 @@ class SharedMemoryModelBase(ModelBase): _GA(cls, "save")(update_fields=update_fields) # wrapper factories - def fget(cls): return _get(cls, fieldname) if not editable: + def fget(cls): return _get(cls, fieldname) def fset(cls, val): return _set_nonedit(cls, fieldname, val) elif foreignkey: def fget(cls): return _get_foreign(cls, fieldname) - def fset(cls, val): return _set_foreign(cls, fieldname, val) else: + def fget(cls): return _get(cls, fieldname) def fset(cls, val): return _set(cls, fieldname, val) def fdel(cls): return _del(cls, fieldname) if editable else _del_nonedit(cls, fieldname) @@ -336,6 +336,13 @@ class SharedMemoryModel(with_metaclass(SharedMemoryModelBase, Model)): # per-instance methods + def __eq__(self, other): + return super().__eq__(other) + + def __hash__(self): + # this is required to maintain hashing + return super().__hash__() + def at_idmapper_flush(self): """ This is called when the idmapper cache is flushed and @@ -395,7 +402,7 @@ class SharedMemoryModel(with_metaclass(SharedMemoryModelBase, Model)): try: super().save(*args, **kwargs) except DatabaseError: - # we handle the 'update_fields did not update any rows' error that + # we handle the 'update_fields did not update any rows' error that # may happen due to timing issues with attributes ufields_removed = kwargs.pop('update_fields', None) if ufields_removed: diff --git a/requirements.txt b/requirements.txt index df27d455ea..4e3e79ab8a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ # Evennia dependencies, for Linux/Mac platforms # general -django >= 2.1, < 2.2 +django >= 2.2.4, < 2.3 twisted >= 19.2.1, < 20.0.0 pillow == 5.2.0 pytz diff --git a/win_requirements.txt b/win_requirements.txt index 419b33eca1..ea3bb46fb7 100644 --- a/win_requirements.txt +++ b/win_requirements.txt @@ -4,7 +4,7 @@ pypiwin32 # general -django >= 2.1, < 2.2 +django >= 2.2.4, < 2.3 twisted >= 19.2.1, < 20.0.0 pillow == 5.2.0 pytz