From 2acff2d1abb6028d8ca129bc1532597632329e3f Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 24 Aug 2013 21:42:48 +0200 Subject: [PATCH] Fixed bugs in new nickhandler implementation. --- src/objects/models.py | 7 ++- src/players/models.py | 5 +- src/typeclasses/models.py | 99 +-------------------------------------- 3 files changed, 6 insertions(+), 105 deletions(-) diff --git a/src/objects/models.py b/src/objects/models.py index 06883a5dec..b31fe8fd64 100644 --- a/src/objects/models.py +++ b/src/objects/models.py @@ -647,14 +647,13 @@ class ObjectDB(TypedObject): raw_list = raw_string.split(None) raw_list = [" ".join(raw_list[:i+1]) for i in range(len(raw_list)) if raw_list[:i+1]] # fetch the nick data efficiently - nicks = self.db_attributes.filter(db_category__in=("nick_inputline", "nick_channel")).prefetch_related("db_key","db_strvalue") + nicks = self.db_attributes.filter(db_category__in=("nick_inputline", "nick_channel")) if self.has_player: - pnicks = self.player.db_attributes.filter( - db_category__in=("nick_inputline", "nick_channel")).prefetch_related("db_key","db_strvalue") + pnicks = self.player.db_attributes.filter(db_category__in=("nick_inputline", "nick_channel")) nicks = list(nicks) + list(pnicks) for nick in nicks: if nick.db_key in raw_list: - raw_string = raw_string.replace(nick.db_key, nick.db_data, 1) + raw_string = raw_string.replace(nick.db_key, nick.db_strvalue, 1) break return cmdhandler.cmdhandler(_GA(self, "typeclass"), raw_string, sessid=sessid) diff --git a/src/players/models.py b/src/players/models.py index 8661d37693..04616b008f 100644 --- a/src/players/models.py +++ b/src/players/models.py @@ -484,11 +484,10 @@ class PlayerDB(TypedObject, AbstractUser): raw_list = raw_string.split(None) raw_list = [" ".join(raw_list[:i+1]) for i in range(len(raw_list)) if raw_list[:i+1]] # get the nick replacement data directly from the database to be able to use db_category__in - nicks = self.db_attributes.filter( - db_category__in=("nick_inputline", "nick_channel")).prefetch_related("db_key","db_strvalue") + nicks = self.db_attributes.filter(db_category__in=("nick_inputline", "nick_channel")) for nick in nicks: if nick.db_key in raw_list: - raw_string = raw_string.replace(nick.db_key, nick.db_data, 1) + raw_string = raw_string.replace(nick.db_key, nick.db_strvalue, 1) break if not sessid and _MULTISESSION_MODE in (0, 1): # in this case, we should either have only one sessid, or the sessid diff --git a/src/typeclasses/models.py b/src/typeclasses/models.py index 55dc6e9955..e97b3c6e12 100644 --- a/src/typeclasses/models.py +++ b/src/typeclasses/models.py @@ -428,7 +428,7 @@ class NickHandler(AttributeHandler): def get(self, key, category="inputline", **kwargs): "Get the replacement value matching the given key and category" category = "nick_%s" % category - return super(NickHandler, self).get(key, category=category, **kwargs) + return super(NickHandler, self).get(key, category=category, strattr=True, **kwargs) def remove(self, key, category="inputline", **kwargs): "Remove Nick with matching category" category = "nick_%s" % category @@ -548,103 +548,6 @@ class AliasHandler(TagHandler): class PermissionHandler(TagHandler): _base_category = "permission" -#class NickHandler(object): -# """ -# Handles nick access and setting. Created at initialization. Accessed through TypedObject.nicks. -# Makes use of LiteAttributes under the hood. -# """ -# -# def __init__(self, obj): -# """ -# Nicks are alternate names an entity as of ANOTHER entity. The -# engine will auto-replace nicks under circumstances dictated -# by the nick category. It uses Attributes' strvalue field for quick storage. -# -# The default nick types used by Evennia are: -# -# inputline (default) - match against all input -# player - match against player searches -# obj - match against object searches -# channel - used to store own names for channels -# """ -# self.obj = obj -# -# def add(self, nick, realname, category="inputline"): -# """ -# Assign a new nick for realname. -# category used by Evennia are -# 'inputline', 'player', 'obj' and 'channel' -# """ -# if not nick or not nick.strip(): -# return -# for nick in make_iter(nick): -# nick = nick.strip() -# real = realname -# nick_type = "%s%s" % (self.prefix, category.strip().lower()) -# query = self.obj.db_liteattributes.filter(db_key__iexact=nick, db_category__iexact=nick_type) -# if query.count(): -# old_nick = query[0] -# old_nick.db_data = real -# old_nick.save() -# else: -# new_nick = LiteAttribute(db_key=nick, db_category=nick_type, db_data=real) -# new_nick.save() -# self.obj.db_liteattributes.add(new_nick) -# -# def remove(self, key, category="inputline"): -# "Removes a previously stored nick" -# for nick in make_iter(key): -# nick = nick.strip() -# nick_type = "%s%s" % (self.prefix, category.strip().lower()) -# query = self.obj.db_liteattributes.filter(db_key__iexact=nick, db_category__iexact=nick_type) -# if query.count(): -# # remove the found nick(s) -# self.obj.db_liteattributes.remove(query[0]) -# -# def delete(self, *args, **kwargs): -# "alias wrapper" -# self.remove(*args, **kwargs) -# -# def get(self, key=None, category="inputline"): -# """ -# Retrieves a given nick object based on the input key and category. -# If no key is given, returns a list of all matching nick -# objects (LiteAttributes) on the object, or the empty list. -# """ -# returns = [] -# for nick in make_iter(key): -# nick = nick.strip().lower() if nick!=None else None -# nick_type = "%s%s" % (self.prefix, category.strip().lower()) -# if nick: -# nicks = _GA(self.obj, "db_liteattributes").filter(db_key=nick, db_category=nick_type) -# return nicks[0] if nicks else None -# else: -# returns.extend(list(self.obj.db_liteattributes.all())) -# return returns -# -# def get_replace(self, key, category="inputline", default=None): -# """ -# Retrieves a given nick replacement based on the input nick. If -# given but no matching conversion was found, returns -# original input or default if given -# If no nick is given, returns a list of all matching nick -# objects (LiteAttributes) on the object, or the empty list. -# """ -# returns = [] -# for nick in make_iter(key): -# nick = nick.strip().lower() if nick!=None else None -# nick_type = "%s%s" % (self.prefix, category.strip().lower()) -# nicks = _GA(self.obj, "db_liteattributes").filter(db_key=nick, db_category=nick_type) -# default = default if default!=None else nick -# returns.append(nicks[0].db_data) if nicks else returns.append(default) -# if len(returns) == 1: -# return returns[0] -# return returns -# -# def all(self): -# "Get all nicks in this handler" -# return [p[0] for p in self.obj.db_nicks.filter(db_category=self.category).values_list("db_key")] -# #------------------------------------------------------------ #