Added **kwargs to cmdhandler and execute_cmd() methods, to set arbitrary flags on commands at run-time. Unused by default Evennia but may be useful to codedly change operation parameters on commands at run-time.

This commit is contained in:
Griatch 2014-08-24 09:43:55 +02:00
parent 19d6d4ff9e
commit a88afabd60
5 changed files with 33 additions and 8 deletions

View file

@ -251,7 +251,7 @@ def get_and_merge_cmdsets(caller, session, player, obj,
# Main command-handler function # Main command-handler function
@inlineCallbacks @inlineCallbacks
def cmdhandler(called_by, raw_string, testing=False, callertype="session", sessid=None): def cmdhandler(called_by, raw_string, testing=False, callertype="session", sessid=None, **kwargs):
""" """
This is the main function to handle any string sent to the engine. This is the main function to handle any string sent to the engine.
@ -268,6 +268,10 @@ def cmdhandler(called_by, raw_string, testing=False, callertype="session", sessi
giving them precendence for same-name and same-prio commands. giving them precendence for same-name and same-prio commands.
sessid - Relevant if callertype is "player" - the session id will help sessid - Relevant if callertype is "player" - the session id will help
retrieve the correct cmdsets from puppeted objects. retrieve the correct cmdsets from puppeted objects.
**kwargs - other keyword arguments will be assigned as named variables on the
retrieved command object *before* it is executed. This is unuesed
in default Evennia but may be used by code to set custom flags or
special operating conditions for a command as it executes.
Note that this function returns a deferred! Note that this function returns a deferred!
""" """
@ -392,6 +396,10 @@ def cmdhandler(called_by, raw_string, testing=False, callertype="session", sessi
# only return the command instance # only return the command instance
returnValue(cmd) returnValue(cmd)
# assign custom kwargs to found cmd object
for key, val in kwargs.items():
setattr(cmd, key, val)
# pre-command hook # pre-command hook
yield cmd.at_pre_cmd() yield cmd.at_pre_cmd()

View file

@ -482,7 +482,7 @@ class ObjectDB(TypedObject):
# Execution/action methods # Execution/action methods
# #
def execute_cmd(self, raw_string, sessid=None): def execute_cmd(self, raw_string, sessid=None, **kwargs):
""" """
Do something as this object. This method is a copy of the execute_ Do something as this object. This method is a copy of the execute_
cmd method on the session. This is never called normally, it's only cmd method on the session. This is never called normally, it's only
@ -492,6 +492,10 @@ class ObjectDB(TypedObject):
Argument: Argument:
raw_string (string) - raw command input raw_string (string) - raw command input
sessid (int) - optional session id to return results to sessid (int) - optional session id to return results to
**kwargs - other keyword arguments will be added to the found command
object instace as variables before it executes. This is
unused by default Evennia but may be used to set flags and
change operating paramaters for commands at run-time.
Returns Deferred - this is an asynchronous Twisted object that will Returns Deferred - this is an asynchronous Twisted object that will
not fire until the command has actually finished executing. To not fire until the command has actually finished executing. To
@ -509,7 +513,7 @@ class ObjectDB(TypedObject):
raw_string = to_unicode(raw_string) raw_string = to_unicode(raw_string)
raw_string = self.nicks.nickreplace(raw_string, raw_string = self.nicks.nickreplace(raw_string,
categories=("inputline", "channel"), include_player=True) categories=("inputline", "channel"), include_player=True)
return cmdhandler.cmdhandler(_GA(self, "typeclass"), raw_string, callertype="object", sessid=sessid) return cmdhandler.cmdhandler(_GA(self, "typeclass"), raw_string, callertype="object", sessid=sessid, **kwargs)
def msg(self, text=None, from_obj=None, sessid=0, **kwargs): def msg(self, text=None, from_obj=None, sessid=0, **kwargs):
""" """

View file

@ -300,7 +300,7 @@ class Object(TypeClass):
return self.player return self.player
return self.dbobj.search_player(searchdata, quiet=quiet) return self.dbobj.search_player(searchdata, quiet=quiet)
def execute_cmd(self, raw_string, sessid=None): def execute_cmd(self, raw_string, sessid=None, **kwargs):
""" """
Do something as this object. This command transparently Do something as this object. This command transparently
lets its typeclass execute the command. This method is lets its typeclass execute the command. This method is
@ -311,6 +311,10 @@ class Object(TypeClass):
raw_string (string) - raw command input raw_string (string) - raw command input
sessid (int) - id of session executing the command. This sets the sessid (int) - id of session executing the command. This sets the
sessid property on the command. sessid property on the command.
**kwargs - other keyword arguments will be added to the found command
object instace as variables before it executes. This is
unused by default Evennia but may be used to set flags and
change operating paramaters for commands at run-time.
Returns Deferred - this is an asynchronous Twisted object that will Returns Deferred - this is an asynchronous Twisted object that will
not fire until the command has actually finished executing. To not fire until the command has actually finished executing. To

View file

@ -426,7 +426,7 @@ class PlayerDB(TypedObject, AbstractUser):
_GA(self, "aliases").clear() _GA(self, "aliases").clear()
super(PlayerDB, self).delete(*args, **kwargs) super(PlayerDB, self).delete(*args, **kwargs)
def execute_cmd(self, raw_string, sessid=None): def execute_cmd(self, raw_string, sessid=None, **kwargs):
""" """
Do something as this player. This method is never called normally, Do something as this player. This method is never called normally,
but only when the player object itself is supposed to execute the but only when the player object itself is supposed to execute the
@ -434,6 +434,11 @@ class PlayerDB(TypedObject, AbstractUser):
eventual puppets. eventual puppets.
raw_string - raw command input coming from the command line. raw_string - raw command input coming from the command line.
sessid - the optional session id to be responsible for the command-send
**kwargs - other keyword arguments will be added to the found command
object instace as variables before it executes. This is
unused by default Evennia but may be used to set flags and
change operating paramaters for commands at run-time.
""" """
raw_string = utils.to_unicode(raw_string) raw_string = utils.to_unicode(raw_string)
raw_string = self.nicks.nickreplace(raw_string, raw_string = self.nicks.nickreplace(raw_string,
@ -448,7 +453,7 @@ class PlayerDB(TypedObject, AbstractUser):
# this can happen for bots # this can happen for bots
sessid = None sessid = None
return cmdhandler.cmdhandler(self.typeclass, raw_string, return cmdhandler.cmdhandler(self.typeclass, raw_string,
callertype="player", sessid=sessid) callertype="player", sessid=sessid, **kwargs)
def search(self, searchdata, return_puppet=False, **kwargs): def search(self, searchdata, return_puppet=False, **kwargs):
""" """

View file

@ -133,7 +133,7 @@ class Player(TypeClass):
""" """
return self.dbobj.swap_character(new_character, delete_old_character=delete_old_character) return self.dbobj.swap_character(new_character, delete_old_character=delete_old_character)
def execute_cmd(self, raw_string, sessid=None): def execute_cmd(self, raw_string, sessid=None, **kwargs):
""" """
Do something as this object. This command transparently Do something as this object. This command transparently
lets its typeclass execute the command. This method lets its typeclass execute the command. This method
@ -144,6 +144,10 @@ class Player(TypeClass):
raw_string (string) - raw command input raw_string (string) - raw command input
sessid (int) - id of session executing the command. This sets the sessid (int) - id of session executing the command. This sets the
sessid property on the command sessid property on the command
**kwargs - other keyword arguments will be added to the found command
object instace as variables before it executes. This is
unused by default Evennia but may be used to set flags and
change operating paramaters for commands at run-time.
Returns Deferred - this is an asynchronous Twisted object that will Returns Deferred - this is an asynchronous Twisted object that will
not fire until the command has actually finished executing. To not fire until the command has actually finished executing. To
@ -155,7 +159,7 @@ class Player(TypeClass):
be useful for coders intending to implement some sort of nested be useful for coders intending to implement some sort of nested
command structure. command structure.
""" """
return self.dbobj.execute_cmd(raw_string, sessid=sessid) return self.dbobj.execute_cmd(raw_string, sessid=sessid, **kwargs)
def search(self, searchdata, return_puppet=False, **kwargs): def search(self, searchdata, return_puppet=False, **kwargs):
""" """