Implemented HTML Tools (#240)

Co-authored-by: widlam <mikolaj.widla@gmail.com>
Reviewed-on: #240
Reviewed-by: Adam Bem <bema@noreply.example.com>
Co-authored-by: Mikolaj Widla <widlam@noreply.example.com>
Co-committed-by: Mikolaj Widla <widlam@noreply.example.com>
This commit is contained in:
2023-07-03 14:29:06 +02:00
committed by Adam Bem
parent 242f0fc025
commit 6319d7c427
7 changed files with 152 additions and 3 deletions

View File

@@ -1,7 +1,28 @@
from lxml import etree
from lxml import etree, html
from io import BytesIO
def convertHTML(source: str, sourceFrom: str):
htmlParser = html.HTMLParser(remove_comments=True, remove_blank_text=True)
xmlParser = etree.XMLParser(remove_comments=True, remove_blank_text=True)
if sourceFrom == "xml":
xmldoc = etree.parse(BytesIO(source.encode("utf-8")), xmlParser)
return html.tostring(xmldoc, method="html", pretty_print=True).decode()
elif sourceFrom == "html":
htmldoc = html.parse(BytesIO(source.encode("utf-8")), htmlParser)
return etree.tostring(htmldoc, method="xml", pretty_print=True, doctype="", xml_declaration=True, encoding="utf-8").decode()
else:
return
def formatHTML(source: str, prettify: bool) -> str:
parser = html.HTMLParser(remove_blank_text=True, remove_comments=True, remove_pis=True)
htmlDoc = html.parse(BytesIO(source.encode("utf-8")),parser=parser)
if not prettify:
return html.tostring(htmlDoc).decode().replace("\n", "").replace("> ", ">")
return etree.tostring(htmlDoc, encoding='unicode', pretty_print=True)
def formatXML(source: str, prettify: bool) -> str:
"""Method used to format XML

View File

@@ -40,6 +40,12 @@ def process_xml(request: request, type: str) -> str:
response_json['result'] = Parser.formatXML(data, True)
elif (type == "minimize"):
response_json['result'] = Parser.formatXML(data, False)
elif (type == "prettifyHtml"):
response_json['result'] = Parser.formatHTML(data, True)
elif (type == "minimizeHtml"):
response_json['result'] = Parser.formatHTML(data, False)
elif (type == "convertHTML"):
response_json['result'] = Parser.convertHTML(data, process)
else:
raise ValueError("Valid operation types are: xsd, xslt, xpath")
@@ -79,5 +85,17 @@ def prettify():
def minimize():
return process_xml(request, "minimize")
@app.route("/html/prettify",methods=["POST"])
def prettifyHtml():
return process_xml(request, "prettifyHtml")
@app.route("/html/minimize",methods=["POST"])
def minimizeHtml():
return process_xml(request, "minimizeHtml")
@app.route("/html/convert",methods=["POST"])
def XMLToHTMLConvertion():
return process_xml(request, "convertHTML")
if __name__ == "__main__":
app.run()