def _parse_polygon(self, polygon: etree._Element, nsmap: Dict[str, str]) -> Polygon: gml = f"{{{nsmap['gml']}}}" ogr = f"{{{nsmap['ogr']}}}" outer_boundary = next(polygon.iter(f"{gml}outerBoundaryIs")) citer = (float(x) for x in next(outer_boundary.iter( f"{gml}coordinates")).text.replace(",", " ").split()) shell = np.fromiter(citer, dtype='d').reshape(-1, 2) holes = [] for inner_boundary in polygon.iter(f"{gml}innerBoundaryIs"): citer = (float(x) for x in next(inner_boundary.iter( f"{gml}coordinates")).text.replace(",", " ").split()) holes.append(np.fromiter(citer, dtype='d').reshape(-1, 2)) return Polygon(shell=shell, holes=holes)
def find_phone(supplier: etree._Element): "Функция возвращает телефон" phones = [element for element in supplier.iter('{http://zakupki.gov.ru/oos/types/1}contactPhone')] if len(phones) == 0: phone = '' else: phone = phones[0].text return phone
def find_address(supplier: etree._Element): "Функция возвращает адрес" addresses = [element for element in supplier.iter('{http://zakupki.gov.ru/oos/types/1}address')] if len(addresses) == 0: address = '' else: address = addresses[0].text return address
def find_email(supplier: etree._Element): "Функция возвращает емэйл" emails = [element for element in supplier.iter('{http://zakupki.gov.ru/oos/types/1}contactEMail')] if len(emails) == 0: email = '' else: email = emails[0].text.lower() return email
def get_channel_metadata(mdroot: etree._Element, channel_number: int): channel = [ obj for obj in [item for item in mdroot.iter("Channels")][0].iter("Channel") ][channel_number] channel_dict = elem2dict(channel) # Set channel color based on color map. channel_dict["Color"] = [ color for color in color_map if channel.get('Name').lower() in color_map[color] ][0].title() return channel_dict
def _parse_actions_1_1(element: _Element) -> List[ResourceAgentActionOcf1_1]: return [ ResourceAgentActionOcf1_1( name=str(action.attrib["name"]), timeout=action.get("timeout"), interval=action.get("interval"), role=action.get("role"), start_delay=action.get("start-delay"), depth=action.get("depth"), automatic=action.get("automatic"), on_target=action.get("on_target"), ) for action in element.iter("action") ]
def translate_dom(dom: etree._Element, dest_language: str, original_url: Optional[str] = None): if dest_language in LANGUAGES: translator = Translator() for node in dom.iter(): node.text = _translate(node.text, translator, dest_language) node.tail = _translate(node.tail, translator, dest_language) if original_url is not None: a = etree.Element("a") a.text = "Untranslated" a.attrib["href"] = original_url\ .replace("&translateto=", "&nop=")\ .replace("?translateto=", "?nop=") # quick & dirty dom.append(etree.Element("hr")) dom.append(a) dom.append(etree.Element("hr"))
def _call_inner(self, root: etree._Element): # do it as a BFS rather than using etree._Element.iter(). # using iter, you add nodes to the tree as you go and they get double visited. # with the BFS, you've already got the parent nodes in your queue when you visit the child # and you won't ever double visit to_visit = [root] while to_visit: node = to_visit.pop(0) to_visit.extend(list(node)) self._handle_text(node) self._handle_text(node, do_handle_tail_instead=True) docwide_word_id = self._starting_word_id for node in root.iter(): if node.tag == self.WORD_TAG: # TODO: factor out word_id definition word_id = f'word_{docwide_word_id:0>6d}' node.attrib[self.WORD_ID_ATTRIB_NAME] = word_id self._used_word_ids[word_id] = node docwide_word_id += 1
def _parse_parameters_1_0( element: _Element, ) -> List[ResourceAgentParameterOcf1_0]: result = [] for parameter_el in element.iter("parameter"): value_type, default_value, enum_values = _parse_parameter_content( parameter_el ) result.append( ResourceAgentParameterOcf1_0( name=str(parameter_el.attrib["name"]), shortdesc=_get_shortdesc(parameter_el), longdesc=_get_longdesc(parameter_el), type=value_type, default=default_value, enum_values=enum_values, required=parameter_el.get("required"), deprecated=parameter_el.get("deprecated"), obsoletes=parameter_el.get("obsoletes"), unique=parameter_el.get("unique"), ) ) return result
def _parse_parameters_1_1( element: _Element, ) -> List[ResourceAgentParameterOcf1_1]: result = [] for parameter_el in element.iter("parameter"): value_type, default_value, enum_values = _parse_parameter_content( parameter_el ) deprecated, deprecated_by, deprecated_desc = False, [], None deprecated_el = parameter_el.find("deprecated") if deprecated_el is not None: deprecated = True deprecated_by = [ str(replaced_with_el.attrib["name"]) for replaced_with_el in deprecated_el.iterfind("replaced-with") ] deprecated_desc = _get_desc(deprecated_el) result.append( ResourceAgentParameterOcf1_1( name=str(parameter_el.attrib["name"]), shortdesc=_get_shortdesc(parameter_el), longdesc=_get_longdesc(parameter_el), type=value_type, default=default_value, enum_values=enum_values, required=parameter_el.get("required"), deprecated=deprecated, deprecated_by=deprecated_by, deprecated_desc=deprecated_desc, unique_group=parameter_el.get("unique-group"), reloadable=parameter_el.get("reloadable"), ) ) return result
def _assign_data_crs(self, root: etree._Element) -> None: gml = f"{{{root.nsmap['gml']}}}" elm = next(root.iter(f"{gml}featureMember")) pstr = next(elm.iter(f"{gml}Polygon")).attrib["srsName"] self.data_crs = CRS.from_string(f"+init={pstr}")
def find_xml(search_string: str, root: etree._Element): "Фукнция для поиска элемента по его названию" anwser = [element for element in root.iter(search_string)] assert len(anwser) < 2, "Element must be unique" if len(anwser) == 1: return anwser[0]