Skip to content
Snippets Groups Projects
Commit 374bc839 authored by Vanessa Stehr's avatar Vanessa Stehr
Browse files

Add typeHints to dccConv2

parent 769526b4
No related branches found
No related tags found
No related merge requests found
import os import os
from xml.etree.ElementTree import ElementTree
import xmlschema import xmlschema
from jinja2 import Environment, PackageLoader, select_autoescape from jinja2 import Environment, PackageLoader, select_autoescape
import requests import requests
...@@ -10,7 +11,7 @@ from importlib import resources as imp_resources ...@@ -10,7 +11,7 @@ from importlib import resources as imp_resources
from importlib.resources import files from importlib.resources import files
import warnings import warnings
def strip_outer_xml_tag(xml_str, outer_tag): def strip_outer_xml_tag(xml_str: str, outer_tag: str) -> str:
#TODO raise/check error if outer not found #TODO raise/check error if outer not found
xml_str = re.sub(r'<\?xml.*?\?>', '', xml_str).strip() xml_str = re.sub(r'<\?xml.*?\?>', '', xml_str).strip()
xml_str = re.sub(rf'<{outer_tag}[^>]*>', '', xml_str, count=1).strip() xml_str = re.sub(rf'<{outer_tag}[^>]*>', '', xml_str, count=1).strip()
...@@ -18,11 +19,11 @@ def strip_outer_xml_tag(xml_str, outer_tag): ...@@ -18,11 +19,11 @@ def strip_outer_xml_tag(xml_str, outer_tag):
return xml_str return xml_str
def get_from_dict(data_dict, map_list): def get_from_dict(data_dict: dict, map_list: list[int|str]):
return reduce(operator.getitem, map_list, data_dict) return reduce(operator.getitem, map_list, data_dict)
def set_in_dict(data_dict, map_list, value): def set_in_dict(data_dict: dict, map_list: list[int|str], value):
get_from_dict(data_dict, map_list[:-1])[map_list[-1]] = value get_from_dict(data_dict, map_list[:-1])[map_list[-1]] = value
...@@ -43,11 +44,11 @@ class XMLSchemaConverter: ...@@ -43,11 +44,11 @@ class XMLSchemaConverter:
def _load_jinja_template(self, template_name, data_fragment): def _load_jinja_template(self, template_name: str, data_fragment: str) -> str:
template = self.env.get_template(template_name) template = self.env.get_template(template_name)
return template.render(data_fragment=data_fragment) return template.render(data_fragment=data_fragment)
def convert_xml_to_json(self, input_data): def convert_xml_to_json(self, input_data) -> tuple[dict, list[Exception]]:
try: try:
#TODO check if we have to parse the errors #TODO check if we have to parse the errors
return self.schema.to_dict(input_data, validation="lax") return self.schema.to_dict(input_data, validation="lax")
...@@ -62,7 +63,7 @@ class XMLSchemaConverter: ...@@ -62,7 +63,7 @@ class XMLSchemaConverter:
converted_data = get_from_dict(conversion_result[0], template_info['json_path']) converted_data = get_from_dict(conversion_result[0], template_info['json_path'])
return converted_data, conversion_result[1] return converted_data, conversion_result[1]
def convert_json_to_xml(self, input_data): def convert_json_to_xml(self, input_data) -> tuple[str, ElementTree, list[Exception]]:
try: try:
conversion_result = self.schema.encode(input_data, validation="lax") conversion_result = self.schema.encode(input_data, validation="lax")
errors=conversion_result[1] errors=conversion_result[1]
...@@ -91,19 +92,20 @@ class XMLSchemaConverter: ...@@ -91,19 +92,20 @@ class XMLSchemaConverter:
xml_str = strip_outer_xml_tag(xml_str, template_info["strip_outer_tag"]) xml_str = strip_outer_xml_tag(xml_str, template_info["strip_outer_tag"])
return xml_str, converted_element, conversion_result[1] return xml_str, converted_element, conversion_result[1]
def _getRootElement(self,xml_str:str)->str: def _getRootElement(self, xml_str:str ) -> str:
match = re.search(r'<\s*([\w:-]+)', xml_str) match = re.search(r'<\s*([\w:-]+)', xml_str)
return match.group(1) if match else 'default' return match.group(1) if match else 'default'
def _checkIfValidationErrorIsUncritical(self,errors): def _checkIfValidationErrorIsUncritical(self, errors: list[Exception]) -> tuple[bool, list[Exception], list[Exception]]:
crticalErrors=[] criticalErrors=[]
unCriticalErrors=[] unCriticalErrors=[]
for error in errors: for error in errors:
if "value doesn't match any pattern of ['3\\\\.3\\\\.0']" in error.reason: if "value doesn't match any pattern of ['3\\\\.3\\\\.0']" in error.reason:
unCriticalErrors.append(error) unCriticalErrors.append(error)
else: else:
crticalErrors.append(error) criticalErrors.append(error)
isNotCritical=len(crticalErrors)==0 isNotCritical=len(criticalErrors)==0
return isNotCritical,crticalErrors,unCriticalErrors return isNotCritical,criticalErrors,unCriticalErrors
converter=XMLSchemaConverter() converter=XMLSchemaConverter()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment