def setUp(self): self.model = SampleModel() self.elem = etree.Element('name', lang='english') self.target_value = 'some name' self.alternate_value = 'some other name' self.elem.text = self.target_value self.desc = mp.ROOT.name['lang': 'english'] % mp.Custom(xh.load_text, xh.dump_text)
def _from_dict(): def _loads(elem): return dict(elem.attrib) def _dumps(val, elem): elem.attrib.clear() elem.attrib.update(val) return elem return mp.Custom(_loads, _dumps)
class Filesystem(mp.Model): ROOT_ELEM = 'filesystem' fs_type = mp.ROOT['type'] access_mode = mp.ROOT['accessmode'] source_dir = mp.ROOT.source['dir'] target_name = mp.ROOT.target['dir'] read_only = mp.ROOT.readonly % mp.Custom(xh.load_presence, xh.dump_presence)
class Disk(mp.Model): ROOT_ELEM = 'disk' device_type = mp.ROOT % _split_loader('type', 'device') driver = mp.ROOT.driver % _split_loader('name', 'type') source_file = mp.ROOT.source['file'] source_vol = mp.ROOT.source % _split_loader('pool', 'volume') target = mp.ROOT.target % _split_loader('bus', 'dev') read_only = mp.ROOT.readonly % mp.Custom(xh.load_presence, xh.dump_presence)
def _split_loader(*parts): def _loads(elem): return ':'.join(elem.attrib[part] for part in parts) def _dumps(val, elem): vals = val.split(':') for i, part in enumerate(parts): elem.attrib[part] = vals[i] return elem return mp.Custom(_loads, _dumps)
def _optional_tag_with_attr(attr): def _loads(elem): return elem.get(attr) def _dumps(val, elem): if val is None: return None else: elem.set(attr, val) return elem return mp.Custom(_loads, _dumps)
def _unit_loader(): def _loads(elem): return "%s %s" % (elem.text, elem.attrib['unit']) def _dumps(v, elem): parts = v.split(" ") elem.text = parts[0] if len(parts) > 1: elem.attrib['unit'] = parts[1] return elem return mp.Custom(_loads, _dumps)