Пример #1
0
 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)
Пример #2
0
 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()
Пример #3
0
    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")
Пример #4
0
    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'))
Пример #5
0
        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
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
 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
Пример #9
0
 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()
Пример #10
0
 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)
Пример #11
0
    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)
Пример #12
0
    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()