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)
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]
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!")
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
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!")
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")
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!")
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()