def _load_data_from_json(self, fhand, clean=False, merge=True, pop_schema=True): """FIX: check for overwrite?? """ self._log.debug("_load_data_from_json(): {}\n\t{}".format( self.name(), fhand)) # Store the filename this was loaded from self.filename = fhand with open(fhand, 'r') as jfil: data = json.load(jfil, object_pairs_hook=OrderedDict) name = list(data.keys()) if len(name) != 1: raise ValueError("json file '{}' has multiple keys: {}".format( fhand, list(name))) name = name[0] # Remove the outmost dict level data = data[name] self._log.debug("Name: {}".format(name)) # Convert the OrderedDict data from json into class structure i.e. # `Sources` will be extracted and created from the dict Everything # that remains afterwards should be okay to just store to this # `Entry` self._convert_odict_to_classes(data, clean=clean, merge=merge, pop_schema=pop_schema) if len(data): err_str = ("Remaining entries in `data` after " "`_convert_odict_to_classes`.") err_str += "\n{}".format(dict_to_pretty_string(data)) self._log.error(err_str) raise RuntimeError(err_str) # If object doesnt have a name yet, but json does, store it self_name = self[ENTRY.NAME] if len(self_name) == 0: self[ENTRY.NAME] = name # Warn if there is a name mismatch elif self_name.lower().strip() != name.lower().strip(): self._log.warning("Object name '{}' does not match name in json:" "'{}'".format(self_name, name)) self.check() return
def _load_data_from_json(self, fhand, clean=False, merge=True): """FIX: check for overwrite?? """ self._log.debug("_load_data_from_json(): {}\n\t{}".format( self.name(), fhand)) # Store the filename this was loaded from self.filename = fhand with open(fhand, 'r') as jfil: data = json.load(jfil, object_pairs_hook=OrderedDict) name = list(data.keys()) if len(name) != 1: raise ValueError("json file '{}' has multiple keys: {}".format( fhand, list(name))) name = name[0] # Remove the outmost dict level data = data[name] self._log.debug("Name: {}".format(name)) # Convert the OrderedDict data from json into class structure i.e. # `Sources` will be extracted and created from the dict Everything # that remains afterwards should be okay to just store to this # `Entry` self._convert_odict_to_classes(data, clean=clean, merge=merge) if len(data): err_str = ("Remaining entries in `data` after " "`_convert_odict_to_classes`.") err_str += "\n{}".format(dict_to_pretty_string(data)) self._log.error(err_str) raise RuntimeError(err_str) # If object doesnt have a name yet, but json does, store it self_name = self[ENTRY.NAME] if len(self_name) == 0: self[ENTRY.NAME] = name # Warn if there is a name mismatch elif self_name.lower().strip() != name.lower().strip(): self._log.warning("Object name '{}' does not match name in json:" "'{}'".format(self_name, name)) self.check() return
def __repr__(self): """Return JSON representation of self """ jsonstring = dict_to_pretty_string({self[ENTRY.NAME]: self}) return jsonstring
def __repr__(self): """Return JSON representation of self.""" jsonstring = dict_to_pretty_string({ENTRY.NAME: self}) return jsonstring