Merge pull request 'options_xml' (#2) from options_xml into master

Reviewed-on: #2
master
alex 2023-08-15 08:28:20 +00:00
commit c7b89efa40
3 changed files with 67 additions and 8 deletions

6
.idea/vcs.xml 100644
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

59
app.py
View File

@ -1,12 +1,21 @@
import lxml.etree import lxml.etree
from lxml import etree from lxml import etree
import json
import datetime as dt
from aktion_status import AktionsStatus from aktion_status import AktionsStatus
class App: class App:
def __init__(self): def __init__(self):
pass self._hide_elements = []
self._path = None
self._endline = "\n"
self._prefix = "\t"
self._delimiter = "\t"
self._convert_date = False
self._read_config()
def read_xml(self, path, hide_empty=True): def read_xml(self, path, hide_empty=True):
with open(path, encoding="utf-8") as xml_file: with open(path, encoding="utf-8") as xml_file:
@ -16,22 +25,56 @@ class App:
for data in root.getchildren(): for data in root.getchildren():
for elem in data.getchildren(): for elem in data.getchildren():
self.read_element(elem, hide_empty=hide_empty) self._read_element(elem, hide_empty=hide_empty)
def read_element(self, element, sign="", hide_empty=True): def _read_element(self, element, sign="", hide_empty=True):
element_text = element.text element_text = element.text
if hide_empty and not element_text or isinstance(element, lxml.etree._Comment) or isinstance(element, lxml.etree._ProcessingInstruction):
if (hide_empty and not element_text or
isinstance(element, lxml.etree._Comment) or
isinstance(element, lxml.etree._ProcessingInstruction) or
element.tag in self._hide_elements):
pass pass
elif element.tag.find("AKTION") > -1: elif element.tag.find("AKTION") > -1:
num = int(element_text) num = int(element_text)
print(sign, self.clean_xmlns(element.tag), AktionsStatus.get_status(num)) print(sign, self._clean_xmlns(element.tag), self._delimiter, AktionsStatus.get_status(num), end=self._endline)
elif self._convert_date and element.tag.find("NKZEIT") > -1:
time = dt.datetime.strptime(element_text, "%H%M%S")
uhrzeit = time.strftime("%H:%M:%S")
print(sign, self._clean_xmlns(element.tag), self._delimiter, uhrzeit,
end=self._endline)
elif self._convert_date and element.tag.find("NKDATUM") > -1:
date = dt.datetime.strptime(element_text, "%Y%m%d")
datum = date.strftime("%d.%m.%Y")
print(sign, self._clean_xmlns(element.tag), self._delimiter, datum,
end=self._endline)
else: else:
print(sign, self.clean_xmlns(element.tag), element.text if element.text else "") print(sign, self._clean_xmlns(element.tag), self._delimiter, element.text if element.text else "", end=self._endline)
if len(element.getchildren()) > 0: if len(element.getchildren()) > 0:
for el in element.getchildren(): for el in element.getchildren():
self.read_element(el, sign+"\t") self._read_element(el, sign + self._prefix)
def clean_xmlns(self, tag_text): def _clean_xmlns(self, tag_text):
if tag_text and tag_text.startswith("{"): if tag_text and tag_text.startswith("{"):
return tag_text.split("}")[1] return tag_text.split("}")[1]
return tag_text return tag_text
def _read_config(self):
with open('config.json', 'r') as json_file:
json_raw = json.load(json_file)
self._path = json_raw.get('path')
for element in json_raw.get('hide-elements'):
self._hide_elements.append(element)
endline = json_raw.get('endline')
if endline:
self._endline = endline
prefix = json_raw.get('prefix')
if prefix:
self._prefix = prefix
delimiter = json_raw.get('delimiter')
if delimiter:
self._delimiter = delimiter
convert = json_raw.get('convert-date')
if convert:
self._convert_date = convert

10
config.json 100644
View File

@ -0,0 +1,10 @@
{
"path": null,
"hide-elements": [
"PO", "TO", "AK", "NKNR", "NVE", "GGVS", "POFD", "ABR", "LM", "INFO", "RSTK", "FD", "ADR-VU"
],
"delimiter": ": ",
"endline": "\n",
"prefix": "\t",
"convert-date": true
}