X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=lib%2Fmudpy%2Fmisc.py;h=1f3909b2af0897e60f39737c4ae45dd3d1d0c26f;hp=28b92fb6c726e1e4adc39de4e908545b744e5f39;hb=2a2a4dd5265401038795a81815141e277998c33f;hpb=84f2fa2376d2202d09fea78e499fc644454a79ba diff --git a/lib/mudpy/misc.py b/lib/mudpy/misc.py index 28b92fb..1f3909b 100644 --- a/lib/mudpy/misc.py +++ b/lib/mudpy/misc.py @@ -74,8 +74,13 @@ class Element: self.origin = self.universe.files[filename] # add a data section to the origin if necessary - if not self.origin.data.has_section(self.key): - self.origin.data.add_section(self.key) + # TODO(fungi): remove this indirection after the YAML transition + if self.origin._format == "yaml": + if self.key not in self.origin.data: + self.origin.data[self.key] = {} + else: + if not self.origin.data.has_section(self.key): + self.origin.data.add_section(self.key) # add or replace this element in the universe self.universe.contents[self.key] = self @@ -95,10 +100,17 @@ class Element: def facets(self): """Return a list of non-inherited facets for this element.""" - if self.key in self.origin.data.sections(): - return self.origin.data.options(self.key) + # TODO(fungi): remove this indirection after the YAML transition + if self.origin._format == "yaml": + try: + return self.origin.data[self.key].keys() + except KeyError: + return [] else: - return [] + if self.key in self.origin.data.sections(): + return self.origin.data.options(self.key) + else: + return [] def has_facet(self, facet): """Return whether the non-inherited facet exists.""" @@ -127,31 +139,58 @@ class Element: """Retrieve values.""" if default is None: default = "" - if self.origin.data.has_option(self.key, facet): - raw_data = self.origin.data.get(self.key, facet) - if raw_data.startswith("u\"") or raw_data.startswith("u'"): - raw_data = raw_data[1:] - raw_data.strip("\"'") - return raw_data - elif self.has_facet("inherit"): - for ancestor in self.ancestry(): - if self.universe.contents[ancestor].has_facet(facet): - return self.universe.contents[ancestor].get(facet) + # TODO(fungi): remove this indirection after the YAML transition + if self.origin._format == "yaml": + try: + return self.origin.data[self.key][facet] + except KeyError: + pass + if self.has_facet("inherit"): + for ancestor in self.ancestry(): + if self.universe.contents[ancestor].has_facet(facet): + return self.universe.contents[ancestor].get(facet) + else: + return default else: - return default + if self.origin.data.has_option(self.key, facet): + raw_data = self.origin.data.get(self.key, facet) + if raw_data.startswith("u\"") or raw_data.startswith("u'"): + raw_data = raw_data[1:] + raw_data.strip("\"'") + return raw_data + elif self.has_facet("inherit"): + for ancestor in self.ancestry(): + if self.universe.contents[ancestor].has_facet(facet): + return self.universe.contents[ancestor].get(facet) + else: + return default def getboolean(self, facet, default=None): """Retrieve values as boolean type.""" if default is None: default = False - if self.origin.data.has_option(self.key, facet): - return self.origin.data.getboolean(self.key, facet) - elif self.has_facet("inherit"): + # TODO(fungi): remove this indirection after the YAML transition + if self.origin._format == "yaml": + try: + return bool(self.origin.data[self.key][facet]) + except KeyError: + pass for ancestor in self.ancestry(): - if self.universe.contents[ancestor].has_facet(facet): + try: return self.universe.contents[ancestor].getboolean(facet) - else: + except KeyError: + pass return default + else: + if self.origin.data.has_option(self.key, facet): + return self.origin.data.getboolean(self.key, facet) + elif self.has_facet("inherit"): + for ancestor in self.ancestry(): + if self.universe.contents[ancestor].has_facet(facet): + return self.universe.contents[ancestor].getboolean( + facet) + else: + return default def getint(self, facet, default=None): """Return values as int type.""" @@ -485,7 +524,7 @@ class Universe: area ].contents: del self.contents[area].contents[element.key] - element.set("default_location", location) + element.set("default_location", area) element.remove_facet("location") # another pass to straighten out all the element contents