diff --git a/evennia/commands/cmdhandler.py b/evennia/commands/cmdhandler.py index b30a4bdd6..7a3ed55c2 100644 --- a/evennia/commands/cmdhandler.py +++ b/evennia/commands/cmdhandler.py @@ -296,7 +296,6 @@ def get_and_merge_cmdsets(caller, session, player, obj, tempmergers = {} for cmdset in cmdsets: prio = cmdset.priority - #print cmdset.key, prio if prio in tempmergers: # merge same-prio cmdset together separately tempmergers[prio] = yield cmdset + tempmergers[prio] @@ -309,8 +308,6 @@ def get_and_merge_cmdsets(caller, session, player, obj, # Merge all command sets into one, beginning with the lowest-prio one cmdset = cmdsets[0] for merging_cmdset in cmdsets[1:]: - #print "<%s(%s,%s)> onto <%s(%s,%s)>" % (merging_cmdset.key, merging_cmdset.priority, merging_cmdset.mergetype, - # cmdset.key, cmdset.priority, cmdset.mergetype) cmdset = yield merging_cmdset + cmdset # store the full sets for diagnosis cmdset.merged_from = cmdsets @@ -321,7 +318,6 @@ def get_and_merge_cmdsets(caller, session, player, obj, for cset in (cset for cset in local_obj_cmdsets if cset): cset.duplicates = cset.old_duplicates - #print "merged set:", cmdset.key returnValue(cmdset) except ErrorReported: raise @@ -580,7 +576,7 @@ def cmdhandler(called_by, raw_string, _testing=False, callertype="session", sess except NoCmdSets: # Critical error. - logger.log_errmsg("No cmdsets found: %s" % caller) + logger.log_err("No cmdsets found: %s" % caller) error_to.msg(_ERROR_NOCMDSETS, _nomulti=True) except Exception: diff --git a/evennia/commands/cmdset.py b/evennia/commands/cmdset.py index 58912003d..b3d16d0ab 100644 --- a/evennia/commands/cmdset.py +++ b/evennia/commands/cmdset.py @@ -490,7 +490,6 @@ class CmdSet(object): commands.append(cmd) # extra run to make sure to avoid doublets self.commands = list(set(commands)) - #print "In cmdset.add(cmd):", self.key, cmd # add system_command to separate list as well, # for quick look-up if cmd.key.startswith("__"): diff --git a/evennia/commands/cmdsethandler.py b/evennia/commands/cmdsethandler.py index 5ef1d5767..35f10c1f6 100644 --- a/evennia/commands/cmdsethandler.py +++ b/evennia/commands/cmdsethandler.py @@ -127,7 +127,6 @@ def import_cmdset(path, cmdsetobj, emit_to_obj=None, no_logging=False): try: # first try to get from cache - #print "importing %s: _CACHED_CMDSETS=%s" % (python_path, _CACHED_CMDSETS) cmdsetclass = _CACHED_CMDSETS.get(python_path, None) if not cmdsetclass: @@ -184,7 +183,7 @@ def import_cmdset(path, cmdsetobj, emit_to_obj=None, no_logging=False): # returning an empty error cmdset errstring = errstring.strip() if not no_logging: - logger.log_errmsg(errstring) + logger.log_err(errstring) if emit_to_obj and not ServerConfig.objects.conf("server_starting_mode"): emit_to_obj.msg(errstring) err_cmdset = _ErrorCmdSet() @@ -243,7 +242,6 @@ class CmdSetHandler(object): mergelist = [] if len(self.cmdset_stack) > 1: # We have more than one cmdset in stack; list them all - #print self.cmdset_stack, self.mergetype_stack for snum, cmdset in enumerate(self.cmdset_stack): mergetype = self.mergetype_stack[snum] permstring = "non-perm" @@ -310,7 +308,6 @@ class CmdSetHandler(object): if init_mode: # reimport all permanent cmdsets storage = self.obj.cmdset_storage - #print "cmdset_storage:", self.obj.cmdset_storage if storage: self.cmdset_stack = [] for pos, path in enumerate(storage): diff --git a/evennia/commands/default/admin.py b/evennia/commands/default/admin.py index 3301c7f6e..357df8ae6 100644 --- a/evennia/commands/default/admin.py +++ b/evennia/commands/default/admin.py @@ -198,7 +198,6 @@ class CmdBan(MuxCommand): # replace * with regex form and compile it ipregex = ban.replace('.', '\.') ipregex = ipregex.replace('*', '[0-9]{1,3}') - #print "regex:",ipregex ipregex = re.compile(r"%s" % ipregex) bantup = ("", ban, ipregex, now, reason) # save updated banlist diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index d78789700..afa7fbb3e 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -2416,7 +2416,6 @@ class CmdTag(MuxCommand): category = None if ":" in tag: tag, category = [part.strip() for part in tag.split(":", 1)] - #print "tag search:", tag, search_category objs = search.search_tag(tag, category=category) nobjs = len(objs) if nobjs > 0: diff --git a/evennia/commands/default/comms.py b/evennia/commands/default/comms.py index d89f23f68..c4bc7d4d0 100644 --- a/evennia/commands/default/comms.py +++ b/evennia/commands/default/comms.py @@ -267,13 +267,11 @@ class CmdChannels(MuxPlayerCommand): # all channels we have available to listen to channels = [chan for chan in ChannelDB.objects.get_all_channels() if chan.access(caller, 'listen')] - #print channels if not channels: self.msg("No channels available.") return # all channel we are already subscribed to subs = ChannelDB.objects.get_subscriptions(caller) - #print subs if self.cmdstring == "comlist": # just display the subscribed channels with no extra info diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index 63eb76887..04a4209d1 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -233,7 +233,6 @@ class CmdGet(MuxCommand): if not self.args: caller.msg("Get what?") return - #print "general/get:", caller, caller.location, self.args, caller.location.contents obj = caller.search(self.args, location=caller.location) if not obj: return diff --git a/evennia/commands/default/muxcommand.py b/evennia/commands/default/muxcommand.py index 1de7ac866..b0953a36c 100644 --- a/evennia/commands/default/muxcommand.py +++ b/evennia/commands/default/muxcommand.py @@ -100,7 +100,6 @@ class MuxCommand(Command): switches = [] if args and len(args) > 1 and args[0] == "/": # we have a switch, or a set of switches. These end with a space. - #print "'%s'" % args switches = args[1:].split(None, 1) if len(switches) > 1: switches, args = switches diff --git a/evennia/commands/default/player.py b/evennia/commands/default/player.py index 36ee23ec0..b842aaf36 100644 --- a/evennia/commands/default/player.py +++ b/evennia/commands/default/player.py @@ -592,7 +592,6 @@ class CmdColorTest(MuxPlayerCommand): string = "ANSI colors:" for row in table: string += "\n " + " ".join(row) - #print string self.msg(string) self.msg("{{X : black. {{/ : return, {{- : tab, {{_ : space, {{* : invert, {{u : underline") self.msg("To combine background and foreground, add background marker last, e.g. {{r{{[b.") diff --git a/evennia/commands/default/system.py b/evennia/commands/default/system.py index 331d29409..097fdb544 100644 --- a/evennia/commands/default/system.py +++ b/evennia/commands/default/system.py @@ -116,7 +116,7 @@ class CmdShutdown(MuxCommand): announcement = "\nServer is being SHUT DOWN!\n" if self.args: announcement += "%s\n" % self.args - logger.log_infomsg('Server shutdown by %s.' % self.caller.name) + logger.log_info('Server shutdown by %s.' % self.caller.name) SESSIONS.announce_all(announcement) SESSIONS.server.shutdown(mode='shutdown') SESSIONS.portal_shutdown() diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index 4751c2d8f..9821bcb5a 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -140,8 +140,7 @@ class CmdUnconnectedConnect(MuxCommand): # We are in the middle between logged in and -not, so we have # to handle tracebacks ourselves at this point. If we don't, # we won't see any errors at all. - string = "%s\nThis is a bug. Please e-mail an admin if the problem persists." - session.msg(string % (traceback.format_exc())) + session.msg("An error occurred. Please e-mail an admin if the problem persists.") logger.log_errmsg(traceback.format_exc()) finally: return @@ -287,8 +286,7 @@ class CmdUnconnectedCreate(MuxCommand): # We are in the middle between logged in and -not, so we have # to handle tracebacks ourselves at this point. If we don't, # we won't see any errors at all. - string = "%s\nThis is a bug. Please e-mail an admin if the problem persists." - session.msg(string % (traceback.format_exc())) + session.msg("An error occurred. Please e-mail an admin if the problem persists.") logger.log_errmsg(traceback.format_exc()) @@ -481,7 +479,7 @@ def _create_player(session, playername, password, permissions, typeclass=None): pchannel = ChannelDB.objects.get_channel(settings.DEFAULT_CHANNELS[0]["key"]) if not pchannel.connect(new_player): string = "New player '%s' could not connect to public channel!" % new_player.key - logger.log_errmsg(string) + logger.log_err(string) return new_player diff --git a/evennia/contrib/chargen.py b/evennia/contrib/chargen.py index 683edd6c0..cf1ab8bc1 100644 --- a/evennia/contrib/chargen.py +++ b/evennia/contrib/chargen.py @@ -74,7 +74,6 @@ class CmdOOCLook(default_cmds.CmdLook): self.character = None if utils.inherits_from(self.caller, "evennia.objects.objects.Object"): # An object of some type is calling. Convert to player. - #print self.caller, self.caller.__class__ self.character = self.caller if hasattr(self.caller, "player"): self.caller = self.caller.player @@ -151,7 +150,6 @@ class CmdOOCCharacterCreate(Command): self.character = None if utils.inherits_from(self.caller, "evennia.objects.objects.Object"): # An object of some type is calling. Convert to player. - #print self.caller, self.caller.__class__ self.character = self.caller if hasattr(self.caller, "player"): self.caller = self.caller.player diff --git a/evennia/contrib/email_login.py b/evennia/contrib/email_login.py index cee8a1484..3303fe994 100644 --- a/evennia/contrib/email_login.py +++ b/evennia/contrib/email_login.py @@ -224,7 +224,7 @@ its and @/./+/-/_ only.") # this echoes the restrictions made by django's auth m pchannel = ChannelDB.objects.get_channel(pchanneldef[0]) if not pchannel.connect(new_player): string = "New player '%s' could not connect to public channel!" % new_player.key - logger.log_errmsg(string) + logger.log_err(string) if MULTISESSION_MODE < 2: # if we only allow one character, create one with the same name as Player @@ -257,8 +257,7 @@ its and @/./+/-/_ only.") # this echoes the restrictions made by django's auth m # We are in the middle between logged in and -not, so we have # to handle tracebacks ourselves at this point. If we don't, # we won't see any errors at all. - string = "%s\nThis is a bug. Please e-mail an admin if the problem persists." - session.msg(string % (traceback.format_exc())) + session.msg("An error occurred. Please e-mail an admin if the problem persists.") logger.log_errmsg(traceback.format_exc()) class CmdUnconnectedQuit(MuxCommand): diff --git a/evennia/contrib/menu_login.py b/evennia/contrib/menu_login.py index 7868aa998..62eb59d43 100644 --- a/evennia/contrib/menu_login.py +++ b/evennia/contrib/menu_login.py @@ -235,8 +235,7 @@ class CmdPasswordCreate(Command): # We are in the middle between logged in and -not, so we have # to handle tracebacks ourselves at this point. If we don't, we # won't see any errors at all. - string = "%s\nThis is a bug. Please e-mail an admin if the problem persists." - self.caller.msg(string % (traceback.format_exc())) + self.caller.msg("An error occurred. Please e-mail an admin if the problem persists.") logger.log_errmsg(traceback.format_exc()) diff --git a/evennia/contrib/rpsystem.py b/evennia/contrib/rpsystem.py index 1b57901b0..94f19e977 100644 --- a/evennia/contrib/rpsystem.py +++ b/evennia/contrib/rpsystem.py @@ -335,7 +335,6 @@ def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False): # we scan backwards so we can replace in-situ without messing # up later occurrences. Given a marker match, query from # start index forward for all candidates. - #print "marker_match:", marker_match.re.pattern, marker_match.groups() # first see if there is a number given (e.g. 1-tall) num_identifier, _ = marker_match.groups("") # return "" if no match, rather than None diff --git a/evennia/contrib/tutorial_examples/red_button_scripts.py b/evennia/contrib/tutorial_examples/red_button_scripts.py index 4146d2f41..ba369bcb6 100644 --- a/evennia/contrib/tutorial_examples/red_button_scripts.py +++ b/evennia/contrib/tutorial_examples/red_button_scripts.py @@ -79,7 +79,6 @@ class OpenLidState(DefaultScript): automatically checked, so we don't need to worry about adding the cmdset to a closed lid-button. """ - #print "In Open at_start (should add cmdset)" self.obj.cmdset.add(cmdsetexamples.LidOpenCmdSet) def is_valid(self): @@ -215,7 +214,6 @@ class BlinkButtonEvent(DefaultScript): """ Button will keep blinking unless it is broken. """ - #print "self.obj.db.lamp_works:", self.obj.db.lamp_works return self.obj.db.lamp_works def at_repeat(self): diff --git a/evennia/help/manager.py b/evennia/help/manager.py index 38eb8ba84..7745eb988 100644 --- a/evennia/help/manager.py +++ b/evennia/help/manager.py @@ -126,7 +126,7 @@ class HelpEntryManager(models.Manager): topic.help_category = default_category topic.save() string = "Help database moved to category %s" % default_category - logger.log_infomsg(string) + logger.log_info(string) def search_help(self, ostring, help_category=None): """ diff --git a/evennia/locks/lockfuncs.py b/evennia/locks/lockfuncs.py index e851faff9..3c64e1e6e 100644 --- a/evennia/locks/lockfuncs.py +++ b/evennia/locks/lockfuncs.py @@ -473,8 +473,7 @@ def tag(accessing_obj, accessed_obj, *args, **kwargs): a command), then accessing_obj.obj is used instead. """ if hasattr(accessing_obj, "obj"): - accessing_obj = accessing_obj = accessing_obj.obj - #print("tag:", args, accessing_obj, accessing_obj.tags.get(*args)) + accessing_obj = accessing_obj.obj return accessing_obj.tags.get(*args) def objtag(accessing_obj, accessed_obj, *args, **kwargs): diff --git a/evennia/locks/lockhandler.py b/evennia/locks/lockhandler.py index bf274478f..413d2740a 100644 --- a/evennia/locks/lockhandler.py +++ b/evennia/locks/lockhandler.py @@ -144,7 +144,7 @@ def _cache_lockfuncs(): for tup in (tup for tup in inspect.getmembers(mod) if callable(tup[1])): _LOCKFUNCS[tup[0]] = tup[1] else: - logger.log_errmsg("Couldn't load %s from PERMISSION_FUNC_MODULES." % modulepath) + logger.log_err("Couldn't load %s from PERMISSION_FUNC_MODULES." % modulepath) # # pre-compiled regular expressions diff --git a/evennia/objects/manager.py b/evennia/objects/manager.py index 8504f3225..4d77b7f23 100644 --- a/evennia/objects/manager.py +++ b/evennia/objects/manager.py @@ -207,7 +207,7 @@ class ObjectDBManager(TypedObjectManager): return [] except ValueError: from evennia.utils import logger - logger.log_errmsg("The property '%s' does not support search criteria of the type %s." % (property_name, type(property_value))) + logger.log_err("The property '%s' does not support search criteria of the type %s." % (property_name, type(property_value))) return [] @returns_typeclass_list diff --git a/evennia/objects/models.py b/evennia/objects/models.py index 8136145cd..eec5c7154 100644 --- a/evennia/objects/models.py +++ b/evennia/objects/models.py @@ -269,8 +269,8 @@ class ObjectDB(TypedObject): raise #RuntimeError(errmsg) except Exception as e: errmsg = "Error (%s): %s is not a valid location." % (str(e), location) - logger.log_errmsg(errmsg) - raise #Exception(errmsg) + logger.log_trace(errmsg) + raise def __location_del(self): "Cleanly delete the location reference" diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 0370fa0f2..e060b9e99 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -17,7 +17,7 @@ from evennia.scripts.scripthandler import ScriptHandler from evennia.commands import cmdset, command from evennia.commands.cmdsethandler import CmdSetHandler from evennia.commands import cmdhandler -from evennia.utils.logger import log_trace, log_errmsg +from evennia.utils import logger from evennia.utils.utils import (variable_from_module, lazy_property, make_iter, to_str, to_unicode) @@ -432,13 +432,13 @@ class DefaultObject(ObjectDB): try: from_obj.at_msg_send(text=text, to_obj=self, **kwargs) except Exception: - log_trace() + logger.log_trace() try: if not self.at_msg_receive(text=text, **kwargs): # if at_msg_receive returns false, we abort message to this object return except Exception: - log_trace() + logger.log_trace() # session relay kwargs['_nomulti'] = kwargs.get('_nomulti', True) @@ -522,7 +522,7 @@ class DefaultObject(ObjectDB): "Simple log helper method" trc = traceback.format_exc() errstring = "%s%s" % (trc, string) - log_trace() + logger.log_trace() self.msg(errstring) errtxt = _("Couldn't perform move ('%s'). Contact an admin.") @@ -549,7 +549,6 @@ class DefaultObject(ObjectDB): except Exception: logerr(errtxt % "at_before_move()") #emit_to_obj.msg(errtxt % "at_before_move()") - #logger.log_trace() return False # Save the old location @@ -570,7 +569,6 @@ class DefaultObject(ObjectDB): except Exception: logerr(errtxt % "at_object_leave()") #emit_to_obj.msg(errtxt % "at_object_leave()") - #logger.log_trace() return False if not quiet: @@ -580,16 +578,14 @@ class DefaultObject(ObjectDB): except Exception: logerr(errtxt % "at_announce_move()") #emit_to_obj.msg(errtxt % "at_announce_move()" ) - #logger.log_trace() return False # Perform move try: - #print "move_to location:", destination self.location = destination except Exception: emit_to_obj.msg(errtxt % "location change") - log_trace() + logger.log_trace() return False if not quiet: @@ -599,7 +595,6 @@ class DefaultObject(ObjectDB): except Exception: logerr(errtxt % "announce_move_to()") #emit_to_obj.msg(errtxt % "announce_move_to()") - #logger.log_trace() return False if move_hooks: @@ -610,7 +605,6 @@ class DefaultObject(ObjectDB): except Exception: logerr(errtxt % "at_object_receive()") #emit_to_obj.msg(errtxt % "at_object_receive()") - #logger.log_trace() return False # Execute eventual extra commands on this object after moving it @@ -621,7 +615,6 @@ class DefaultObject(ObjectDB): except Exception: logerr(errtxt % "at_after_move") #emit_to_obj.msg(errtxt % "at_after_move()") - #logger.log_trace() return False return True @@ -649,7 +642,7 @@ class DefaultObject(ObjectDB): default_home = None except Exception: string = _("Could not find default home '(#%d)'.") - log_errmsg(string % default_home_id) + logger.log_err(string % default_home_id) default_home = None for obj in self.contents: @@ -665,7 +658,7 @@ class DefaultObject(ObjectDB): string += "now has a null location." obj.location = None obj.msg(_("Something went wrong! You are dumped into nowhere. Contact an admin.")) - log_errmsg(string % (obj.name, obj.dbid)) + logger.log_err(string % (obj.name, obj.dbid)) return if obj.has_player: diff --git a/evennia/players/players.py b/evennia/players/players.py index 961c0af23..0d880f8bf 100644 --- a/evennia/players/players.py +++ b/evennia/players/players.py @@ -673,7 +673,7 @@ class DefaultPlayer(PlayerDB): if _CONNECT_CHANNEL: _CONNECT_CHANNEL.tempmsg("[%s, %s]: %s" % (_CONNECT_CHANNEL.key, now, message)) else: - logger.log_infomsg("[%s]: %s" % (now, message)) + logger.log_info("[%s]: %s" % (now, message)) def at_post_login(self, sessid=None): """ diff --git a/evennia/scripts/manager.py b/evennia/scripts/manager.py index 507c74c1b..3967eb2c5 100644 --- a/evennia/scripts/manager.py +++ b/evennia/scripts/manager.py @@ -197,7 +197,6 @@ class ScriptDBManager(TypedObjectManager): if dbref and self.dbref(dbref, reqhash=False): scripts = self.get_id(dbref) elif obj: - #print "calling get_all_scripts_on_obj", obj, key, VALIDATE_ITERATION scripts = self.get_all_scripts_on_obj(obj, key=key) else: scripts = self.get_all_scripts(key=key) #self.model.get_all_cached_instances() @@ -207,12 +206,9 @@ class ScriptDBManager(TypedObjectManager): VALIDATE_ITERATION -= 1 return None, None - #print "scripts to validate: [%s]" % (", ".join(script.key for script in scripts)) for script in scripts: - #print "validating %s (%i) (init_mode=%s)" % (script.key, id(script), init_mode) if script.is_valid(): nr_started += script.start(force_restart=init_mode) - #print "back from start. nr_started=", nr_started else: script.stop() nr_stopped += 1 diff --git a/evennia/scripts/scripthandler.py b/evennia/scripts/scripthandler.py index 305eefebf..16c5fbb76 100644 --- a/evennia/scripts/scripthandler.py +++ b/evennia/scripts/scripthandler.py @@ -74,7 +74,7 @@ class ScriptHandler(object): script = create.create_script(scriptclass, key=key, obj=self.obj, autostart=autostart) if not script: - logger.log_errmsg("Script %s could not be created and/or started." % scriptclass) + logger.log_err("Script %s could not be created and/or started." % scriptclass) return False return True diff --git a/evennia/scripts/scripts.py b/evennia/scripts/scripts.py index 2cc01bf6b..c7ddc8c72 100644 --- a/evennia/scripts/scripts.py +++ b/evennia/scripts/scripts.py @@ -207,7 +207,7 @@ class DefaultScript(ScriptBase): self.db_obj.msg(estring) except Exception: pass - logger.log_errmsg(estring) + logger.log_err(estring) def _step_callback(self): """ @@ -226,7 +226,6 @@ class DefaultScript(ScriptBase): callcount = self.ndb._task.callcount maxcount = self.db_repeats if maxcount > 0 and maxcount <= callcount: - #print "stopping script!" self.stop() def _step_task(self): diff --git a/evennia/scripts/tickerhandler.py b/evennia/scripts/tickerhandler.py index deb4a895c..24370b8d7 100644 --- a/evennia/scripts/tickerhandler.py +++ b/evennia/scripts/tickerhandler.py @@ -344,7 +344,6 @@ class TickerHandler(object): ticker_storage = ServerConfig.objects.conf(key=self.save_name) if ticker_storage: self.ticker_storage = dbunserialize(ticker_storage) - #print "restore:", self.ticker_storage for store_key, (args, kwargs) in self.ticker_storage.items(): obj, interval, idstring = store_key obj = unpack_dbobj(obj) diff --git a/evennia/server/amp.py b/evennia/server/amp.py index 857dabfca..21ac1ad79 100644 --- a/evennia/server/amp.py +++ b/evennia/server/amp.py @@ -102,7 +102,6 @@ class AmpServerFactory(protocol.ServerFactory): protocol (Protocol): The created protocol. """ - #print "Evennia Server connected to Portal at %s." % addr self.server.amp_protocol = AMPProtocol() self.server.amp_protocol.factory = self return self.server.amp_protocol @@ -140,7 +139,6 @@ class AmpClientFactory(protocol.ReconnectingClientFactory): """ pass - #print 'AMP started to connect:', connector def buildProtocol(self, addr): """ @@ -150,7 +148,6 @@ class AmpClientFactory(protocol.ReconnectingClientFactory): addr (str): Connection address. Not used. """ - #print "Portal connected to Evennia server at %s." % addr self.resetDelay() self.portal.amp_protocol = AMPProtocol() self.portal.amp_protocol.factory = self @@ -418,7 +415,6 @@ class AMPProtocol(amp.AMP): """ sessid, kwargs = loads(packed_data) - #print "msg portal -> server (server side):", sessid, msg, loads(ret["data"]) self.factory.server.sessions.data_in(sessid, **kwargs) return {} @@ -435,7 +431,6 @@ class AMPProtocol(amp.AMP): deferred (Deferred): Asynchronous return. """ - #print "msg portal->server (portal side):", sessid, msg, data return self.send_data(MsgPortal2Server, sessid, text=text, **kwargs) # Server -> Portal message @@ -455,7 +450,6 @@ class AMPProtocol(amp.AMP): packed_data (str): Pickled data (sessid, kwargs) coming over the wire. """ sessid, kwargs = loads(packed_data) - #print "msg server->portal (portal side):", sessid, ret["text"], loads(ret["data"]) self.factory.portal.sessions.data_out(sessid, **kwargs) return {} @@ -471,7 +465,6 @@ class AMPProtocol(amp.AMP): kwargs (any, optiona): Extra data. """ - #print "msg server->portal (server side):", sessid, msg, data return self.send_data(MsgServer2Portal, sessid, text=text, **kwargs) # Server administration from the Portal side @@ -486,12 +479,10 @@ class AMPProtocol(amp.AMP): packed_data (str): Incoming, pickled data. """ - #print "serveradmin (server side):", hashid, ipart, nparts sessid, kwargs = loads(packed_data) operation = kwargs.pop("operation", "") server_sessionhandler = self.factory.server.sessions - #print "serveradmin (server side):", sessid, ord(operation), data if operation == PCONN: # portal_session_connect # create a new session and sync it @@ -528,7 +519,6 @@ class AMPProtocol(amp.AMP): data (str or dict, optional): Data used in the administrative operation. """ - #print "serveradmin (portal side):", sessid, ord(operation), data return self.send_data(AdminPortal2Server, sessid, operation=operation, **kwargs) # Portal administraton from the Server side @@ -544,7 +534,6 @@ class AMPProtocol(amp.AMP): packed_data (str): Data received, a pickled tuple (sessid, kwargs). """ - #print "portaladmin (portal side):", sessid, ord(operation), data sessid, kwargs = loads(packed_data) operation = kwargs.pop("operation") portal_sessionhandler = self.factory.portal.sessions diff --git a/evennia/server/initial_setup.py b/evennia/server/initial_setup.py index 093015d15..1f3cc04f4 100644 --- a/evennia/server/initial_setup.py +++ b/evennia/server/initial_setup.py @@ -199,14 +199,11 @@ def handle_setup(last_step): at_initial_setup, reset_server] - #print " Initial setup: %s steps." % (len(setup_queue)) - # step through queue, from last completed function for num, setup_func in enumerate(setup_queue[last_step:]): # run the setup function. Note that if there is a # traceback we let it stop the system so the config # step is not saved. - #print "%s..." % num try: setup_func() diff --git a/evennia/server/models.py b/evennia/server/models.py index 76cffd0fb..0f7f5f096 100644 --- a/evennia/server/models.py +++ b/evennia/server/models.py @@ -88,7 +88,7 @@ class ServerConfig(WeakSharedMemoryModel): "Setter. Allows for self.value = value" if utils.has_parent('django.db.models.base.Model', value): # we have to protect against storing db objects. - logger.log_errmsg("ServerConfig cannot store db objects! (%s)" % value) + logger.log_err("ServerConfig cannot store db objects! (%s)" % value) return self.db_value = pickle.dumps(value) self.save() diff --git a/evennia/server/oob_cmds.py b/evennia/server/oob_cmds.py index 9c712bb8f..d65adbdab 100644 --- a/evennia/server/oob_cmds.py +++ b/evennia/server/oob_cmds.py @@ -198,7 +198,6 @@ def oob_send(session, *args, **kwargs): if obj: for name in (a.upper() for a in args if a): try: - #print "MSDP SEND inp:", name value = OOB_SENDABLE.get(name, _NA)(obj) ret[name] = value except Exception as e: @@ -257,7 +256,6 @@ def oob_report(session, *args, **kwargs): else: OOB_HANDLER.add_attribute_monitor(obj, session.sessid, propname, "return_attribute_report") ret.append(_GA(obj, "db_value")) - #print "ret:", ret session.msg(oob=("MSDP_ARRAY", ret)) else: oob_error(session, "You must log in first.") diff --git a/evennia/server/oobhandler.py b/evennia/server/oobhandler.py index 330357812..bcf4e21af 100644 --- a/evennia/server/oobhandler.py +++ b/evennia/server/oobhandler.py @@ -448,7 +448,6 @@ class OOBHandler(TickerHandler): (session, oobfuncname, args, kwargs) raise RuntimeError(errmsg) - #print "execute_oob:", session, oobfuncname, args, kwargs try: oobfunc = _OOB_FUNCS[oobfuncname] except Exception: diff --git a/evennia/server/portal/imc2.py b/evennia/server/portal/imc2.py index c73edee0e..ca075d085 100644 --- a/evennia/server/portal/imc2.py +++ b/evennia/server/portal/imc2.py @@ -228,7 +228,7 @@ class IMC2Bot(telnet.StatefulTelnetProtocol, Session): # Only support Plain text passwords. # SERVER Sends: PW version= - logger.log_infomsg("IMC2: AUTH< %s" % line) + logger.log_info("IMC2: AUTH< %s" % line) line_split = line.split(' ') pw_present = line_split[0] == 'PW' @@ -236,21 +236,21 @@ class IMC2Bot(telnet.StatefulTelnetProtocol, Session): if "reject" in line_split: auth_message = _("IMC2 server rejected connection.") - logger.log_infomsg(auth_message) + logger.log_info(auth_message) return if pw_present: self.server_name = line_split[1] self.network_name = line_split[4] elif autosetup_present: - logger.log_infomsg(_("IMC2: Autosetup response found.")) + logger.log_info(_("IMC2: Autosetup response found.")) self.server_name = line_split[1] self.network_name = line_split[3] self.is_authenticated = True self.sequence = int(time()) # Log to stdout and notify over MUDInfo. - logger.log_infomsg('IMC2: Authenticated to %s' % self.factory.network) + logger.log_info('IMC2: Authenticated to %s' % self.factory.network) # Ask to see what other MUDs are connected. self._send_packet(pck.IMC2PacketKeepAliveRequest()) @@ -274,7 +274,7 @@ class IMC2Bot(telnet.StatefulTelnetProtocol, Session): self.uid = int(self.factory.uid) self.logged_in = True self.factory.sessionhandler.connect(self) - logger.log_infomsg("IMC2 bot connected to %s." % self.network) + logger.log_info("IMC2 bot connected to %s." % self.network) # Send authentication packet. The reply will be caught by lineReceived self._send_packet(pck.IMC2PacketAuthPlaintext()) @@ -296,8 +296,6 @@ class IMC2Bot(telnet.StatefulTelnetProtocol, Session): self._imc_login(line) return - #logger.log_infomsg("IMC2: RECV> %s" % line) - # Parse the packet and encapsulate it for easy access packet = pck.IMC2Packet(self.mudname, packet_str=line) @@ -463,7 +461,7 @@ class IMC2BotFactory(protocol.ReconnectingClientFactory): def start(self): "Connect session to sessionhandler" def errback(fail): - logger.log_errmsg(fail.value) + logger.log_err(fail.value) if self.port: service = internet.TCPClient(self.network, int(self.port), self) diff --git a/evennia/server/portal/irc.py b/evennia/server/portal/irc.py index 62cef459e..8f4e234d0 100644 --- a/evennia/server/portal/irc.py +++ b/evennia/server/portal/irc.py @@ -149,8 +149,8 @@ class IRCBot(irc.IRCClient, Session): self.uid = int(self.factory.uid) self.logged_in = True self.factory.sessionhandler.connect(self) - logger.log_infomsg("IRC bot '%s' connected to %s at %s:%s." % (self.nickname, self.channel, - self.network, self.port)) + logger.log_info("IRC bot '%s' connected to %s at %s:%s." % (self.nickname, self.channel, + self.network, self.port)) def disconnect(self, reason=None): """ @@ -277,7 +277,7 @@ class IRCBotFactory(protocol.ReconnectingClientFactory): connector (Connector): Represents the connection. """ - logger.log_infomsg("(re)connecting to %s" % self.channel) + logger.log_info("(re)connecting to %s" % self.channel) def clientConnectionFailed(self, connector, reason): """ diff --git a/evennia/server/portal/portalsessionhandler.py b/evennia/server/portal/portalsessionhandler.py index 59f7544fc..b19234715 100644 --- a/evennia/server/portal/portalsessionhandler.py +++ b/evennia/server/portal/portalsessionhandler.py @@ -111,7 +111,6 @@ class PortalSessionHandler(SessionHandler): self.sessions[session.sessid] = session session.server_connected = True - #print "connecting", session.sessid, " number:", len(self.sessions) self.portal.amp_protocol.send_AdminPortal2Server(session.sessid, operation=PCONN, sessiondata=sessdata) @@ -431,9 +430,7 @@ class PortalSessionHandler(SessionHandler): if session: # convert oob to the generic format if "oob" in kwargs: - #print "oobstruct_parser in:", kwargs["oob"] kwargs["oob"] = self.oobstruct_parser(kwargs["oob"]) - #print "oobstruct_parser out:", kwargs["oob"] session.data_out(text=text, **kwargs) PORTAL_SESSIONS = PortalSessionHandler() diff --git a/evennia/server/portal/rss.py b/evennia/server/portal/rss.py index bda8f2035..061b305c0 100644 --- a/evennia/server/portal/rss.py +++ b/evennia/server/portal/rss.py @@ -94,7 +94,7 @@ class RSSReader(Session): def _errback(self, fail): "Report error" - logger.log_errmsg("RSS feed error: %s" % fail.value) + logger.log_err("RSS feed error: %s" % fail.value) def update(self, init=False): """ @@ -139,7 +139,7 @@ class RSSBotFactory(object): Called by portalsessionhandler. Starts te bot. """ def errback(fail): - logger.log_errmsg(fail.value) + logger.log_err(fail.value) # set up session and connect it to sessionhandler self.bot.init_session("rssbot", self.url, self.sessionhandler) diff --git a/evennia/server/portal/ssl.py b/evennia/server/portal/ssl.py index ea3540698..8d7740817 100644 --- a/evennia/server/portal/ssl.py +++ b/evennia/server/portal/ssl.py @@ -55,7 +55,6 @@ def verify_SSL_key_and_cert(keyfile, certfile): # default: #openssl req -new -x509 -key ssl.key -out ssl.cert -days 7300 exestring = "openssl req -new -x509 -key %s -out %s -days %s" % (keyfile, certfile, CERT_EXPIRE) - #print "exestring:", exestring try: #, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) subprocess.call(exestring) diff --git a/evennia/server/portal/telnet.py b/evennia/server/portal/telnet.py index 1bc3c2b7c..234db4cf1 100644 --- a/evennia/server/portal/telnet.py +++ b/evennia/server/portal/telnet.py @@ -165,7 +165,6 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): """ if data and data[0] == IAC or self.iaw_mode: try: - #print "IAC mode" super(TelnetProtocol, self).dataReceived(data) if len(data) == 1: self.iaw_mode = True @@ -196,12 +195,10 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): # if we get to this point the command should end with a linebreak. # We make sure to add it, to fix some clients messing this up. - #print "line data in:", repr(data) StatefulTelnetProtocol.dataReceived(self, data) def _write(self, data): "hook overloading the one used in plain telnet" - # print "_write (%s): %s" % (self.state, " ".join(str(ord(c)) for c in data)) data = data.replace('\n', '\r\n').replace('\r\r\n', '\r\n') #data = data.replace('\n', '\r\n') super(TelnetProtocol, self)._write(mccp_compress(self, data)) @@ -214,7 +211,6 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): line (str): Line to send. """ - #print "sendLine (%s):\n%s" % (self.state, line) #escape IAC in line mode, and correctly add \r\n line += self.delimiter line = line.replace(IAC, IAC + IAC).replace('\n', '\r\n') @@ -305,7 +301,6 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): if "oob" in kwargs and "OOB" in self.protocol_flags: # oob is a list of [(cmdname, arg, kwarg), ...] for cmdname, args, okwargs in kwargs["oob"]: - #print "telnet oob data_out:", cmdname, args, kwargs self.oob.data_out(cmdname, *args, **okwargs) # parse **kwargs, falling back to ttype if nothing is given explicitly @@ -318,15 +313,12 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): echo = kwargs.get("echo", None) mxp = kwargs.get("mxp", self.protocol_flags.get("MXP", False)) - #print "telnet kwargs=%s, message=%s" % (kwargs, text) - #print "xterm256=%s, useansi=%s, raw=%s, nomarkup=%s, init_done=%s" % (xterm256, useansi, raw, nomarkup, ttype.get("init_done")) if raw: # no processing whatsoever self.sendLine(text) elif text: # we need to make sure to kill the color at the end in order # to match the webclient output. - #print "telnet data out:", self.protocol_flags, id(self.protocol_flags), id(self), "nomarkup: %s, xterm256: %s" % (nomarkup, xterm256) linetosend = ansi.parse_ansi(_RE_N.sub("", text) + "{n", strip_ansi=nomarkup, xterm256=xterm256, mxp=mxp) if mxp: linetosend = mxp_parse(linetosend) diff --git a/evennia/server/portal/telnet_oob.py b/evennia/server/portal/telnet_oob.py index 6b6753e99..708158793 100644 --- a/evennia/server/portal/telnet_oob.py +++ b/evennia/server/portal/telnet_oob.py @@ -160,7 +160,6 @@ class TelnetOOB(object): else: msdp_string = "%s%s%s" % (MSDP_VAR. cmdname, "".join( ["%s%s%s%s" % (MSDP_VAR, key, MSDP_VAL, val) for key, val in kwargs.items()])) - #print "encode msdp result:", cmdname, args, kwargs, "->", msdp_string return force_str(msdp_string) def encode_gmcp(self, cmdname, *args, **kwargs): @@ -194,7 +193,6 @@ class TelnetOOB(object): gmcp_string = "%s %s" % (cmdname, json.dumps(args)) elif kwargs: gmcp_string = "%s %s" % (cmdname, json.dumps(kwargs)) - #print "gmcp_encode", cmdname, args, kwargs, "->", gmcp_string return force_str(gmcp_string).strip() def decode_msdp(self, data): @@ -233,8 +231,6 @@ class TelnetOOB(object): parts = msdp_regex_val.split(varval) variables[parts[0]] = tuple(parts[1:]) if len(parts) > 1 else ("", ) - #print "OOB: MSDP decode:", data, "->", variables, arrays, tables - # send to the sessionhandler if data: for varname, var in variables.items(): @@ -263,7 +259,6 @@ class TelnetOOB(object): if hasattr(data, "__iter__"): data = "".join(data) - #print "decode_gmcp:", data if data: splits = data.split(None, 1) cmdname = splits[0] @@ -282,7 +277,6 @@ class TelnetOOB(object): args = tuple(struct) else: args = (struct,) - #print "gmcp decode:", data, "->", cmdname, args, kwargs self.protocol.data_in(oob=(cmdname, args, kwargs)) # access methods @@ -296,7 +290,6 @@ class TelnetOOB(object): args, kwargs (any): Arguments to OOB command. """ - #print "data_out:", encoded_oob if self.MSDP: encoded_oob = self.encode_msdp(cmdname, *args, **kwargs) self.protocol._write(IAC + SB + MSDP + encoded_oob + IAC + SE) diff --git a/evennia/server/portal/ttype.py b/evennia/server/portal/ttype.py index f60801c0d..fc54c5360 100644 --- a/evennia/server/portal/ttype.py +++ b/evennia/server/portal/ttype.py @@ -90,8 +90,6 @@ class Ttype(object): except TypeError: pass - #print "incoming TTYPE option:", option - if self.ttype_step == 0: # just start the request chain self.protocol.requestNegotiation(TTYPE, SEND) @@ -153,7 +151,6 @@ class Ttype(object): self.protocol.protocol_flags['TTYPE'][option.upper()] = True self.protocol.protocol_flags['TTYPE']['init_done'] = True - # print "TTYPE final:", self.protocol.protocol_flags['TTYPE'] # we must sync ttype once it'd done self.protocol.handshake_done() self.ttype_step += 1 diff --git a/evennia/server/server.py b/evennia/server/server.py index 85677247a..0f4ec110f 100644 --- a/evennia/server/server.py +++ b/evennia/server/server.py @@ -269,7 +269,6 @@ class Evennia(object): #update eventual changed defaults self.update_defaults() - #print "run_init_hooks:", ObjectDB.get_all_cached_instances() [o.at_init() for o in ObjectDB.get_all_cached_instances()] [p.at_init() for p in PlayerDB.get_all_cached_instances()] diff --git a/evennia/server/serversession.py b/evennia/server/serversession.py index 492e58256..66f930e46 100644 --- a/evennia/server/serversession.py +++ b/evennia/server/serversession.py @@ -8,19 +8,21 @@ are stored on the Portal side) """ import re +import weakref from time import time from django.utils import timezone from django.conf import settings from evennia.comms.models import ChannelDB from evennia.utils import logger from evennia.utils.inlinefunc import parse_inlinefunc -from evennia.utils.utils import make_iter +from evennia.utils.utils import make_iter, lazy_property from evennia.commands.cmdhandler import cmdhandler from evennia.commands.cmdsethandler import CmdSetHandler from evennia.server.session import Session _IDLE_COMMAND = settings.IDLE_COMMAND _GA = object.__getattribute__ +_SA = object.__setattr__ _ObjectDB = None _ANSI = None _INLINEFUNC_ENABLED = settings.INLINEFUNC_ENABLED @@ -30,6 +32,121 @@ _RE_SCREENREADER_REGEX = re.compile(r"%s" % settings.SCREENREADER_REGEX_STRIP, r from django.utils.translation import ugettext as _ +# Handlers for Session.db/ndb operation + +class NDbHolder(object): + "Holder for allowing property access of attributes" + def __init__(self, obj, name, manager_name='attributes'): + _SA(self, name, _GA(obj, manager_name)) + _SA(self, 'name', name) + + def __getattribute__(self, attrname): + if attrname == 'all': + # we allow to overload our default .all + attr = _GA(self, _GA(self, 'name')).get("all") + return attr if attr else _GA(self, "all") + return _GA(self, _GA(self, 'name')).get(attrname) + + def __setattr__(self, attrname, value): + _GA(self, _GA(self, 'name')).add(attrname, value) + + def __delattr__(self, attrname): + _GA(self, _GA(self, 'name')).remove(attrname) + + def get_all(self): + return _GA(self, _GA(self, 'name')).all() + all = property(get_all) + + +class NAttributeHandler(object): + """ + NAttributeHandler version without recache protection. + This stand-alone handler manages non-database saving. + It is similar to `AttributeHandler` and is used + by the `.ndb` handler in the same way as `.db` does + for the `AttributeHandler`. + """ + def __init__(self, obj): + """ + Initialized on the object + """ + self._store = {} + self.obj = weakref.proxy(obj) + + def has(self, key): + """ + Check if object has this attribute or not. + + Args: + key (str): The Nattribute key to check. + + Returns: + has_nattribute (bool): If Nattribute is set or not. + + """ + return key in self._store + + def get(self, key): + """ + Get the named key value. + + Args: + key (str): The Nattribute key to get. + + Returns: + the value of the Nattribute. + + """ + return self._store.get(key, None) + + def add(self, key, value): + """ + Add new key and value. + + Args: + key (str): The name of Nattribute to add. + value (any): The value to store. + + """ + self._store[key] = value + + def remove(self, key): + """ + Remove Nattribute from storage. + + Args: + key (str): The name of the Nattribute to remove. + + """ + if key in self._store: + del self._store[key] + + def clear(self): + """ + Remove all NAttributes from handler. + + """ + self._store = {} + + def all(self, return_tuples=False): + """ + List the contents of the handler. + + Args: + return_tuples (bool, optional): Defines if the Nattributes + are returns as a list of keys or as a list of `(key, value)`. + + Returns: + nattributes (list): A list of keys `[key, key, ...]` or a + list of tuples `[(key, value), ...]` depending on the + setting of `return_tuples`. + + """ + if return_tuples: + return [(key, value) for (key, value) in self._store.items() if not key.startswith("_")] + return [key for key in self._store if not key.startswith("_")] + + #------------------------------------------------------------ # Server Session #------------------------------------------------------------ @@ -188,7 +305,7 @@ class ServerSession(Session): cchan.msg("[%s]: %s" % (cchan.key, message)) except Exception: pass - logger.log_infomsg(message) + logger.log_info(message) def get_client_size(self): """ @@ -323,6 +440,14 @@ class ServerSession(Session): # (note that no databse is involved at all here. session.db.attr = # value just saves a normal property in memory, just like ndb). + @lazy_property + def nattributes(self): + return NAttributeHandler(self) + + @lazy_property + def attributes(self): + return self.nattributes + #@property def ndb_get(self): """ @@ -335,19 +460,7 @@ class ServerSession(Session): try: return self._ndb_holder except AttributeError: - class NdbHolder(object): - "Holder for storing non-persistent attributes." - def all(self): - return [val for val in self.__dict__.keys() - if not val.startswith['_']] - - def __getattribute__(self, key): - # return None if no matching attribute was found. - try: - return object.__getattribute__(self, key) - except AttributeError: - return None - self._ndb_holder = NdbHolder() + self._ndb_holder = NDbHolder(self, "nattrhandler", manager_name="nattributes") return self._ndb_holder #@ndb.setter diff --git a/evennia/server/sessionhandler.py b/evennia/server/sessionhandler.py index 0d5163910..c2b80d507 100644 --- a/evennia/server/sessionhandler.py +++ b/evennia/server/sessionhandler.py @@ -607,7 +607,6 @@ class ServerSessionHandler(SessionHandler): if not _OOB_HANDLER: from evennia.server.oobhandler import OOB_HANDLER as _OOB_HANDLER funcname, args, kwargs = kwargs.pop("oob") - #print "OOB session.data_in:", funcname, args, kwargs if funcname: _OOB_HANDLER.execute_cmd(session, funcname, *args, **kwargs) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index f52be219e..a8f2e7719 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -286,7 +286,6 @@ class AttributeHandler(object): ret = [] key = [k.strip().lower() for k in make_iter(key) if k] category = category.strip().lower() if category is not None else None - #print "cache:", self._cache.keys(), key if not key: # return all with matching category (or no category) catkey = "-%s" % category if category is not None else None diff --git a/evennia/typeclasses/models.py b/evennia/typeclasses/models.py index 49a74226a..79550f994 100644 --- a/evennia/typeclasses/models.py +++ b/evennia/typeclasses/models.py @@ -122,9 +122,7 @@ class DbHolder(object): if attrname == 'all': # we allow to overload our default .all attr = _GA(self, _GA(self, 'name')).get("all") - if attr: - return attr - return _GA(self, "all") + return attr if attr else _GA(self, "all") return _GA(self, _GA(self, 'name')).get(attrname) def __setattr__(self, attrname, value): @@ -457,7 +455,6 @@ class TypedObject(SharedMemoryModel): if hasattr(self.ndb, nattr): self.nattributes.remove(nattr) else: - #print "deleting attrs ..." self.attributes.clear() self.nattributes.clear() diff --git a/evennia/utils/ansi.py b/evennia/utils/ansi.py index 73d268498..adc0aef82 100644 --- a/evennia/utils/ansi.py +++ b/evennia/utils/ansi.py @@ -134,10 +134,8 @@ class ANSIParser(object): if convert: colval = 16 + (red * 36) + (green * 6) + blue - #print "RGB colours:", red, green, blue return "\033[%s8;5;%s%s%sm" % (3 + int(background), colval/100, (colval % 100)/10, colval%10) else: - #print "ANSI convert:", red, green, blue # xterm256 not supported, convert the rgb value to ansi instead if red == green and red == blue and red < 2: if background: diff --git a/evennia/utils/create.py b/evennia/utils/create.py index fb2875d66..ff2a1dd3f 100644 --- a/evennia/utils/create.py +++ b/evennia/utils/create.py @@ -245,7 +245,7 @@ def create_help_entry(key, entrytext, category="General", locks=None): return new_help except IntegrityError: string = "Could not add help entry: key '%s' already exists." % key - logger.log_errmsg(string) + logger.log_err(string) return None except Exception: logger.log_trace() diff --git a/evennia/utils/dbserialize.py b/evennia/utils/dbserialize.py index 0e6f6caf7..9f2081d56 100644 --- a/evennia/utils/dbserialize.py +++ b/evennia/utils/dbserialize.py @@ -113,7 +113,7 @@ class _SaverMutable(object): elif self._db_obj: self._db_obj.value = self else: - logger.log_errmsg("_SaverMutable %s has no root Attribute to save to." % self) + logger.log_err("_SaverMutable %s has no root Attribute to save to." % self) def _convert_mutables(self, data): "converts mutables to Saver* variants and assigns .parent property" diff --git a/evennia/utils/evform.py b/evennia/utils/evform.py index 4d6ea16d9..29f2398bb 100644 --- a/evennia/utils/evform.py +++ b/evennia/utils/evform.py @@ -246,8 +246,6 @@ class EvForm(object): ix0 = match.end() else: break - #print "cell_coords:", cell_coords - #print "table_coords:", table_coords # get rectangles and assign EvCells for key, (iy, leftix, rightix) in cell_coords.items(): @@ -256,7 +254,6 @@ class EvForm(object): dy_up = 0 if iy > 0: for i in range(1,iy): - #print "dy_up:", [form[iy-i][ix] for ix in range(leftix, rightix)] if all(form[iy-i][ix] == cellchar for ix in range(leftix, rightix)): dy_up += 1 else: @@ -265,7 +262,6 @@ class EvForm(object): dy_down = 0 if iy < nform-1: for i in range(1,nform-iy-1): - #print "dy_down:", [form[iy+i][ix]for ix in range(leftix, rightix)] if all(form[iy+i][ix] == cellchar for ix in range(leftix, rightix)): dy_down += 1 else: @@ -280,13 +276,10 @@ class EvForm(object): # we have all the coordinates we need. Create EvCell. data = self.cells_mapping.get(key, "") #if key == "1": - # print "creating cell '%s' (%s):" % (key, data) - # print "iy=%s, iyup=%s, iydown=%s, leftix=%s, rightix=%s, width=%s, height=%s" % (iy, iyup, iydown, leftix, rightix, width, height) options = { "pad_left":0, "pad_right":0, "pad_top":0, "pad_bottom":0, "align":"l", "valign":"t", "enforce_size":True} options.update(custom_options) #if key=="4": - #print "options:", options mapping[key] = (iyup, leftix, width, height, EvCell(data, width=width, height=height,**options)) @@ -297,7 +290,6 @@ class EvForm(object): dy_up = 0 if iy > 0: for i in range(1,iy): - #print "dy_up:", [form[iy-i][ix] for ix in range(leftix, rightix)] if all(form[iy-i][ix] == tablechar for ix in range(leftix, rightix)): dy_up += 1 else: @@ -306,7 +298,6 @@ class EvForm(object): dy_down = 0 if iy < nform-1: for i in range(1,nform-iy-1): - #print "dy_down:", [form[iy+i][ix]for ix in range(leftix, rightix)] if all(form[iy+i][ix] == tablechar for ix in range(leftix, rightix)): dy_down += 1 else: @@ -320,13 +311,10 @@ class EvForm(object): # we have all the coordinates we need. Create Table. table = self.tables_mapping.get(key, None) - #print "creating table '%s' (%s):" % (key, data) - #print "iy=%s, iyup=%s, iydown=%s, leftix=%s, rightix=%s, width=%s, height=%s" % (iy, iyup, iydown, leftix, rightix, width, height) options = { "pad_left":0, "pad_right":0, "pad_top":0, "pad_bottom":0, "align":"l", "valign":"t", "enforce_size":True} options.update(custom_options) - #print "options:", options if table: table.reformat(width=width, height=height, **options) diff --git a/evennia/utils/evmenu.py b/evennia/utils/evmenu.py index 96a24c347..4bead54ae 100644 --- a/evennia/utils/evmenu.py +++ b/evennia/utils/evmenu.py @@ -221,6 +221,82 @@ class EvMenuCmdSet(CmdSet): """ self.add(CmdEvMenuNode()) + +def dedent_strip_nodetext_formatter(nodetext, has_options): + return dedent(nodetext).strip() + + +def dedent_nodetext_formatter(nodetext, has_options): + return dedent(nodetext) + + +def evtable_options_formatter(optionlist): + if not optionlist: + return "" + + # column separation distance + colsep = 4 + + nlist = len(optionlist) + + # get the widest option line in the table. + table_width_max = -1 + table = [] + for key, desc in optionlist: + if not (key or desc): + continue + table_width_max = max(table_width_max, + max(m_len(p) for p in key.split("\n")) + + max(m_len(p) for p in desc.split("\n")) + colsep) + raw_key = strip_ansi(key) + if raw_key != key: + # already decorations in key definition + table.append(ANSIString(" {lc%s{lt%s{le: %s" % (raw_key, key, desc))) + else: + # add a default white color to key + table.append(ANSIString(" {lc%s{lt{w%s{n{le: %s" % (raw_key, raw_key, desc))) + + ncols = (_MAX_TEXT_WIDTH // table_width_max) + 1 # number of ncols + nlastcol = nlist % ncols # number of elements left in last row + + # get the amount of rows needed (start with 4 rows) + nrows = 4 + while nrows * ncols < nlist: + nrows += 1 + ncols = nlist // nrows # number of full columns + nlastcol = nlist % nrows # number of elements in last column + + # get the final column count + ncols = ncols + 1 if nlastcol > 0 else ncols + if ncols > 1: + # only extend if longer than one column + table.extend([" " for i in xrange(nrows - nlastcol)]) + + # build the actual table grid + table = [table[icol * nrows : (icol * nrows) + nrows] for icol in xrange(0, ncols)] + + # adjust the width of each column + for icol in xrange(len(table)): + col_width = max(max(m_len(p) for p in part.split("\n")) for part in table[icol]) + colsep + table[icol] = [pad(part, width=col_width + colsep, align="l") for part in table[icol]] + + # format the table into columns + return unicode(EvTable(table=table, border="none")) + + +def underline_node_formatter(nodetext, optionstext): + nodetext_width_max = max(m_len(line) for line in nodetext.split("\n")) + options_width_max = max(m_len(line) for line in optionstext.split("\n")) + total_width = max(options_width_max, nodetext_width_max) + separator1 = "_" * total_width + "\n\n" if nodetext_width_max else "" + separator2 = "\n" + "_" * total_width + "\n\n" if total_width else "" + return separator1 + nodetext + separator2 + optionstext + + +def null_node_formatter(nodetext, optionstext): + return nodetext + "\n\n" + optionstext + + #------------------------------------------------------------ # # Menu main class @@ -305,9 +381,20 @@ class EvMenu(object): self._startnode = startnode self._menutree = self._parse_menudata(menudata) - self._nodetext_formatter = nodetext_formatter - self._options_formatter = nodetext_formatter - self._node_formatter = node_formatter + if nodetext_formatter is not None: + self._nodetext_formatter = nodetext_formatter + else: + self._nodetext_formatter = dedent_strip_nodetext_formatter + + if options_formatter is not None: + self._options_formatter = options_formatter + else: + self._options_formatter = evtable_options_formatter + + if node_formatter is not None: + self._node_formatter = node_formatter + else: + self._node_formatter = underline_node_formatter if startnode not in self._menutree: raise EvMenuError("Start node '%s' not in menu tree!" % startnode) @@ -380,89 +467,16 @@ class EvMenu(object): growing to make use of the screen space. """ - # + # handle the node text - # + nodetext = self._nodetext_formatter(nodetext, len(optionlist)) - if self._nodetext_formatter: - # use custom formatter - nodetext = self._nodetext_formatter(nodetext, len(optionlist)) - else: - nodetext = dedent(nodetext).strip() - - nodetext_width_max = max(m_len(line) for line in nodetext.split("\n")) - - # # handle the options - # + optionstext = self._options_formatter(optionlist) - if self._options_formatter: - # use custom formatter - optionstext = self._options_formatter(optionlist) - elif optionlist: - # column separation distance - colsep = 4 - - nlist = len(optionlist) - - # get the widest option line in the table. - table_width_max = -1 - table = [] - for key, desc in optionlist: - table_width_max = max(table_width_max, - max(m_len(p) for p in key.split("\n")) + - max(m_len(p) for p in desc.split("\n")) + colsep) - raw_key = strip_ansi(key) - if raw_key != key: - # already decorations in key definition - table.append(ANSIString(" {lc%s{lt%s{le: %s" % (raw_key, key, desc))) - else: - # add a default white color to key - table.append(ANSIString(" {lc%s{lt{w%s{n{le: %s" % (raw_key, raw_key, desc))) - - ncols = (_MAX_TEXT_WIDTH // table_width_max) + 1 # number of ncols - nlastcol = nlist % ncols # number of elements left in last row - - # get the amount of rows needed (start with 4 rows) - nrows = 4 - while nrows * ncols < nlist: - nrows += 1 - ncols = nlist // nrows # number of full columns - nlastcol = nlist % nrows # number of elements in last column - - # get the final column count - ncols = ncols + 1 if nlastcol > 0 else ncols - if ncols > 1: - # only extend if longer than one column - table.extend([" " for i in xrange(nrows-nlastcol)]) - - # build the actual table grid - table = [table[icol*nrows:(icol*nrows) + nrows] for icol in xrange(0, ncols)] - - # adjust the width of each column - for icol in xrange(len(table)): - col_width = max(max(m_len(p) for p in part.split("\n")) for part in table[icol]) + colsep - table[icol] = [pad(part, width=col_width + colsep, align="l") for part in table[icol]] - - # format the table into columns - optionstext = unicode(EvTable(table=table, border="none")) - else: - optionstext = "" - - options_width_max = max(m_len(line) for line in optionstext.split("\n")) - - # # format the entire node - # - if self._node_formatter: - # use custom formatter - return self._node_formatter(nodetext, optionstext) - else: - # build the page - total_width = max(options_width_max, nodetext_width_max) - separator1 = "_" * total_width + "\n\n" if nodetext_width_max else "" - separator2 = "\n" + "_" * total_width + "\n\n" if total_width else "" - return separator1 + nodetext + separator2 + optionstext + return self._node_formatter(nodetext, optionstext) + def _execute_node(self, nodename, raw_string): """ @@ -769,7 +783,7 @@ def test_start_node(caller): def test_look_node(caller): - text = "Looking again will take you back to the previous message." + text = "" options = {"key": ("{yL{nook", "l"), "desc": "Go back to the previous menu.", "goto": "test_start_node"} diff --git a/evennia/utils/evtable.py b/evennia/utils/evtable.py index c7f126fee..8ba8f0250 100644 --- a/evennia/utils/evtable.py +++ b/evennia/utils/evtable.py @@ -1225,9 +1225,6 @@ class EvTable(object): self._borders() # equalize widths within each column - #print [col.options for col in self.worktable] - #print [[cell.get_width() for cell in col] for col in self.worktable] - #print [[cell.get_height() for cell in col] for col in self.worktable] cwidths = [max(cell.get_width() for cell in col) for col in self.worktable] if self.width or self.maxwidth and self.maxwidth < sum(cwidths): @@ -1281,7 +1278,6 @@ class EvTable(object): # get minimum possible cell heights for each collumn cheights_min = [max(cell.get_min_height() for cell in (col[iy] for col in self.worktable)) for iy in xrange(nrowmax)] chmin = sum(cheights_min) - #print "cheights_min:", cheights_min if chmin > self.height: # we cannot shrink any more @@ -1309,7 +1305,6 @@ class EvTable(object): # we must tell cells to crop instead of expanding options["enforce_size"] = True - #print "cheights2:", cheights # reformat table (for vertical align) for ix, col in enumerate(self.worktable): @@ -1323,7 +1318,6 @@ class EvTable(object): # calculate actual table width/height in characters self.cwidth = sum(cwidths) self.cheight = sum(cheights) - #print "actual table width, height:", self.cwidth, self.cheight, self.width, self.height def _generate_lines(self): """ diff --git a/evennia/utils/idmapper/models.py b/evennia/utils/idmapper/models.py index 48e1e8e23..005b788a6 100644 --- a/evennia/utils/idmapper/models.py +++ b/evennia/utils/idmapper/models.py @@ -61,12 +61,9 @@ class SharedMemoryModelBase(ModelBase): instance_key = cls._get_cache_key(args, kwargs) # depending on the arguments, we might not be able to infer the PK, so in that case we create a new instance - #print "SharedMemoryModelBase.__call__ 1: calledby:", calledby(3) - #print "SharedMemoryModelBase.__call__ 2: instance_key:", instance_key if instance_key is None: return new_instance() cached_instance = cls.get_cached_instance(instance_key) - #print "SharedMemoryModelBase.__call__ 3: cached_instance:", cached_instance if cached_instance is None: cached_instance = new_instance() cls.cache_instance(cached_instance, new=True) @@ -114,7 +111,6 @@ class SharedMemoryModelBase(ModelBase): "Helper method to create property wrappers with unique names (must be in separate call)" def _get(cls, fname): "Wrapper for getting database field" - #print "_get:", fieldname, wrappername,_GA(cls,fieldname) if _GA(cls, "_is_deleted"): raise ObjectDoesNotExist("Cannot access %s: Hosting object was already deleted." % fname) return _GA(cls, fieldname) @@ -196,12 +192,9 @@ class SharedMemoryModelBase(ModelBase): for fieldname, field in ((fname, field) for fname, field in attrs.items() if fname.startswith("db_") and type(field).__name__ != "ManyToManyField"): foreignkey = type(field).__name__ == "ForeignKey" - #print fieldname, type(field).__name__, field wrappername = "dbid" if fieldname == "id" else fieldname.replace("db_", "", 1) - #print fieldname, wrappername if wrappername not in attrs: # makes sure not to overload manually created wrappers on the model - #print "wrapping %s -> %s" % (fieldname, wrappername) create_wrapper(cls, fieldname, wrappername, editable=field.editable, foreignkey=foreignkey) return super(SharedMemoryModelBase, cls).__new__(cls, name, bases, attrs) @@ -452,9 +445,7 @@ def flush_cache(**kwargs): else: yield cls - #print "start flush ..." for cls in class_hierarchy([SharedMemoryModel]): - #print cls cls.flush_instance_cache() # run the python garbage collector return gc.collect() @@ -534,8 +525,8 @@ def conditional_flush(max_rmem, force=False): if ((now - LAST_FLUSH) < AUTO_FLUSH_MIN_INTERVAL) and not force: # too soon after last flush. - logger.log_warnmsg("Warning: Idmapper flush called more than "\ - "once in %s min interval. Check memory usage." % (AUTO_FLUSH_MIN_INTERVAL/60.0)) + logger.log_warn("Warning: Idmapper flush called more than "\ + "once in %s min interval. Check memory usage." % (AUTO_FLUSH_MIN_INTERVAL/60.0)) return if os.name == "nt": diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index 011cb275d..374925919 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -3,10 +3,10 @@ Logging facilities These are thin wrappers on top of Twisted's logging facilities; logs are all directed either to stdout (if Evennia is running in -interactive mode) or to game/logs. +interactive mode) or to $GAME_DIR/server/logs. The log_file() function uses its own threading system to log to -arbitrary files in game/logs. +arbitrary files in $GAME_DIR/server/logs. Note: All logging functions have two aliases, log_type() and log_typemsg(). This is for historical, back-compatible reasons. diff --git a/evennia/utils/prettytable.py b/evennia/utils/prettytable.py index ee1eb09f6..51ba326d0 100644 --- a/evennia/utils/prettytable.py +++ b/evennia/utils/prettytable.py @@ -1009,8 +1009,6 @@ class PrettyTable(object): if self.rowcount == 0 and (not options["print_empty"] or not options["border"]): return "" - #print "prettytable:", self._rows - # Get the rows we need to print, taking into account slicing, sorting, etc. rows = self._get_rows(options) @@ -1373,10 +1371,7 @@ def from_csv(fp, field_names = None, **kwargs): if field_names: table.field_names = field_names else: - if py3k: - table.field_names = [x.strip() for x in next(reader)] - else: - table.field_names = [x.strip() for x in next(reader)] + table.field_names = [x.strip() for x in next(reader)] for row in reader: table.add_row([x.strip() for x in row]) diff --git a/evennia/utils/tests.py b/evennia/utils/tests.py index 08886fbe9..5b5141438 100644 --- a/evennia/utils/tests.py +++ b/evennia/utils/tests.py @@ -174,7 +174,6 @@ class TestCrop(TestCase): class TestDedent(TestCase): def test_dedent(self): - #print "Did TestDedent run?" # Empty string, return empty string self.assertEqual("", utils.dedent("")) # No leading whitespace diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index 8ee8e2340..f4de3fb9b 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -1177,7 +1177,7 @@ def init_new_player(player): Deprecated. """ from evennia.utils import logger - logger.log_depmsg("evennia.utils.utils.init_new_player is DEPRECATED and should not be used.") + logger.log_dep("evennia.utils.utils.init_new_player is DEPRECATED and should not be used.") def string_similarity(string1, string2):