def create(cls, path): file = XMLFile.create(path) meta_sec = Section('Settings') file.root = Section('BeakerRunResult') file.root.subsections.append(meta_sec) file.save() return cls(file, meta_sec)
def _save_xml(self): self.att_meta.root = Section(self.ROOT_NAME) for attachment in self.collection: attachments_params = dict(attachment.__dict__) if attachment.alias is None: attachments_params.pop('alias') self.att_meta.root.subsections.append( Section(self.ELEM_NAME, attachments_params)) self.att_meta.save()
def test_create(self): xml = XMLFile.create(self.NEW) self.assertIsInstance(xml, XMLFile) self.assertIsInstance(xml.root, Section) self.assertIsInstance(xml.root.subsections, SectionCollection) self.assertEqual(len(xml.root.subsections), 0) data_sec = Section('data', sum="123", weather='sunny') xml.root.subsections.append(data_sec) data_sec.subsections.append(Section('avg_temp', number="15.5")) data_sec.subsections.append(Section('max_temp', number="15.9")) data_sec.subsections.append(Section('min_temp', number="15.2")) data_sec.subsections.append(Section('test_temp', number="15.x")) data_sec.subsections.append(Section('test_temp', number="15.x")) data_sec.subsections.append(Section('test_temp', number="15.x")) temps_sec = Section('temps') data_sec.subsections.append(temps_sec) for i in range(20): temps_sec.subsections.append(Section('temp', value=i)) xml.save() self.assertTrue(os.path.exists(self.NEW)) xml_ver = XMLFile.open(self.NEW) data_sec = xml_ver.root.subsections.filter('data')[0] self.assertEqual(data_sec.params['sum'], '123') self.assertEqual(data_sec.params['weather'], 'sunny') data_sec = xml_ver.root['data'][0] self.assertEqual(data_sec.params['sum'], '123') self.assertEqual(data_sec.params['weather'], 'sunny') for i, sec in enumerate(data_sec['temps'][0]): self.assertEqual(sec.name, 'temp') self.assertEqual(sec.params['value'], str(i)) self.assertEqual(len(xml_ver.root['data'][0]['temps'][0].subsections), 20) data_sec['temps'][0].delete_subsections() self.assertEqual(len(xml_ver.root['data'][0]['temps'][0].subsections), 0) xml_ver.save() xml_ver2 = XMLFile.open(self.NEW) self.assertEqual(len(xml_ver2.root['data'][0]['temps'][0].subsections), 0) data_sec = xml_ver2.root['data'][0] self.assertEqual(len(data_sec.subsections.filter(number="15.9")), 1) self.assertEqual( data_sec.subsections.filter(number="15.9")[0].name, "max_temp") self.assertEqual(len(data_sec.subsections.filter(number="15.x")), 3) self.assertEqual( data_sec.subsections.filter(number="15.x")[0].name, "test_temp")
def test_readonly(self): xml1 = XMLFile.open(self.EXIST, readonly=True) root_subs = xml1.root.subsections self.assertRaises(DataFormatReadOnlyException, SectionCollection.append, root_subs, Section('asdf')) self.assertRaises(DataFormatReadOnlyException, SectionCollection.__setattr__, root_subs, 'sections', []) self.assertRaises(DataFormatReadOnlyException, DataFormatList.append, root_subs.sections, Section('adsf')) self.assertRaises(DataFormatReadOnlyException, DataFormatList.pop, root_subs.sections, Section('adsf'))
def load_sections(root_node): params_list = OrderedDict(root_node.attrib.items()) sec = Section(root_node.tag, params_list) for child_node in root_node: if child_node.attrib.get('type', '') == 'list': sec.subsections.append( Section(child_node.tag, value=[ sub_node.attrib['value'] for sub_node in child_node ])) else: sec.subsections.append(load_sections(child_node)) sec.readonly = self.readonly return sec
def test_open_n_write(self): sec_name = 'random_name' xml = XMLFile.open(self.EXIST) self.assertEqual(xml.root.name, 'breakfast_menu') self.assertEqual(len(xml.root.subsections), 5) xml.root.subsections.append( Section(sec_name, value='wwertret', value2='asdf2ew')) self.assertEqual(len(xml.root.subsections), 6) xml.save() xml2 = XMLFile.open(self.EXIST) sec_list = xml2.root.subsections.filter(sec_name) self.assertEqual(len(sec_list), 1)
def test_raise(self): p = DataPackage.open('asdf', FileFlags.NONE) # meta self.assertRaises(DataFormatNullFile, operator.getitem, p.metas, 'Family') self.assertRaises(DataFormatNullFile, operator.setitem, p.metas, 'Version', '0.2') # store self.assertRaises(DataFormatNullFile, setattr, p.store, 'root', Section('asdf')) self.assertRaises(DataFormatNullFile, getattr, p.store, 'path') # attch self.assertRaises(DataFormatNullFile, len, p.attachments) self.assertRaises(DataFormatNullFile, iter, p.attachments)
def __init__(self, path, root_section=None, readonly=False): self.path = path self.root = Section('root') if not root_section else root_section self._readonly = readonly
def save(self): self._meta_section_ptr.delete_subsections() for k, v in self._val_dict.items(): self._meta_section_ptr.subsections.append(Section(k, value=v)) self._xml_file.save()
def create(cls, path): os.mkdir(os.path.join(path, cls.ATTCH_DIR)) att_meta = XMLFile.create(os.path.join(path, cls.META_FILE)) att_meta.root = Section(cls.ROOT_NAME) return cls(path, att_meta, [], {}, False)
def test_readonly(self): ro_xml = XMLFile.open(self.EXIST, readonly=True) self.assertRaises(DataFormatReadOnlyException, setattr, ro_xml, 'root', Section('ASDF')) self.assertRaises(DataFormatReadOnlyException, XMLFile.save, ro_xml)
def test_open(self): p = DataPackage.open(self.OPEN_PATH) self.assertIsInstance(p, DataPackage) self.assertIsInstance(p.metas, MetaXMLFile) self.assertIsInstance(p.store, XMLFile) self.assertEqual(p.metas['Family'], 'RHEL7') self.assertEqual(p.metas['SpecificTag'], 'Testing jobcreator') root = p.store.root self.assertEqual(root.name, 'breakfast_menu') food1 = root.subsections[0] self.assertEqual(len(food1.subsections.filter('name')), 1) self.assertEqual(len(food1.subsections.filter('price')), 1) self.assertEqual(len(food1.subsections.filter('calories')), 1) self.assertEqual(len(food1.subsections.filter('description')), 1) p.metas['Family'] = 'CentOS7' p.metas['SpecificTag'] = '#TAG' new_food = Section('food', hashtag='#tag') new_food.subsections.append(Section('name', value='Junky food')) new_food.subsections.append(Section('price', value='$5.50')) new_food.subsections.append( Section('description', value='asdf;lkjasdf;lkj')) new_food.subsections.append(Section('calories', value='500')) num_of_foods = len(p.store.root.subsections) p.store.root.subsections.append(new_food) num_of_attach = len(p.attachments) attch1 = p.attachments.new(AttachmentTypes.FILE, 'cat ~/.bashrc') attch1.path.write('asdf') attch2 = p.attachments.new(AttachmentTypes.DIRECTORY, '/var/log/') os.makedirs(os.path.join(self.OPEN_PATH, str(attch2.path))) p.close() del p # tests after write p1 = DataPackage.open(self.OPEN_PATH) self.assertIsInstance(p1, DataPackage) self.assertIsInstance(p1.metas, MetaXMLFile) self.assertIsInstance(p1.store, XMLFile) self.assertEqual(p1.metas['Family'], 'CentOS7') self.assertEqual(p1.metas['SpecificTag'], '#TAG') root = p1.store.root self.assertEqual(len(root.subsections), num_of_foods + 1) self.assertEqual(root.name, 'breakfast_menu') food1 = root.subsections[0] self.assertEqual(len(food1.subsections.filter('name')), 1) self.assertEqual(len(food1.subsections.filter('price')), 1) self.assertEqual(len(food1.subsections.filter('calories')), 1) self.assertEqual(len(food1.subsections.filter('description')), 1) my_food = p1.store.root.subsections.filter('food', hashtag='#tag') self.assertEqual(len(my_food), 1) my_food = my_food[0] self.assertEqual(len(my_food.subsections.filter('name')), 1) self.assertEqual( my_food.subsections.filter('name')[0].params['value'], 'Junky food') self.assertEqual(len(my_food.subsections.filter('price')), 1) self.assertEqual( my_food.subsections.filter('price')[0].params['value'], '$5.50') self.assertEqual(len(my_food.subsections.filter('calories')), 1) self.assertEqual( my_food.subsections.filter('calories')[0].params['value'], '500') self.assertEqual(len(my_food.subsections.filter('description')), 1) self.assertEqual( my_food.subsections.filter('description')[0].params['value'], 'asdf;lkjasdf;lkj') self.assertEqual(num_of_attach + 2, len(p1.attachments)) for attch in p1.attachments: self.assertTrue( os.path.exists(os.path.join(self.OPEN_PATH, str(attch.path)))) p1.close()