|
@@ -5,6 +5,15 @@ import json
|
|
|
import logging
|
|
|
import os
|
|
|
from datetime import datetime
|
|
|
+from dataclasses import dataclass
|
|
|
+
|
|
|
+
|
|
|
+@dataclass
|
|
|
+class ReportRequest:
|
|
|
+ report_id: str
|
|
|
+ params: dict
|
|
|
+ filename: str
|
|
|
+ report_format: str
|
|
|
|
|
|
|
|
|
class c11_export:
|
|
@@ -39,15 +48,12 @@ class c11_export:
|
|
|
folder = "Team Content/ReportOutput/" + folder
|
|
|
return folder
|
|
|
|
|
|
- def export_folder(self, folder="", format="PDF") -> None:
|
|
|
- folder = self.get_folder(folder, format)
|
|
|
+ def export_folder(self, folder="") -> None:
|
|
|
+ folder = self.get_folder(folder, "XML")
|
|
|
reports = self.api.get_reports_in_folder(folder, True)
|
|
|
for r in reports:
|
|
|
print(r["name"])
|
|
|
- if format == "PDF":
|
|
|
- self.export_pdf(r["id"], folder)
|
|
|
- if format == "XML":
|
|
|
- self.export_unstubbed(r["id"])
|
|
|
+ self.export_unstubbed(r["id"])
|
|
|
|
|
|
def export_unstubbed(self, report_id):
|
|
|
report = self.api.get_report(report_id)
|
|
@@ -60,6 +66,11 @@ class c11_export:
|
|
|
with open(filename, "w") as f:
|
|
|
f.write(unstubbed_report)
|
|
|
|
|
|
+ def get_folder_pdf_request_plan(self, folder=""):
|
|
|
+ folder = self.get_folder(folder, "PDF")
|
|
|
+ reports = self.api.get_reports_in_folder(folder, True)
|
|
|
+ return [self.export_pdf(r) for r in reports]
|
|
|
+
|
|
|
def export_pdf(self, report_id, folder=None):
|
|
|
report = self.api.get_report(report_id)
|
|
|
if report["type"] == "shortcut":
|
|
@@ -88,51 +99,79 @@ class c11_export:
|
|
|
|
|
|
if len(report["params"]) == 0:
|
|
|
filename = report["filename"]
|
|
|
- self.request_and_save_file(report["id"], params, filename, report["format"])
|
|
|
- return True
|
|
|
+ return [ReportRequest(report["id"], params, filename, report["format"])]
|
|
|
+ result = []
|
|
|
if len(report["params"]) == 1:
|
|
|
- filename = report["filename"].format("_1")
|
|
|
- self.request_and_save_file(report["id"], params, filename, report["format"])
|
|
|
+ filename = report["filename"].format("_Summe")
|
|
|
+ result.append(
|
|
|
+ ReportRequest(report["id"], params, filename, report["format"])
|
|
|
+ )
|
|
|
|
|
|
key1 = report["params"][0]
|
|
|
for k1, v1 in report["meta"]["optional"][key1].items():
|
|
|
filename = report["filename"].format(v1)
|
|
|
params[key1] = {k1: v1}
|
|
|
- self.request_and_save_file(
|
|
|
- report["id"], params, filename, report["format"]
|
|
|
+ result.append(
|
|
|
+ ReportRequest(report["id"], params, filename, report["format"])
|
|
|
)
|
|
|
- return True
|
|
|
+ return result
|
|
|
if len(report["params"]) == 2:
|
|
|
- filename = report["filename"].format("gesamt", "_1")
|
|
|
- self.request_and_save_file(report["id"], params, filename, report["format"])
|
|
|
+ filename = report["filename"].format("_Summe", "").replace("_.", ".")
|
|
|
+ result.append(
|
|
|
+ ReportRequest(report["id"], params, filename, report["format"])
|
|
|
+ )
|
|
|
|
|
|
key1, key2 = report["params"]
|
|
|
for k1, v1 in report["meta"]["optional"][key1].items():
|
|
|
- filename = report["filename"].format(v1, "_1")
|
|
|
- self.request_and_save_file(
|
|
|
- report["id"], params, filename, report["format"]
|
|
|
+ filename = report["filename"].format(v1, "_Summe")
|
|
|
+ params = {}
|
|
|
+ params[key1] = {k1: v1}
|
|
|
+ result.append(
|
|
|
+ ReportRequest(report["id"], params, filename, report["format"])
|
|
|
)
|
|
|
|
|
|
for k2, v2 in report["meta"]["optional"][key2].items():
|
|
|
filename = report["filename"].format(v1, v2)
|
|
|
- params[key1] = {k1: v1}
|
|
|
params[key2] = {k2: v2}
|
|
|
- self.request_and_save_file(
|
|
|
- report["id"], params, filename, report["format"]
|
|
|
+ result.append(
|
|
|
+ ReportRequest(report["id"], params, filename, report["format"])
|
|
|
)
|
|
|
- return True
|
|
|
-
|
|
|
- def request_and_save_file(self, report_id, params, filename, format="PDF"):
|
|
|
- logging.debug(filename)
|
|
|
- logging.debug(params)
|
|
|
- status_code, content = self.api.request_file(report_id, params, format)
|
|
|
+ return result
|
|
|
+
|
|
|
+ def execute_request_plan(self, req_plan):
|
|
|
+ for req_group in req_plan:
|
|
|
+ for report_req in req_group:
|
|
|
+ self.request_and_save_file(report_req)
|
|
|
+
|
|
|
+ def request_and_save_file(self, report_request: ReportRequest):
|
|
|
+ logging.debug(report_request.filename)
|
|
|
+ logging.debug(report_request.params)
|
|
|
+ status_code, content = self.api.request_file(
|
|
|
+ report_request.report_id,
|
|
|
+ report_request.params,
|
|
|
+ report_request.report_format,
|
|
|
+ )
|
|
|
if status_code == 200:
|
|
|
- os.makedirs(os.path.dirname(filename), exist_ok=True)
|
|
|
- with open(filename, "wb") as f:
|
|
|
+ os.makedirs(os.path.dirname(report_request.filename), exist_ok=True)
|
|
|
+ with open(report_request.filename, "wb") as f:
|
|
|
f.write(content)
|
|
|
else:
|
|
|
logging.warning(content)
|
|
|
|
|
|
+ def get_merge_group(self, req_plan):
|
|
|
+ res = {}
|
|
|
+ for req_group in req_plan:
|
|
|
+ if len(req_group) == 1:
|
|
|
+ continue
|
|
|
+ files = [r.filename for r in req_group]
|
|
|
+ filename = files[0].replace("_Summe", "_Summe_und_Schichten")
|
|
|
+ res[filename] = files
|
|
|
+
|
|
|
+ files2 = [r for r in files if "_Summe" not in r]
|
|
|
+ filename2 = filename.replace("_Summe_und_Schichten", "_nur_Schichten")
|
|
|
+ res[filename2] = files2
|
|
|
+ return res
|
|
|
+
|
|
|
def export_errors(self):
|
|
|
reports = self.api.get_reports_in_folder(
|
|
|
"Team Content", recursive=True, specs=True
|