"""An element of the universe."""
- def __init__(self, key, universe, filename=None):
+ def __init__(self, key, universe, filename=None, old_style=False):
"""Set up a new element."""
+ # TODO(fungi): This can be removed after the transition is complete
+ self.old_style = old_style
+
# keep track of our key name
self.key = key
self.universe = universe
# clone attributes if this is replacing another element
- if self.key in self.universe.contents:
+ if self.old_style and self.key in self.universe.contents:
old_element = self.universe.contents[self.key]
for attribute in vars(old_element).keys():
exec("self." + attribute + " = old_element." + attribute)
# i guess this is a new element then
else:
+ # set of facet keys from the universe
+ self.facethash = dict()
+
# not owned by a user by default (used for avatars)
self.owner = None
def reload(self):
"""Create a new element and replace this one."""
- Element(self.key, self.universe, self.origin.filename)
+ Element(self.key, self.universe, self.origin.filename,
+ old_style=self.old_style)
del(self)
def destroy(self):
def facets(self):
"""Return a list of non-inherited facets for this element."""
- try:
- return self.origin.data[self.key].keys()
- except (AttributeError, KeyError):
- return []
+ if self.old_style:
+ try:
+ return self.origin.data[self.key].keys()
+ except (AttributeError, KeyError):
+ return []
+ else:
+ return self.facethash
def has_facet(self, facet):
"""Return whether the non-inherited facet exists."""
if default is None:
default = ""
try:
- return self.origin.data[self.key][facet]
+ if self.old_style:
+ return self.origin.data[self.key][facet]
+ else:
+ return self.origin.data[".".join((self.key, facet))]
except (KeyError, TypeError):
pass
if self.has_facet("inherit"):
def set(self, facet, value):
"""Set values."""
if not self.has_facet(facet) or not self.get(facet) == value:
- if self.key not in self.origin.data:
- self.origin.data[self.key] = {}
- self.origin.data[self.key][facet] = value
+ if self.old_style:
+ if self.key not in self.origin.data:
+ self.origin.data[self.key] = {}
+ self.origin.data[self.key][facet] = value
+ else:
+ node = ".".join((self.key, facet))
+ self.origin.data[node] = value
+ self.facethash[node] = self.origin.data[node]
self.origin.modified = True
def append(self, facet, value):
"actor:avatar:" + self.account.get("name") + ":" + str(
counter
),
- universe
+ universe, old_style=True
)
self.avatar.append("inherit", "archetype:avatar")
self.account.append("avatars", self.avatar.key)
# add an element for counters if it doesn't exist
if "counters" not in universe.categories["internal"]:
universe.categories["internal"]["counters"] = Element(
- "internal:counters", universe
+ "internal:counters", universe, old_style=True
)
# update the log every now and then
# otherwise, this could be a brand new user
else:
- user.account = Element("account:" + name, universe)
+ user.account = Element("account:" + name, universe, old_style=True)
user.account.set("name", name)
log("New user: " + name, 2)
user.state = "checking_new_account_name"
+ "\"):$(eol)")
facets = element.facets()
for facet in sorted(facets):
- message += ("$(eol) $(grn)%s: $(red)%s$(nrm)" %
- (facet, escape_macros(element.get(facet))))
+ if element.old_style:
+ message += ("$(eol) $(grn)%s: $(red)%s$(nrm)" %
+ (facet, escape_macros(element.get(facet))))
+ else:
+ message += ("$(eol) $(grn)%s: $(red)%s$(nrm)" %
+ (facet, str(facets[facet])))
else:
message = "Element \"" + arguments[1] + "\" does not exist."
elif arguments[0] == "result":
" Warning: \"" + filename + "\" is not yet "
"included in any other file and will not be read "
"on startup unless this is remedied.")
- Element(element, universe, filename)
+ Element(element, universe, filename, old_style=True)
log(logline, 6)
elif len(arguments) > 2:
message = "You can only specify an element and a filename."