Exemple #1
0
def remove_extra(badge_page, offset):
    tree = etree.parse(open(badge_page, 'r'))
    root = tree.getroot()
    children = root.findall('.//{http://www.w3.org/2000/svg}g')
    for i in range(offset, len(children)):
        children[i].getparent().remove(children[i])
    etree.ElementTree(root).write(badge_page, pretty_print=True)
Exemple #2
0
def get_metalink_urls(url):
    """  Parses a metalink and returns a list of mirrors
    """
    res = get_url(url)
    if response_is_valid(res):
        if 'content-type' in res.headers and \
           res.headers['content-type'] == 'application/metalink+xml':
            data = download_url(res, 'Downloading repo info:')
            ns = 'http://www.metalinker.org/'
            try:
                context = etree.parse(BytesIO(data), etree.XMLParser())
            except etree.XMLSyntaxError:
                context = etree.parse(BytesIO(extract(data, 'gz')),
                                      etree.XMLParser())
            xpath = "//ns:files/ns:file[@name='repomd.xml']/ns:resources/ns:url[@protocol='https']"  # noqa
            metalink_urls = context.xpath(xpath, namespaces={'ns': ns})
            return [x.text for x in metalink_urls]
Exemple #3
0
    def change_font_size(self, filename, badge_size, paper_size, font_size_1,
                         font_size_2, font_size_3, font_size_4, font_size_5):
        """
            Module to change size of each badge lines
                :param `filename` - svg file to modify.
                :param `font_size_1` - Size to be applied on first line
                :param `font_size_2` - Size to be applied on Second line
                :param `font_size_3` - Size to be applied on Third line
                :param `font_size_4` - Size to be applied on Fourth line
                :param `font_size_5` - Size to be applied on Fifth line
        """

        font_size = [
            1, font_size_1, font_size_2, font_size_3, font_size_4, font_size_5
        ]
        dimensions = badge_config[paper_size][badge_size]
        if config.ENV == 'LOCAL':
            filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
        else:
            filename = os.getcwd(
            ) + '/api/static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
        tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r'))
        element = tree.getroot()

        for idx in range(1, dimensions.badges + 1):

            for row in range(1, 6):
                _id = 'Person_color_{}_{}'.format(idx, row)
                path = element.xpath(("//*[@id='{}']").format(_id))[0]
                style_detail = path.get("style")
                style_detail = style_detail.split(";")

                for ind, i in enumerate(style_detail):
                    if i.split(':')[0] == 'font-size':
                        style_detail[ind] = "font-size:" + str(
                            font_size[row]) + 'px'
                style_detail = ';'.join(style_detail)
                text_nodes = path.getchildren()
                path.set("style", style_detail)

                for t in text_nodes:
                    text_style_detail = t.get("style")
                    if text_style_detail is not None:
                        text_style_detail = text_style_detail.split(";")
                        for ind, i in enumerate(text_style_detail):
                            if i.split(':')[0] == 'font-size':
                                text_style_detail[ind] = "font-size:" + str(
                                    font_size[row]) + 'px'
                        text_style_detail = ";".join(text_style_detail)
                        t.set("style", text_style_detail)
                    else:
                        t.set("style",
                              "font-size:" + str(font_size[row]) + 'px')

        etree.ElementTree(element).write(filename, pretty_print=True)
        print("Font Size Saved!")
Exemple #4
0
def get_primary_url(mirror_url, data):

    if isinstance(data, text_type):
        if data.startswith('Bad repo - not in list') or \
                data.startswith('Invalid repo'):
            return None, None, None
    ns = 'http://linux.duke.edu/metadata/repo'
    try:
        context = etree.parse(BytesIO(data), etree.XMLParser())
    except etree.XMLSyntaxError:
        context = etree.parse(BytesIO(extract(data, 'gz')), etree.XMLParser())
    location = context.xpath("//ns:data[@type='primary']/ns:location/@href",
                             namespaces={'ns': ns})[0]
    checksum = context.xpath("//ns:data[@type='primary']/ns:checksum",
                             namespaces={'ns': ns})[0].text
    csum_type = context.xpath("//ns:data[@type='primary']/ns:checksum/@type",
                              namespaces={'ns': ns})[0]
    primary_url = str(mirror_url.rsplit('/', 2)[0]) + '/' + location
    return primary_url, checksum, csum_type
Exemple #5
0
    def do_text_fill(self, filename, fill, badge_size, paper_size):
        """
        Module to change color of badge's details
        :param `filename` - svg file to modify.
        :param `fill` - lis of color to be applied on each line
        """

        dimensions = badge_config[paper_size][badge_size]
        if config.ENV == 'LOCAL':
            filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
        else:
            filename = os.getcwd(
            ) + '/api/static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
        tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r'))
        element = tree.getroot()

        for idx in range(1, dimensions.badges + 1):

            for row in range(1, 6):
                _id = 'Person_color_{}_{}'.format(idx, row)
                path = element.xpath(("//*[@id='{}']").format(_id))[0]
                style_detail = path.get("style")
                style_detail = style_detail.split(";")

                if style_detail[7].split(':')[0] == 'fill':
                    style_detail[7] = "fill:" + str(fill)
                    print(style_detail[7])

                elif style_detail[6].split(':')[0] == 'fill':
                    style_detail[6] = "fill:" + str(fill)
                    print(style_detail[6])

                else:
                    for ind, i in enumerate(style_detail):
                        if i.split(':')[0] == 'fill':
                            style_detail[ind] = "fill:" + str(fill)
                style_detail = ';'.join(style_detail)
                text_nodes = path.getchildren()
                path.set("style", style_detail)

                for t in text_nodes:
                    text_style_detail = t.get("style")
                    text_style_detail = text_style_detail.split(";")
                    for ind, i in enumerate(text_style_detail):
                        if i.split(':')[0] == 'fill':
                            text_style_detail[ind] = "fill:" + str(fill)
                    text_style_detail = ";".join(text_style_detail)
                    t.set("style", text_style_detail)

        etree.ElementTree(element).write(filename, pretty_print=True)
        print("Text Fill saved!")
