Fixed more errors with quelling as well as some other things with updating permissions in general. Resolves Issue 430.

This commit is contained in:
Griatch 2013-11-11 22:44:22 +01:00
parent ebdc6cdbd4
commit 7f0d0dd0f8
4 changed files with 21 additions and 11 deletions

View file

@ -528,8 +528,11 @@ class CmdPerm(MuxCommand):
if 'del' in switches:
# delete the given permission(s) from object.
obj.permissions.remove(self.rhslist)
cstring += "\nPermission(s) %s removed from %s (if they existed)." % (", ".join(self.rhslist), obj.name)
tstring += "\n%s revokes the permission(s) %s from you." % (caller.name, ", ".join(self.rhslist))
if obj.permissions.get(self.rhslist):
cstring += "\nPermissions(s) %s could not be removed from %s." % (", ".join(self.rhslist), obj.name)
else:
cstring += "\nPermission(s) %s removed from %s (if they existed)." % (", ".join(self.rhslist), obj.name)
tstring += "\n%s revokes the permission(s) %s from you." % (caller.name, ", ".join(self.rhslist))
else:
# add a new permission
permissions = obj.permissions.all()

View file

@ -633,6 +633,14 @@ class CmdQuell(MuxPlayerCommand):
self.msg("Already quelling Player%s permissions." % permstr)
return
player.attributes.add('_quell', True)
self.msg("Quelling Player permissions%s. Use @unquell to get them back." % permstr)
puppet = player.get_puppet(self.sessid)
if puppet:
cpermstr = " (%s)" % ", ".join(puppet.permissions.all())
cpermstr = "Quelling to current puppet's permissions%s." % cpermstr
cpermstr += "\n(Note: If this is higher than Player permissions%s, the lowest of the two will be used.)" % permstr
cpermstr += "\nUse @unquell to return to normal permission usage."
self.msg(cpermstr)
else:
self.msg("Quelling Player permissions%s. Use @unquell to get them back." % permstr)
self._recache_locks(player)

View file

@ -59,6 +59,7 @@ def create_objects():
god_player.basetype_setup()
god_player.at_player_creation()
god_player.locks.add("examine:perm(Immortals);edit:false();delete:false();boot:false();msg:all()")
god_player.permissions.add("Immortals") # this is necessary for quelling to work correctly.
# Limbo is the default "nowhere" starting room

View file

@ -482,8 +482,8 @@ class TagHandler(object):
self._cache = None
def _recache(self):
self._cache = dict([(to_str(p[0]), True) for p in _GA(self.obj, self._m2m_fieldname).filter(
db_category__startswith=self.prefix).values_list("db_key")])
self._cache = dict((to_str(p.db_key), p) for p in _GA(self.obj, self._m2m_fieldname).filter(
db_category__startswith=self.prefix))
def add(self, tag, category=None, data=None):
"Add a new tag to the handler. Tag is a string or a list of strings."
@ -505,9 +505,8 @@ class TagHandler(object):
self._recache()
ret = []
category = "%s%s" % (self.prefix, category.strip().lower() if category!=None else "")
for keystr in (k.strip.lower() for k in make_iter(key)):
ret.append(self._cache.get(keystr))
ret = ret if return_obj else [to_str(tag.db_data) for tag in ret]
ret = [val for val in (self._cache.get(keystr.strip().lower()) for keystr in make_iter(key)) if val]
ret = ret if return_obj else [to_str(tag.db_data) for tag in ret if tag]
return ret[0] if len(ret)==1 else ret
def remove(self, tag, category=None):
@ -515,7 +514,7 @@ class TagHandler(object):
if self._cache == None or not _TYPECLASS_AGGRESSIVE_CACHE:
self._recache()
for tag in make_iter(tag):
if not tag or tag.strip(): # we don't allow empty tags
if not (tag or tag.strip()): # we don't allow empty tags
continue
tagstr = tag.strip().lower() if tag!=None else None
category = "%s%s" % (self.prefix, category.strip().lower() if category!=None else "")
@ -524,8 +523,7 @@ class TagHandler(object):
tagobj = self.obj.db_tags.filter(db_key=tagstr, db_category=category)
if tagobj:
_GA(self.obj, self._m2m_fieldname).remove(tagobj[0])
if tagstr in self._cache:
del self._cache[tagstr]
self._recache()
def clear(self):
"Remove all tags from the handler"