'walk the input datastructure and assign any values'

def load_data(self, ds, variable_manager=None, loader=None):

    assert (ds is not None), ('ds    (%s)    should    not    be    None    but    it    is.' % ds)
    setattr(self, '_ds', ds)
    self._variable_manager = variable_manager
    if (loader is not None):
        self._loader = loader
    else:
        self._loader = DataLoader()
    ds = self.preprocess_data(ds)
    self._validate_attributes(ds)
    for (name, attr) in sorted(iteritems(self._valid_attrs), key=operator.itemgetter(1)):
        if (name in ds):
            method = getattr(self, ('_load_%s' % name), None)
            if method:
                self._attributes[name] = method(name, ds[name])
            else:
                self._attributes[name] = ds[name]
    self.validate()
    return self
