From 583ce9b71ec1d24e62fd4f2aec4d369f63873c35 Mon Sep 17 00:00:00 2001 From: Nicholas Matlaga Date: Wed, 13 Dec 2017 21:08:02 -0500 Subject: [PATCH 1/4] Step through help and option popup when closing --- evennia/web/webclient/static/webclient/js/webclient_gui.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/evennia/web/webclient/static/webclient/js/webclient_gui.js b/evennia/web/webclient/static/webclient/js/webclient_gui.js index ba657858d9..57d9b0b7c0 100644 --- a/evennia/web/webclient/static/webclient/js/webclient_gui.js +++ b/evennia/web/webclient/static/webclient/js/webclient_gui.js @@ -175,8 +175,11 @@ function onKeydown (event) { } if (code === 27) { // Escape key - closePopup("#optionsdialog"); - closePopup("#helpdialog"); + if ($('#helpdialog').is(':visible')) { + closePopup("#helpdialog"); + } else { + closePopup("#optionsdialog"); + } } if (history_entry !== null) { From 08365a5ef5fe5af66cb7de1c6fea1079a4f539d2 Mon Sep 17 00:00:00 2001 From: Tehom Date: Tue, 19 Dec 2017 00:28:48 -0500 Subject: [PATCH 2/4] Attempt to handle any errors in logging. --- evennia/utils/logger.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index ce3bfe9a15..b248278ce1 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -59,6 +59,22 @@ def timeformat(when=None): tz_sign, tz_hour, tz_mins) +def log_msg(msg): + """ + Wrapper around log.msg call to catch any exceptions that might + occur in logging. If an exception is raised, we'll print to + stdout instead. + + Args: + msg: The message that was passed to log.msg + + """ + try: + log.msg(msg) + except Exception: + print("Exception raised while writing message to log. Original message: %s" % msg) + + def log_trace(errmsg=None): """ Log a traceback to the log. This should be called from within an @@ -80,9 +96,9 @@ def log_trace(errmsg=None): except Exception as e: errmsg = str(e) for line in errmsg.splitlines(): - log.msg('[EE] %s' % line) + log_msg('[EE] %s' % line) except Exception: - log.msg('[EE] %s' % errmsg) + log_msg('[EE] %s' % errmsg) log_tracemsg = log_trace @@ -101,7 +117,7 @@ def log_err(errmsg): except Exception as e: errmsg = str(e) for line in errmsg.splitlines(): - log.msg('[EE] %s' % line) + log_msg('[EE] %s' % line) # log.err('ERROR: %s' % (errmsg,)) @@ -121,7 +137,7 @@ def log_warn(warnmsg): except Exception as e: warnmsg = str(e) for line in warnmsg.splitlines(): - log.msg('[WW] %s' % line) + log_msg('[WW] %s' % line) # log.msg('WARNING: %s' % (warnmsg,)) @@ -139,7 +155,7 @@ def log_info(infomsg): except Exception as e: infomsg = str(e) for line in infomsg.splitlines(): - log.msg('[..] %s' % line) + log_msg('[..] %s' % line) log_infomsg = log_info @@ -157,7 +173,7 @@ def log_dep(depmsg): except Exception as e: depmsg = str(e) for line in depmsg.splitlines(): - log.msg('[DP] %s' % line) + log_msg('[DP] %s' % line) log_depmsg = log_dep From 181adeaa9074cf166bd4435d56086e578eec2179 Mon Sep 17 00:00:00 2001 From: Tehom Date: Mon, 25 Dec 2017 07:15:26 -0500 Subject: [PATCH 3/4] Fix errors in django admin for Attributes --- evennia/typeclasses/admin.py | 20 +++++++++++++++++--- evennia/utils/picklefield.py | 4 +++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/evennia/typeclasses/admin.py b/evennia/typeclasses/admin.py index c5dd481f90..c4047449f6 100644 --- a/evennia/typeclasses/admin.py +++ b/evennia/typeclasses/admin.py @@ -2,7 +2,7 @@ from django.contrib import admin from evennia.typeclasses.models import Tag from django import forms from evennia.utils.picklefield import PickledFormField -from evennia.utils.dbserialize import from_pickle +from evennia.utils.dbserialize import from_pickle, _SaverSet import traceback @@ -164,12 +164,12 @@ class AttributeForm(forms.ModelForm): attr_category = forms.CharField(label="Category", help_text="type of attribute, for sorting", required=False, - max_length=4) + max_length=128) attr_value = PickledFormField(label="Value", help_text="Value to pickle/save", required=False) attr_type = forms.CharField(label="Type", help_text="Internal use. Either unset (normal Attribute) or \"nick\"", required=False, - max_length=4) + max_length=16) attr_strvalue = forms.CharField(label="String Value", help_text="Only set when using the Attribute as a string-only store", required=False, @@ -213,6 +213,9 @@ class AttributeForm(forms.ModelForm): self.instance.attr_key = attr_key self.instance.attr_category = attr_category self.instance.attr_value = attr_value + # prevent set from being transformed to unicode + if isinstance(attr_value, set) or isinstance(attr_value, _SaverSet): + self.fields['attr_value'].disabled = True self.instance.deserialized_value = from_pickle(attr_value) self.instance.attr_strvalue = attr_strvalue self.instance.attr_type = attr_type @@ -237,6 +240,17 @@ class AttributeForm(forms.ModelForm): instance.attr_lockstring = self.cleaned_data['attr_lockstring'] return instance + def clean_attr_value(self): + """ + Prevent Sets from being cleaned due to literal_eval failing on them. Otherwise they will be turned into + unicode. + """ + data = self.cleaned_data['attr_value'] + initial = self.instance.attr_value + if isinstance(initial, set) or isinstance(initial, _SaverSet): + return initial + return data + class AttributeFormSet(forms.BaseInlineFormSet): """ diff --git a/evennia/utils/picklefield.py b/evennia/utils/picklefield.py index bd0a9b1643..9e683d96e6 100644 --- a/evennia/utils/picklefield.py +++ b/evennia/utils/picklefield.py @@ -120,9 +120,11 @@ def dbsafe_decode(value, compress_object=False): class PickledWidget(Textarea): def render(self, name, value, attrs=None): + """Display of the PickledField in django admin""" value = repr(value) try: - literal_eval(value) + # necessary to convert it back after repr(), otherwise validation errors will mutate it + value = literal_eval(value) except ValueError: return value From 7de45c429bdd297a91ec4a5239d9fbd30eb61b1d Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 31 Dec 2017 13:40:16 +0100 Subject: [PATCH 4/4] Fix wrong call of _SEARCH_AT_RESULT from tutorial version of look, as reported in #1544. --- evennia/contrib/tutorial_world/rooms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/contrib/tutorial_world/rooms.py b/evennia/contrib/tutorial_world/rooms.py index c16baccff1..15bddefb01 100644 --- a/evennia/contrib/tutorial_world/rooms.py +++ b/evennia/contrib/tutorial_world/rooms.py @@ -168,7 +168,7 @@ class CmdTutorialLook(default_cmds.CmdLook): else: # no detail found, delegate our result to the normal # error message handler. - _SEARCH_AT_RESULT(None, caller, args, looking_at_obj) + _SEARCH_AT_RESULT(looking_at_obj, caller, args) return else: # we found a match, extract it from the list and carry on