def assemble(cls, datum): inst = cls() rep = {} links = datum.pop("_links", {}) for name in OrderedDict(cls.links).keys(): if name in links: url = links[name]["href"] model_cls = OrderedDict(cls.links)[name]["schema"] id = model_cls.id_from_url(url) rep[name] = model_cls(id=id) else: rep[name] = None for name in OrderedDict(cls.properties).keys(): if name in datum: rep[name] = datum[name] else: rep[name] = None if "self" in links: id = cls.id_from_url(links["self"]["href"]) else: id = None cls.validate(rep) inst._remote_representation = rep inst.id = id return inst