From 8748dc905b068d863e2845de2876b0f91f471efa Mon Sep 17 00:00:00 2001 From: stkerrrfr <127580865+stkerrrfr@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:40:47 -0400 Subject: [PATCH 1/3] Add JSON support for report generation --- render/Filing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/render/Filing.py b/render/Filing.py index 5e0a41df..805ca205 100644 --- a/render/Filing.py +++ b/render/Filing.py @@ -323,6 +323,7 @@ def __init__(self, controller, modelXbrl, outputFolderName, transform, suplSuffi self.validatedForEFM = controller.validatedForEFM self.reportXmlFormat = 'xml' in controller.reportFormat.casefold() self.reportHtmlFormat = 'html' in controller.reportFormat.casefold() + self.reportJsonFormat = 'json' in controller.reportFormat.casefold() self.fileNamePrefix = 'R' if controller.reportZip: self.fileNameBase = None From 3d5fff1bc1286cdb327e456554606fb051d3ae93 Mon Sep 17 00:00:00 2001 From: stkerrrfr <127580865+stkerrrfr@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:45:27 -0400 Subject: [PATCH 2/3] Update Report.py to include JSON rendering --- render/Report.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/render/Report.py b/render/Report.py index 8fca92aa..908208bd 100644 --- a/render/Report.py +++ b/render/Report.py @@ -1106,9 +1106,24 @@ def writeHtmlAndOrXmlFiles(self, reportSummary): baseNameBeforeExtension = self.filing.fileNamePrefix + str(self.cube.fileNumber) reportSummary.baseNameBeforeExtension = baseNameBeforeExtension tree = self.rootETree.getroottree() + if self.filing.reportJsonFormat: self.writeJsonFile(baseNameBeforeExtension, tree, reportSummary) if self.filing.reportXmlFormat: self.writeXmlFile(baseNameBeforeExtension, tree, reportSummary) if self.filing.reportHtmlFormat: self.writeHtmlFile(baseNameBeforeExtension, tree, reportSummary) + def writeJsonFile(self, baseNameBeforeExtension, tree, reportSummary): + import json, xmltodict + baseName = (self.filing.rFilePrefix or '') + baseNameBeforeExtension + '.json' + (self.filing.suplSuffix or '') + reportSummary.xmlFileName = baseName + xmlText = treeToString(tree, xml_declaration=True, encoding='utf-8', pretty_print=True) + json_data = json.dumps(xmltodict.parse(xmlText), indent=4) + + if self.filing.reportZip: + self.filing.reportZip.writestr(self.filing.zipDir + baseName, json_data) + self.controller.renderedFiles.add(baseName) + elif self.filing.fileNameBase is not None: + self.controller.writeFile(os.path.join(self.filing.fileNameBase, baseName), json_data) + self.controller.renderedFiles.add(baseName) + def writeXmlFile(self, baseNameBeforeExtension, tree, reportSummary): baseName = (self.filing.rFilePrefix or '') + baseNameBeforeExtension + '.xml' + (self.filing.suplSuffix or '') reportSummary.xmlFileName = baseName From 20ae31a55239f9dc1163f116c75731051249cfaf Mon Sep 17 00:00:00 2001 From: Sam Kerr Date: Tue, 24 Sep 2024 11:55:54 -0400 Subject: [PATCH 3/3] Update help message and add a requirements entry --- render/__init__.py | 4 ++-- render/requirements.txt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/render/__init__.py b/render/__init__.py index 97ed4406..b23b2b89 100644 --- a/render/__init__.py +++ b/render/__init__.py @@ -242,7 +242,7 @@ def edgarRendererCmdLineOptionExtender(parser, *args, **kwargs): help=_("Type of HTML report...Complete: asPage rendering = True, or Fragment: asPage rendering = False.")) parser.add_option("--reportFormat", dest="reportFormat", - help=_("One of Xml, Html, HtmlAndXml or None.")) + help=_("One of Xml, Html, JSON, HtmlAndXml or None.")) parser.add_option("--failFile", dest="failFile", help=_("Relative path and name of fail file. ")) @@ -404,7 +404,7 @@ def setProp(prop, init, rangeList=None, cs=False): # options applicable to rendering in either mode: options.renderingService = setProp('renderingService', options.renderingService, rangeList=['Instance', 'Daemon']) - options.reportFormat = setProp('reportFormat', options.reportFormat, rangeList=['Html', 'Xml', 'HtmlAndXml', 'None']) + options.reportFormat = setProp('reportFormat', options.reportFormat, rangeList=['Html', 'Xml', 'JSON', 'HtmlAndXml', 'None']) options.htmlReportFormat = setProp('htmlReportFormat', options.htmlReportFormat, rangeList=['Complete', 'Fragment']) options.zipOutputFile = setProp('zipOutputFile', options.zipOutputFile, cs=True) options.sourceList = " ".join(setProp('sourceList', options.sourceList, cs=True).split()).split(',') diff --git a/render/requirements.txt b/render/requirements.txt index a086492d..f4f78c2e 100644 --- a/render/requirements.txt +++ b/render/requirements.txt @@ -1,3 +1,4 @@ lxml>=4.6.3 matplotlib>=3.4.2 openpyxl>=3.0.7 +xmltodict==0.13.0 \ No newline at end of file