From 164eb5b89b1ef59e6c2ee76b55139d0578cdfe5c Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 19 Sep 2010 06:57:08 +0000 Subject: [PATCH] Some command bugfixes. Added some more debug messages for pinning down issue101. --- .../commands/default/cmdset_default.py | 1 - game/gamesrc/commands/default/tests.py | 140 ++++++++++-------- src/commands/cmdsethandler.py | 8 +- src/scripts/scripts.py | 7 +- src/typeclasses/models.py | 2 +- 5 files changed, 89 insertions(+), 69 deletions(-) diff --git a/game/gamesrc/commands/default/cmdset_default.py b/game/gamesrc/commands/default/cmdset_default.py index 082fdd4dc2..1f10f98f57 100644 --- a/game/gamesrc/commands/default/cmdset_default.py +++ b/game/gamesrc/commands/default/cmdset_default.py @@ -91,7 +91,6 @@ class DefaultCmdSet(CmdSet): # Testing commands self.add(tests.CmdTest()) - self.add(tests.CmdTestState()) self.add(tests.CmdTestPerms()) self.add(tests.TestCom()) self.add(tests.CmdDebug()) diff --git a/game/gamesrc/commands/default/tests.py b/game/gamesrc/commands/default/tests.py index 9b32f1a2a6..2391ee1788 100644 --- a/game/gamesrc/commands/default/tests.py +++ b/game/gamesrc/commands/default/tests.py @@ -11,6 +11,8 @@ from src.utils import create from src.utils import debug from game.gamesrc.commands.default.muxcommand import MuxCommand +from src.commands import cmdsethandler + # Test permissions @@ -27,11 +29,19 @@ class CmdTest(MuxCommand): key = "@test" aliases = ["@te", "@test all"] - permissions = "cmd:Immortals Wizards" + #permissions = "cmd:Immortals Wizards" # the muxcommand class itself handles the display # so we just defer to it by not adding any function. - pass + + def func(self): + cmdsetname = "game.gamesrc.commands.default.cmdset_default.DefaultCmdSet" + self.caller.msg(cmdsethandler.CACHED_CMDSETS) + cmdsethandler.import_cmdset(cmdsetname, self, self) + self.caller.msg("Imported %s" % cmdsetname) + self.caller.msg(cmdsethandler.CACHED_CMDSETS) + + class CmdTestPerms(MuxCommand): @@ -52,105 +62,109 @@ class CmdTestPerms(MuxCommand): key = "@testperm" permissions = "cmd:Immortals Wizards" - def func(self, srcobj, inp): + def func(self): """ Run tests """ - if srcobj.user.is_superuser: - srcobj.msg("You are a superuser. Permission tests are pointless.") + caller = self.caller + + if caller.user.is_superuser: + caller.msg("You are a superuser. Permission tests are pointless.") return # create a test object obj = create.create_object(None, "accessed_object") # this will use default typeclass obj_id = obj.id - srcobj.msg("obj_attr: %s" % obj.attr("testattr")) + caller.msg("obj_attr: %s" % obj.attr("testattr")) # perms = ["has_permission", "has permission", "skey:has_permission", # "has_id(%s)" % obj_id, "has_attr(testattr)", # "has_attr(testattr, testattr_value)"] # test setting permissions - uprofile = srcobj.user.get_profile() + uprofile = caller.user.get_profile() # do testing - srcobj.msg("----------------") + caller.msg("----------------") permissions.set_perm(obj, "has_permission") permissions.add_perm(obj, "skey:has_permission") - srcobj.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) - srcobj.msg("normal permtest: %s" % permissions.has_perm(uprofile, obj)) - srcobj.msg("skey permtest: %s" % permissions.has_perm(uprofile, obj, 'skey')) + caller.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) + caller.msg("normal permtest: %s" % permissions.has_perm(uprofile, obj)) + caller.msg("skey permtest: %s" % permissions.has_perm(uprofile, obj, 'skey')) permissions.set_perm(uprofile, "has_permission") - srcobj.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) - srcobj.msg("normal permtest: %s" % permissions.has_perm(uprofile, obj)) - srcobj.msg("skey permtest: %s" % permissions.has_perm(uprofile, obj, 'skey')) + caller.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) + caller.msg("normal permtest: %s" % permissions.has_perm(uprofile, obj)) + caller.msg("skey permtest: %s" % permissions.has_perm(uprofile, obj, 'skey')) # function tests permissions.set_perm(obj, "has_id(%s)" % (uprofile.id)) - srcobj.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) - srcobj.msg("functest: %s" % permissions.has_perm(uprofile, obj)) + caller.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) + caller.msg("functest: %s" % permissions.has_perm(uprofile, obj)) uprofile.attr("testattr", "testattr_value") permissions.set_perm(obj, "has_attr(testattr, testattr_value)") - srcobj.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) - srcobj.msg("functest: %s" % permissions.has_perm(uprofile, obj)) + caller.msg(" keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) + caller.msg("functest: %s" % permissions.has_perm(uprofile, obj)) # cleanup of test permissions permissions.del_perm(uprofile, "has_permission") - srcobj.msg(" cleanup: keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) + caller.msg(" cleanup: keys:[%s] locks:[%s]" % (uprofile.permissions, obj.permissions)) obj.delete() uprofile.attr("testattr", delete=True) -# Add/remove states +# # Add/remove states (removed; not valid.) -EXAMPLE_STATE="game.gamesrc.commands.examples.example.EXAMPLESTATE" +# EXAMPLE_STATE="game.gamesrc.commands.examples.example.EXAMPLESTATE" -class CmdTestState(MuxCommand): - """ - Test command - add a state. +# class CmdTestState(MuxCommand): +# """ +# Test command - add a state. - Usage: - @teststate[/switch] [] - Switches: - add - add a state - clear - remove all added states. - list - view current state stack - reload - reload current state stack +# Usage: +# @teststate[/switch] [] +# Switches: +# add - add a state +# clear - remove all added states. +# list - view current state stack +# reload - reload current state stack - If no python path is given, an example state will be added. - You will know it worked if you can use the commands '@testcommand' - and 'smile'. - """ +# If no python path is given, an example state will be added. +# You will know it worked if you can use the commands '@testcommand' +# and 'smile'. +# """ - key = "@teststate" - alias = "@testingstate" - permissions = "cmd:Immortals Wizards" +# key = "@teststate" +# alias = "@testingstate" +# permissions = "cmd:Immortals Wizards" - def func(self, source_object, inp): - """ - inp is the dict returned from MuxCommand's parser. - """ - switches = inp["switches"] - if not switches or switches[0] not in ["add", "clear", "list", "reload"]: - string = "Usage: @teststate[/add|clear|list|reload] []" - source_object.msg(string) - elif "clear" in switches: - source_object.statehandler.clear() - source_object.msg("All states cleared.") - return - elif "list" in switches: - string = "%s" % source_object.statehandler - source_object.msg(string) - elif "reload" in switches: - source_object.statehandler.load() - source_object.msg("States reloaded.") - else: #add - arg = inp["raw"] - if not arg: - arg = EXAMPLE_STATE - source_object.statehandler.add(arg) - string = "Added state '%s'." % source_object.statehandler.state.key - source_object.msg(string) +# def func(self): +# """ +# inp is the dict returned from MuxCommand's parser. +# """ +# caller = self.caller +# switches = self.switches + +# if not switches or switches[0] not in ["add", "clear", "list", "reload"]: +# string = "Usage: @teststate[/add|clear|list|reload] []" +# caller.msg(string) +# elif "clear" in switches: +# caller.cmdset.clear() +# caller.msg("All cmdset cleared.") +# return +# elif "list" in switches: +# string = "%s" % caller.cmdset +# caller.msg(string) +# elif "reload" in switches: +# caller.cmdset.load() +# caller.msg("Cmdset reloaded.") +# else: #add +# arg = inp["raw"] +# if not arg: +# arg = EXAMPLE_STATE +# caller.cmdset.add(arg) +# string = "Added state '%s'." % caller.cmdset.state.key +# caller.msg(string) class TestCom(MuxCommand): """ diff --git a/src/commands/cmdsethandler.py b/src/commands/cmdsethandler.py index 844a3b2c20..79f81833dc 100644 --- a/src/commands/cmdsethandler.py +++ b/src/commands/cmdsethandler.py @@ -77,7 +77,7 @@ def import_cmdset(python_path, cmdsetobj, emit_to_obj=None, no_logging=False): instance from a python module, given a python_path. It's usually accessed through the cmdsethandler's add() and add_default() methods. python_path - This is the full path to the cmdset object. - cmsetobj - the database object/typeclass on which this cmdset is to be assigned + cmdsetobj - the database object/typeclass on which this cmdset is to be assigned (this can be also channels and exits, as well as players but there will always be such an object) emit_to_obj - if given, error is emitted to this object (in addition to logging) @@ -88,17 +88,18 @@ def import_cmdset(python_path, cmdsetobj, emit_to_obj=None, no_logging=False): try: try: + print "importing %s: CACHED_CMDSETS=%s" % (python_path, CACHED_CMDSETS) wanted_cache_key = python_path cmdsetclass = CACHED_CMDSETS.get(wanted_cache_key, None) errstring = "" if not cmdsetclass: - #print "cmdset %s not in cache. Reloading." % wanted_cache_key + print "cmdset %s not in cache. Reloading." % wanted_cache_key # Not in cache. Reload from disk. modulepath, classname = python_path.rsplit('.', 1) module = __import__(modulepath, fromlist=[True]) cmdsetclass = module.__dict__[classname] CACHED_CMDSETS[wanted_cache_key] = cmdsetclass - #print "cmdset %s found." % wanted_cache_key + print "cmdset %s found." % wanted_cache_key #instantiate the cmdset (and catch its errors) if callable(cmdsetclass): cmdsetclass = cmdsetclass(cmdsetobj) @@ -118,6 +119,7 @@ def import_cmdset(python_path, cmdsetobj, emit_to_obj=None, no_logging=False): raise except Exception: if errstring and not no_logging: + print errstring logger.log_trace() if emit_to_obj: emit_to_obj.msg(errstring) diff --git a/src/scripts/scripts.py b/src/scripts/scripts.py index b12764d1cc..4f4674ad79 100644 --- a/src/scripts/scripts.py +++ b/src/scripts/scripts.py @@ -227,12 +227,13 @@ class CheckSessions(Script): "Setup the script" self.key = "sys_session_check" self.desc = "Checks sessions so they are live." - self.interval = 60 # repeat every 60 seconds + self.interval = 60 # repeat every 60 seconds self.persistent = True def at_repeat(self): "called every 60 seconds" #print "session check!" + #print "ValidateSessions run" sessionhandler.check_all_sessions() class ValidateScripts(Script): @@ -246,6 +247,7 @@ class ValidateScripts(Script): def at_repeat(self): "called every hour" + print "ValidateScripts run." ScriptDB.objects.validate() class ValidateChannelHandler(Script): @@ -260,6 +262,7 @@ class ValidateChannelHandler(Script): def at_repeat(self): "called every hour+" + print "ValidateChannelHandler run." channelhandler.CHANNELHANDLER.update() class AddCmdSet(Script): @@ -306,6 +309,8 @@ class AddCmdSet(Script): This removes the cmdset when the script stops """ cmdset = self.db.cmdset + + print "AddCmdSets: at_stop() for %s called." % self.obj if cmdset: if self.db.add_default: self.obj.cmdset.delete_default() diff --git a/src/typeclasses/models.py b/src/typeclasses/models.py index 208cb5b067..1e2cb5153c 100644 --- a/src/typeclasses/models.py +++ b/src/typeclasses/models.py @@ -480,7 +480,7 @@ class TypedObject(SharedMemoryModel): attribute_model_name = "Attribute" def __eq__(self, other): - return other and self.id == other.id + return other and hasattr(other, 'id') and self.id == other.id def __str__(self): return smart_str("%s" % self.key)