mirror of
https://github.com/evennia/evennia.git
synced 2026-03-27 10:16:32 +01:00
[#1928] Edit existing nested
This commit is contained in:
parent
727df07907
commit
f76affa6a7
2 changed files with 22 additions and 2 deletions
|
|
@ -1708,8 +1708,21 @@ class CmdSetAttribute(ObjManipCommand):
|
|||
return "\n%s has no attribute '%s'." % (obj.name, attr)
|
||||
|
||||
def set_attr(self, obj, attr, value):
|
||||
for key, nested_keys in self.split_nested_attr(attr):
|
||||
if obj.attributes.has(key) and nested_keys:
|
||||
acc_key = nested_keys[-1]
|
||||
lookup_value = obj.attributes.get(key)
|
||||
deep = self.do_nested_lookup(lookup_value, *nested_keys[:-1])
|
||||
if deep is not self.not_found:
|
||||
# TODO - insert/append in lists
|
||||
deep[acc_key] = value
|
||||
value = lookup_value
|
||||
attr = key
|
||||
break
|
||||
|
||||
verb = "Modified" if obj.attributes.has(attr) else "Created"
|
||||
try:
|
||||
verb = "Modified" if obj.attributes.has(attr) else "Created"
|
||||
|
||||
obj.attributes.add(attr, value)
|
||||
return "\n%s attribute %s/%s = %s" % (verb, obj.name, attr, repr(value))
|
||||
except SyntaxError:
|
||||
|
|
|
|||
|
|
@ -541,6 +541,8 @@ class TestBuilding(CommandTest):
|
|||
self.call(building.CmdSetAttribute(), "Obj/test1", "Attribute Obj/test1 = [1, 2]")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test1[0]", "Attribute Obj/test1[0] = 1")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test1[1]", "Attribute Obj/test1[1] = 2")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test1[0] = 99", "Modified attribute Obj/test1 = [99, 2]")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test1[0]", "Attribute Obj/test1[0] = 99")
|
||||
# list delete
|
||||
self.call(building.CmdSetAttribute(),
|
||||
"Obj/test1[0] =", "Deleted attribute 'test1[0]' (= nested) from Obj.")
|
||||
|
|
@ -553,12 +555,17 @@ class TestBuilding(CommandTest):
|
|||
self.call(building.CmdSetAttribute(), "Obj/test2", "Attribute Obj/test2 = {'one': 1, 'two': 2}")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2['one']", "Attribute Obj/test2['one'] = 1")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2['one]", "Attribute Obj/test2['one] = 1")
|
||||
self.call(building.CmdSetAttribute(),
|
||||
"Obj/test2['one']=99", "Modified attribute Obj/test2 = {'one': 99, 'two': 2}")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2['one']", "Attribute Obj/test2['one'] = 99")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2['two']", "Attribute Obj/test2['two'] = 2")
|
||||
self.call(building.CmdSetAttribute(),
|
||||
"Obj/test2['three']=3", "Modified attribute Obj/test2 = {'one': 99, 'two': 2, 'three': 3}")
|
||||
# Dict delete
|
||||
self.call(building.CmdSetAttribute(),
|
||||
"Obj/test2['two'] =", "Deleted attribute 'test2['two']' (= nested) from Obj.")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2['two']", "Obj has no attribute 'test2['two']'.")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2", "Attribute Obj/test2 = {'one': 1}")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2", "Attribute Obj/test2 = {'one': 99, 'three': 3}")
|
||||
self.call(building.CmdSetAttribute(), "Obj/test2[0]", "Obj has no attribute 'test2[0]'.")
|
||||
|
||||
# Deaper nesting
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue