arelle-release 2.17.1__py3-none-any.whl → 2.37.71__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arelle/Aspect.py +6 -3
- arelle/BetaFeatures.py +3 -0
- arelle/Cntlr.py +117 -413
- arelle/CntlrCmdLine.py +364 -227
- arelle/CntlrQuickBooks.py +4 -2
- arelle/CntlrWebMain.py +179 -119
- arelle/CntlrWinMain.py +342 -124
- arelle/DialogAbout.py +1 -1
- arelle/DialogArcroleGroup.py +1 -1
- arelle/DialogFind.py +1 -1
- arelle/DialogFormulaParameters.py +2 -2
- arelle/DialogLanguage.py +45 -36
- arelle/DialogNewFactItem.py +1 -1
- arelle/DialogOpenArchive.py +30 -34
- arelle/DialogPackageManager.py +11 -8
- arelle/DialogPluginManager.py +43 -89
- arelle/DialogRssWatch.py +2 -2
- arelle/DialogURL.py +1 -1
- arelle/DialogUserPassword.py +1 -1
- arelle/DisclosureSystem.py +69 -1
- arelle/ErrorManager.py +321 -0
- arelle/FileSource.py +201 -99
- arelle/FunctionFn.py +44 -5
- arelle/FunctionIxt.py +16 -13
- arelle/FunctionUtil.py +1 -1
- arelle/FunctionXfi.py +68 -24
- arelle/FunctionXs.py +1 -1
- arelle/HtmlUtil.py +5 -4
- arelle/LeiUtil.py +63 -43
- arelle/LinkbaseType.py +94 -0
- arelle/LocalViewer.py +8 -2
- arelle/Locale.py +239 -79
- arelle/ModelDocument.py +180 -48
- arelle/ModelDtsObject.py +32 -27
- arelle/ModelFormulaObject.py +14 -6
- arelle/ModelInstanceObject.py +43 -14
- arelle/ModelManager.py +6 -1
- arelle/ModelObject.py +12 -8
- arelle/ModelObjectFactory.py +18 -2
- arelle/ModelRelationshipSet.py +46 -3
- arelle/ModelRenderingObject.py +899 -951
- arelle/ModelRssItem.py +2 -4
- arelle/ModelTestcaseObject.py +41 -4
- arelle/ModelValue.py +42 -14
- arelle/ModelVersReport.py +1 -1
- arelle/ModelXbrl.py +133 -273
- arelle/PackageManager.py +202 -176
- arelle/PluginManager.py +551 -239
- arelle/PluginUtils.py +54 -0
- arelle/PrototypeInstanceObject.py +53 -12
- arelle/PythonUtil.py +166 -25
- arelle/RuntimeOptions.py +32 -18
- arelle/SocketUtils.py +3 -0
- arelle/SystemInfo.py +1 -1
- arelle/TkTableWrapper.py +33 -5
- arelle/UITkTable.py +27 -21
- arelle/Updater.py +7 -3
- arelle/UrlUtil.py +6 -2
- arelle/Validate.py +596 -402
- arelle/ValidateDuplicateFacts.py +584 -0
- arelle/ValidateFileSource.py +38 -0
- arelle/ValidateFilingText.py +46 -29
- arelle/ValidateInfoset.py +104 -32
- arelle/ValidateUtr.py +31 -4
- arelle/ValidateXbrl.py +144 -120
- arelle/ValidateXbrlCalcs.py +51 -66
- arelle/ValidateXbrlDTS.py +98 -29
- arelle/Version.py +2 -7
- arelle/ViewFile.py +2 -0
- arelle/ViewFileDTS.py +7 -2
- arelle/ViewFileFactList.py +1 -1
- arelle/ViewFileFactTable.py +4 -4
- arelle/ViewFileRelationshipSet.py +36 -19
- arelle/ViewFileRenderedGrid.py +164 -753
- arelle/ViewFileRenderedLayout.py +174 -0
- arelle/ViewFileRenderedStructure.py +108 -0
- arelle/ViewWinDTS.py +4 -1
- arelle/ViewWinFactList.py +1 -1
- arelle/ViewWinFactTable.py +1 -1
- arelle/ViewWinRelationshipSet.py +14 -8
- arelle/ViewWinRenderedGrid.py +397 -287
- arelle/ViewWinRssFeed.py +4 -0
- arelle/ViewWinTree.py +15 -9
- arelle/ViewWinXml.py +1 -1
- arelle/WebCache.py +510 -272
- arelle/XbrlConst.py +202 -196
- arelle/XbrlUtil.py +2 -1
- arelle/XhtmlValidate.py +9 -23
- arelle/XmlUtil.py +24 -19
- arelle/XmlValidate.py +95 -67
- arelle/XmlValidateParticles.py +4 -4
- arelle/_version.py +33 -3
- arelle/api/Session.py +183 -0
- arelle/config/creationSoftwareNames.json +24 -10
- arelle/config/disclosuresystems.xml +1 -1
- arelle/config/disclosuresystems.xsd +3 -0
- arelle/config/sbr-text-formatting.xsd +737 -0
- arelle/conformance/CSVTestcaseLoader.py +102 -0
- arelle/formula/FactAspectsCache.py +10 -4
- arelle/formula/ValidateFormula.py +82 -194
- arelle/formula/XPathContext.py +42 -28
- arelle/formula/XPathParser.py +15 -9
- arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
- arelle/locale/messages.pot +1 -2
- arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
- arelle/logging/formatters/LogFormatter.py +47 -0
- arelle/logging/handlers/LogHandlerWithXml.py +94 -0
- arelle/logging/handlers/LogToBufferHandler.py +20 -0
- arelle/logging/handlers/LogToPrintHandler.py +41 -0
- arelle/logging/handlers/LogToXmlHandler.py +244 -0
- arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
- arelle/model/CommentBase.py +3 -0
- arelle/model/ElementBase.py +3 -0
- arelle/model/PIBase.py +3 -0
- arelle/model/__init__.py +3 -0
- arelle/oim/Load.py +2869 -0
- arelle/oim/Validate.py +155 -0
- arelle/oim/xml/Save.py +21 -0
- arelle/packages/PackageConst.py +7 -0
- arelle/packages/PackageType.py +13 -0
- arelle/packages/PackageUtils.py +22 -0
- arelle/packages/PackageValidation.py +200 -0
- arelle/packages/report/DetectReportPackage.py +13 -0
- arelle/packages/report/ReportPackage.py +265 -0
- arelle/packages/report/ReportPackageConst.py +79 -0
- arelle/packages/report/ReportPackageValidator.py +207 -0
- arelle/plugin/EdgarRendererAllReports.py +12 -12
- arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
- arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
- arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
- arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
- arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
- arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
- arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
- arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
- arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
- arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
- arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
- arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
- arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
- arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
- arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
- arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
- arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
- arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
- arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
- arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
- arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
- arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
- arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
- arelle/plugin/OimTaxonomy/__init__.py +1037 -0
- arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
- arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
- arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
- arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
- arelle/plugin/OimTaxonomy/resources/types.json +727 -0
- arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
- arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
- arelle/plugin/formulaLoader.py +3 -3
- arelle/plugin/formulaSaver.py +4 -4
- arelle/plugin/inlineXbrlDocumentSet.py +331 -102
- arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
- arelle/plugin/loadFromExcel.py +13 -10
- arelle/plugin/loadFromOIM.py +16 -3096
- arelle/plugin/logging/saveMessages.py +1 -1
- arelle/plugin/saveHtmlEBAtables.py +293 -213
- arelle/plugin/saveLoadableOIM.py +652 -361
- arelle/plugin/saveOIMTaxonomy.py +311 -0
- arelle/plugin/streamingExtensions.py +1 -1
- arelle/plugin/systemInfo.py +46 -0
- arelle/plugin/transforms/tester.py +4 -4
- arelle/plugin/validate/CIPC/Const.py +18 -0
- arelle/plugin/validate/CIPC/__init__.py +34 -13
- arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
- arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
- arelle/plugin/validate/DBA/__init__.py +49 -0
- arelle/plugin/validate/DBA/resources/config.xml +21 -0
- arelle/plugin/validate/DBA/rules/__init__.py +323 -0
- arelle/plugin/validate/DBA/rules/fr.py +1377 -0
- arelle/plugin/validate/DBA/rules/tc.py +45 -0
- arelle/plugin/validate/DBA/rules/th.py +172 -0
- arelle/plugin/validate/DBA/rules/tm.py +351 -0
- arelle/plugin/validate/DBA/rules/tr.py +373 -0
- arelle/plugin/validate/EBA/__init__.py +11 -12
- arelle/plugin/validate/EDINET/Constants.py +208 -0
- arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
- arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
- arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
- arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
- arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
- arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
- arelle/plugin/validate/EDINET/FormType.py +134 -0
- arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
- arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
- arelle/plugin/validate/EDINET/Statement.py +139 -0
- arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
- arelle/plugin/validate/EDINET/UploadContents.py +48 -0
- arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
- arelle/plugin/validate/EDINET/__init__.py +109 -0
- arelle/plugin/validate/EDINET/resources/config.xml +22 -0
- arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
- arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
- arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
- arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
- arelle/plugin/validate/EDINET/rules/frta.py +301 -0
- arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
- arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
- arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
- arelle/plugin/validate/ESEF/Const.py +16 -75
- arelle/plugin/validate/ESEF/Dimensions.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
- arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
- arelle/plugin/validate/ESEF/Util.py +5 -19
- arelle/plugin/validate/ESEF/__init__.py +61 -46
- arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
- arelle/plugin/validate/ESEF/resources/config.xml +44 -3
- arelle/plugin/validate/FERC/__init__.py +31 -18
- arelle/plugin/validate/FERC/config.xml +18 -18
- arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
- arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
- arelle/plugin/validate/NL/__init__.py +21 -10
- arelle/plugin/validate/NL/resources/config.xml +27 -6
- arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
- arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
- arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
- arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
- arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
- arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
- arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
- arelle/plugin/validate/ROS/__init__.py +28 -341
- arelle/plugin/validate/ROS/resources/config.xml +20 -0
- arelle/plugin/validate/ROS/rules/__init__.py +56 -0
- arelle/plugin/validate/ROS/rules/ros.py +393 -0
- arelle/plugin/validate/UK/ValidateUK.py +1372 -0
- arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
- arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
- arelle/plugin/xbrlDB/SqlDb.py +1 -1
- arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
- arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
- arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
- arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
- arelle/plugin/xbrlDB/__init__.py +4 -1
- arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
- arelle/rendering/RenderingLayout.py +476 -0
- arelle/rendering/RenderingResolution.py +814 -0
- arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
- arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
- arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
- arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
- arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
- arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
- arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
- arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
- arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
- arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
- arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
- arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
- arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
- arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
- arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
- arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
- arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
- arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
- arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
- arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
- arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
- arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
- arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
- arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
- arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
- arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
- arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
- arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
- arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
- arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
- arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
- arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
- arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
- arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
- arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
- arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
- arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
- arelle/typing.py +9 -4
- arelle/utils/Contexts.py +38 -0
- arelle/utils/EntryPointDetection.py +139 -0
- arelle/utils/Equivalence.py +22 -0
- arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
- arelle/utils/PluginHooks.py +256 -5
- arelle/utils/Units.py +36 -0
- arelle/utils/validate/Decorator.py +5 -3
- arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
- arelle/utils/validate/ESEFImage.py +283 -0
- arelle/utils/validate/Validation.py +9 -1
- arelle/utils/validate/ValidationPlugin.py +74 -11
- arelle/utils/validate/ValidationUtil.py +55 -0
- arelle/webserver/bottle.py +5 -4424
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
- arelle_release-2.37.71.dist-info/RECORD +697 -0
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
- arelle/DialogOpenTaxonomyPackage.py +0 -1
- arelle/RenderingResolver.py +0 -624
- arelle/examples/.pydevproject +0 -5
- arelle/examples/CustomLogger.py +0 -43
- arelle/examples/LoadEFMvalidate.py +0 -32
- arelle/examples/LoadSavePreLbCsv.py +0 -26
- arelle/examples/LoadValidate.cs +0 -31
- arelle/examples/LoadValidate.py +0 -36
- arelle/examples/LoadValidateCmdLine.java +0 -69
- arelle/examples/LoadValidatePostedZip.java +0 -57
- arelle/examples/LoadValidateWebService.java +0 -34
- arelle/examples/SaveTableToExelle.py +0 -140
- arelle/examples/TR3toTR4.py +0 -88
- arelle/examples/plugin/bigInstance.py +0 -394
- arelle/examples/plugin/cmdWebServerExtension.py +0 -42
- arelle/examples/plugin/crashTest.py +0 -38
- arelle/examples/plugin/formulaSuiteConverter.py +0 -212
- arelle/examples/plugin/functionsCustom.py +0 -59
- arelle/examples/plugin/hello_dolly.py +0 -64
- arelle/examples/plugin/hello_i18n.pot +0 -26
- arelle/examples/plugin/hello_i18n.py +0 -32
- arelle/examples/plugin/importTestChild1.py +0 -21
- arelle/examples/plugin/importTestChild2.py +0 -22
- arelle/examples/plugin/importTestGrandchild1.py +0 -21
- arelle/examples/plugin/importTestGrandchild2.py +0 -21
- arelle/examples/plugin/importTestImported1.py +0 -23
- arelle/examples/plugin/importTestImported11.py +0 -22
- arelle/examples/plugin/importTestParent.py +0 -48
- arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
- arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
- arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
- arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
- arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
- arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
- arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
- arelle/examples/plugin/sakaCalendar.py +0 -215
- arelle/examples/plugin/saveInstanceInfoset.py +0 -121
- arelle/examples/plugin/streamingExtensions.py +0 -335
- arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
- arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
- arelle/examples/plugin/updateTableLB.py +0 -242
- arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
- arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
- arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
- arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
- arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
- arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
- arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
- arelle/examples/plugin/validateSchemaLxml.py +0 -156
- arelle/examples/plugin/validateTableInfoset.py +0 -52
- arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
- arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
- arelle/plugin/functionsXmlCreation.py +0 -106
- arelle/plugin/instanceInfo.py +0 -306
- arelle/plugin/loadFromOIM-2018.py +0 -1282
- arelle/plugin/objectmaker.py +0 -285
- arelle/plugin/sphinx/FormulaGenerator.py +0 -823
- arelle/plugin/sphinx/SphinxContext.py +0 -404
- arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
- arelle/plugin/sphinx/SphinxMethods.py +0 -1287
- arelle/plugin/sphinx/SphinxParser.py +0 -1093
- arelle/plugin/sphinx/SphinxValidator.py +0 -163
- arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
- arelle/plugin/sphinx/__init__.py +0 -285
- arelle/plugin/transforms/SEC/__init__.py +0 -308
- arelle/plugin/transforms/SEC/conf/README.md +0 -39
- arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
- arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
- arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
- arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
- arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
- arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
- arelle/plugin/transforms/SEC/text2num.py +0 -110
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
- arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
- arelle/plugin/validate/EFM/Consts.py +0 -362
- arelle/plugin/validate/EFM/DTS.py +0 -569
- arelle/plugin/validate/EFM/Dimensions.py +0 -264
- arelle/plugin/validate/EFM/Document.py +0 -206
- arelle/plugin/validate/EFM/Filing.py +0 -4383
- arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
- arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
- arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
- arelle/plugin/validate/EFM/Util.py +0 -688
- arelle/plugin/validate/EFM/__init__.py +0 -843
- arelle/plugin/validate/EFM/config.xml +0 -333
- arelle/plugin/validate/EFM/resources/README.md +0 -57
- arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
- arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
- arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
- arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
- arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
- arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
- arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
- arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
- arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
- arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
- arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
- arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
- arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
- arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
- arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
- arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
- arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
- arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
- arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
- arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
- arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
- arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
- arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
- arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
- arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
- arelle/plugin/validate/EFM-htm/Const.py +0 -205
- arelle/plugin/validate/EFM-htm/__init__.py +0 -217
- arelle/plugin/validate/EFM-htm/config.xml +0 -17
- arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
- arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
- arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
- arelle/plugin/validate/GFM/__init__.py +0 -59
- arelle/plugin/validate/GFM/config.xml +0 -82
- arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
- arelle/plugin/validate/SBRnl/DTS.py +0 -305
- arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
- arelle/plugin/validate/SBRnl/Document.py +0 -799
- arelle/plugin/validate/SBRnl/Filing.py +0 -467
- arelle/plugin/validate/SBRnl/__init__.py +0 -75
- arelle/plugin/validate/SBRnl/config.xml +0 -26
- arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
- arelle/plugin/validate/USBestPractices.py +0 -570
- arelle/plugin/validate/USCorpAction.py +0 -557
- arelle/plugin/validate/USSecTagging.py +0 -337
- arelle/plugin/validate/XDC/__init__.py +0 -77
- arelle/plugin/validate/XDC/config.xml +0 -20
- arelle/plugin/validate/XFsyntax/__init__.py +0 -64
- arelle/plugin/validate/XFsyntax/xf.py +0 -2227
- arelle/plugin/validate/__init__.py +0 -20
- arelle/plugin/validate/calc2.py +0 -536
- arelle/plugin/validateSBRnl.py +0 -530
- arelle/scripts-macOS/startWebServer.command +0 -3
- arelle/scripts-unix/startWebServer.sh +0 -1
- arelle/scripts-windows/startWebServer.bat +0 -5
- arelle_release-2.17.1.dist-info/RECORD +0 -676
- tests/__init__.py +0 -0
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
- tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
- tests/integration_tests/validation/README.md +0 -50
- tests/integration_tests/validation/conformance_suite_config.py +0 -59
- tests/integration_tests/validation/conformance_suite_configs.py +0 -63
- tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
- tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
- tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
- tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
- tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
- tests/integration_tests/validation/conftest.py +0 -24
- tests/integration_tests/validation/discover_tests.py +0 -22
- tests/integration_tests/validation/download_conformance_suites.py +0 -47
- tests/integration_tests/validation/run_conformance_suites.py +0 -175
- tests/integration_tests/validation/test_conformance_suites.py +0 -14
- tests/integration_tests/validation/validation_util.py +0 -271
- tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
- tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
- tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
- tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
- tests/unit_tests/arelle/conftest.py +0 -16
- tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
- tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
- tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
- tests/unit_tests/arelle/test_betafeatures.py +0 -81
- tests/unit_tests/arelle/test_cntlr.py +0 -28
- tests/unit_tests/arelle/test_import.py +0 -40
- tests/unit_tests/arelle/test_locale.py +0 -73
- tests/unit_tests/arelle/test_modelmanager.py +0 -15
- tests/unit_tests/arelle/test_packagemanager.py +0 -65
- tests/unit_tests/arelle/test_pluginmanager.py +0 -176
- tests/unit_tests/arelle/test_qname.py +0 -140
- tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
- tests/unit_tests/arelle/test_system_info.py +0 -26
- tests/unit_tests/arelle/test_updater.py +0 -507
- tests/unit_tests/arelle/test_urlutil.py +0 -49
- tests/unit_tests/arelle/test_version.py +0 -46
- tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
- /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
- /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
- /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
arelle/CntlrWinMain.py
CHANGED
|
@@ -5,60 +5,110 @@ See COPYRIGHT.md for copyright information.
|
|
|
5
5
|
'''
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
import os
|
|
8
|
+
import fnmatch
|
|
9
|
+
import os
|
|
10
|
+
import pickle
|
|
11
|
+
import platform
|
|
12
|
+
import subprocess
|
|
13
|
+
import sys
|
|
14
|
+
import time
|
|
15
|
+
import webbrowser
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
10
18
|
import regex as re
|
|
11
19
|
|
|
20
|
+
from arelle import ValidateDuplicateFacts
|
|
21
|
+
from arelle.ValidateFileSource import ValidateFileSource
|
|
22
|
+
from arelle.logging.formatters.LogFormatter import logRefsFileLines
|
|
23
|
+
from arelle.utils.EntryPointDetection import parseEntrypointFileInput
|
|
24
|
+
|
|
12
25
|
if sys.platform == 'win32' and getattr(sys, 'frozen', False):
|
|
13
26
|
# need the .dll directory in path to be able to access Tk and Tcl DLLs efore importinng Tk, etc.
|
|
14
27
|
os.environ['PATH'] = os.path.dirname(sys.executable) + ";" + os.environ['PATH']
|
|
15
28
|
|
|
16
|
-
from tkinter import (
|
|
17
|
-
|
|
29
|
+
from tkinter import (
|
|
30
|
+
END,
|
|
31
|
+
EW,
|
|
32
|
+
HORIZONTAL,
|
|
33
|
+
VERTICAL,
|
|
34
|
+
BooleanVar,
|
|
35
|
+
E,
|
|
36
|
+
IntVar,
|
|
37
|
+
Menu,
|
|
38
|
+
N,
|
|
39
|
+
PhotoImage,
|
|
40
|
+
S,
|
|
41
|
+
StringVar,
|
|
42
|
+
Tcl,
|
|
43
|
+
TclError,
|
|
44
|
+
Tk,
|
|
45
|
+
W,
|
|
46
|
+
)
|
|
47
|
+
from tkinter import font as tkFont
|
|
48
|
+
|
|
18
49
|
try:
|
|
19
|
-
from tkinter.ttk import
|
|
50
|
+
from tkinter.ttk import Button, Combobox, Frame, Label, Notebook, PanedWindow, Separator
|
|
20
51
|
except ImportError: # 3.0 versions of tkinter
|
|
21
|
-
from ttk import
|
|
52
|
+
from ttk import Button, Combobox, Frame, Label, Notebook, PanedWindow, Separator
|
|
22
53
|
try:
|
|
23
54
|
import syslog
|
|
24
55
|
except ImportError:
|
|
25
56
|
syslog = None
|
|
26
|
-
|
|
57
|
+
|
|
58
|
+
import logging
|
|
59
|
+
import multiprocessing
|
|
60
|
+
import queue
|
|
61
|
+
import threading
|
|
27
62
|
import tkinter.filedialog
|
|
28
|
-
import tkinter.messagebox
|
|
63
|
+
import tkinter.messagebox
|
|
29
64
|
import tkinter.simpledialog
|
|
30
|
-
|
|
65
|
+
import traceback
|
|
66
|
+
|
|
67
|
+
from arelle import (
|
|
68
|
+
Cntlr,
|
|
69
|
+
DialogLanguage,
|
|
70
|
+
DialogPackageManager,
|
|
71
|
+
DialogPluginManager,
|
|
72
|
+
DialogURL,
|
|
73
|
+
ModelDocument,
|
|
74
|
+
PackageManager,
|
|
75
|
+
TableStructure,
|
|
76
|
+
Updater,
|
|
77
|
+
ViewFileConcepts,
|
|
78
|
+
ViewFileDTS,
|
|
79
|
+
ViewFileFactList,
|
|
80
|
+
ViewFileFactTable,
|
|
81
|
+
ViewFileFormulae,
|
|
82
|
+
ViewFileRelationshipSet,
|
|
83
|
+
ViewFileRoleTypes,
|
|
84
|
+
ViewFileTests,
|
|
85
|
+
ViewWinConcepts,
|
|
86
|
+
ViewWinDTS,
|
|
87
|
+
ViewWinFactList,
|
|
88
|
+
ViewWinFactTable,
|
|
89
|
+
ViewWinFormulae,
|
|
90
|
+
ViewWinProperties,
|
|
91
|
+
ViewWinRelationshipSet,
|
|
92
|
+
ViewWinRenderedGrid,
|
|
93
|
+
ViewWinRoleTypes,
|
|
94
|
+
ViewWinRssFeed,
|
|
95
|
+
ViewWinTests,
|
|
96
|
+
ViewWinTree,
|
|
97
|
+
ViewWinVersReport,
|
|
98
|
+
ViewWinXml,
|
|
99
|
+
XbrlConst,
|
|
100
|
+
)
|
|
31
101
|
from arelle.CntlrWinTooltip import ToolTip
|
|
32
|
-
from arelle import
|
|
102
|
+
from arelle.FileSource import openFileSource
|
|
103
|
+
from arelle.Locale import format_string, setApplicationLocale
|
|
104
|
+
from arelle.ModelFormulaObject import FormulaOptions
|
|
105
|
+
from arelle.oim.xml.Save import saveOimReportToXmlInstance
|
|
33
106
|
from arelle.PluginManager import pluginClassMethods
|
|
107
|
+
from arelle.rendering import RenderingEvaluator
|
|
34
108
|
from arelle.UrlUtil import isHttpUrl
|
|
35
109
|
from arelle.ValidateXbrlCalcs import ValidateCalcsMode as CalcsMode
|
|
110
|
+
from arelle.ValidateXbrlDTS import ValidateBaseTaxonomiesMode
|
|
36
111
|
from arelle.Version import copyrightLabel
|
|
37
|
-
import logging
|
|
38
|
-
|
|
39
|
-
import threading, queue
|
|
40
|
-
|
|
41
|
-
from arelle import Cntlr
|
|
42
|
-
from arelle import (DialogURL, DialogLanguage,
|
|
43
|
-
DialogPluginManager, DialogPackageManager,
|
|
44
|
-
ModelDocument,
|
|
45
|
-
ModelManager,
|
|
46
|
-
PackageManager,
|
|
47
|
-
RenderingEvaluator,
|
|
48
|
-
TableStructure,
|
|
49
|
-
ViewWinDTS,
|
|
50
|
-
ViewWinProperties, ViewWinConcepts, ViewWinRelationshipSet, ViewWinFormulae,
|
|
51
|
-
ViewWinFactList, ViewFileFactList, ViewWinFactTable, ViewWinRenderedGrid, ViewWinXml,
|
|
52
|
-
ViewWinRoleTypes, ViewFileRoleTypes, ViewFileConcepts,
|
|
53
|
-
ViewWinTests, ViewWinTree, ViewWinVersReport, ViewWinRssFeed,
|
|
54
|
-
ViewFileFactTable,
|
|
55
|
-
ViewFileTests,
|
|
56
|
-
ViewFileRenderedGrid,
|
|
57
|
-
ViewFileRelationshipSet,
|
|
58
|
-
Updater
|
|
59
|
-
)
|
|
60
|
-
from arelle.ModelFormulaObject import FormulaOptions
|
|
61
|
-
from arelle.FileSource import openFileSource
|
|
62
112
|
|
|
63
113
|
restartMain = True
|
|
64
114
|
|
|
@@ -67,6 +117,9 @@ DOCUMENTATION_URL = "https://arelle.readthedocs.io/"
|
|
|
67
117
|
class CntlrWinMain (Cntlr.Cntlr):
|
|
68
118
|
|
|
69
119
|
def __init__(self, parent):
|
|
120
|
+
# Background processes communicate with UI thread through this queue
|
|
121
|
+
# Prepare before calling super so messages encountered during initialization can be queued for logging
|
|
122
|
+
self.uiThreadQueue = queue.Queue()
|
|
70
123
|
super(CntlrWinMain, self).__init__(hasGui=True)
|
|
71
124
|
self.parent = parent
|
|
72
125
|
self.filename = None
|
|
@@ -76,10 +129,6 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
76
129
|
self.labelLang = overrideLang if overrideLang else self.modelManager.defaultLang
|
|
77
130
|
self.data = {}
|
|
78
131
|
|
|
79
|
-
# Background processes communicate with UI thread through this queue
|
|
80
|
-
# Prepare early so messages encountered during initialization can be queued for logging
|
|
81
|
-
self.uiThreadQueue = queue.Queue()
|
|
82
|
-
|
|
83
132
|
if self.isMac: # mac Python fonts bigger than other apps (terminal, text edit, Word), and to windows Arelle
|
|
84
133
|
_defaultFont = tkFont.nametofont("TkDefaultFont") # label, status bar, treegrid
|
|
85
134
|
_defaultFont.configure(size=11)
|
|
@@ -92,7 +141,6 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
92
141
|
|
|
93
142
|
tkinter.CallWrapper = TkinterCallWrapper
|
|
94
143
|
|
|
95
|
-
|
|
96
144
|
imgpath = self.imagesDir + os.sep
|
|
97
145
|
|
|
98
146
|
if self.isMSW:
|
|
@@ -124,6 +172,7 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
124
172
|
(_("Save"), self.fileSaveExistingFile, "Ctrl+S", "<Control-s>"),
|
|
125
173
|
(_("Save As..."), self.fileSave, None, None),
|
|
126
174
|
(_("Save DTS Package"), self.saveDTSpackage, None, None),
|
|
175
|
+
(_("Save OIM Report to XBRL Instance"), self.saveXmlInstance, None, None),
|
|
127
176
|
("PLUG-IN", "CntlrWinMain.Menu.File.Save", None, None),
|
|
128
177
|
(_("Close"), self.fileClose, "Ctrl+W", "<Control-w>"),
|
|
129
178
|
(None, None, None, None),
|
|
@@ -162,10 +211,34 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
162
211
|
for calcChoiceMenuLabel, calcChoiceEnumValue in CalcsMode.menu().items():
|
|
163
212
|
calcMenu.add_radiobutton(label=calcChoiceMenuLabel, underline=0, var=self.calcChoiceEnumVar, value=calcChoiceEnumValue)
|
|
164
213
|
toolsMenu.add_cascade(label=_("Calc linkbase"), menu=calcMenu, underline=0)
|
|
214
|
+
|
|
215
|
+
baseValidateModeMenu = Menu(self.menubar, tearoff=0)
|
|
216
|
+
baseValidationModeName = self.config.setdefault("baseTaxonomyValidationMode", ValidateBaseTaxonomiesMode.DISCLOSURE_SYSTEM.value)
|
|
217
|
+
self.modelManager.baseTaxonomyValidationMode = ValidateBaseTaxonomiesMode.fromName(baseValidationModeName)
|
|
218
|
+
self.baseTaxonomyValidationModeEnumVar = StringVar(self.parent, value=baseValidationModeName)
|
|
219
|
+
self.baseTaxonomyValidationModeEnumVar.trace("w", self.setBaseTaxonomyValidationModeEnumVar)
|
|
220
|
+
for modeLabel, modeValue in ValidateBaseTaxonomiesMode.menu().items():
|
|
221
|
+
baseValidateModeMenu.add_radiobutton(label=modeLabel, underline=0, var=self.baseTaxonomyValidationModeEnumVar, value=modeValue)
|
|
222
|
+
validateMenu.add_cascade(label=_("Base taxonomy validation"), menu=baseValidateModeMenu, underline=0)
|
|
223
|
+
|
|
165
224
|
self.modelManager.validateUtr = self.config.setdefault("validateUtr",True)
|
|
166
225
|
self.validateUtr = BooleanVar(value=self.modelManager.validateUtr)
|
|
167
226
|
self.validateUtr.trace("w", self.setValidateUtr)
|
|
168
227
|
validateMenu.add_checkbutton(label=_("Unit Type Registry validation"), underline=0, variable=self.validateUtr, onvalue=True, offvalue=False)
|
|
228
|
+
|
|
229
|
+
self.modelManager.validateXmlOim = self.config.setdefault("validateXmlOim", False)
|
|
230
|
+
self.validateXmlOim = BooleanVar(value=self.modelManager.validateXmlOim)
|
|
231
|
+
self.validateXmlOim.trace("w", self.setValidateXmlOim)
|
|
232
|
+
validateMenu.add_checkbutton(label=_("OIM validate xBRL-XML documents"), underline=0, variable=self.validateXmlOim, onvalue=True, offvalue=False)
|
|
233
|
+
|
|
234
|
+
self.modelManager.validateAllFilesAsReportPackages = self.config.setdefault("validateAllFilesAsReportPackages", False)
|
|
235
|
+
self.validateAllFilesAsReportPackages = BooleanVar(value=self.modelManager.validateAllFilesAsReportPackages)
|
|
236
|
+
self.validateAllFilesAsReportPackages.trace("w", self.setValidateAllFilesAsReportPackages)
|
|
237
|
+
validateMenu.add_checkbutton(label=_("Validate all files as Report Packages"), underline=0, variable=self.validateAllFilesAsReportPackages, onvalue=True, offvalue=False)
|
|
238
|
+
|
|
239
|
+
self.validateDuplicateFacts = None
|
|
240
|
+
self.buildValidateDuplicateFactsMenu(validateMenu)
|
|
241
|
+
|
|
169
242
|
for pluginMenuExtender in pluginClassMethods("CntlrWinMain.Menu.Validation"):
|
|
170
243
|
pluginMenuExtender(self, validateMenu)
|
|
171
244
|
|
|
@@ -289,7 +362,6 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
289
362
|
self.statusbarTimerId = self.statusbar.after(5000, self.uiClearStatusTimerEvent)
|
|
290
363
|
self.statusbar.grid(row=2, column=0, columnspan=2, sticky=EW)
|
|
291
364
|
|
|
292
|
-
#self.balloon = tkinter.tix.Balloon(windowFrame, statusbar=self.statusbar)
|
|
293
365
|
self.toolbar_images = []
|
|
294
366
|
toolbar = Frame(windowFrame)
|
|
295
367
|
menubarColumn = 0
|
|
@@ -394,7 +466,7 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
394
466
|
w = screenW
|
|
395
467
|
h = screenH
|
|
396
468
|
else:
|
|
397
|
-
priorGeometry = re.match("(\d+)x(\d+)[+]?([-]?\d+)[+]?([-]?\d+)",self.config.get('windowGeometry'))
|
|
469
|
+
priorGeometry = re.match(r"(\d+)x(\d+)[+]?([-]?\d+)[+]?([-]?\d+)",self.config.get('windowGeometry'))
|
|
398
470
|
if priorGeometry and priorGeometry.lastindex >= 4:
|
|
399
471
|
try:
|
|
400
472
|
w = int(priorGeometry.group(1))
|
|
@@ -441,6 +513,8 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
441
513
|
if not self.modelManager.disclosureSystem.select(self.config.setdefault("disclosureSystem", None)):
|
|
442
514
|
self.validateDisclosureSystem.set(False)
|
|
443
515
|
self.modelManager.validateDisclosureSystem = False
|
|
516
|
+
self.config["validateDisclosureSystem"] = False
|
|
517
|
+
self.config["disclosureSystem"] = None
|
|
444
518
|
|
|
445
519
|
# load argv overrides for modelManager options
|
|
446
520
|
lastArg = None
|
|
@@ -453,6 +527,25 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
453
527
|
lastArg = arg
|
|
454
528
|
self.setValidateTooltipText()
|
|
455
529
|
|
|
530
|
+
def buildValidateDuplicateFactsMenu(self, validateMenu: Menu) -> None:
|
|
531
|
+
defaultArg = ValidateDuplicateFacts.DuplicateTypeArg.NONE.value
|
|
532
|
+
validateDuplicateFactsStr = self.config.setdefault("validateDuplicateFacts", defaultArg)
|
|
533
|
+
try:
|
|
534
|
+
duplicateTypeArg = ValidateDuplicateFacts.DuplicateTypeArg(validateDuplicateFactsStr)
|
|
535
|
+
except ValueError:
|
|
536
|
+
duplicateTypeArg = ValidateDuplicateFacts.DuplicateTypeArg(defaultArg)
|
|
537
|
+
self.modelManager.validateDuplicateFacts = duplicateTypeArg.duplicateType()
|
|
538
|
+
self.validateDuplicateFacts = StringVar(value=duplicateTypeArg.value)
|
|
539
|
+
self.validateDuplicateFacts.trace("w", self.setValidateDuplicateFacts)
|
|
540
|
+
duplicateFactWarningMenu = Menu(validateMenu, tearoff=0)
|
|
541
|
+
for duplicateTypeArg in ValidateDuplicateFacts.DuplicateTypeArg:
|
|
542
|
+
duplicateFactWarningMenu.add_checkbutton(
|
|
543
|
+
label=duplicateTypeArg.value.title(),
|
|
544
|
+
variable=self.validateDuplicateFacts,
|
|
545
|
+
underline=0,
|
|
546
|
+
onvalue=duplicateTypeArg.value
|
|
547
|
+
)
|
|
548
|
+
validateMenu.add_cascade(label="Warn on duplicate facts", menu=duplicateFactWarningMenu, underline=0)
|
|
456
549
|
|
|
457
550
|
def onTabChanged(self, event, *args):
|
|
458
551
|
try:
|
|
@@ -545,7 +638,7 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
545
638
|
else:
|
|
546
639
|
return reply
|
|
547
640
|
|
|
548
|
-
def fileSave(self, event=None, view=None, fileType=None, filenameFromInstance=False, *ignore):
|
|
641
|
+
def fileSave(self, event=None, view=None, fileType=None, filenameFromInstance=False, method=None, caption=None, *ignore):
|
|
549
642
|
if view is None:
|
|
550
643
|
view = getattr(self, "currentView", None)
|
|
551
644
|
if view is not None:
|
|
@@ -565,23 +658,17 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
565
658
|
pass
|
|
566
659
|
if isinstance(view, ViewWinRenderedGrid.ViewRenderedGrid):
|
|
567
660
|
initialdir = os.path.dirname(modelXbrl.modelDocument.uri)
|
|
568
|
-
if
|
|
569
|
-
if fileType
|
|
570
|
-
filename = self.uiFileDialog("save",
|
|
571
|
-
title=_("arelle - Save HTML-rendered Table"),
|
|
572
|
-
initialdir=initialdir,
|
|
573
|
-
filetypes=[(_("HTML file .html"), "*.html"), (_("HTML file .htm"), "*.htm")],
|
|
574
|
-
defaultextension=".html")
|
|
575
|
-
elif fileType == "xml" and filename is None:
|
|
661
|
+
if caption is not None and method is not None:
|
|
662
|
+
if fileType in ("html", "xml", "json") and filename is None:
|
|
576
663
|
filename = self.uiFileDialog("save",
|
|
577
|
-
title=
|
|
664
|
+
title=caption,
|
|
578
665
|
initialdir=initialdir,
|
|
579
|
-
filetypes=[(_("
|
|
580
|
-
defaultextension=".
|
|
666
|
+
filetypes=[(_("HTML file .html"), "*.html"), (_("HTML file .htm"), "*.htm"), (_("XML file .xml"), "*.xml"), (_("JSON file .xml"), "*.json")],
|
|
667
|
+
defaultextension=f".{fileType}")
|
|
581
668
|
else: # ask file type
|
|
582
669
|
if filename is None:
|
|
583
670
|
filename = self.uiFileDialog("save",
|
|
584
|
-
title=
|
|
671
|
+
title=_caption,
|
|
585
672
|
initialdir=initialdir,
|
|
586
673
|
filetypes=[(_("XBRL instance .xbrl"), "*.xbrl"), (_("XBRL instance .xml"), "*.xml"), (_("HTML table .html"), "*.html"), (_("HTML table .htm"), "*.htm")],
|
|
587
674
|
defaultextension=".html")
|
|
@@ -591,7 +678,7 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
591
678
|
if not filename:
|
|
592
679
|
return False
|
|
593
680
|
try:
|
|
594
|
-
|
|
681
|
+
method(modelXbrl, filename, lang=self.labelLang, sourceView=view)
|
|
595
682
|
except (IOError, EnvironmentError) as err:
|
|
596
683
|
tkinter.messagebox.showwarning(_("arelle - Error"),
|
|
597
684
|
_("Failed to save {0}:\n{1}").format(
|
|
@@ -637,8 +724,21 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
637
724
|
ViewFileFactList.viewFacts(modelXbrl, filename, labelrole=view.labelrole, lang=view.lang)
|
|
638
725
|
elif isinstance(view, ViewWinFactTable.ViewFactTable):
|
|
639
726
|
ViewFileFactTable.viewFacts(modelXbrl, filename, arcrole=view.arcrole, linkrole=view.linkrole, linkqname=view.linkqname, arcqname=view.arcqname, labelrole=view.labelrole, lang=view.lang)
|
|
727
|
+
elif isinstance(view, ViewWinFormulae.ViewFormulae):
|
|
728
|
+
ViewFileFormulae.viewFormulae(modelXbrl, filename, "Formulae", lang=view.lang)
|
|
729
|
+
elif isinstance(view, ViewWinDTS.ViewDTS):
|
|
730
|
+
ViewFileDTS.viewDTS(modelXbrl, filename)
|
|
640
731
|
else:
|
|
641
|
-
|
|
732
|
+
if isinstance(view.arcrole, tuple) and len(view.arcrole) > 0 and view.arcrole[0] == "Calculation":
|
|
733
|
+
# "arcrole" is overloaded with special strings that are sometimes used magically to query
|
|
734
|
+
# the model and other times just to provide a header value. In the case of Calculation, it's
|
|
735
|
+
# only the header used in the GUI view and including it here when going to save will throw
|
|
736
|
+
# an exception.
|
|
737
|
+
arcrole = XbrlConst.summationItems
|
|
738
|
+
else:
|
|
739
|
+
arcrole = view.arcrole
|
|
740
|
+
|
|
741
|
+
ViewFileRelationshipSet.viewRelationshipSet(modelXbrl, filename, view.tabTitle, arcrole, labelrole=view.labelrole, lang=view.lang)
|
|
642
742
|
except (IOError, EnvironmentError) as err:
|
|
643
743
|
tkinter.messagebox.showwarning(_("arelle - Error"),
|
|
644
744
|
_("Failed to save {0}:\n{1}").format(
|
|
@@ -761,45 +861,63 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
761
861
|
if filename:
|
|
762
862
|
for xbrlLoadedMethod in pluginClassMethods("CntlrWinMain.Xbrl.Open"):
|
|
763
863
|
filename = xbrlLoadedMethod(self, filename) # runs in GUI thread, allows mapping filename, mult return filename
|
|
764
|
-
|
|
864
|
+
entrypointParseResult = parseEntrypointFileInput(self, filename, fallbackSelect=False)
|
|
865
|
+
if not entrypointParseResult.success or entrypointParseResult.filesource is None:
|
|
866
|
+
return
|
|
867
|
+
filesource = entrypointParseResult.filesource
|
|
868
|
+
entrypointFiles = entrypointParseResult.entrypointFiles
|
|
765
869
|
# check for archive files
|
|
766
|
-
filesource = openFileSource(filename, self,
|
|
767
|
-
checkIfXmlIsEis=self.modelManager.disclosureSystem and
|
|
768
|
-
self.modelManager.disclosureSystem.validationType == "EFM")
|
|
769
870
|
if filesource.isArchive:
|
|
770
|
-
if
|
|
871
|
+
if (
|
|
872
|
+
len(entrypointFiles) == 0 and
|
|
873
|
+
not filesource.selection and
|
|
874
|
+
not filesource.isReportPackage
|
|
875
|
+
):
|
|
771
876
|
from arelle import DialogOpenArchive
|
|
772
877
|
filename = DialogOpenArchive.askArchiveFile(self, filesource)
|
|
878
|
+
if filename is not None:
|
|
879
|
+
entrypointFiles.append({"file": filename})
|
|
773
880
|
if filename and filesource.basefile and not isHttpUrl(filesource.basefile):
|
|
774
881
|
self.config["fileOpenDir"] = os.path.dirname(filesource.baseurl)
|
|
775
882
|
filesource.loadTaxonomyPackageMappings() # if a package, load mappings if not loaded yet
|
|
776
|
-
if filename:
|
|
777
883
|
if not isinstance(filename, (dict, list)): # json objects
|
|
778
|
-
if
|
|
779
|
-
if
|
|
884
|
+
if not isHttpUrl(filename):
|
|
885
|
+
if importToDTS:
|
|
780
886
|
self.config["importOpenDir"] = os.path.dirname(filename)
|
|
781
|
-
|
|
782
|
-
if not isHttpUrl(filename):
|
|
887
|
+
else:
|
|
783
888
|
self.config["fileOpenDir"] = os.path.dirname(filesource.baseurl if filesource.isArchive else filename)
|
|
784
889
|
self.updateFileHistory(filename, importToDTS)
|
|
785
890
|
elif len(filename) == 1:
|
|
786
891
|
self.updateFileHistory(filename[0], importToDTS)
|
|
787
|
-
thread = threading.Thread(target=self.backgroundLoadXbrl, args=(filesource,importToDTS,selectTopView), daemon=True).start()
|
|
892
|
+
thread = threading.Thread(target=self.backgroundLoadXbrl, args=(filesource,entrypointFiles,importToDTS,selectTopView), daemon=True).start()
|
|
788
893
|
|
|
789
894
|
def webOpen(self, *ignore):
|
|
790
895
|
if not self.okayToContinue():
|
|
791
896
|
return
|
|
792
897
|
url = DialogURL.askURL(self.parent, buttonSEC=True, buttonRSS=True)
|
|
793
898
|
if url:
|
|
899
|
+
url = PackageManager.mappedUrl(url)
|
|
794
900
|
self.updateFileHistory(url, False)
|
|
795
901
|
for xbrlLoadedMethod in pluginClassMethods("CntlrWinMain.Xbrl.Open"):
|
|
796
902
|
url = xbrlLoadedMethod(self, url) # runs in GUI thread, allows mapping url, mult return url
|
|
797
|
-
|
|
798
|
-
if
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
903
|
+
entrypointParseResult = parseEntrypointFileInput(self, url, fallbackSelect=False)
|
|
904
|
+
if not entrypointParseResult.success or entrypointParseResult.filesource is None:
|
|
905
|
+
return
|
|
906
|
+
filesource = entrypointParseResult.filesource
|
|
907
|
+
entrypointFiles = entrypointParseResult.entrypointFiles
|
|
908
|
+
if filesource.isArchive:
|
|
909
|
+
if (
|
|
910
|
+
len(entrypointFiles) == 0 and
|
|
911
|
+
not filesource.selection and
|
|
912
|
+
not filesource.isReportPackage
|
|
913
|
+
):
|
|
914
|
+
from arelle import DialogOpenArchive
|
|
915
|
+
url = DialogOpenArchive.askArchiveFile(self, filesource)
|
|
916
|
+
if url is not None:
|
|
917
|
+
entrypointFiles.append({"file": url})
|
|
918
|
+
self.updateFileHistory(url, False)
|
|
919
|
+
filesource.loadTaxonomyPackageMappings()
|
|
920
|
+
thread = threading.Thread(target=self.backgroundLoadXbrl, args=(filesource,entrypointFiles,False,False), daemon=True).start()
|
|
803
921
|
|
|
804
922
|
def importWebOpen(self, *ignore):
|
|
805
923
|
if not self.modelManager.modelXbrl or self.modelManager.modelXbrl.modelDocument.type not in (
|
|
@@ -809,24 +927,44 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
809
927
|
return False
|
|
810
928
|
url = DialogURL.askURL(self.parent, buttonSEC=False, buttonRSS=False)
|
|
811
929
|
if url:
|
|
930
|
+
url = PackageManager.mappedUrl(url)
|
|
812
931
|
self.fileOpenFile(url, importToDTS=True)
|
|
813
932
|
|
|
814
933
|
|
|
815
|
-
def backgroundLoadXbrl(self, filesource, importToDTS, selectTopView):
|
|
934
|
+
def backgroundLoadXbrl(self, filesource, entrypointFiles: list[dict[str, Any]], importToDTS, selectTopView):
|
|
816
935
|
startedAt = time.time()
|
|
936
|
+
loadedModels = []
|
|
817
937
|
try:
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
if
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
938
|
+
action = _("preparing entrypoints")
|
|
939
|
+
for pluginXbrlMethod in pluginClassMethods("CntlrWinMain.Filing.Start"):
|
|
940
|
+
pluginXbrlMethod(self, filesource, entrypointFiles)
|
|
941
|
+
for entrypoint in entrypointFiles:
|
|
942
|
+
entrypointFile = entrypoint.get("file", None) if isinstance(entrypoint,dict) else entrypoint
|
|
943
|
+
if filesource and filesource.isArchive:
|
|
944
|
+
filesource.select(entrypointFile)
|
|
945
|
+
else:
|
|
946
|
+
entrypointFile = PackageManager.mappedUrl(entrypointFile)
|
|
947
|
+
filesource = openFileSource(entrypointFile, self)
|
|
948
|
+
if importToDTS:
|
|
949
|
+
action = _("imported")
|
|
950
|
+
profileStat = "import"
|
|
951
|
+
modelXbrl = self.modelManager.modelXbrl
|
|
952
|
+
if modelXbrl:
|
|
953
|
+
ModelDocument.load(modelXbrl, filesource.url, isSupplemental=importToDTS)
|
|
954
|
+
modelXbrl.relationshipSets.clear() # relationships have to be re-cached
|
|
955
|
+
loadedModels.append(modelXbrl)
|
|
956
|
+
else:
|
|
957
|
+
action = _("loaded")
|
|
958
|
+
profileStat = "load"
|
|
959
|
+
modelXbrl = self.modelManager.load(
|
|
960
|
+
filesource,
|
|
961
|
+
_("views loading"),
|
|
962
|
+
# check modified time if GUI-loading from web
|
|
963
|
+
checkModifiedTime=isHttpUrl(filesource.url),
|
|
964
|
+
entrypoint=entrypoint,
|
|
965
|
+
)
|
|
966
|
+
if modelXbrl:
|
|
967
|
+
loadedModels.append(modelXbrl)
|
|
830
968
|
except ModelDocument.LoadingException:
|
|
831
969
|
self.showStatus(_("Loading terminated, unrecoverable error"), 15000)
|
|
832
970
|
return
|
|
@@ -840,22 +978,29 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
840
978
|
self.addToLog(msg);
|
|
841
979
|
self.showStatus(_("Loading terminated, unrecoverable error"), 15000)
|
|
842
980
|
return
|
|
843
|
-
if
|
|
981
|
+
if loadedModels and any(model.modelDocument for model in loadedModels):
|
|
844
982
|
statTime = time.time() - startedAt
|
|
845
983
|
modelXbrl.profileStat(profileStat, statTime)
|
|
846
984
|
self.addToLog(format_string(self.modelManager.locale,
|
|
847
985
|
_("%s in %.2f secs"),
|
|
848
986
|
(action, statTime)))
|
|
849
|
-
if
|
|
987
|
+
modelsWithTableRendering = [model for model in loadedModels if model.hasTableRendering]
|
|
988
|
+
if modelsWithTableRendering:
|
|
850
989
|
self.showStatus(_("Initializing table rendering"))
|
|
851
|
-
|
|
990
|
+
for model in modelsWithTableRendering:
|
|
991
|
+
RenderingEvaluator.init(model)
|
|
992
|
+
|
|
852
993
|
self.showStatus(_("{0}, preparing views").format(action))
|
|
853
994
|
self.waitForUiThreadQueue() # force status update
|
|
854
|
-
|
|
995
|
+
for modelXbrl in loadedModels:
|
|
996
|
+
self.uiThreadQueue.put((self.showLoadedXbrl, [modelXbrl, importToDTS, selectTopView]))
|
|
855
997
|
else:
|
|
856
|
-
self.addToLog(
|
|
857
|
-
|
|
858
|
-
|
|
998
|
+
self.addToLog(
|
|
999
|
+
format_string(self.modelManager.locale, _("No XBRL entry points could be %s from provided file in %.2f seconds"),
|
|
1000
|
+
(action, time.time() - startedAt)),
|
|
1001
|
+
messageCode="error",
|
|
1002
|
+
level=logging.ERROR,
|
|
1003
|
+
)
|
|
859
1004
|
self.showStatus(_("Loading terminated"), 15000)
|
|
860
1005
|
|
|
861
1006
|
def showLoadedXbrl(self, modelXbrl, attach, selectTopView=False, isSupplementalModelXbrl=False):
|
|
@@ -869,7 +1014,10 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
869
1014
|
self.parent.title(_("arelle - {0}").format(
|
|
870
1015
|
os.path.basename(modelXbrl.modelDocument.uri)))
|
|
871
1016
|
self.setValidateTooltipText()
|
|
872
|
-
if modelXbrl
|
|
1017
|
+
if any(extViews(self, modelXbrl)
|
|
1018
|
+
for extViews in pluginClassMethods("CntlrWinMain.Xbrl.Views")):
|
|
1019
|
+
currentAction = "ext views provided"
|
|
1020
|
+
elif modelXbrl.modelDocument.type in ModelDocument.Type.TESTCASETYPES:
|
|
873
1021
|
currentAction = "tree view of tests"
|
|
874
1022
|
ViewWinTests.viewTests(modelXbrl, self.tabWinTopRt)
|
|
875
1023
|
topView = modelXbrl.views[-1]
|
|
@@ -920,7 +1068,7 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
920
1068
|
hasView = ViewWinRelationshipSet.viewRelationshipSet(modelXbrl, self.tabWinTopRt, XbrlConst.parentChild, lang=self.labelLang)
|
|
921
1069
|
if hasView and topView is None: topView = modelXbrl.views[-1]
|
|
922
1070
|
currentAction = "calculation linkbase view"
|
|
923
|
-
hasView = ViewWinRelationshipSet.viewRelationshipSet(modelXbrl, self.tabWinTopRt, ("Calculation",
|
|
1071
|
+
hasView = ViewWinRelationshipSet.viewRelationshipSet(modelXbrl, self.tabWinTopRt, ("Calculation", XbrlConst.summationItems), lang=self.labelLang)
|
|
924
1072
|
if hasView and topView is None: topView = modelXbrl.views[-1]
|
|
925
1073
|
currentAction = "dimensions relationships view"
|
|
926
1074
|
hasView = ViewWinRelationshipSet.viewRelationshipSet(modelXbrl, self.tabWinTopRt, "XBRL-dimensions", lang=self.labelLang)
|
|
@@ -968,6 +1116,28 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
968
1116
|
if not isSupplementalModelXbrl:
|
|
969
1117
|
self.showStatus(_("Ready..."), 2000)
|
|
970
1118
|
|
|
1119
|
+
def saveXmlInstance(self):
|
|
1120
|
+
modelXbrl = self.modelManager.modelXbrl
|
|
1121
|
+
if not modelXbrl or not modelXbrl.modelDocument:
|
|
1122
|
+
self.showStatus(_("No report loaded to save"), 5000)
|
|
1123
|
+
return
|
|
1124
|
+
if not modelXbrl.loadedFromOIM:
|
|
1125
|
+
self.showStatus(_("Model not loaded from OIM report"), 5000)
|
|
1126
|
+
return
|
|
1127
|
+
configOutputInstanceDir = self.config.get("outputInstanceDir")
|
|
1128
|
+
instanceFile = self.uiFileDialog("save",
|
|
1129
|
+
title=_("arelle - Save XBRL instance document"),
|
|
1130
|
+
initialdir=configOutputInstanceDir or ".",
|
|
1131
|
+
filetypes=[(_("XBRL file .xbrl"), "*.xbrl"), (_("XBRL file .xml"), "*.xml")],
|
|
1132
|
+
defaultextension=".xbrl")
|
|
1133
|
+
if isinstance(instanceFile, str):
|
|
1134
|
+
outputInstanceDir = os.path.dirname(instanceFile)
|
|
1135
|
+
if outputInstanceDir != configOutputInstanceDir:
|
|
1136
|
+
self.config["outputInstanceDir"] = outputInstanceDir
|
|
1137
|
+
self.saveConfig()
|
|
1138
|
+
saveOimReportToXmlInstance(modelXbrl.modelDocument, instanceFile)
|
|
1139
|
+
self.showStatus(_("Saved XBRL instance: {0}").format(os.path.basename(instanceFile)))
|
|
1140
|
+
|
|
971
1141
|
def showFormulaOutputInstance(self, priorOutputInstance, currentOutputInstance):
|
|
972
1142
|
currentAction = "closing prior formula output instance"
|
|
973
1143
|
try:
|
|
@@ -999,6 +1169,8 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
999
1169
|
if not self.okayToContinue():
|
|
1000
1170
|
return
|
|
1001
1171
|
self.modelManager.close()
|
|
1172
|
+
if not self.modelManager.loadedModelXbrls:
|
|
1173
|
+
self._clearPluginData()
|
|
1002
1174
|
self.parent.title(_("arelle - Unnamed"))
|
|
1003
1175
|
self.setValidateTooltipText()
|
|
1004
1176
|
self.currentView = None
|
|
@@ -1010,30 +1182,45 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1010
1182
|
self.fileOpenFile(fileHistory[0])
|
|
1011
1183
|
|
|
1012
1184
|
def validate(self):
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1185
|
+
if not self.modelManager.loadedModelXbrls:
|
|
1186
|
+
tkinter.messagebox.showwarning(
|
|
1187
|
+
_("arelle - Warning"),
|
|
1188
|
+
_("No XBRL loaded to validate"),
|
|
1189
|
+
parent=self.parent,
|
|
1190
|
+
)
|
|
1191
|
+
return
|
|
1192
|
+
if self.modelManager.validateDisclosureSystem and not self.modelManager.disclosureSystem.selection:
|
|
1193
|
+
tkinter.messagebox.showwarning(
|
|
1194
|
+
_("arelle - Warning"),
|
|
1195
|
+
_("Validation - disclosure system checks requested but no disclosure system is selected, please select one by validation - select disclosure system."),
|
|
1196
|
+
parent=self.parent,
|
|
1197
|
+
)
|
|
1198
|
+
return
|
|
1199
|
+
threading.Thread(target=self.backgroundValidate, daemon=True).start()
|
|
1025
1200
|
|
|
1026
1201
|
def backgroundValidate(self):
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1202
|
+
from arelle import Validate
|
|
1203
|
+
validatedFileSources = set()
|
|
1204
|
+
for loadedModelXbrl in self.modelManager.loadedModelXbrls:
|
|
1205
|
+
if loadedModelXbrl.modelDocument:
|
|
1206
|
+
startedAt = time.time()
|
|
1207
|
+
if loadedModelXbrl.modelDocument.type in ModelDocument.Type.TESTCASETYPES:
|
|
1208
|
+
for pluginXbrlMethod in pluginClassMethods("Testcases.Start"):
|
|
1209
|
+
pluginXbrlMethod(self, None, loadedModelXbrl)
|
|
1210
|
+
if loadedModelXbrl.fileSource not in validatedFileSources:
|
|
1211
|
+
validatedFileSources.add(loadedModelXbrl.fileSource)
|
|
1212
|
+
ValidateFileSource(self, loadedModelXbrl.fileSource).validate(self.modelManager.validateAllFilesAsReportPackages)
|
|
1213
|
+
|
|
1214
|
+
for modelXbrl in [loadedModelXbrl] + getattr(loadedModelXbrl, "supplementalModelXbrls", []):
|
|
1215
|
+
priorOutputInstance = modelXbrl.formulaOutputInstance
|
|
1216
|
+
modelXbrl.formulaOutputInstance = None # prevent closing on background thread by validateFormula
|
|
1217
|
+
try:
|
|
1218
|
+
Validate.validate(modelXbrl)
|
|
1219
|
+
except Exception as err:
|
|
1220
|
+
self.addToLog(_("[exception] Validation exception: {0} at {1}").format(err, traceback.format_tb(sys.exc_info()[2])))
|
|
1221
|
+
self.addToLog(format_string(self.modelManager.locale, _("validated in %.2f secs: %s"), (time.time() - startedAt, modelXbrl.displayUri)))
|
|
1222
|
+
if not modelXbrl.isClosed and (priorOutputInstance or modelXbrl.formulaOutputInstance):
|
|
1223
|
+
self.uiThreadQueue.put((self.showFormulaOutputInstance, [priorOutputInstance, modelXbrl.formulaOutputInstance]))
|
|
1037
1224
|
|
|
1038
1225
|
self.uiThreadQueue.put((self.logSelect, []))
|
|
1039
1226
|
|
|
@@ -1118,6 +1305,15 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1118
1305
|
def restart(self, event=None):
|
|
1119
1306
|
self.quit(event, restartAfterQuit=True)
|
|
1120
1307
|
|
|
1308
|
+
def setValidateDuplicateFacts(self, *args):
|
|
1309
|
+
value = self.validateDuplicateFacts.get()
|
|
1310
|
+
duplicateTypeArg = ValidateDuplicateFacts.DuplicateTypeArg(value)
|
|
1311
|
+
self.modelManager.validateDuplicateFacts = duplicateTypeArg.duplicateType()
|
|
1312
|
+
self.config["validateDuplicateFacts"] = value
|
|
1313
|
+
self.addToLog('ModelManager.validateDuplicateFacts = {}'.format(
|
|
1314
|
+
self.modelManager.validateDuplicateFacts), messageCode='debug', level=logging.DEBUG)
|
|
1315
|
+
self.saveConfig()
|
|
1316
|
+
|
|
1121
1317
|
def setWorkOffline(self, *args):
|
|
1122
1318
|
self.webCache.workOffline = self.workOffline.get()
|
|
1123
1319
|
self.config["workOffline"] = self.webCache.workOffline
|
|
@@ -1305,12 +1501,31 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1305
1501
|
self.saveConfig()
|
|
1306
1502
|
self.setValidateTooltipText()
|
|
1307
1503
|
|
|
1504
|
+
def setBaseTaxonomyValidationModeEnumVar(self, *args):
|
|
1505
|
+
modeName = self.baseTaxonomyValidationModeEnumVar.get()
|
|
1506
|
+
self.modelManager.baseTaxonomyValidationMode = ValidateBaseTaxonomiesMode.fromName(modeName)
|
|
1507
|
+
self.config["baseTaxonomyValidationMode"] = modeName
|
|
1508
|
+
self.saveConfig()
|
|
1509
|
+
self.setValidateTooltipText()
|
|
1510
|
+
|
|
1308
1511
|
def setValidateUtr(self, *args):
|
|
1309
1512
|
self.modelManager.validateUtr = self.validateUtr.get()
|
|
1310
1513
|
self.config["validateUtr"] = self.modelManager.validateUtr
|
|
1311
1514
|
self.saveConfig()
|
|
1312
1515
|
self.setValidateTooltipText()
|
|
1313
1516
|
|
|
1517
|
+
def setValidateXmlOim(self, *args):
|
|
1518
|
+
self.modelManager.validateXmlOim = self.validateXmlOim.get()
|
|
1519
|
+
self.config["validateXmlOim"] = self.modelManager.validateXmlOim
|
|
1520
|
+
self.saveConfig()
|
|
1521
|
+
self.setValidateTooltipText()
|
|
1522
|
+
|
|
1523
|
+
def setValidateAllFilesAsReportPackages(self, *args):
|
|
1524
|
+
self.modelManager.validateAllFilesAsReportPackages = self.validateAllFilesAsReportPackages.get()
|
|
1525
|
+
self.config["validateAllFilesAsReportPackages"] = self.modelManager.validateAllFilesAsReportPackages
|
|
1526
|
+
self.saveConfig()
|
|
1527
|
+
self.setValidateTooltipText()
|
|
1528
|
+
|
|
1314
1529
|
def setCollectProfileStats(self, *args):
|
|
1315
1530
|
self.modelManager.collectProfileStats = self.collectProfileStats.get()
|
|
1316
1531
|
self.config["collectProfileStats"] = self.modelManager.collectProfileStats
|
|
@@ -1351,7 +1566,7 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1351
1566
|
"\n Tcl/Tk {tcltkVersion} \u00a9 Univ. of Calif., Sun, Scriptics, ActiveState, and others"
|
|
1352
1567
|
"\n PyParsing \u00a9 2003-2013 Paul T. McGuire"
|
|
1353
1568
|
"\n lxml {lxmlVersion} \u00a9 2004 Infrae, ElementTree \u00a9 1999-2004 by Fredrik Lundh"
|
|
1354
|
-
"
|
|
1569
|
+
"\n Bottle \u00a9 2009-2024 Marcel Hellkamp"
|
|
1355
1570
|
"\n May include installable plug-in modules with author-specific license terms").format(
|
|
1356
1571
|
version=Version.__version__,
|
|
1357
1572
|
wordSize=self.systemWordSize,
|
|
@@ -1360,19 +1575,19 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1360
1575
|
pythonVersion=f'{sys.version_info[0]}.{sys.version_info[1]}.{sys.version_info[2]}',
|
|
1361
1576
|
tcltkVersion=Tcl().eval('info patchlevel'),
|
|
1362
1577
|
lxmlVersion=f'{etree.LXML_VERSION[0]}.{etree.LXML_VERSION[1]}.{etree.LXML_VERSION[2]}',
|
|
1363
|
-
bottleCopyright=_("\n Bottle \u00a9 2011-2013 Marcel Hellkamp"
|
|
1364
|
-
"\n CherryPy \u00a9 2002-2013 CherryPy Team") if self.hasWebServer else ""
|
|
1365
1578
|
))
|
|
1366
1579
|
|
|
1367
1580
|
|
|
1368
1581
|
# worker threads addToLog
|
|
1369
1582
|
def addToLog(self, message, messageCode="", messageArgs=None, file="", refs=[], level=logging.INFO):
|
|
1583
|
+
if isinstance(level, str):
|
|
1584
|
+
level = logging.getLevelNamesMapping().get(level, logging.INFO)
|
|
1370
1585
|
if level < logging.INFO and not self.showDebugMessages.get():
|
|
1371
1586
|
return # skip DEBUG and INFO-RESULT messages
|
|
1372
1587
|
if messageCode and messageCode not in message: # prepend message code
|
|
1373
1588
|
message = "[{}] {}".format(messageCode, message)
|
|
1374
1589
|
if refs:
|
|
1375
|
-
message += " - " +
|
|
1590
|
+
message += " - " + logRefsFileLines(refs)
|
|
1376
1591
|
elif file:
|
|
1377
1592
|
if isinstance(file, (tuple,list,set)):
|
|
1378
1593
|
message += " - " + ", ".join(file)
|
|
@@ -1591,7 +1806,7 @@ def main():
|
|
|
1591
1806
|
os.environ[_tcltk.upper() + "_LIBRARY"] = _tcltkDir
|
|
1592
1807
|
break
|
|
1593
1808
|
_d = os.path.dirname(_d)
|
|
1594
|
-
elif sys.platform == 'win32': # windows requires fake stdout/stderr because no write/flush (e.g.,
|
|
1809
|
+
elif sys.platform == 'win32': # windows requires fake stdout/stderr because no write/flush (e.g., EDGAR/render LocalViewer pybottle)
|
|
1595
1810
|
class dummyFrozenStream:
|
|
1596
1811
|
def __init__(self): pass
|
|
1597
1812
|
def write(self,data): pass
|
|
@@ -1615,7 +1830,8 @@ def main():
|
|
|
1615
1830
|
application.lift()
|
|
1616
1831
|
application.call('wm', 'attributes', '.', '-topmost', True)
|
|
1617
1832
|
cntlrWinMain.uiThreadQueue.put((application.call, ['wm', 'attributes', '.', '-topmost', False]))
|
|
1618
|
-
|
|
1833
|
+
processName = "arelleGUI" if getattr(sys, 'frozen', False) else "python"
|
|
1834
|
+
os.system(f'/usr/bin/osascript -e \'tell app "Finder" to set frontmost of process "{processName}" to true\'')
|
|
1619
1835
|
application.mainloop()
|
|
1620
1836
|
except Exception: # unable to start Tk or other fatal error
|
|
1621
1837
|
exc_type, exc_value, exc_traceback = sys.exc_info()
|
|
@@ -1638,6 +1854,8 @@ def main():
|
|
|
1638
1854
|
syslog.closelog()
|
|
1639
1855
|
|
|
1640
1856
|
if __name__ == "__main__":
|
|
1857
|
+
if getattr(sys, 'frozen', False):
|
|
1858
|
+
multiprocessing.freeze_support()
|
|
1641
1859
|
# this is the entry called by MacOS open and MacOS shell scripts
|
|
1642
1860
|
# check if ARELLE_ARGS are used to emulate command line operation
|
|
1643
1861
|
if os.getenv("ARELLE_ARGS"):
|