Exemple #6
0
    def load_file(self, path):
        self.controller.data = TestData.TestRunData()
        try:
            tree = et.parse(path)
        except Exception:
            raise FileNotFoundError
        root = tree.getroot()
        self.controller.get_frame("PageXML").set_xml(et.tostring(root))
        for i in range(len(root) - 1):
            test_case = root[i]
            self.steps.add_test_case(test_case.get("name"))
            test_case_data = self.controller.data.add_test_case(
                test_case.get("name"), i)
            for index, value in enumerate(test_case):
                elem = value
                status = elem[0]
                time = elem[1]
                description = elem[2]
                if status.text == "passed":
                    self.steps.step_pass(description.text, time.text)
                    test_case_data.add_step(index + 1,
                                            status="pass",
                                            description=description.text,
                                            time=time.text)
                if status.text == "failed":
                    error_element = elem[3]
                    func = error_element[0]
                    func_error_line = error_element[1]
                    func_error_message = error_element[2]
                    self.steps.step_fail(description.text,
                                         error_message=str(
                                             func_error_message.text),
                                         lines=str(func.text),
                                         error_line=str(func_error_line.text),
                                         time=time.text)
                    test_case_data.add_step(
                        order=index + 1,
                        status="fail",
                        description=description.text,
                        method=func.text,
                        error_line=func_error_line,
                        time=time.text,
                        error_message=func_error_message.text)

            self.steps.test_finish()
        console = root[-1]
        self.steps.write_console(console.text)
        self.controller.loaded_xml = True

        self.steps.text.see("1.0")
Exemple #7
0
    def change_text_align(self, filename, badge_size, paper_size, align_1,
                          align_2, align_3, align_4, align_5):
        """
            Module to change Text Alignment of each badge line
                :param `filename` - svg file to modify.
                :param `align_1` - Text Alignment to be applied on first line
                :param `align_2` - Text Alignment to be applied on Second line
                :param `align_3` - Text Alignment to be applied on Third line
                :param `align_4` - Text Alignment to be applied on Fourth line
                :param `align_5` - Text Alignment to be applied on Fifth line
        """

        align = [1, align_1, align_2, align_3, align_4, align_5]
        dimensions = badge_config[paper_size][badge_size]
        if config.ENV == 'LOCAL':
            filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
        else:
            filename = os.getcwd(
            ) + '/api/static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg'
        tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r'))
        element = tree.getroot()

        for idx in range(1, dimensions.badges + 1):

            for row in range(1, 6):
                _id = 'Person_color_{}_{}'.format(idx, row)
                path = element.xpath(("//*[@id='{}']").format(_id))[0]
                style_detail = path.get("style")
                style_detail = style_detail.split(";")

                for ind, i in enumerate(style_detail):
                    if i.split(':')[0] == 'text-align':
                        style_detail[ind] = "text-align:" + align[row]
                style_detail = ';'.join(style_detail)
                text_nodes = path.getchildren()
                path.set("text-align", style_detail)

                for t in text_nodes:
                    text_style_detail = t.get("style")
                    text_style_detail = text_style_detail.split(";")
                    text_style_detail[-1] = "text-align:" + align[row]
                    text_style_detail = ";".join(text_style_detail)
                    t.set("style", text_style_detail)

        etree.ElementTree(element).write(filename, pretty_print=True)
        print("Text Alignment Saved!")
Exemple #8
0
    def load(self, options=None):
        self.options = options or {}
        tree = etree.parse(self.uri.create_instream())
        xmlroot = tree.getroot()
        self.prefixes.update(xmlroot.nsmap)
        self.reverse_nsmap = {v: k for k, v in self.prefixes.items()}

        self.xsitype = '{{{0}}}type'.format(self.prefixes.get(XSI))
        self.xmiid = '{{{0}}}id'.format(self.prefixes.get(XMI))
        self.schema_tag = '{{{0}}}schemaLocation'.format(
            self.prefixes.get(XSI))

        # Decode the XMI
        if '{{{0}}}XMI'.format(self.prefixes.get(XMI)) == xmlroot.tag:
            real_roots = xmlroot
        else:
            real_roots = [xmlroot]

        def grouper(iterable):
            args = [iter(iterable)] * 2
            return zip(*args)

        self.schema_locations = {}
        schema_tag_list = xmlroot.attrib.get(self.schema_tag, '')
        for prefix, path in grouper(schema_tag_list.split()):
            if '#' not in path:
                path = path + '#'
            self.schema_locations[prefix] = Ecore.EProxy(path, self)

        for root in real_roots:
            modelroot = self._init_modelroot(root)
            for child in root:
                self._decode_eobject(child, modelroot)

        if self.contents:
            self._decode_ereferences()

        self._clean_registers()
        self.uri.close_stream()